1
0
Fork 0

feat: Added second vaccinations to days remaining plots

This commit is contained in:
Benedikt Bastin 2021-05-31 14:15:44 +02:00
parent 3e9f00ec2b
commit bef88716d8
1 changed files with 57 additions and 43 deletions

100
plot.py
View File

@ -142,7 +142,7 @@ def parse_rki(filename):
extrapolation_last_rate = extrapolate(data.iloc[-1], to_be_vaccinated)
extrapolation_mean_seven_days = extrapolate(mean_seven_days, to_be_vaccinated)
mean_vaccination_rates_daily = np.round(cumulative / range(1, len(cumulative) + 1))
mean_vaccination_rates_daily = data.expanding().mean() #np.round(cumulative / range(1, len(cumulative) + 1))
vaccination_rates_daily_rolling_average = data.rolling(7).mean()
vaccinations_missing_until_target = einwohner_deutschland * herd_immunity - total
@ -682,29 +682,30 @@ def plot_vaccination_done_days():
plt.title(
'Lin. Extrapolation der Erstimpfungen bis 70 % der Bevölkerung anhand der durchschn. Impfrate (Anzahl Tage, Gesamt und 7 Tage)\n'
'Lin. Extrapolation der Erst- und Zweitimpfungen bis 70 % der Bevölkerung anhand der durchschn. Impfrate (Anzahl Tage, Gesamt und 7 Tage)\n'
'Datenquelle: RKI, Stand: {}. Erstellung: {}, Ersteller: Benedikt Bastin, Lizenz: CC BY-SA 4.0\n'.format(
print_stand, print_today
)
)
d = data_first_vaccination
days_remaining_daily = np.ceil((einwohner_deutschland * herd_immunity - d['cumulative']) / (d['mean_vaccination_rates_daily']))
days_remaining_rolling = np.ceil((einwohner_deutschland * herd_immunity - d['cumulative']) / (d['vaccination_rates_daily_rolling_average']))
ax.set_xlim(start_of_reporting_date, today)
ax.set_ylim(0, 2500)
ax.axhline(days_until_target, label='Impfziel Ende Sommer')
ax.plot(dates, days_remaining_daily, label='Durchschnitt Gesamt', linewidth=0.5)
ax.plot(dates, days_remaining_rolling, label='Durchschnitt 7 Tage', linewidth=2)
for d, c, l in [(data_first_vaccination, 'blue', 'Erstimpfungen'), (data_second_vaccination, 'lightblue', 'Zweitimpfungen')]:
days_remaining_daily = np.ceil((einwohner_deutschland * herd_immunity - d['cumulative']) / (d['mean_vaccination_rates_daily']))
days_remaining_rolling = np.ceil((einwohner_deutschland * herd_immunity - d['cumulative']) / (d['vaccination_rates_daily_rolling_average']))
ax.plot(dates, days_remaining_daily, label=f'{l} Durchschnitt Gesamt', linewidth=0.5, color=c)
ax.plot(dates, days_remaining_rolling, label=f'{l} Durchschnitt 7 Tage', linewidth=2, color=c)
ax.grid(True)
d = datetime.date(2021, 3, 1)
ax.add_patch(Rectangle((d, 0), today - d, 52 * 7, edgecolor='darkgrey', lw=3, fill=False, label='Detailansicht (s.u.)'))
ax.legend(loc='upper right')
ax.legend(loc='lower left')
ax.get_yaxis().get_major_formatter().set_scientific(False)
ax.set_xlabel('Datum')
@ -726,27 +727,28 @@ def plot_vaccination_done_weeks():
plt.title(
'Lin. Extrapolation der Erstimpfungen bis 70 % der Bevölkerung anhand der durchschn. Impfrate (Anzahl Wochen, Gesamt und 7 Tage)\n'
'Lin. Extrapolation der Erst- und Zweitimpfungen bis 70 % der Bevölkerung anhand der durchschn. Impfrate (Anzahl Wochen, Gesamt und 7 Tage)\n'
'Datenquelle: RKI, Stand: {}. Erstellung: {}, Ersteller: Benedikt Bastin, Lizenz: CC BY-SA 4.0\n'.format(
print_stand, print_today
)
)
d = data_first_vaccination
weeks_remaining_daily = np.ceil((einwohner_deutschland * herd_immunity - d['cumulative']) / (d['mean_vaccination_rates_daily'])) / 7
weeks_remaining_rolling = np.ceil((einwohner_deutschland * herd_immunity - d['cumulative']) / (d['vaccination_rates_daily_rolling_average'])) / 7
ax.set_xlim(datetime.date(2021, 3, 1), today)
ax.set_ylim(0, 52)
ax.axhline(days_until_target / 7, label='Impfziel Ende Sommer')
ax.plot(dates, weeks_remaining_daily, label='Durchschnitt Gesamt', linewidth=0.5)
ax.plot(dates, weeks_remaining_rolling, label='Durchschnitt 7 Tage', linewidth=2)
for d, c, l in [(data_first_vaccination, 'blue', 'Erstimpfungen'), (data_second_vaccination, 'lightblue', 'Zweitimpfungen')]:
weeks_remaining_daily = np.ceil((einwohner_deutschland * herd_immunity - d['cumulative']) / (d['mean_vaccination_rates_daily'])) / 7
weeks_remaining_rolling = np.ceil((einwohner_deutschland * herd_immunity - d['cumulative']) / (d['vaccination_rates_daily_rolling_average'])) / 7
ax.plot(dates, weeks_remaining_daily, label=f'{l} Durchschnitt Gesamt', linewidth=0.5, color=c)
ax.plot(dates, weeks_remaining_rolling, label=f'{l} Durchschnitt 7 Tage', linewidth=2, color=c)
ax.grid(True)
ax.legend(loc='upper right')
ax.legend(loc='lower left')
ax.get_yaxis().get_major_formatter().set_scientific(False)
ax.set_xlabel('Datum')
@ -769,31 +771,37 @@ def plot_vaccination_done_dates():
plt.title(
'Lin. Extrapolation der Erstimpfungen bis 70 % der Bevölkerung anhand der durchschn. Impfrate (Datum, Gesamt und 7 Tage)\n'
'Lin. Extrapolation der Erst- und Zweitimpfungen bis 70 % der Bevölkerung anhand der durchschn. Impfrate (Datum, Gesamt und 7 Tage)\n'
'Datenquelle: RKI, Stand: {}. Erstellung: {}, Ersteller: Benedikt Bastin, Lizenz: CC BY-SA 4.0\n'.format(
print_stand, print_today
)
)
d = data_first_vaccination
days_remaining_daily = np.ceil((einwohner_deutschland * herd_immunity - d['cumulative']) / (d['mean_vaccination_rates_daily']))
days_remaining_rolling = np.ceil((einwohner_deutschland * herd_immunity - d['cumulative']) / (d['vaccination_rates_daily_rolling_average']))
for d, c, l in [(data_first_vaccination, 'blue', 'Erstimpfungen'), (data_second_vaccination, 'lightblue', 'Zweitimpfungen')]:
dates_daily = [today + datetime.timedelta(days) for days in days_remaining_daily]
dates_rolling = [today + datetime.timedelta(days) for days in days_remaining_rolling.dropna()]
days_remaining_daily = np.ceil((einwohner_deutschland * herd_immunity - d['cumulative']) / (d['mean_vaccination_rates_daily']))
#days_remaining_daily[np.isnan(days_remaining_daily)] = 10000
days_remaining_rolling = np.ceil((einwohner_deutschland * herd_immunity - d['cumulative']) / (d['vaccination_rates_daily_rolling_average']))
#days_remaining_rolling[np.isnan(days_remaining_rolling)] = 10000
dates_daily = [today + datetime.timedelta(days) for days in days_remaining_daily.dropna()]
dates_rolling = [today + datetime.timedelta(days) for days in days_remaining_rolling.dropna()]
offset = len(dates) - len(dates_daily)
ax.plot(dates[offset:], dates_daily, label=f'{l} Durchschnitt Gesamt', linewidth=0.5, color=c)
offset = len(dates) - len(dates_rolling)
ax.plot(dates[offset:], dates_rolling, label=f'{l} Durchschnitt 7 Tage', linewidth=2, color=c)
ax.set_xlim(start_of_reporting_date, today)
ax.set_ylim(today, today + datetime.timedelta(int(np.max(days_remaining_rolling) * 1.05)))
ax.set_ylim(today, datetime.date(2025, 7, 1))
ax.axhline(target_date_for_herd_immunity - datetime.timedelta(21), label='Impfziel Ende Sommer')
ax.add_patch(Rectangle((datetime.date(2021, 4, 6), today), today - datetime.date(2021, 4, 6), target_date_for_herd_immunity - today, edgecolor='darkgrey', lw=3, fill=False, label='Detailansicht (s.u.)'))
ax.plot(dates, dates_daily, label='Durchschnitt Gesamt', linewidth=0.5)
ax.plot(dates[6:], dates_rolling, label='Durchschnitt 7 Tage', linewidth=2)
ax.grid(True)
ax.legend(loc='upper right')
ax.legend(loc='lower left')
ax.set_xlabel('Datum')
ax.set_ylabel('Datum, an dem 70 % erreicht sind')
@ -815,30 +823,36 @@ def plot_vaccination_done_dates_detail():
plt.title(
'Lin. Extrapolation der Erstimpfungen bis 70 % der Bevölkerung anhand der durchschn. Impfrate (Detail, Datum, Gesamt und 7 Tage)\n'
'Lin. Extrapolation der Erst- und Zweitimpfungen bis 70 % der Bevölkerung anhand der durchschn. Impfrate (Detail, Datum, Gesamt und 7 Tage)\n'
'Datenquelle: RKI, Stand: {}. Erstellung: {}, Ersteller: Benedikt Bastin, Lizenz: CC BY-SA 4.0\n'.format(
print_stand, print_today
)
)
d = data_first_vaccination
days_remaining_daily = np.ceil((einwohner_deutschland * herd_immunity - d['cumulative']) / (d['mean_vaccination_rates_daily']))
days_remaining_rolling = np.ceil((einwohner_deutschland * herd_immunity - d['cumulative']) / (d['vaccination_rates_daily_rolling_average']))
for d, c, l in [(data_first_vaccination, 'blue', 'Erstimpfungen'), (data_second_vaccination, 'lightblue', 'Zweitimpfungen')]:
dates_daily = [today + datetime.timedelta(days) for days in days_remaining_daily]
dates_rolling = [today + datetime.timedelta(days) for days in days_remaining_rolling.dropna()]
days_remaining_daily = np.ceil((einwohner_deutschland * herd_immunity - d['cumulative']) / (d['mean_vaccination_rates_daily']))
days_remaining_daily[np.isnan(days_remaining_daily)] = 10000
days_remaining_rolling = np.ceil((einwohner_deutschland * herd_immunity - d['cumulative']) / (d['vaccination_rates_daily_rolling_average']))
days_remaining_rolling[np.isnan(days_remaining_rolling)] = 10000
dates_daily = [today + datetime.timedelta(days) for days in days_remaining_daily.dropna()]
dates_rolling = [today + datetime.timedelta(days) for days in days_remaining_rolling.dropna()]
offset = len(dates) - len(dates_daily)
ax.plot(dates[offset:], dates_daily, label=f'{l} Durchschnitt Gesamt', linewidth=0.5, color=c)
offset = len(dates) - len(dates_rolling)
ax.plot(dates[offset:], dates_rolling, label=f'{l} Durchschnitt 7 Tage', linewidth=2, color=c)
ax.set_xlim(datetime.date(2021, 4, 6), today)
ax.set_ylim(today, target_date_for_herd_immunity)
ax.axhline(target_date_for_herd_immunity - datetime.timedelta(21), label='Impfziel Ende Sommer')
ax.plot(dates, dates_daily, label='Durchschnitt Gesamt', linewidth=0.5)
ax.plot(dates[6:], dates_rolling, label='Durchschnitt 7 Tage', linewidth=2)
ax.grid(True)
ax.legend(loc='upper right')
ax.legend(loc='lower left')
ax.set_xlabel('Datum')
ax.set_ylabel('Datum, an dem 70 % erreicht sind')
@ -928,19 +942,19 @@ def render_dashboard():
},{
'index': 10,
'filename': 'vaccination_done_days',
'caption': 'Lineare Extrapolation bis 70 % der Bevölkerung anhand der Erstimpfungen der durchschnittlichen Impfrate (Anzahl Tage, Gesamt und 7 Tage)'
'caption': 'Lineare Extrapolation der Erst- und Zweitimpfungen bis 70 % der Bevölkerung anhand der durchschnittlichen Impfrate (Anzahl Tage, Gesamt und 7 Tage)'
},{
'index': 11,
'filename': 'vaccination_done_weeks',
'caption': 'Lineare Extrapolation bis 70 % der Bevölkerung anhand der Erstimpfungen der durchschnittlichen Impfrate (Anzahl Wochen, Gesamt und 7 Tage)'
'caption': 'Lineare Extrapolation der Erst- und Zweitimpfungen bis 70 % der Bevölkerung anhand der durchschnittlichen Impfrate (Anzahl Wochen, Gesamt und 7 Tage)'
},{
'index': 12,
'filename': 'vaccination_done_dates',
'caption': 'Lineare Extrapolation bis 70 % der Bevölkerung anhand der Erstimpfungen der durchschnittlichen Impfrate (Datum, Gesamt und 7 Tage)'
'caption': 'Lineare Extrapolation der Erst- und Zweitimpfungen bis 70 % der Bevölkerung anhand der durchschnittlichen Impfrate (Datum, Gesamt und 7 Tage)'
},{
'index': 13,
'filename': 'vaccination_done_dates_detail',
'caption': 'Lineare Extrapolation bis 70 % der Bevölkerung anhand der Erstimpfungen der durchschnittlichen Impfrate (Datum, Gesamt und 7 Tage)'
'caption': 'Lineare Extrapolation der Erst- und Zweitimpfungen bis 70 % der Bevölkerung anhand der durchschnittlichen Impfrate (Datum, Gesamt und 7 Tage)'
}
]
).dump('site/index.xhtml')