feat: Created dashboard and reworked folder structure
This commit is contained in:
parent
7cba369103
commit
38a9cb39e8
7 changed files with 300 additions and 16 deletions
129
plot.py
129
plot.py
|
@ -10,14 +10,15 @@ import re
|
|||
import requests as req
|
||||
import locale
|
||||
import os.path
|
||||
import shutil
|
||||
|
||||
locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
|
||||
|
||||
sources_folder = 'Quellen'
|
||||
plots_folder = 'Plots'
|
||||
|
||||
site_folder = 'site/'
|
||||
data_folder = 'data/'
|
||||
|
||||
einwohner_deutschland = 83190556
|
||||
herd_immunity = 0.7
|
||||
|
||||
today = datetime.date.today()
|
||||
print_today = today.isoformat()
|
||||
|
@ -30,17 +31,18 @@ plt.rcParams["figure.figsize"] = [11.69, 8.27]
|
|||
|
||||
# Download
|
||||
|
||||
filename = '{}/{}_Impfquotenmonitoring.xlsx'.format(sources_folder, filename_now)
|
||||
data_filename = '{}/{}_Impfquotenmonitoring.xlsx'.format(data_folder, filename_now)
|
||||
|
||||
r = req.get('https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Daten/Impfquotenmonitoring.xlsx?__blob=publicationFile')
|
||||
|
||||
with open(filename, 'wb') as outfile:
|
||||
with open(data_filename, 'wb') as outfile:
|
||||
outfile.write(r.content)
|
||||
|
||||
|
||||
|
||||
|
||||
rki_file = pd.read_excel(filename, sheet_name=None, engine='openpyxl')
|
||||
|
||||
rki_file = pd.read_excel(data_filename, sheet_name=None, engine='openpyxl')
|
||||
|
||||
raw_data = rki_file['Impfungen_proTag']
|
||||
|
||||
|
@ -61,10 +63,41 @@ days_extrapolated = int(np.ceil(to_be_vaccinated / mean_vaccinations_daily))
|
|||
|
||||
extrapolated_dates = np.array([dates[0] + datetime.timedelta(days=i) for i in range(days_extrapolated)])
|
||||
|
||||
mean_vaccinations_daily_done = extrapolated_dates[-1]
|
||||
mean_vaccinations_daily_herd_immunity = extrapolated_dates[int(np.ceil(days_extrapolated * herd_immunity))]
|
||||
|
||||
days_extrapolated_with_todays_rate = int(np.ceil(to_be_vaccinated / daily.iloc[-1]))
|
||||
|
||||
last_date = dates.iloc[-1]
|
||||
|
||||
last_date_day_rate = daily.iloc[-1]
|
||||
last_date_day_rate_done = dates[0] + datetime.timedelta(days=days_extrapolated_with_todays_rate)
|
||||
last_date_day_rate_herd_immunity = dates[0] + datetime.timedelta(days=int(np.ceil(days_extrapolated_with_todays_rate * herd_immunity)))
|
||||
|
||||
|
||||
extrapolated_vaccinations = mean_vaccinations_daily * range(1, days_extrapolated + 1)
|
||||
|
||||
days_since_start = (dates.iloc[-1].date() - dates[0].date()).days
|
||||
print(days_since_start)
|
||||
|
||||
mean_vaccinations_last_seven_days = np.mean(daily[-7:])
|
||||
mean_vaccinations_last_seven_days_int = int(np.round(mean_vaccinations_last_seven_days))
|
||||
|
||||
days_extrapolated_last_seven_days = int(np.ceil(to_be_vaccinated / mean_vaccinations_last_seven_days))
|
||||
|
||||
extrapolated_vaccinations_last_seven_days = total_vaccinations + mean_vaccinations_last_seven_days * range(-days_since_start, days_extrapolated - days_since_start)
|
||||
|
||||
mean_vaccinations_last_seven_days_done = dates.iloc[-1] + datetime.timedelta(days=days_extrapolated_last_seven_days)
|
||||
mean_vaccinations_last_seven_days_herd_immunity = dates.iloc[-1] + datetime.timedelta(days=int(np.ceil(days_extrapolated_last_seven_days * herd_immunity)))
|
||||
|
||||
|
||||
|
||||
mean_vaccinations_daily_up_to_date = np.round(cumulative / range(1, len(cumulative) + 1))
|
||||
|
||||
print(extrapolated_vaccinations[:20])
|
||||
print(extrapolated_vaccinations_last_seven_days[:20])
|
||||
print(cumulative)
|
||||
|
||||
# Stand aus Daten auslesen
|
||||
#stand = dates.iloc[-1]
|
||||
#print_stand = stand.isoformat()
|
||||
|
@ -79,14 +112,22 @@ print_stand = stand_date.isoformat()
|
|||
|
||||
filename_stand = stand_date.strftime("%Y%m%d%H%M%S")
|
||||
|
||||
|
||||
archive_folder = site_folder + 'archive/' + filename_stand
|
||||
|
||||
if os.path.isdir(archive_folder):
|
||||
print('Archive folder {} already exists'.format(archive_folder))
|
||||
else:
|
||||
os.mkdir(archive_folder)
|
||||
|
||||
def plot_extrapolation_portion(percentage):
|
||||
|
||||
print_percentage = int(percentage * 100)
|
||||
plot_filename = '{}/{}_extrapolated_to_{}_percent'.format(plots_folder, filename_stand, print_percentage)
|
||||
plot_filename_latest = '{}/latest_extrapolated_to_{}_percent'.format(plots_folder, print_percentage)
|
||||
archive_plot_filename = '{}/extrapolated_to_{}_percent'.format(archive_folder, print_percentage)
|
||||
latest_plot_filename = '{}/extrapolated_to_{}_percent'.format(site_folder, print_percentage)
|
||||
|
||||
if os.path.isfile(plot_filename + 'pdf'):
|
||||
print('Plot {} already exists'.format(plot_filename))
|
||||
if os.path.isfile(archive_plot_filename + '.pdf'):
|
||||
print('Plot {} already exists'.format(archive_plot_filename))
|
||||
return
|
||||
|
||||
fig, ax = plt.subplots(1)
|
||||
|
@ -111,7 +152,8 @@ def plot_extrapolation_portion(percentage):
|
|||
ax2.set_xlim(xmax=dates[0] + datetime.timedelta(days=percentage * days_extrapolated))
|
||||
ax2.grid(True)
|
||||
ax2.plot(dates, cumulative, color='red', label='Kumulierte Impfungen')
|
||||
ax2.plot(extrapolated_dates, extrapolated_vaccinations, color='orange', label='Extrap. kumulierte Impfungen\n({:n} Impfungen/Tag)'.format(mean_vaccinations_daily_int))
|
||||
ax2.plot(extrapolated_dates, extrapolated_vaccinations, color='orange', label='Extrap. kumulierte Impfungen (Ø gesamt)\n{:n} Impfungen/Tag'.format(mean_vaccinations_daily_int))
|
||||
ax2.plot(extrapolated_dates, extrapolated_vaccinations_last_seven_days, color='goldenrod', label='Extrap. kumulierte Impfungen (Ø 7 Tage)\n{:n} Impfungen/Tag'.format(mean_vaccinations_last_seven_days_int))
|
||||
#ax2.plot()
|
||||
|
||||
ax.legend(loc='upper left')
|
||||
|
@ -128,14 +170,69 @@ def plot_extrapolation_portion(percentage):
|
|||
|
||||
ax2.set_ylabel('Kumulierte Impfungen')
|
||||
|
||||
plt.savefig(plot_filename + '.pdf')
|
||||
plt.savefig(plot_filename + '.png')
|
||||
plt.savefig(plot_filename_latest + '.pdf')
|
||||
plt.savefig(plot_filename_latest + '.png')
|
||||
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(plot_filename))
|
||||
print('Created plot {} as pdf and png'.format(archive_plot_filename))
|
||||
|
||||
|
||||
plot_extrapolation_portion(0.1)
|
||||
plot_extrapolation_portion(0.7)
|
||||
plot_extrapolation_portion(1.0)
|
||||
|
||||
|
||||
def render_dashboard():
|
||||
dashboard_filename = 'site/index.xhtml'
|
||||
dashboard_archive_filename = 'site/archive/{}/index.xhtml'.format(filename_stand)
|
||||
stylesheet_filename = 'site/rki-dashboard.css'
|
||||
stylesheet_archive_filename = 'site/archive/{}/rki-dashboard.css'.format(filename_stand)
|
||||
|
||||
if os.path.isfile(dashboard_archive_filename):
|
||||
print('Dashboard {} already exists'.format(dashboard_archive_filename))
|
||||
return
|
||||
|
||||
from jinja2 import Template, Environment, FileSystemLoader, select_autoescape
|
||||
env = Environment(
|
||||
loader=FileSystemLoader('./'),
|
||||
autoescape=select_autoescape(['html', 'xml', 'xhtml'])
|
||||
)
|
||||
|
||||
german_text_date_format = '%d. %B %Y'
|
||||
df = german_text_date_format
|
||||
|
||||
german_text_datetime_format = '%d. %B %Y, %H:%M:%S Uhr'
|
||||
dtf = german_text_datetime_format
|
||||
|
||||
latest_dashboard_filename = site_folder + 'index.xhtml'
|
||||
archive_dashboard_filename = archive_folder
|
||||
|
||||
template = env.get_template('dashboard_template.xhtml')
|
||||
template.stream(
|
||||
stand = stand_date.strftime(dtf),
|
||||
filename_stand = filename_stand,
|
||||
einwohner_deutschland = '{:n}'.format(einwohner_deutschland).replace('.', ' '),
|
||||
herd_immunity = '{:n}'.format(int(herd_immunity * 100)),
|
||||
total_vaccinations = '{:n}'.format(total_vaccinations).replace('.', ' '),
|
||||
total_vaccinations_percentage = '{:.3n}'.format(total_vaccinations_percentage * 100),
|
||||
days_since_start = days_since_start,
|
||||
last_date = last_date.strftime(df),
|
||||
last_date_day_rate = '{:n}'.format(last_date_day_rate).replace('.', ' '),
|
||||
mean_vaccinations_daily = '{:n}'.format(mean_vaccinations_daily_int).replace('.', ' '),
|
||||
mean_vaccinations_daily_herd_immunity = mean_vaccinations_daily_herd_immunity.strftime(df),
|
||||
mean_vaccinations_daily_done = mean_vaccinations_daily_done.strftime(df),
|
||||
last_date_day_rate_herd_immunity = last_date_day_rate_herd_immunity.strftime(df),
|
||||
last_date_day_rate_done = last_date_day_rate_done.strftime(df),
|
||||
mean_vaccinations_last_seven_days = '{:n}'.format(mean_vaccinations_last_seven_days_int).replace('.', ' '),
|
||||
mean_vaccinations_last_seven_days_herd_immunity = mean_vaccinations_last_seven_days_herd_immunity.strftime(df),
|
||||
mean_vaccinations_last_seven_days_done = mean_vaccinations_last_seven_days_done.strftime(df)
|
||||
).dump('site/index.xhtml')
|
||||
|
||||
shutil.copyfile(dashboard_filename, dashboard_archive_filename)
|
||||
shutil.copyfile(stylesheet_filename, stylesheet_archive_filename)
|
||||
|
||||
print('Created dashboard')
|
||||
|
||||
render_dashboard()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue