From e15fb52f5bdbfab09d7a1a09dfe4252f11f11d40 Mon Sep 17 00:00:00 2001 From: Benedikt Bastin Date: Wed, 10 Feb 2021 17:45:52 +0100 Subject: [PATCH] feat: Added vaccination target and target statistics --- dashboard_template.xhtml | 30 ++++++++++++++++++++++++++++-- plot.py | 21 ++++++++++++++++++++- 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/dashboard_template.xhtml b/dashboard_template.xhtml index ac65787..028ce35 100644 --- a/dashboard_template.xhtml +++ b/dashboard_template.xhtml @@ -44,6 +44,18 @@ +
+

Aktuelles Impfziel

+

+ Das Impfziel von EU-Kommission4 und Bundesregierung ist, bis Ende des Sommers 70 % der Bevölkerung geimpft zu haben. + Bis zu diesem Ziel sind noch {{ '{:n}'.format(data_first_vaccination.vaccinations_missing_until_target).replace('.', ' ') }} Erstimpfungen nötig. +

+

+ Bis zum Ende des Sommers am {{ target_date_for_herd_immunity_str }} bleiben noch {{ days_until_target }} Tage5. + Um das Ziel pünktlich zu erreichen, müssten in dieser Zeit jeden Tag durchschnittlich {{ '{:n}'.format(data_first_vaccination.vaccination_rate_needed_for_target).replace('.', ' ') }} Erstimpfungen vorgenommen werden. + Die bisherige durchschnittliche Erstimpfrate liegt bei {{ '{:.3n}'.format(data_first_vaccination.vaccination_rate_needed_for_target_percentage ) }} % dieser Rate. +

+
-
  • Nicht alle Länder veröffentlichen alle in der Aufschlüsselung aufgelisteten Daten.
  • +
  • Quellen: + + Teilweise (wie auch in einigen dieser Quellen) wird von 70 % der erwachsenen Bevölkerung gesprochen, zur Vereinfachung wird hier dennoch die Gesamtbevölkerung zugrunde gelegt.
  • +
  • Von den verbleibenden Tagen wurden 21 Tage für die Zeit zwischen Erst- und Zweitimpfung abgezogen.
  • +
  • Nicht alle Länder veröffentlichen alle in der Aufschlüsselung aufgelisteten Daten.
  • diff --git a/plot.py b/plot.py index b33cfb4..412824b 100644 --- a/plot.py +++ b/plot.py @@ -23,11 +23,19 @@ data_folder = 'data/' einwohner_deutschland = 83190556 herd_immunity = 0.7 + today = datetime.date.today() print_today = today.isoformat() filename_now = datetime.datetime.now().strftime("%Y%m%d%H%M%S") + + +# https://www.tagesschau.de/ausland/europa/ursula-von-der-leyen-zu-corona-impfstoffen-101.html +target_date_for_herd_immunity = datetime.date(2021, 9, 22) +days_until_target = (target_date_for_herd_immunity - today).days - 21 + + # DIN A4 Plots plt.rcParams["figure.figsize"] = [11.69, 8.27] @@ -100,6 +108,11 @@ def calculate_vaccination_data(data): mean_vaccination_rates_daily = np.round(cumulative / range(1, len(cumulative) + 1)) + + vaccinations_missing_until_target = einwohner_deutschland * 0.7 - total + 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 + return { 'daily': data, 'cumulative': cumulative, @@ -114,7 +127,10 @@ def calculate_vaccination_data(data): 'extrapolation_mean_all_time': extrapolation_mean_all_time, 'extrapolation_last_rate': extrapolation_last_rate, 'extrapolation_mean_seven_days': extrapolation_mean_seven_days, - 'mean_vaccination_rates_daily': mean_vaccination_rates_daily + 'mean_vaccination_rates_daily': mean_vaccination_rates_daily, + 'vaccinations_missing_until_target': int(np.floor(vaccinations_missing_until_target)), + 'vaccination_rate_needed_for_target': int(np.floor(vaccination_rate_needed_for_target)), + 'vaccination_rate_needed_for_target_percentage': vaccination_rate_needed_for_target_percentage } @@ -638,6 +654,9 @@ def render_dashboard(): filename_stand = filename_stand, einwohner_deutschland = '{:n}'.format(einwohner_deutschland).replace('.', ' '), herd_immunity = '{:n}'.format(int(herd_immunity * 100)), + target_date_for_herd_immunity = target_date_for_herd_immunity, + target_date_for_herd_immunity_str = target_date_for_herd_immunity.strftime('%d. %B %Y'), + days_until_target = days_until_target, data_first_vaccination = data_first_vaccination, data_second_vaccination = data_second_vaccination, #details_per_land = dict(sorted(details_per_land_formatted.items(), key=lambda item: item[0])),