Advertisement
Kozobars

Untitled

Jan 17th, 2020
1,752
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.46 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', 'user_score', 'critic_score']
  38. for column in columns: games_raw[column] = pd.to_numeric(games_raw[column], errors = 'coerce')
  39.  
  40. # формируем данные для отчёта
  41. games_grouped = (games_raw.groupby(['year_of_release'])
  42. .agg({'na_players':'sum',
  43. 'eu_players': 'sum',
  44. 'jp_players': 'sum',
  45. 'other_players': 'sum'})
  46. .reset_index()
  47. )
  48.  
  49. # задаём настройки стилей для отрисовки в цикле
  50. line_styles = {'na_players': {'color': 'red', 'width': 4},
  51. 'eu_players': {'color': 'green', 'width': 3, 'dash': 'dash'},
  52. 'jp_players': {'color': 'blue', 'width': 2, 'dash': 'dot'},
  53. 'other_players': {'color': 'orange', 'width': 1, 'dash': 'dash'}}
  54.  
  55. #формируем графики для отрисовки
  56. data_games_by_year = []
  57. for column in line_styles.keys():
  58. data_games_by_year += [go.Scatter(x = games_grouped['year_of_release'],
  59. y = games_grouped[column],
  60. mode = 'lines',
  61. line = line_styles[column],
  62. name = column)]
  63.  
  64. # задаём лейаут
  65. external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
  66. app = dash.Dash(__name__, external_stylesheets=external_stylesheets,compress=False)
  67. app.layout = html.Div(children=[
  68.  
  69. #формируем заголовок тегом HTML
  70. html.H1(children = 'Продажи игр по годам'),
  71.  
  72. dcc.Graph(
  73. figure = {'data': data_games_by_year,
  74. 'layout': go.Layout(xaxis = {'title': 'Год'},
  75. yaxis = {'title': 'Продажи'})
  76. },
  77. id = 'sales_by_year'
  78. ),
  79.  
  80. ])
  81.  
  82. #описываем логику дашборда
  83. if __name__ == '__main__':
  84. app.run_server(host='0.0.0.0', port=3000)
Advertisement
Comments
  • b9kin
    361 days
    # text 0.51 KB | 0 0
    1. # формируем графики для отрисовки
    2. data_games_by_year = []
    3. for column in line_styles.keys():
    4. data_games_by_year += [go.Scatter(x = games_grouped['year_of_release'],
    5. y = games_grouped[column],
    6. mode = 'lines',
    7. line = line_styles[column],
    8. stackgroup = 'one', # напишите код
    9. name = column)]
Add Comment
Please, Sign In to add comment
Advertisement