- #!/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_raw['year_of_release'] = pd.to_datetime(games_raw['year_of_release'])
- columns = ['user_score', 'critic_score']
- for column in columns: games_raw[column] = pd.to_numeric(games_raw[column], errors = 'coerce')
- # задаём цвета для рейтингов
- games_raw['rating'] = games_raw['rating'].fillna('Неопр.')
- rating_styles = {'E': {'color': 'red'},
- 'T': {'color': 'green'},
- 'M': {'color': 'blue'},
- 'E10+': {'color': 'magenta'},
- 'EC': {'color': 'yellow'},
- 'RP': {'color': 'orange'},
- 'AO': {'color': 'blue'},
- 'K-A': {'color': 'olive'},
- 'Неопр.': {'color': 'grey'}}
- games_raw['rating_color'] = games_raw['rating'].apply(lambda x: rating_styles[x]['color'])
- # задаём текст для отображения
- games_raw['text'] = games_raw.apply(lambda x: '{}:{}'.format(x['platform'], x['name']), axis = 1) # напишите код
- # формируем графики для отрисовки
- data = []
- for rating in games_raw['rating'].unique():
- current = games_raw.query('rating == @rating')
- data += [go.Scatter(x = current['user_score'],
- y = current['critic_score'],
- mode = 'markers',
- opacity = 0.5,
- marker = {'color': rating_styles[rating]['color']}, # ваш код
- text = current['text'], # ваш код
- name = rating)]
- # задаём лейаут
- 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': 'Оценка критиков'},
- hovermode = 'closest'
- )
- },
- id = 'score_scatter'
- ),
- ])
- # описываем логику дашборда
- if __name__ == '__main__':
- app.run_server(host='0.0.0.0', port=3000)