Compare commits
2 commits
3e19d3462a
...
8a3c5159b5
Author | SHA1 | Date | |
---|---|---|---|
|
8a3c5159b5 | ||
|
a3bf0654f9 |
2 changed files with 110 additions and 117 deletions
|
@ -173,124 +173,21 @@
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<h1>Plots</h1>
|
<h1>Plots</h1>
|
||||||
|
{% for fig in figures %}
|
||||||
<figure>
|
<figure>
|
||||||
<a href="extrapolated_to_10_percent.png">
|
<a href="{{ fig['filename'] }}.png">
|
||||||
<img
|
<img
|
||||||
src="extrapolated_to_10_percent.png"
|
src="{{ fig['filename'] }}.png"
|
||||||
alt="" />
|
alt="{{ fig['caption'] }}" />
|
||||||
</a>
|
</a>
|
||||||
<figcaption>
|
<figcaption>
|
||||||
<a name="figure-001"><span class="ref">Abbildung 1:</span></a>
|
<a name="figure-{{ '{:03d}'.format(fig['index']) }}"><span class="ref">Abbildung {{ fig['index'] }}:</span></a>
|
||||||
Tägliche Impfquote, kumulierte Impfungen und lineare Extrapolation bis 10 % der Bevölkerung Deutschlands<br />
|
{{ fig['caption'] }}<br />
|
||||||
<a href="extrapolated_to_10_percent.png" download="extrapolated_to_10_percent.png">Download als PNG</a>
|
<a href="{{ fig['filename'] }}.png" download="{{ fig['filename'] }}.png">Download als PNG</a>
|
||||||
<a href="extrapolated_to_10_percent.pdf" download="extrapolated_to_10_percent.pdf">Download als PDF</a>
|
<a href="{{ fig['filename'] }}.pdf" download="{{ fig['filename'] }}.pdf">Download als PDF</a>
|
||||||
</figcaption>
|
|
||||||
</figure>
|
|
||||||
|
|
||||||
<figure>
|
|
||||||
<a href="extrapolated_to_70_percent.png">
|
|
||||||
<img
|
|
||||||
src="extrapolated_to_70_percent.png"
|
|
||||||
alt="" />
|
|
||||||
</a>
|
|
||||||
<figcaption>
|
|
||||||
<a name="figure-002"><span class="ref">Abbildung 2:</span></a>
|
|
||||||
Tägliche Impfquote, kumulierte Impfungen und lineare Extrapolation bis 70 % der Bevölkerung Deutschlands<br />
|
|
||||||
<a href="extrapolated_to_70_percent.png" download="extrapolated_to_70_percent.png">Download als PNG</a>
|
|
||||||
<a href="extrapolated_to_70_percent.pdf" download="extrapolated_to_70_percent.pdf">Download als PDF</a>
|
|
||||||
</figcaption>
|
|
||||||
</figure>
|
|
||||||
<figure>
|
|
||||||
<a href="extrapolated_to_100_percent.png">
|
|
||||||
<img
|
|
||||||
src="extrapolated_to_100_percent.png"
|
|
||||||
alt="" />
|
|
||||||
</a>
|
|
||||||
<figcaption>
|
|
||||||
<a name="figure-003"><span class="ref">Abbildung 3:</span></a>
|
|
||||||
Tägliche Impfquote, kumulierte Impfungen und lineare Extrapolation bis 100 % der Bevölkerung Deutschlands<br />
|
|
||||||
<a href="extrapolated_to_100_percent.png" download="extrapolated_to_100_percent.png">Download als PNG</a>
|
|
||||||
<a href="extrapolated_to_100_percent.pdf" download="extrapolated_to_100_percent.pdf">Download als PDF</a>
|
|
||||||
</figcaption>
|
|
||||||
</figure>
|
|
||||||
<figure>
|
|
||||||
<a href="vaccination_bar_graph_total_time.png">
|
|
||||||
<img
|
|
||||||
src="vaccination_bar_graph_total_time.png"
|
|
||||||
alt="" />
|
|
||||||
</a>
|
|
||||||
<figcaption>
|
|
||||||
<a name="figure-004"><span class="ref">Abbildung 4:</span></a>
|
|
||||||
Tägliche Impfrate (Erst- und Zweitimpfung übereinander)<br />
|
|
||||||
<a href="vaccination_bar_graph_total_time.png" download="vaccination_bar_graph_total_time.png">Download als PNG</a>
|
|
||||||
<a href="vaccination_bar_graph_total_time.pdf" download="vaccination_bar_graph_total_time.pdf">Download als PDF</a>
|
|
||||||
</figcaption>
|
|
||||||
</figure>
|
|
||||||
<figure>
|
|
||||||
<a href="vaccination_bar_graph_total_time_two_bars.png">
|
|
||||||
<img
|
|
||||||
src="vaccination_bar_graph_total_time_two_bars.png"
|
|
||||||
alt="" />
|
|
||||||
</a>
|
|
||||||
<figcaption>
|
|
||||||
<a name="figure-005"><span class="ref">Abbildung 5:</span></a>
|
|
||||||
Tägliche Impfrate (Erst- und Zweitimpfung nebeneinander)<br />
|
|
||||||
<a href="vaccination_bar_graph_total_time_two_bars.png" download="vaccination_bar_graph_total_time_two_bars.png">Download als PNG</a>
|
|
||||||
<a href="vaccination_bar_graph_total_time_two_bars.pdf" download="vaccination_bar_graph_total_time_two_bars.pdf">Download als PDF</a>
|
|
||||||
</figcaption>
|
|
||||||
</figure>
|
|
||||||
<figure>
|
|
||||||
<a href="vaccination_bar_graph_compare_both_vaccinations.png">
|
|
||||||
<img
|
|
||||||
src="vaccination_bar_graph_compare_both_vaccinations.png"
|
|
||||||
alt="" />
|
|
||||||
</a>
|
|
||||||
<figcaption>
|
|
||||||
<a name="figure-006"><span class="ref">Abbildung 6:</span></a>
|
|
||||||
Tägliche Impfrate (Erst- und Zweitimpfung nebeneinander)<br />
|
|
||||||
<a href="vaccination_bar_graph_compare_both_vaccinations.png" download="vaccination_bar_graph_compare_both_vaccinations.png">Download als PNG</a>
|
|
||||||
<a href="vaccination_bar_graph_compare_both_vaccinations.pdf" download="vaccination_bar_graph_compare_both_vaccinations.pdf">Download als PDF</a>
|
|
||||||
</figcaption>
|
|
||||||
</figure>
|
|
||||||
<figure>
|
|
||||||
<a href="cumulative_two_vaccinations.png">
|
|
||||||
<img
|
|
||||||
src="cumulative_two_vaccinations.png"
|
|
||||||
alt="" />
|
|
||||||
</a>
|
|
||||||
<figcaption>
|
|
||||||
<a name="figure-007"><span class="ref">Abbildung 7:</span></a>
|
|
||||||
Kumulative Impfrate (Erst- und Zweitimpfung)<br />
|
|
||||||
<a href="cumulative_two_vaccinations.png" download="cumulative_two_vaccinations.png">Download als PNG</a>
|
|
||||||
<a href="cumulative_two_vaccinations.pdf" download="cumulative_two_vaccinations.pdf">Download als PDF</a>
|
|
||||||
</figcaption>
|
|
||||||
</figure>
|
|
||||||
<figure>
|
|
||||||
<a href="cumulative_two_vaccinations_percentage.png">
|
|
||||||
<img
|
|
||||||
src="cumulative_two_vaccinations_percentage.png"
|
|
||||||
alt="" />
|
|
||||||
</a>
|
|
||||||
<figcaption>
|
|
||||||
<a name="figure-008"><span class="ref">Abbildung 8:</span></a>
|
|
||||||
Kumulative Impfrate (Erst- und Zweitimpfung) in Prozent der Bevölkerung Deutschlands<sup><a href="#footnote-002">2</a></sup><br />
|
|
||||||
<a href="cumulative_two_vaccinations_percentage.png" download="cumulative_two_vaccinations_percentage.png">Download als PNG</a>
|
|
||||||
<a href="cumulative_two_vaccinations_percentage.pdf" download="cumulative_two_vaccinations_percentage.pdf">Download als PDF</a>
|
|
||||||
</figcaption>
|
|
||||||
</figure>
|
|
||||||
<figure>
|
|
||||||
<a href="people_between_first_and_second.png">
|
|
||||||
<img
|
|
||||||
src="people_between_first_and_second.png"
|
|
||||||
alt="" />
|
|
||||||
</a>
|
|
||||||
<figcaption>
|
|
||||||
<a name="figure-009"><span class="ref">Abbildung 9:</span></a>
|
|
||||||
Anzahl der Personen zwischen Erst- und Zweitimpfung, also Personen, die die erste Impfung erhalten haben, die zweite aber noch nicht<br />
|
|
||||||
<a href="people_between_first_and_second.png" download="people_between_first_and_second.png">Download als PNG</a>
|
|
||||||
<a href="people_between_first_and_second.pdf" download="people_between_first_and_second.pdf">Download als PDF</a>
|
|
||||||
</figcaption>
|
</figcaption>
|
||||||
</figure>
|
</figure>
|
||||||
|
{% endfor %}
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
|
|
106
plot.py
106
plot.py
|
@ -14,6 +14,7 @@ import requests as req
|
||||||
import locale
|
import locale
|
||||||
import os.path
|
import os.path
|
||||||
import shutil
|
import shutil
|
||||||
|
import math
|
||||||
|
|
||||||
from matplotlib.dates import date2num
|
from matplotlib.dates import date2num
|
||||||
import matplotlib.ticker as mtick
|
import matplotlib.ticker as mtick
|
||||||
|
@ -67,7 +68,6 @@ dates = impfungen['Datum']
|
||||||
start_of_reporting_date = dates.iloc[0].date()
|
start_of_reporting_date = dates.iloc[0].date()
|
||||||
|
|
||||||
def calculate_vaccination_data(data):
|
def calculate_vaccination_data(data):
|
||||||
cumulative = np.cumsum(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
|
||||||
|
@ -80,7 +80,11 @@ def calculate_vaccination_data(data):
|
||||||
days_since_start_of_vaccination = (last_date - start_of_vaccination_date).days
|
days_since_start_of_vaccination = (last_date - start_of_vaccination_date).days
|
||||||
days_since_start_of_reporting = (last_date - start_of_reporting_date).days
|
days_since_start_of_reporting = (last_date - start_of_reporting_date).days
|
||||||
|
|
||||||
mean_all_time = np.mean(data[start_of_vaccination_index:])
|
valid_data = data[start_of_vaccination_index:]
|
||||||
|
|
||||||
|
cumulative = np.concatenate(([math.nan] * (days_since_start_of_reporting - days_since_start_of_vaccination), np.cumsum(valid_data)))
|
||||||
|
|
||||||
|
mean_all_time = np.mean(valid_data)
|
||||||
mean_seven_days = np.mean(data[-7:])
|
mean_seven_days = np.mean(data[-7:])
|
||||||
|
|
||||||
def extrapolate(rate, to_be_vaccinated):
|
def extrapolate(rate, to_be_vaccinated):
|
||||||
|
@ -110,7 +114,7 @@ def calculate_vaccination_data(data):
|
||||||
extrapolation_mean_seven_days = extrapolate(mean_seven_days, 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 = 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 * 0.7 - 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
|
||||||
|
@ -131,6 +135,7 @@ def calculate_vaccination_data(data):
|
||||||
'extrapolation_last_rate': extrapolation_last_rate,
|
'extrapolation_last_rate': extrapolation_last_rate,
|
||||||
'extrapolation_mean_seven_days': extrapolation_mean_seven_days,
|
'extrapolation_mean_seven_days': extrapolation_mean_seven_days,
|
||||||
'mean_vaccination_rates_daily': mean_vaccination_rates_daily,
|
'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)),
|
'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': int(np.floor(vaccination_rate_needed_for_target)),
|
||||||
'vaccination_rate_needed_for_target_percentage': vaccination_rate_needed_for_target_percentage
|
'vaccination_rate_needed_for_target_percentage': vaccination_rate_needed_for_target_percentage
|
||||||
|
@ -506,7 +511,7 @@ def plot_cumulative_two_vaccinations():
|
||||||
ax.fill_between(dates, first_vaccinations_cumulative, label='Erstimpfungen', color='blue')
|
ax.fill_between(dates, first_vaccinations_cumulative, label='Erstimpfungen', color='blue')
|
||||||
ax.fill_between(dates, second_vaccinations_cumulative, label='Zweitimpfungen', color='lightblue')
|
ax.fill_between(dates, second_vaccinations_cumulative, label='Zweitimpfungen', color='lightblue')
|
||||||
|
|
||||||
ax.set_ylim([0, first_vaccinations_cumulative.iloc[-1]])
|
ax.set_ylim([0, first_vaccinations_cumulative[-1]])
|
||||||
|
|
||||||
ax.legend(loc='upper left')
|
ax.legend(loc='upper left')
|
||||||
ax.xaxis_date()
|
ax.xaxis_date()
|
||||||
|
@ -597,7 +602,7 @@ def plot_people_between_first_and_second():
|
||||||
ax.grid()
|
ax.grid()
|
||||||
|
|
||||||
first_vaccinations_cumulative = data_first_vaccination['cumulative']
|
first_vaccinations_cumulative = data_first_vaccination['cumulative']
|
||||||
second_vaccinations_cumulative = data_second_vaccination['cumulative']
|
second_vaccinations_cumulative = np.nan_to_num(data_second_vaccination['cumulative'], nan=0)
|
||||||
|
|
||||||
people_between = first_vaccinations_cumulative - second_vaccinations_cumulative
|
people_between = first_vaccinations_cumulative - second_vaccinations_cumulative
|
||||||
|
|
||||||
|
@ -625,6 +630,54 @@ def plot_people_between_first_and_second():
|
||||||
|
|
||||||
plot_people_between_first_and_second()
|
plot_people_between_first_and_second()
|
||||||
|
|
||||||
|
def plot_vaccination_rate():
|
||||||
|
|
||||||
|
archive_plot_filename = '{}/vaccination_rate'.format(archive_folder)
|
||||||
|
latest_plot_filename = '{}/vaccination_rate'.format(site_folder)
|
||||||
|
|
||||||
|
#if os.path.isfile(archive_plot_filename + '.pdf'):
|
||||||
|
#print('Plot {} already exists'.format(archive_plot_filename))
|
||||||
|
#return
|
||||||
|
|
||||||
|
fig, ax = plt.subplots(1)
|
||||||
|
|
||||||
|
|
||||||
|
plt.title(
|
||||||
|
'Tägliche Impfrate sowie durchschnittliche Impfrate\n'
|
||||||
|
'Datenquelle: RKI, Stand: {}. Erstellung: {}, Ersteller: Benedikt Bastin, Lizenz: CC BY-SA 4.0\n'.format(
|
||||||
|
print_stand, print_today
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
ax.plot(dates, data_first_vaccination['daily'], label='Tägliche Erstimpfrate', color='blue', linewidth=0.5)
|
||||||
|
ax.plot(dates, data_second_vaccination['daily'], label='Tägliche Zweitimpfrate', color='lightblue', linewidth=0.5)
|
||||||
|
|
||||||
|
ax.plot(dates, data_first_vaccination['vaccination_rates_daily_rolling_average'], color='blue', linewidth=2, label='Erstimpfrate über sieben Tage')
|
||||||
|
ax.plot(dates, data_second_vaccination['vaccination_rates_daily_rolling_average'], color='lightblue', linewidth=2, label='Zweitimpfrate über sieben Tage')
|
||||||
|
|
||||||
|
|
||||||
|
ax.plot(dates, data_first_vaccination['mean_vaccination_rates_daily'], color='violet', label='Durchschnittliche Erstimpfrate\nbis zu diesem Tag (inkl.)')
|
||||||
|
ax.plot(dates, data_second_vaccination['mean_vaccination_rates_daily'], color='magenta', label='Durchschnittliche Zweitimpfrate\nbis zu diesem Tag (inkl.)')
|
||||||
|
|
||||||
|
|
||||||
|
ax.grid(True)
|
||||||
|
|
||||||
|
|
||||||
|
ax.legend(loc='upper left')
|
||||||
|
ax.get_yaxis().get_major_formatter().set_scientific(False)
|
||||||
|
|
||||||
|
ax.set_xlabel('Datum')
|
||||||
|
ax.set_ylabel('Impfrate [Impfungen/Tag]')
|
||||||
|
|
||||||
|
plt.savefig(archive_plot_filename + '.pdf')
|
||||||
|
plt.savefig(archive_plot_filename + '.png')
|
||||||
|
plt.savefig(latest_plot_filename + '.pdf')
|
||||||
|
plt.savefig(latest_plot_filename + '.png')
|
||||||
|
plt.close()
|
||||||
|
|
||||||
|
print('Created plot {} as pdf and png'.format(archive_plot_filename))
|
||||||
|
|
||||||
|
plot_vaccination_rate()
|
||||||
|
|
||||||
def render_dashboard():
|
def render_dashboard():
|
||||||
dashboard_filename = 'site/index.xhtml'
|
dashboard_filename = 'site/index.xhtml'
|
||||||
|
@ -664,6 +717,49 @@ def render_dashboard():
|
||||||
data_second_vaccination = data_second_vaccination,
|
data_second_vaccination = data_second_vaccination,
|
||||||
#details_per_land = dict(sorted(details_per_land_formatted.items(), key=lambda item: item[0])),
|
#details_per_land = dict(sorted(details_per_land_formatted.items(), key=lambda item: item[0])),
|
||||||
#details_total = details_total_formatted
|
#details_total = details_total_formatted
|
||||||
|
figures = [
|
||||||
|
{
|
||||||
|
'index': 1,
|
||||||
|
'filename': 'extrapolated_to_10_percent',
|
||||||
|
'caption': 'Tägliche Impfquote, kumulierte Impfungen und lineare Extrapolation bis 10 % der Bevölkerung Deutschlands'
|
||||||
|
},{
|
||||||
|
'index': 2,
|
||||||
|
'filename': 'extrapolated_to_70_percent',
|
||||||
|
'caption': 'Tägliche Impfquote, kumulierte Impfungen und lineare Extrapolation bis 70 % der Bevölkerung Deutschlands'
|
||||||
|
},{
|
||||||
|
'index': 3,
|
||||||
|
'filename': 'extrapolated_to_100_percent',
|
||||||
|
'caption': 'Tägliche Impfquote, kumulierte Impfungen und lineare Extrapolation bis 100 % der Bevölkerung Deutschlands'
|
||||||
|
},{
|
||||||
|
'index': 4,
|
||||||
|
'filename': 'vaccination_bar_graph_total_time',
|
||||||
|
'caption': 'Tägliche Impfrate (Erst- und Zweitimpfung übereinander)'
|
||||||
|
},{
|
||||||
|
'index': 5,
|
||||||
|
'filename': 'vaccination_bar_graph_total_time_two_bars',
|
||||||
|
'caption': 'Tägliche Impfrate (Erst- und Zweitimpfung nebeneinander)'
|
||||||
|
},{
|
||||||
|
'index': 6,
|
||||||
|
'filename': 'vaccination_bar_graph_compare_both_vaccinations',
|
||||||
|
'caption': 'Tägliche Impfrate (Erst- und Zweitimpfung nebeneinander)'
|
||||||
|
},{
|
||||||
|
'index': 7,
|
||||||
|
'filename': 'cumulative_two_vaccinations',
|
||||||
|
'caption': 'Kumulative Impfrate (Erst- und Zweitimpfung)'
|
||||||
|
},{
|
||||||
|
'index': 8,
|
||||||
|
'filename': 'cumulative_two_vaccinations_percentage',
|
||||||
|
'caption': 'Kumulative Impfrate (Erst- und Zweitimpfung) in Prozent der Bevölkerung Deutschlands'
|
||||||
|
},{
|
||||||
|
'index': 9,
|
||||||
|
'filename': 'people_between_first_and_second',
|
||||||
|
'caption': 'Anzahl der Personen zwischen Erst- und Zweitimpfung, also Personen, die die erste Impfung erhalten haben, die zweite aber noch nicht'
|
||||||
|
},{
|
||||||
|
'index': 10,
|
||||||
|
'filename': 'vaccination_rate',
|
||||||
|
'caption': 'Tägliche Impfrate sowie durchschnittliche Impfrate'
|
||||||
|
}
|
||||||
|
]
|
||||||
).dump('site/index.xhtml')
|
).dump('site/index.xhtml')
|
||||||
|
|
||||||
shutil.copyfile(dashboard_filename, dashboard_archive_filename)
|
shutil.copyfile(dashboard_filename, dashboard_archive_filename)
|
||||||
|
|
Loading…
Reference in a new issue