Advertisement
Guest User

Untitled

a guest
Feb 18th, 2020
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.65 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. from dash.dependencies import Input, Output
  8.  
  9. import plotly.graph_objs as go
  10.  
  11. from datetime import datetime
  12.  
  13. import pandas as pd
  14.  
  15. # задаём данные для отрисовки
  16. from sqlalchemy import create_engine
  17.  
  18. db_config = {'user': 'my_user','pwd': 'my_user_password','host': 'localhost','port': 5432,'db': 'zen'}
  19.  
  20. connection_string = 'postgresql://{}:{}@{}:{}/{}'.format(db_config['user'],db_config['pwd'],db_config['host'],db_config['port'],db_config['db'])
  21.  
  22. engine = create_engine(connection_string)
  23.  
  24. external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
  25. app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
  26.  
  27. query_dash_visits = '''
  28. SELECT * FROM dash_visits
  29. '''
  30.  
  31. dash_visits = pd.io.sql.read_sql(query_dash_visits, con = engine)
  32. dash_visits['dt'] = pd.to_datetime(dash_visits['dt'])
  33.  
  34. query_dash_engagement = '''
  35. SELECT * FROM dash_engagement
  36. '''
  37.  
  38. dash_engagement = pd.io.sql.read_sql(query_dash_engagement, con = engine)
  39. dash_engagement['dt'] = pd.to_datetime(dash_engagement['dt'])
  40.  
  41. app.layout = html.Div(children=[
  42.  
  43. # формируем html
  44. html.H1(children = 'Дашборд для Яндекс.Дзен'),
  45.  
  46. html.Label('ДAанный дашборд показывает графики для анализа пользовательского взаимодействия с карточками статей.'),
  47.  
  48. html.Div([
  49. html.Div([
  50. html.Div([
  51. html.Label('Фильтр даты и времени'),
  52.  
  53. dcc.DatePickerRange(
  54. start_date = dash_visits['dt'].dt.date.min(),
  55. end_date = dash_visits['dt'].dt.date.max(),
  56. display_format = 'YYYY-MM-DD HH:SS',
  57. id = 'dt_selector'
  58. )
  59. ]),
  60. html.Div([
  61. html.Label('Фильтр возрастных категорий')
  62.  
  63.  
  64. ])
  65. ], className = 'six columns'),
  66. html.Div([
  67. html.Label('Фильтр тем по карточкам'),
  68.  
  69. dcc.Dropdown(
  70. options = [{'label': x, 'value': x} for x in dash_visits['item_topic'].unique()],
  71. value = dash_visits['item_topic'].unique().tolist(),
  72. multi = True,
  73. id = 'theme_selector'
  74. )
  75.  
  76.  
  77. ], className = 'six columns')
  78. ], className = 'row'),
  79.  
  80. html.Div([
  81. html.Div([
  82. html.Label('График истории событий по темам карточек. Все типы событий, абсолютьные значения.')
  83.  
  84.  
  85. ], className = 'six columns'),
  86. html.Div([
  87. html.Div([
  88. html.Label('График разбивки событий по группам. Все типы событий, относительные значения.')
  89.  
  90.  
  91. ]),
  92. html.Div([
  93. html.Label('График средней глубины взаимодействия (без разбивки на темы карточек или возрастные категории)')
  94.  
  95.  
  96. ])
  97. ], className = 'six columns')
  98. ], className = 'row')
  99.  
  100. ])
  101.  
  102. # описываем логику дашборда
  103.  
  104. if __name__ == '__main__':
  105. app.run_server(debug = True, host='0.0.0.0')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement