From e13e8f1df6251a74d044335eda83dd69bc3ebc87 Mon Sep 17 00:00:00 2001
From: Benedikt Bastin <benedikt@benedikt-bastin.de>
Date: Thu, 29 Apr 2021 13:28:55 +0200
Subject: [PATCH 1/3] fix: Replaced magic number herd immunity with variable

---
 plot.py | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/plot.py b/plot.py
index 6a53770..ca17b76 100644
--- a/plot.py
+++ b/plot.py
@@ -103,10 +103,9 @@ def calculate_vaccination_data(data):
 		else:
 			vaccinations_by_week[w] = v
 
-
 	def extrapolate(rate, to_be_vaccinated):
 		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_herd_immunity = int(np.ceil(days_extrapolated_herd_immunity / 7))
@@ -138,7 +137,7 @@ def calculate_vaccination_data(data):
 	mean_vaccination_rates_daily  = np.round(cumulative / range(1, len(cumulative) + 1))
 	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_percentage = mean_all_time / vaccination_rate_needed_for_target * 100
 
@@ -678,8 +677,8 @@ def plot_vaccination_done_days():
 	)
 	d = data_first_vaccination
 
-	days_remaining_daily = np.ceil((einwohner_deutschland * 0.7 - 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_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)
@@ -722,8 +721,8 @@ def plot_vaccination_done_weeks():
 	)
 	d = data_first_vaccination
 
-	weeks_remaining_daily = np.ceil((einwohner_deutschland * 0.7 - 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_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)
@@ -765,8 +764,8 @@ def plot_vaccination_done_dates():
 	)
 	d = data_first_vaccination
 
-	days_remaining_daily = np.ceil((einwohner_deutschland * 0.7 - 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_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']))
 
 	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()]
@@ -811,8 +810,8 @@ def plot_vaccination_done_dates_detail():
 	)
 	d = data_first_vaccination
 
-	days_remaining_daily = np.ceil((einwohner_deutschland * 0.7 - 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_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']))
 
 	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()]

From 0e0ad8bc0f2b18de2828e2e6433a584698533ca0 Mon Sep 17 00:00:00 2001
From: Benedikt Bastin <benedikt@benedikt-bastin.de>
Date: Thu, 29 Apr 2021 13:50:48 +0200
Subject: [PATCH 2/3] fix: Refactored parts of the script into functions

---
 plot.py | 227 +++++++++++++++++++++++++++++---------------------------
 1 file changed, 118 insertions(+), 109 deletions(-)

diff --git a/plot.py b/plot.py
index ca17b76..b1634c0 100644
--- a/plot.py
+++ b/plot.py
@@ -52,149 +52,158 @@ plt.rcParams["figure.figsize"] = [11.69, 8.27]
 
 # 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:
-	outfile.write(r.content)
+	with open(data_filename, 'wb') as outfile:
+		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']
 
-	total = int(np.sum(data))
-	total_percentage = float(total) / einwohner_deutschland * 100
+	start_of_reporting_date = dates.iloc[0].date()
 
-	to_be_vaccinated = einwohner_deutschland - total
+	def calculate_vaccination_data(data):
 
-	last_date = dates.iloc[-1].date()
-	start_of_vaccination_index = (data != 0).argmax(axis=0)
-	start_of_vaccination_date = dates[start_of_vaccination_index].date()
-	days_since_start_of_vaccination = (last_date - start_of_vaccination_date).days
-	days_since_start_of_reporting = (last_date - start_of_reporting_date).days
+		total = int(np.sum(data))
+		total_percentage = float(total) / einwohner_deutschland * 100
 
-	valid_data = data[start_of_vaccination_index:]
+		to_be_vaccinated = einwohner_deutschland - total
 
-	cumulative = np.concatenate(([math.nan] * (days_since_start_of_reporting - days_since_start_of_vaccination), np.cumsum(valid_data)))
+		last_date = dates.iloc[-1].date()
+		start_of_vaccination_index = (data != 0).argmax(axis=0)
+		start_of_vaccination_date = dates[start_of_vaccination_index].date()
+		days_since_start_of_vaccination = (last_date - start_of_vaccination_date).days
+		days_since_start_of_reporting = (last_date - start_of_reporting_date).days
 
-	mean_all_time = np.mean(valid_data)
-	mean_seven_days = np.mean(data[-7:])
+		valid_data = data[start_of_vaccination_index:]
 
-	vaccinations_by_week_map = map(lambda x: (Week.withdate(x[0]), x[1]), zip(dates, data))
+		cumulative = np.concatenate(([math.nan] * (days_since_start_of_reporting - days_since_start_of_vaccination), np.cumsum(valid_data)))
 
-	vaccinations_by_week = {}
+		mean_all_time = np.mean(valid_data)
+		mean_seven_days = np.mean(data[-7:])
 
-	for w, v in vaccinations_by_week_map:
-		if w in vaccinations_by_week:
-			vaccinations_by_week[w] = vaccinations_by_week[w] + v
-		else:
-			vaccinations_by_week[w] = v
+		vaccinations_by_week_map = map(lambda x: (Week.withdate(x[0]), x[1]), zip(dates, data))
 
-	def extrapolate(rate, to_be_vaccinated):
-		days_extrapolated = int(np.ceil(to_be_vaccinated / rate))
-		days_extrapolated_herd_immunity = int(np.ceil((einwohner_deutschland * herd_immunity - total) / rate))
+		vaccinations_by_week = {}
 
-		weeks_extrapolated = int(np.ceil(days_extrapolated / 7))
-		weeks_extrapolated_herd_immunity = int(np.ceil(days_extrapolated_herd_immunity / 7))
+		for w, v in vaccinations_by_week_map:
+			if w in vaccinations_by_week:
+				vaccinations_by_week[w] = vaccinations_by_week[w] + v
+			else:
+				vaccinations_by_week[w] = v
 
-		date_done = today + datetime.timedelta(days_extrapolated)
-		date_herd_immunity = today + datetime.timedelta(days_extrapolated_herd_immunity)
+		def extrapolate(rate, to_be_vaccinated):
+			days_extrapolated = int(np.ceil(to_be_vaccinated / rate))
+			days_extrapolated_herd_immunity = int(np.ceil((einwohner_deutschland * herd_immunity - total) / rate))
 
-		extrapolated_vaccinations = total + rate * range(-days_since_start_of_reporting, days_extrapolated - days_since_start_of_reporting)
+			weeks_extrapolated = int(np.ceil(days_extrapolated / 7))
+			weeks_extrapolated_herd_immunity = int(np.ceil(days_extrapolated_herd_immunity / 7))
+
+			date_done = today + datetime.timedelta(days_extrapolated)
+			date_herd_immunity = today + datetime.timedelta(days_extrapolated_herd_immunity)
+
+			extrapolated_vaccinations = total + rate * range(-days_since_start_of_reporting, days_extrapolated - days_since_start_of_reporting)
+
+			return {
+				'rate': rate,
+				'rate_int': int(np.round(rate)),
+				'days_extrapolated': days_extrapolated,
+				'days_extrapolated_herd_immunity': days_extrapolated_herd_immunity,
+				'weeks_extrapolated': weeks_extrapolated,
+				'weeks_extrapolated_herd_immunity': weeks_extrapolated_herd_immunity,
+				'date_done': date_done,
+				'date_done_str': date_done.strftime('%d. %B %Y'),
+				'date_herd_immunity': date_herd_immunity,
+				'date_herd_immunity_str': date_herd_immunity.strftime('%d. %B %Y'),
+				'extrapolated_vaccinations': extrapolated_vaccinations
+			}
+
+
+		extrapolation_mean_all_time = extrapolate(mean_all_time, to_be_vaccinated)
+		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))
+		vaccination_rates_daily_rolling_average = data.rolling(7).mean()
+
+		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_percentage = mean_all_time / vaccination_rate_needed_for_target * 100
 
 		return {
-			'rate': rate,
-			'rate_int': int(np.round(rate)),
-			'days_extrapolated': days_extrapolated,
-			'days_extrapolated_herd_immunity': days_extrapolated_herd_immunity,
-			'weeks_extrapolated': weeks_extrapolated,
-			'weeks_extrapolated_herd_immunity': weeks_extrapolated_herd_immunity,
-			'date_done': date_done,
-			'date_done_str': date_done.strftime('%d. %B %Y'),
-			'date_herd_immunity': date_herd_immunity,
-			'date_herd_immunity_str': date_herd_immunity.strftime('%d. %B %Y'),
-			'extrapolated_vaccinations': extrapolated_vaccinations
+			'daily': data,
+			'cumulative': cumulative,
+			'total': total,
+			'total_percentage': total_percentage,
+			'to_be_vaccinated': to_be_vaccinated,
+			'last_date': last_date,
+			'last_date_str': last_date.strftime('%d. %B %Y'),
+			'days_since_start': days_since_start_of_vaccination + 1, # Shift from zero to one-based-index
+			'start_of_vaccination_date': start_of_vaccination_date,
+			'start_of_vaccination_date_str': start_of_vaccination_date.strftime('%d. %B %Y'),
+			'vaccinations_by_week': vaccinations_by_week,
+			'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,
+			'vaccination_rates_daily_rolling_average': vaccination_rates_daily_rolling_average,
+			'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,
+			'vaccinations_last_day': data.iloc[-1],
+			'vaccinations_last_day_percentage': data.iloc[-1] / einwohner_deutschland * 100,
+			'vaccinations_last_day_vaccination_percentage': data.iloc[-1] / total * 100,
+			'vaccinations_last_week': vaccinations_by_week[Week.thisweek() - 1],
+			'vaccinations_last_week_percentage': vaccinations_by_week[Week.thisweek() - 1] / einwohner_deutschland * 100,
+			'vaccinations_last_week_vaccination_percentage': vaccinations_by_week[Week.thisweek() - 1] / total * 100
 		}
 
+	if 'Erstimpfung' in impfungen:
+		raw_first_vaccinations = impfungen['Erstimpfung']
+	elif 'Einmal geimpft' in impfungen:
+		raw_first_vaccinations = impfungen['Einmal geimpft']
+	elif 'Begonnene Impfserie' in impfungen:
+		raw_first_vaccinations = impfungen['Begonnene Impfserie']
 
-	extrapolation_mean_all_time = extrapolate(mean_all_time, to_be_vaccinated)
-	extrapolation_last_rate = extrapolate(data.iloc[-1], to_be_vaccinated)
-	extrapolation_mean_seven_days = extrapolate(mean_seven_days, to_be_vaccinated)
+	if 'Zweitimpfung' in impfungen:
+		raw_second_vaccinations = impfungen['Zweitimpfung']
+	elif 'Vollständig geimpft' in impfungen:
+		raw_second_vaccinations = impfungen['Vollständig geimpft']
 
-	mean_vaccination_rates_daily  = np.round(cumulative / range(1, len(cumulative) + 1))
-	vaccination_rates_daily_rolling_average = data.rolling(7).mean()
+	data_first_vaccination = calculate_vaccination_data(raw_first_vaccinations)
+	data_second_vaccination = calculate_vaccination_data(raw_second_vaccinations)
 
-	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_percentage = mean_all_time / vaccination_rate_needed_for_target * 100
+	# Stand aus Daten auslesen
+	#stand = dates.iloc[-1]
+	#print_stand = stand.isoformat()
 
-	return {
-		'daily': data,
-		'cumulative': cumulative,
-		'total': total,
-		'total_percentage': total_percentage,
-		'to_be_vaccinated': to_be_vaccinated,
-		'last_date': last_date,
-		'last_date_str': last_date.strftime('%d. %B %Y'),
-		'days_since_start': days_since_start_of_vaccination + 1, # Shift from zero to one-based-index
-		'start_of_vaccination_date': start_of_vaccination_date,
-		'start_of_vaccination_date_str': start_of_vaccination_date.strftime('%d. %B %Y'),
-		'vaccinations_by_week': vaccinations_by_week,
-		'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,
-		'vaccination_rates_daily_rolling_average': vaccination_rates_daily_rolling_average,
-		'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,
-		'vaccinations_last_day': data.iloc[-1],
-		'vaccinations_last_day_percentage': data.iloc[-1] / einwohner_deutschland * 100,
-		'vaccinations_last_day_vaccination_percentage': data.iloc[-1] / total * 100,
-		'vaccinations_last_week': vaccinations_by_week[Week.thisweek() - 1],
-		'vaccinations_last_week_percentage': vaccinations_by_week[Week.thisweek() - 1] / einwohner_deutschland * 100,
-		'vaccinations_last_week_vaccination_percentage': vaccinations_by_week[Week.thisweek() - 1] / total * 100
-	}
+	# Stand aus offiziellen Angaben auslesen
+	stand = rki_file['Erläuterung'].iloc[1][0]
 
-if 'Erstimpfung' in impfungen:
-	raw_first_vaccinations = impfungen['Erstimpfung']
-elif 'Einmal geimpft' in impfungen:
-	raw_first_vaccinations = impfungen['Einmal geimpft']
-elif 'Begonnene Impfserie' in impfungen:
-	raw_first_vaccinations = impfungen['Begonnene Impfserie']
+	stand_regex = re.compile('^Datenstand: (\d\d.\d\d.\d\d\d\d, \d?\d:\d\d) Uhr$')
+	m = stand_regex.match(stand)
+	stand_date = datetime.datetime.strptime(m.groups()[0], '%d.%m.%Y, %H:%M')
+	print_stand = stand_date.isoformat()
 
-if 'Zweitimpfung' in impfungen:
-	raw_second_vaccinations = impfungen['Zweitimpfung']
-elif 'Vollständig geimpft' in impfungen:
-	raw_second_vaccinations = impfungen['Vollständig geimpft']
+	return dates, start_of_reporting_date, data_first_vaccination, data_second_vaccination, stand_date, print_stand
 
-data_first_vaccination = calculate_vaccination_data(raw_first_vaccinations)
-data_second_vaccination = calculate_vaccination_data(raw_second_vaccinations)
-
-# Stand aus Daten auslesen
-#stand = dates.iloc[-1]
-#print_stand = stand.isoformat()
-
-# Stand aus offiziellen Angaben auslesen
-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$')
-m = stand_regex.match(stand)
-stand_date = datetime.datetime.strptime(m.groups()[0], '%d.%m.%Y, %H:%M')
-print_stand = stand_date.isoformat()
+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")
 

From fc650e120756650fd64baeba02673903d3b2c4ec Mon Sep 17 00:00:00 2001
From: Benedikt Bastin <benedikt@benedikt-bastin.de>
Date: Fri, 7 May 2021 14:02:48 +0200
Subject: [PATCH 3/3] fix: Added data about second vaccinations to data-text

---
 dashboard_template.xhtml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/dashboard_template.xhtml b/dashboard_template.xhtml
index 836d293..946337c 100644
--- a/dashboard_template.xhtml
+++ b/dashboard_template.xhtml
@@ -22,6 +22,8 @@
 			<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).
 				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 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).