Untitled

From Morose Lemur, 5 Months ago, written in Plain Text, viewed 206 times.
URL http://codebin.org/view/7cb23c66 Embed
Download Paste or View Raw
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3.  
  4. import dash
  5. import dash_core_components as dcc
  6. import dash_html_components as html
  7.  
  8. import plotly.graph_objs as go
  9.  
  10. import pandas as pd
  11.  
  12. # задаём данные для отрисовки
  13. from sqlalchemy import create_engine
  14.  
  15. # пример подключения к базе данных для Postresql
  16. #db_config = {'user': 'my_user',
  17. #             'pwd': 'my_user_password',
  18. #             'host': 'localhost',
  19. #             'port': 5432,
  20. #             'db': 'games'}
  21. #engine = create_engine('postgresql://{}:{}@{}:{}/{}'.format(db_config['user'],
  22. #                                                            db_config['pwd'],
  23. #                                                            db_config['host'],
  24. #                                                            db_config['port'],
  25. #                                                            db_config['db']))
  26. # пример подключения к базе данных для Sqlite
  27. engine = create_engine('sqlite:////db/games.db', echo = False)
  28.  
  29. # получаем сырые данные
  30. query = '''
  31.             SELECT * FROM data_raw
  32.         '''
  33. games_raw = pd.io.sql.read_sql(query, con = engine)
  34.  
  35. # преобразуем типы
  36. games_raw['year_of_release'] = pd.to_datetime(games_raw['year_of_release'])
  37. columns = ['user_score', 'critic_score']
  38. for column in columns: games_raw[column] = pd.to_numeric(games_raw[column], errors = 'coerce')
  39.  
  40. # задаём цвета для рейтингов
  41. games_raw['rating'] = games_raw['rating'].fillna('Неопр.')
  42. rating_styles = {'E': {'color': 'red'},
  43.                  'T': {'color': 'green'},
  44.                  'M': {'color': 'blue'},
  45.                  'E10+': {'color': 'magenta'},
  46.                  'EC': {'color': 'yellow'},
  47.                  'RP': {'color': 'orange'},
  48.                  'AO': {'color': 'blue'},
  49.                  'K-A': {'color': 'olive'},
  50.                  'Неопр.': {'color': 'grey'}}
  51. games_raw['rating_color'] = games_raw['rating'].apply(lambda x: rating_styles[x]['color'])
  52.  
  53. # задаём текст для отображения
  54. games_raw['text'] = games_raw.apply(lambda x: '{}:{}'.format(x['platform'], x['name']), axis = 1) # напишите код
  55.  
  56.  
  57. # формируем графики для отрисовки
  58. data = []
  59. for rating in games_raw['rating'].unique():
  60.     current = games_raw.query('rating == @rating')
  61.     data += [go.Scatter(x = current['user_score'],
  62.                         y = current['critic_score'],
  63.                         mode = 'markers',
  64.                         opacity = 0.5,
  65.                         marker = {'color': rating_styles[rating]['color']}, # ваш код
  66.                         text = current['text'], # ваш код
  67.                         name = rating)]
  68.  
  69. # задаём лейаут
  70. external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
  71. app = dash.Dash(__name__, external_stylesheets=external_stylesheets,compress=False)
  72. app.layout = html.Div(children=[  
  73.    
  74.     # формируем заголовок тегом HTML
  75.     html.H1(children = 'Игры по оценкам и возрастному рейтингу'),
  76.  
  77.     dcc.Graph(
  78.         figure = {'data': data,
  79.                   'layout': go.Layout(xaxis = {'title': 'Оценка игроков'},
  80.                                       yaxis = {'title': 'Оценка критиков'},
  81.                                       hovermode = 'closest'
  82.                                       )
  83.                  },
  84.         id = 'score_scatter'
  85.     ),        
  86.  
  87. ])
  88.  
  89. # описываем логику дашборда
  90. if __name__ == '__main__':
  91.     app.run_server(host='0.0.0.0', port=3000)
  92.  

Reply to "Untitled"

Here you can reply to the paste above