def plot(df: pd.DataFrame, base_metric: str, flag_delta: bool, rolling_window: int): fig = make_subplots(rows=1, cols=2) if flag_delta: subfig1 = px.line(df, x='date', y=f'delta_{base_metric}', color='country') subfig2 = px.line(df, x='date', y=f'factor_delta_increase_{base_metric}_smoothed', color='country', hover_data=[base_metric, f'delta_{base_metric}']) else: subfig1 = px.line(df, x='date', y=base_metric, color='country') subfig2 = px.line(df, x='date', y=f'factor_{base_metric}_increase_smoothed', color='country', hover_data=[base_metric, f'delta_{base_metric}']) # subfig2 = px.line(df, x='date', y=f'factor_{base_metric}_increase_smoothed', color='country', # hover_data=[base_metric, f'delta_{base_metric}']) amount_countries = len(df.country.unique().tolist()) for data in subfig1.data: fig.add_trace(data, row=1, col=1) for data in subfig2.data: fig.add_trace(data, row=1, col=2) for i in range(amount_countries, 2 * amount_countries): fig.data[i].showlegend = False fig.update_layout(updatemenus=[pfunc.get_log_linear_buttons()]) fig.update_layout(width=1440, height=640) if flag_delta: fig.update_yaxes(title=f'Daily delta of {base_metric}', row=1, col=1) else: fig.update_yaxes(title=f'Cummulated sum of {base_metric}', row=1, col=1) fig.update_yaxes( title=f'Smoothed daily increase (Rolling {rolling_window} day window)', row=1, col=2) return fig
def plot(value_name: str, min_cases: int, rolling_window: int): df = mf.get_csse_data(value_name, min_cases=min_cases, rolling_window=rolling_window) fig = make_subplots(rows=1, cols=2) subfig1 = px.line(df, x='date', y=value_name, color='country') subfig2 = px.line(df, x='date', y=f'factor_{value_name}_increase_smoothed', color='country', hover_data=[value_name]) amount_countries = len(df.country.unique().tolist()) for data in subfig1.data: fig.add_trace(data, row=1, col=1) for data in subfig2.data: fig.add_trace(data, row=1, col=2) for i in range(amount_countries, 2 * amount_countries): fig.data[i].showlegend = False fig.update_layout(updatemenus=[pf.get_log_linear_buttons()]) fig.update_layout(width=1440, height=640) fig.update_yaxes(title=f'Summed {value_name}', row=1, col=1) fig.update_yaxes(title='Smoothed daily increase (Rolling 3 day window)', row=1, col=2) return fig
base_url = 'https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-andamento-nazionale/' file_name = 'dpc-covid19-ita-andamento-nazionale.csv' df = pd.read_csv(f'{base_url}{file_name}') df = df.rename( columns={ 'data': 'date', 'ricoverati_con_sintomi': 'hospitalized_non_critical', 'terapia_intensiva': 'critical', 'totale_ospedalizzati': 'hospitalized', 'isolamento_domiciliare': 'quarantine', 'totale_attualmente_positivi': 'active_cases', 'dimessi_guariti': 'recovered', 'deceduti': 'deaths', 'totale_casi': 'total_cases', 'tamponi': 'tests_performed', }) df = df.drop(['stato', 'note_it', 'note_en'], axis=1) df['new_cases'] = (df['total_cases'] - df['total_cases'].shift(1)).fillna(0) df['test_ratio'] = df['total_cases'] / df['tests_performed'] df['test_ratio_last_day'] = ( (df['total_cases'] - df['total_cases'].shift(1)) / (df['tests_performed'] - df['tests_performed'].shift(1))).fillna(0) #%% df_t = df.melt(id_vars='date', var_name='metric', value_name='amount') fig = px.line(x='date', y='amount', color='metric', data_frame=df_t) fig.update_layout(updatemenus=[pf.get_log_linear_buttons()]) fig.show()