Untitled

 avatar
unknown
python
2 years ago
2.9 kB
37
Indexable
#!/usr/bin/python
# -*- coding: utf-8 -*-

import dash
import dash_core_components as dcc
import dash_html_components as html

import plotly.graph_objs as go

import pandas as pd

# задаём данные для отрисовки
from sqlalchemy import create_engine

# пример подключения к базе данных для Postresql
db_config = {'user': 'my_user',
             'pwd': 'my_user_password',
             'host': 'localhost',
             'port': 5432,
             'db': 'games'}
engine = create_engine('postgresql://{}:{}@{}:{}/{}'.format(db_config['user'],
                                                            db_config['pwd'],
                                                            db_config['host'],
                                                            db_config['port'],
                                                            db_config['db']))
# пример подключения к базе данных для Sqlite
engine = create_engine('sqlite:////db/games.db', echo = False)

# получаем сырые данные
query = '''
            SELECT * FROM data_raw
        '''
games_raw = pd.io.sql.read_sql(query, con = engine)

# формируем данные для отчёта
games_grouped = (games_raw.groupby(['genre'])
                          .agg({'name': 'nunique'})
                          .rename(columns = {'name': 'games_launched'})
                          .reset_index()
                )
games_grouped = games_grouped.sort_values(by='games_launched', ascending=False) # напишите код

# формируем подписи
games_grouped['label'] = games_grouped.apply(lambda x: '{} игр'.format(games_grouped['games_launched']), axis = 1)

# формируем графики для отрисовки
data = [go.Bar(x = games_grouped['genre'],
               y = games_grouped['games_launched'],
               text = games_grouped['label'], # напишите код
               textposition = 'auto',               
               name = 'games_launched')]

# задаём лейаут
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = dash.Dash(__name__, external_stylesheets=external_stylesheets,compress=False)
app.layout = html.Div(children=[  
    
    # формируем заголовок тегом HTML
    html.H1(children = 'Выпуск игр по жанрам'),

    dcc.Graph(
        figure = {'data': data,
                  'layout': go.Layout(xaxis = {'title': 'Жанр'},
                                      yaxis = {'title': 'Выпущенные игры'})
                 },
        id = 'launches_by_genre' # напишите код
    ),         
 
])

# описываем логику дашборда
if __name__ == '__main__':
    app.run_server(host='0.0.0.0', port=3000)