bullm commited on
Commit
a8b660a
1 Parent(s): e1c06e4

Upload Covid19.py

Browse files
Files changed (1) hide show
  1. apps/Covid19.py +369 -3
apps/Covid19.py CHANGED
@@ -1,3 +1,369 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:9bf0ff7418785c629693b8fba73e40116a1918f6c2272a98e7d415a3c94a17e1
3
- size 15184
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from plotly import graph_objs as go
3
+ import pandas as pd
4
+ from pandas.core.groupby.groupby import DataError
5
+ from pytrends.request import TrendReq
6
+ from datetime import datetime, timedelta, date
7
+ import numpy as np
8
+ from plotly.subplots import make_subplots
9
+ from metodos import colores_corporativos
10
+ import pybase64 as base64
11
+ import io
12
+ from logs_portal import log
13
+ from Scheduler import Scheduler_Covid as sc
14
+ import os
15
+
16
+ def button_style():
17
+ style_button = """
18
+ <style>
19
+ button {
20
+ margin-top:-100px;
21
+ display: inline-block;
22
+ background-color: #e8e8e8;
23
+ border-radius: 15px;
24
+ border: 4px #cccccc;
25
+ color: #4a4a4a;
26
+ text-align: center;
27
+ font-size: 15px;
28
+ padding: 2px;
29
+ width: 260px;
30
+ transition: all 0.5s;
31
+ cursor: pointer;
32
+ margin: 5px;
33
+ }
34
+ button span {
35
+ cursor: pointer;
36
+ display: inline-block;
37
+ position: relative;
38
+ transition: 0.5s;
39
+ }
40
+ button span:after {
41
+ content: '\00bb';
42
+ position: absolute;
43
+ opacity: 0;
44
+ top: 0;
45
+ right: -20px;
46
+ transition: 0.5s;
47
+ }
48
+ button:hover {
49
+ background-color: #bb1114;
50
+ color:#e8e8e8;
51
+ }
52
+ button:hover span {
53
+ padding-right: 25px;
54
+ }
55
+ button:hover span:after {
56
+ opacity: 1;
57
+ right: 0;
58
+ }
59
+ </style>
60
+ """
61
+ st.markdown(style_button, unsafe_allow_html=True)
62
+
63
+
64
+ def get_table_download_link(df):
65
+ """Generates a link allowing the data in a given panda dataframe to be
66
+ downloaded
67
+ in: dataframe
68
+ out: href string
69
+ """
70
+ csv = df.to_csv(index=False)
71
+ b64 = base64.b64encode(csv.encode()).decode()
72
+ name_arch = "Scoring_filtrado.csv"
73
+ name_mark = "Descargar .csv "
74
+ style = '"color:black;text-decoration: none;font-size:18px;"'
75
+ href = f'<center><a href="data:file/csv;base64,{b64}" style=' + style+' download="'+name_arch+'" ><button>'+name_mark+'</button></a></center>'
76
+ return href
77
+
78
+
79
+ def get_table_excel_link(df, name_arch):
80
+ towrite = io.BytesIO()
81
+ downloaded_file = df.to_excel(towrite, encoding='utf-8', index=False,
82
+ header=True)
83
+ towrite.seek(0) # reset pointer
84
+ file_name = name_arch
85
+ style = 'style="color:black;text-decoration: none; font-size:18px;" '
86
+ name_mark = "Descargar "+name_arch
87
+ b64 = base64.b64encode(towrite.read()).decode() # some strings
88
+ linko= f'<center><a href="data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,{b64}" '+style+'download="'+file_name+'"><button>'+name_mark+'</button></a></center>'
89
+ return linko
90
+
91
+
92
+ @st.cache(show_spinner=True)
93
+ def charged_data():
94
+ regiones = {}
95
+ regiones['Latam'] = ['Argentina', 'Brazil', 'Chile', 'Colombia',
96
+ 'Mexico', 'Peru']
97
+ regiones['Europa'] = ['Italy', 'Spain', 'Germany', 'United Kingdom',
98
+ 'France']
99
+ regiones['Asia Emergente'] = ['South Korea', 'Taiwan', 'Hong Kong',
100
+ 'India', 'Thailand', 'Indonesia']
101
+ regiones['USA'] = ['United States']
102
+ data_dict = np.load('Scheduler/dict_movilidad.npy',
103
+ allow_pickle='TRUE').item()
104
+ return data_dict, regiones
105
+
106
+
107
+ @st.cache(show_spinner=True)
108
+ def charged_data2():
109
+ covid_data = pd.read_csv('https://covid.ourworldindata.org/data/owid-covid-data.csv')
110
+ paises = {'CL': 'Chile', 'AR': 'Argentina', 'BR': 'Brazil',
111
+ 'MX': 'Mexico'}
112
+ covid_data = covid_data.loc[covid_data['location'].isin(paises.values())]
113
+ covid_data['date'] = pd.to_datetime(covid_data['date'])
114
+ covid_data.set_index(['date', 'location'], inplace=True)
115
+ # Creamos diccionario con cada una de las variables para distintos pa铆ses
116
+ data_dict = {}
117
+ for col in covid_data.columns:
118
+ try:
119
+ data_dict[col] = covid_data[col].unstack().fillna(0).rolling(1).mean()
120
+ except DataError:
121
+ pass
122
+ # Descargamos la data de google trends
123
+ pytrends = TrendReq(retries=5, backoff_factor=0.2,
124
+ requests_args={'verify': False})
125
+ start = (datetime.today() - timedelta(180)).strftime("%Y-%m-%d")
126
+ start = datetime(2020, 2, 1).strftime("%Y-%m-%d")
127
+ end = datetime.today().strftime("%Y-%m-%d")
128
+ tf = f'{start} {end}'
129
+ kw_lists = {
130
+ 'CL': ['PCR', 'sintomas covid', 'examen covid',
131
+ 'covid positivo'],
132
+ 'AR': ['PCR', 'olfato', 'sintomas covid', 'perdida gusto',
133
+ 'covid positivo'],
134
+ 'MX': ['PCR', 'olfato', 'sintomas covid', 'covid positivo',
135
+ 'perdida gusto'],
136
+ 'BR': ['PCR', 'sintomas covid', 'exame covid', 'covid positivo']
137
+ }
138
+ gt_data = {}
139
+ for p, kw in kw_lists.items():
140
+ pytrends.build_payload(kw, timeframe=tf, geo=p)
141
+ df = pytrends.interest_over_time().drop(columns='isPartial')
142
+ gt_data[paises[p]] = df.div(df.mean(0).values)
143
+ data_dict['GT Index'] = pd.DataFrame({p: gt_data[p].mean(1).rolling(1).mean()
144
+ for p in gt_data.keys()})
145
+ return data_dict, paises
146
+
147
+
148
+ @log
149
+ def Movilidad():
150
+ largo = 400
151
+ ancho = 550
152
+ button_style()
153
+ placebar = st.empty()
154
+ percent_complete = 0
155
+ my_bar = placebar.progress(percent_complete)
156
+ data_cargada = charged_data()
157
+ data_dict = data_cargada[0]
158
+ regiones = data_cargada[1]
159
+ europa = data_dict['Mobility Index'][regiones.keys()]["Europa"]
160
+ latam = data_dict['Mobility Index'][regiones.keys()]["Latam"]
161
+ asia = data_dict['Mobility Index'][regiones.keys()]["Asia Emergente"]
162
+ USA = data_dict['Mobility Index'][regiones.keys()]["USA"]
163
+ mov_region = data_dict['Mobility Index'][regiones.keys()][["USA", "Europa","Asia Emergente", "Latam"]]
164
+ percent_complete = percent_complete+33
165
+ placebar.progress(percent_complete)
166
+ colores = list(colores_corporativos().values())
167
+ colores2 = []
168
+ for i in range(len(colores)):
169
+ colores2.append("rgb"+str(colores[i]))
170
+ def plot_raw_data():
171
+ fig = go.Figure()
172
+ europa_ = go.Scatter(x=europa.index, y=europa.values, name="Europa",
173
+ line=dict(color=colores2[0]))
174
+ latam_ = go.Scatter(x=latam.index, y=latam.values, name="Latam",
175
+ line=dict(color=colores2[1]))
176
+ USA_ = go.Scatter(x=USA.index, y=USA.values, name="USA",
177
+ line=dict(color=colores2[2]))
178
+ asia_ = go.Scatter(x=asia.index, y=asia.values, name="Asia Emergente",
179
+ line=dict(color=colores2[3]))
180
+ fig.add_trace(europa_)
181
+ fig.add_trace(latam_)
182
+ fig.add_trace(USA_)
183
+ fig.add_trace(asia_)
184
+ fig.layout.update(title_text="Evoluci贸n por region",
185
+ xaxis_rangeslider_visible=True,
186
+ margin_b=20,
187
+ margin_r=20,
188
+ margin_l=20,
189
+ width=ancho,
190
+ height=largo,
191
+ legend=dict(orientation="h",
192
+ yanchor="bottom",
193
+ y=1.02,
194
+ xanchor="right",
195
+ x=1))
196
+ fig2 = go.Figure()
197
+ i = 0
198
+ for pais in regiones["Latam"]:
199
+ data_pais = data_dict['Mobility Index'][regiones['Latam']][pais]
200
+ pais_gr = go.Scatter(x=data_pais.index,
201
+ y=data_pais.values, name=pais,
202
+ line=dict(color=colores2[i]))
203
+ fig2.add_trace(pais_gr)
204
+ i = i+1
205
+ fig2.layout.update(title_text="Evoluci贸n LATAM",
206
+ xaxis_rangeslider_visible=True, margin_b=20,
207
+ margin_r=20,margin_l=20,
208
+ width=ancho, height=largo,
209
+ legend=dict(orientation="h",
210
+ yanchor="bottom",
211
+ y=1.0,
212
+ xanchor="right",
213
+ x=1))
214
+ col1, col2 = st.columns(2)
215
+ col1.plotly_chart(fig, use_container_width=True)
216
+ col2.plotly_chart(fig2, use_container_width=True)
217
+ link_excel_1 = get_table_excel_link(data_dict['Mobility Index'][regiones['Latam']], "Movilidad Latam.xlsx")
218
+ link_excel_2 = get_table_excel_link(mov_region, "Movilidad por region.xlsx")
219
+ col1.markdown(link_excel_1, unsafe_allow_html=True)
220
+ col2.markdown(link_excel_2, unsafe_allow_html=True)
221
+ percent_complete = percent_complete + 33
222
+ placebar.progress(percent_complete)
223
+ placebar.empty()
224
+ plot_raw_data()
225
+ percent_complete = percent_complete + 34
226
+ my_bar.progress(percent_complete)
227
+ my_bar.empty()
228
+ data_desag = pd.read_excel("Scheduler/Movilidad_desagrada.xlsx",
229
+ engine="openpyxl")
230
+ st.markdown(get_table_excel_link(data_desag, "Movilidad desagregada.xlsx"),
231
+ unsafe_allow_html=True)
232
+ try:
233
+ user = os.getlogin()
234
+ if user == 'bullm':
235
+ act = st.button('Actualizar')
236
+ if act:
237
+ sc.run_data_covid()
238
+ ud = pd.read_excel('Data/update_data.xlsx')
239
+ ud = ud[ud['View'] != 'Covid19']
240
+ today = date.today().strftime('%d-%m-%Y')
241
+ ud = ud.append({"View": "Covid19",
242
+ "Last_Update": today}, ignore_index=True)
243
+ ud.to_excel('Data/update_data.xlsx', index=False)
244
+ except Exception:
245
+ pass
246
+
247
+
248
+ @log
249
+ def Correlacion_GT():
250
+ largo = 400
251
+ ancho = 550
252
+ button_style()
253
+ # Cargamos la data relevante
254
+ percent_complete = 0
255
+ my_bar = st.progress(percent_complete)
256
+ percent_complete = percent_complete + 33
257
+ my_bar.progress(percent_complete)
258
+ data_cargada = charged_data2()
259
+ data_dict = data_cargada[0]
260
+ paises = data_cargada[1]
261
+ corr_df = pd.DataFrame(index=paises.values(), columns=np.arange(-3, 1))
262
+ percent_complete = percent_complete + 33
263
+ my_bar.progress(percent_complete)
264
+ i = 0
265
+ cols = st.columns(2)
266
+ col1, col2, col3, col4 = st.columns((1.5, 7, 2, 7))
267
+ for p in corr_df.index:
268
+ df = pd.concat([data_dict['GT Index'][p],
269
+ data_dict['new_cases_per_million'][p]],
270
+ axis=1).dropna()
271
+ df.columns = ['GT Index', 'Nuevos Casos Confirmados']
272
+ fig = make_subplots(specs=[[{"secondary_y": True}]])
273
+ CC = go.Scatter(x=df['GT Index'].index,
274
+ y=df['GT Index'].values, name='GT index',
275
+ line=dict(color='dimgrey'))
276
+ GT = go.Scatter(x=df['Nuevos Casos Confirmados'].index,
277
+ y=df['Nuevos Casos Confirmados'].values,
278
+ name='Casos confirmados', line=dict(color='darkred'))
279
+ fig.add_trace(CC, secondary_y=False,)
280
+ fig.add_trace(GT, secondary_y=True,)
281
+ fig.layout.update(title_text="Evoluci贸n {}".format(p),
282
+ xaxis_rangeslider_visible=True, margin_b=20,
283
+ margin_r=20, margin_l=20,
284
+ width=ancho, height=largo,
285
+ legend=dict(orientation="h",
286
+ yanchor="bottom",
287
+ y=1.02,
288
+ xanchor="right",
289
+ x=1))
290
+ link_excel = get_table_excel_link(df, "Correlacion GT.xlsx")
291
+ if i % 2 == 0:
292
+ cols[0].plotly_chart(fig, use_container_width=True)
293
+ cols[0].markdown(link_excel, unsafe_allow_html=True)
294
+ else:
295
+ cols[1].plotly_chart(fig, use_container_width=True)
296
+ cols[1].markdown(link_excel, unsafe_allow_html=True)
297
+ cols = st.columns(2)
298
+ col1, col2, col3, col4 = st.columns((1.5, 7, 2, 7))
299
+ i = i + 1
300
+ percent_complete = percent_complete + 34
301
+ my_bar.progress(percent_complete)
302
+ my_bar.empty()
303
+
304
+
305
+
306
+ @log
307
+ def vacunas():
308
+ largo = 400
309
+ ancho = 550
310
+ button_style()
311
+ vac_data = pd.read_csv('https://covid.ourworldindata.org/data/owid-covid-data.csv').set_index(['date','location'])
312
+ country_pop = (vac_data['population'].reset_index().set_index('location')
313
+ .drop(columns='date').squeeze().drop_duplicates())
314
+ min_pop = 1000000
315
+ idx = country_pop[country_pop > min_pop].index
316
+ vac_data = vac_data['total_vaccinations_per_hundred'].unstack().ffill().fillna(0)
317
+ vac_data.index = pd.to_datetime(vac_data.index)
318
+ N = 15
319
+ top_vac = vac_data[idx].iloc[-1].nlargest(N).sort_values()
320
+ regiones = {}
321
+ regiones['Latam'] = ['Argentina', 'Brazil', 'Chile', 'Colombia',
322
+ 'Mexico', 'Peru']
323
+ regiones['Europa'] = ['Italy', 'Spain', 'Germany', 'United Kingdom',
324
+ 'France', 'Russia']
325
+ regiones['Asia Emergente'] = ['South Korea', 'Taiwan', 'Hong Kong',
326
+ 'China', 'Japan']
327
+ regiones['Norteam茅rica'] = ['United States', 'Canada']
328
+ inicio = datetime(2020, 11, 15)
329
+ vac_data = vac_data.loc[vac_data.index > inicio].resample('W').last()
330
+ vac_data.index.name = ''
331
+ colores = colores_corporativos().values()
332
+ colores = list(colores_corporativos().values())
333
+ colores2 = []
334
+ for i in range(len(colores)):
335
+ colores2.append("rgb"+str(colores[i]))
336
+
337
+ def plot_raw_data():
338
+ i = 0
339
+ cols = st.columns(2)
340
+ col1, col2, col3, col4 = st.columns((1.5, 7, 2, 7))
341
+ for region in list(regiones.keys()):
342
+ fig = go.Figure()
343
+ j = 0
344
+ for pais in regiones[region]:
345
+ data_pais = vac_data[regiones[region]][pais]
346
+ pais_gr = go.Scatter(x=data_pais.index,
347
+ y=data_pais.values, name=pais,
348
+ line=dict(color=colores2[j]))
349
+ fig.add_trace(pais_gr)
350
+ j = j+1
351
+ fig.layout.update(title_text="Evoluci贸n "+region,
352
+ xaxis_rangeslider_visible=True, height=largo,
353
+ width=ancho, margin_b=20,
354
+ legend=dict(orientation="h",
355
+ yanchor="bottom",
356
+ y=1.0,
357
+ xanchor="right",
358
+ x=1))
359
+ link_excel = get_table_excel_link(data_pais, "Vacunacion.xlsx")
360
+ if i % 2 == 0:
361
+ cols[0].plotly_chart(fig, use_column_width=True)
362
+ cols[0].markdown(link_excel, unsafe_allow_html=True)
363
+ else:
364
+ cols[1].plotly_chart(fig, use_column_width=True)
365
+ cols[1].markdown(link_excel, unsafe_allow_html=True)
366
+ cols = st.columns(2)
367
+ col1, col2, col3, col4 = st.columns((1.5, 7, 2, 7))
368
+ i = i+1
369
+ plot_raw_data()