1
0
Fork 0

Compare commits

..

3 commits

Author SHA1 Message Date
Benedikt Bastin
fc650e1207 fix: Added data about second vaccinations to data-text 2021-05-07 14:02:48 +02:00
Benedikt Bastin
0e0ad8bc0f fix: Refactored parts of the script into functions 2021-04-29 13:50:48 +02:00
Benedikt Bastin
e13e8f1df6 fix: Replaced magic number herd immunity with variable 2021-04-29 13:28:55 +02:00
2 changed files with 128 additions and 118 deletions

View file

@ -22,6 +22,8 @@
<p class="data-text"> <p class="data-text">
Gestern wurden <em>{{ '{:n}'.format(data_first_vaccination.vaccinations_last_day).replace('.', '') }}</em> Erstimpfungen vorgenommen (<em>{{ '{:.3n}'.format(data_first_vaccination.vaccinations_last_day_percentage) }} %</em> der Bevölkerung, <em>{{ '{:.3n}'.format(data_first_vaccination.vaccinations_last_day_vaccination_percentage) }} %</em> der verabreichten Erstimpfdosen). Gestern wurden <em>{{ '{:n}'.format(data_first_vaccination.vaccinations_last_day).replace('.', '') }}</em> Erstimpfungen vorgenommen (<em>{{ '{:.3n}'.format(data_first_vaccination.vaccinations_last_day_percentage) }} %</em> der Bevölkerung, <em>{{ '{:.3n}'.format(data_first_vaccination.vaccinations_last_day_vaccination_percentage) }} %</em> der verabreichten Erstimpfdosen).
Innerhalb der letzten Kalenderwoche sind <em>{{ '{:.9n}'.format(data_first_vaccination.vaccinations_last_week).replace('.', '') }}</em> Erstimpfungen erfolgt (<em>{{ '{:.3n}'.format(data_first_vaccination.vaccinations_last_week_percentage) }} %</em>, <em>{{ '{:.3n}'.format(data_first_vaccination.vaccinations_last_week_vaccination_percentage) }} %</em>). Innerhalb der letzten Kalenderwoche sind <em>{{ '{:.9n}'.format(data_first_vaccination.vaccinations_last_week).replace('.', '') }}</em> Erstimpfungen erfolgt (<em>{{ '{:.3n}'.format(data_first_vaccination.vaccinations_last_week_percentage) }} %</em>, <em>{{ '{:.3n}'.format(data_first_vaccination.vaccinations_last_week_vaccination_percentage) }} %</em>).
Es wurden außerdem <em>{{ '{:n}'.format(data_second_vaccination.vaccinations_last_day).replace('.', '') }}</em> Zweitimpfungen vorgenommen (<em>{{ '{:.3n}'.format(data_second_vaccination.vaccinations_last_day_percentage) }} %</em> der Bevölkerung, <em>{{ '{:.3n}'.format(data_second_vaccination.vaccinations_last_day_vaccination_percentage) }} %</em> der verabreichten Erstimpfdosen).
Innerhalb der letzten Kalenderwoche sind <em>{{ '{:.9n}'.format(data_second_vaccination.vaccinations_last_week).replace('.', '') }}</em> Zweitimpfungen erfolgt (<em>{{ '{:.3n}'.format(data_second_vaccination.vaccinations_last_week_percentage) }} %</em>, <em>{{ '{:.3n}'.format(data_second_vaccination.vaccinations_last_week_vaccination_percentage) }} %</em>).
</p> </p>
<p class="data-text"> <p class="data-text">
In den letzten sieben Tagen wurden durchschnittlich <em>{{ '{:n}'.format(data_first_vaccination['extrapolation_mean_seven_days']['rate_int']).replace('.', '') }}</em> Erstimpfungen und <em>{{ '{:n}'.format(data_second_vaccination['extrapolation_mean_seven_days']['rate_int']).replace('.', '') }}</em> Zweitimpfungen pro Tag vorgenommen (<em>{{ '{:n}'.format(data_first_vaccination['extrapolation_mean_seven_days']['rate_int'] * 7).replace('.', '') }}</em>/<em>{{ '{:n}'.format(data_second_vaccination['extrapolation_mean_seven_days']['rate_int'] * 7).replace('.', '') }}</em> pro Woche). In den letzten sieben Tagen wurden durchschnittlich <em>{{ '{:n}'.format(data_first_vaccination['extrapolation_mean_seven_days']['rate_int']).replace('.', '') }}</em> Erstimpfungen und <em>{{ '{:n}'.format(data_second_vaccination['extrapolation_mean_seven_days']['rate_int']).replace('.', '') }}</em> Zweitimpfungen pro Tag vorgenommen (<em>{{ '{:n}'.format(data_first_vaccination['extrapolation_mean_seven_days']['rate_int'] * 7).replace('.', '') }}</em>/<em>{{ '{:n}'.format(data_second_vaccination['extrapolation_mean_seven_days']['rate_int'] * 7).replace('.', '') }}</em> pro Woche).

