12311k

Untitled

Feb 15th, 2020
1,312
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.83 KB | None | 0 0
  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 = ['na_players', 'eu_players', 'jp_players', 'other_players']
  38. for column in columns: games_raw[column] = pd.to_numeric(games_raw[column], errors='coerce')
  39. games_raw['total'] = games_raw[['na_players',
  40. 'eu_players',
  41. 'jp_players',
  42. 'other_players']].sum(axis=1).round(2)
  43.  
  44. # формируем графики для отрисовки
  45. games_raw = games_raw[['name', 'platform', 'genre', 'total']].sort_values(by='total', ascending=False).head(10)
  46.  
  47. data = [go.Table(header={'values': ['<b>Игра</b>', '<b>Платформа</b>',
  48. '<b>Жанр</b>', '<b>Продажи по всем регионам</b>'],
  49. 'fill_color': 'lightgrey',
  50. 'align': 'center'},
  51. cells={'values': games_raw.T.values})]
  52.  
  53. # задаём лейаут
  54. external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
  55. app = dash.Dash(__name__, external_stylesheets=external_stylesheets, compress=False)
  56. app.layout = html.Div(children=[
  57.  
  58. # формируем заголовок тегом HTML
  59. html.H1(children='Топ-10 игр по продажам'),
  60.  
  61. dcc.Graph(
  62. figure={'data': data,
  63. 'layout': go.Layout()
  64. },
  65. id='games_by_genre'
  66. ),
  67.  
  68. ])
  69.  
  70. # описываем логику дашборда
  71. if __name__ == '__main__':
  72. app.run_server(host='0.0.0.0', port=3000)
Advertisement
Add Comment
Please, Sign In to add comment