예제 #1
0
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
예제 #2
0
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
예제 #3
0
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()