84
plot.py
View file

@ -52,28 +52,33 @@ plt.rcParams["figure.figsize"] = [11.69, 8.27]
# Download # Download
data_filename = '{}/{}_Impfquotenmonitoring.xlsx'.format(data_folder, filename_now) def download_rki(filename_prefix):
data_filename = '{}/{}_Impfquotenmonitoring.xlsx'.format(data_folder, filename_prefix)
r = req.get('https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Daten/Impfquotenmonitoring.xlsx?__blob=publicationFile') r = req.get('https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Daten/Impfquotenmonitoring.xlsx?__blob=publicationFile')
with open(data_filename, 'wb') as outfile: with open(data_filename, 'wb') as outfile:
outfile.write(r.content) outfile.write(r.content)
#data_filename = 'data/20210118151908_Impfquotenmonitoring.xlsx' return data_filename
rki_file = pd.read_excel(data_filename, sheet_name=None, engine='openpyxl') data_filename = download_rki(filename_now)
raw_data = rki_file['Impfungen_proTag'] def parse_rki(filename):
impfungen = raw_data[:-1].dropna(subset=['Datum']).fillna(0) rki_file = pd.read_excel(filename, sheet_name=None, engine='openpyxl')
impfungen.drop(impfungen.tail(1).index,inplace=True) # remove Gesamt row raw_data = rki_file['Impfungen_proTag']
dates = impfungen['Datum'] impfungen = raw_data[:-1].dropna(subset=['Datum']).fillna(0)
start_of_reporting_date = dates.iloc[0].date() impfungen.drop(impfungen.tail(1).index,inplace=True) # remove Gesamt row
def calculate_vaccination_data(data): dates = impfungen['Datum']
start_of_reporting_date = dates.iloc[0].date()
def calculate_vaccination_data(data):
total = int(np.sum(data)) total = int(np.sum(data))
total_percentage = float(total) / einwohner_deutschland * 100 total_percentage = float(total) / einwohner_deutschland * 100
@ -103,10 +108,9 @@ def calculate_vaccination_data(data):
else: else:
vaccinations_by_week[w] = v vaccinations_by_week[w] = v
def extrapolate(rate, to_be_vaccinated): def extrapolate(rate, to_be_vaccinated):
days_extrapolated = int(np.ceil(to_be_vaccinated / rate)) days_extrapolated = int(np.ceil(to_be_vaccinated / rate))
days_extrapolated_herd_immunity = int(np.ceil((einwohner_deutschland * 0.7 - total) / rate)) days_extrapolated_herd_immunity = int(np.ceil((einwohner_deutschland * herd_immunity - total) / rate))
weeks_extrapolated = int(np.ceil(days_extrapolated / 7)) weeks_extrapolated = int(np.ceil(days_extrapolated / 7))
weeks_extrapolated_herd_immunity = int(np.ceil(days_extrapolated_herd_immunity / 7)) weeks_extrapolated_herd_immunity = int(np.ceil(days_extrapolated_herd_immunity / 7))
@ -138,7 +142,7 @@ def calculate_vaccination_data(data):
mean_vaccination_rates_daily = np.round(cumulative / range(1, len(cumulative) + 1)) mean_vaccination_rates_daily = np.round(cumulative / range(1, len(cumulative) + 1))
vaccination_rates_daily_rolling_average = data.rolling(7).mean() vaccination_rates_daily_rolling_average = data.rolling(7).mean()
vaccinations_missing_until_target = einwohner_deutschland * 0.7 - total vaccinations_missing_until_target = einwohner_deutschland * herd_immunity - total
vaccination_rate_needed_for_target = vaccinations_missing_until_target / days_until_target vaccination_rate_needed_for_target = vaccinations_missing_until_target / days_until_target
vaccination_rate_needed_for_target_percentage = mean_all_time / vaccination_rate_needed_for_target * 100 vaccination_rate_needed_for_target_percentage = mean_all_time / vaccination_rate_needed_for_target * 100
@ -170,32 +174,36 @@ def calculate_vaccination_data(data):
'vaccinations_last_week_vaccination_percentage': vaccinations_by_week[Week.thisweek() - 1] / total * 100 'vaccinations_last_week_vaccination_percentage': vaccinations_by_week[Week.thisweek() - 1] / total * 100
} }
if 'Erstimpfung' in impfungen: if 'Erstimpfung' in impfungen:
raw_first_vaccinations = impfungen['Erstimpfung'] raw_first_vaccinations = impfungen['Erstimpfung']
elif 'Einmal geimpft' in impfungen: elif 'Einmal geimpft' in impfungen:
raw_first_vaccinations = impfungen['Einmal geimpft'] raw_first_vaccinations = impfungen['Einmal geimpft']
elif 'Begonnene Impfserie' in impfungen: elif 'Begonnene Impfserie' in impfungen:
raw_first_vaccinations = impfungen['Begonnene Impfserie'] raw_first_vaccinations = impfungen['Begonnene Impfserie']
if 'Zweitimpfung' in impfungen: if 'Zweitimpfung' in impfungen:
raw_second_vaccinations = impfungen['Zweitimpfung'] raw_second_vaccinations = impfungen['Zweitimpfung']
elif 'Vollständig geimpft' in impfungen: elif 'Vollständig geimpft' in impfungen:
raw_second_vaccinations = impfungen['Vollständig geimpft'] raw_second_vaccinations = impfungen['Vollständig geimpft']
data_first_vaccination = calculate_vaccination_data(raw_first_vaccinations) data_first_vaccination = calculate_vaccination_data(raw_first_vaccinations)
data_second_vaccination = calculate_vaccination_data(raw_second_vaccinations) data_second_vaccination = calculate_vaccination_data(raw_second_vaccinations)
# Stand aus Daten auslesen # Stand aus Daten auslesen
#stand = dates.iloc[-1] #stand = dates.iloc[-1]
#print_stand = stand.isoformat() #print_stand = stand.isoformat()
# Stand aus offiziellen Angaben auslesen # Stand aus offiziellen Angaben auslesen
stand = rki_file['Erläuterung'].iloc[1][0] stand = rki_file['Erläuterung'].iloc[1][0]
stand_regex = re.compile('^Datenstand: (\d\d.\d\d.\d\d\d\d, \d?\d:\d\d) Uhr$') stand_regex = re.compile('^Datenstand: (\d\d.\d\d.\d\d\d\d, \d?\d:\d\d) Uhr$')
m = stand_regex.match(stand) m = stand_regex.match(stand)
stand_date = datetime.datetime.strptime(m.groups()[0], '%d.%m.%Y, %H:%M') stand_date = datetime.datetime.strptime(m.groups()[0], '%d.%m.%Y, %H:%M')
print_stand = stand_date.isoformat() print_stand = stand_date.isoformat()
return dates, start_of_reporting_date, data_first_vaccination, data_second_vaccination, stand_date, print_stand
dates, start_of_reporting_date, data_first_vaccination, data_second_vaccination, stand_date, print_stand = parse_rki(filename=data_filename)
filename_stand = stand_date.strftime("%Y%m%d%H%M%S") filename_stand = stand_date.strftime("%Y%m%d%H%M%S")
@ -678,8 +686,8 @@ def plot_vaccination_done_days():
) )
d = data_first_vaccination d = data_first_vaccination
days_remaining_daily = np.ceil((einwohner_deutschland * 0.7 - d['cumulative']) / (d['mean_vaccination_rates_daily'])) days_remaining_daily = np.ceil((einwohner_deutschland * herd_immunity - d['cumulative']) / (d['mean_vaccination_rates_daily']))
days_remaining_rolling = np.ceil((einwohner_deutschland * 0.7 - d['cumulative']) / (d['vaccination_rates_daily_rolling_average'])) 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_xlim(start_of_reporting_date, today)
ax.set_ylim(0, 2500) ax.set_ylim(0, 2500)
@ -722,8 +730,8 @@ def plot_vaccination_done_weeks():
) )
d = data_first_vaccination d = data_first_vaccination
weeks_remaining_daily = np.ceil((einwohner_deutschland * 0.7 - d['cumulative']) / (d['mean_vaccination_rates_daily'])) / 7 weeks_remaining_daily = np.ceil((einwohner_deutschland * herd_immunity - d['cumulative']) / (d['mean_vaccination_rates_daily'])) / 7
weeks_remaining_rolling = np.ceil((einwohner_deutschland * 0.7 - d['cumulative']) / (d['vaccination_rates_daily_rolling_average'])) / 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_xlim(datetime.date(2021, 3, 1), today)
ax.set_ylim(0, 52) ax.set_ylim(0, 52)
@ -765,8 +773,8 @@ def plot_vaccination_done_dates():
) )
d = data_first_vaccination d = data_first_vaccination
days_remaining_daily = np.ceil((einwohner_deutschland * 0.7 - d['cumulative']) / (d['mean_vaccination_rates_daily'])) days_remaining_daily = np.ceil((einwohner_deutschland * herd_immunity - d['cumulative']) / (d['mean_vaccination_rates_daily']))
days_remaining_rolling = np.ceil((einwohner_deutschland * 0.7 - d['cumulative']) / (d['vaccination_rates_daily_rolling_average'])) days_remaining_rolling = np.ceil((einwohner_deutschland * herd_immunity - d['cumulative']) / (d['vaccination_rates_daily_rolling_average']))
dates_daily = [today + datetime.timedelta(days) for days in days_remaining_daily] 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()] dates_rolling = [today + datetime.timedelta(days) for days in days_remaining_rolling.dropna()]
@ -811,8 +819,8 @@ def plot_vaccination_done_dates_detail():
) )
d = data_first_vaccination d = data_first_vaccination
days_remaining_daily = np.ceil((einwohner_deutschland * 0.7 - d['cumulative']) / (d['mean_vaccination_rates_daily'])) days_remaining_daily = np.ceil((einwohner_deutschland * herd_immunity - d['cumulative']) / (d['mean_vaccination_rates_daily']))
days_remaining_rolling = np.ceil((einwohner_deutschland * 0.7 - d['cumulative']) / (d['vaccination_rates_daily_rolling_average'])) days_remaining_rolling = np.ceil((einwohner_deutschland * herd_immunity - d['cumulative']) / (d['vaccination_rates_daily_rolling_average']))
dates_daily = [today + datetime.timedelta(days) for days in days_remaining_daily] 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()] dates_rolling = [today + datetime.timedelta(days) for days in days_remaining_rolling.dropna()]