1
0
Fork 0
rki-impfparser/dashboard_template.xhtml

217 lines
16 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8" ?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
<head>
<title>Dashboard Impfungen</title>
<link rel="stylesheet" type="text/css" href="rki-dashboard.css" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<h1>Dashboard Impfungen</h1>
<h2>
Quelle: <a href="https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Daten/Impfquoten-Tab.html" target="_blank" rel="noreferrer">Robert-Koch-Institut (RKI)</a><br />
Stand: {{ stand }}
</h2>
<section>
<p class="data-text">
Bislang wurden <em>{{ '{:n}'.format(data_first_vaccination.total).replace('.', '') }}</em> Erstimpfungen innerhalb von <em>{{ '{:n}'.format(data_first_vaccination.days_since_start).replace('.', '') }}</em> Tagen<sup><a href="#footnote-001">1</a></sup> vorgenommen.
Das entspricht einem Anteil von <em>{{ '{:.3n}'.format(data_first_vaccination.total_percentage) }} %</em> der Bevölkerung<sup><a href="#footnote-002">2</a></sup>.
Seit <em>{{ '{:n}'.format(data_second_vaccination.days_since_start).replace('.', '') }}</em> Tagen laufen die Zweitimpfungen.
Bislang wurden <em>{{ '{:n}'.format(data_second_vaccination.total).replace('.', '') }}</em> Zweitimpfungen verabreicht, das entspricht einem Anteil von <em>{{ '{:.3n}'.format(data_second_vaccination.total_percentage) }} %</em> der Bevölkerung.
</p>
<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).
Mit dieser Rate dauert es für die Erstimpfungen bis zum <em>{{ data_first_vaccination['extrapolation_mean_seven_days']['date_herd_immunity_str'] }}</em> für {{ herd_immunity }} % (<em>{{ data_first_vaccination['extrapolation_mean_seven_days']['weeks_extrapolated_herd_immunity'] }}</em> Wochen) und bis zum <em>{{ data_first_vaccination['extrapolation_mean_seven_days']['date_done_str'] }}</em> für 100 % (<em>{{ data_first_vaccination['extrapolation_mean_seven_days']['weeks_extrapolated'] }}</em> Wochen).
Für die Zweitimpfungen sind am <em>{{ data_second_vaccination['extrapolation_mean_seven_days']['date_herd_immunity_str'] }}</em> {{ herd_immunity }} % erreicht (<em>{{ data_second_vaccination['extrapolation_mean_seven_days']['weeks_extrapolated_herd_immunity'] }}</em> Wochen) und am <em>{{ data_second_vaccination['extrapolation_mean_seven_days']['date_done_str'] }}</em> 100 % (<em>{{ data_second_vaccination['extrapolation_mean_seven_days']['weeks_extrapolated'] }}</em> Wochen)<sup><a href="#footnote-004">4</a></sup>.
</p>
</section>
<section>
<h1>Impffortschritt</h1>
<div class="labelled_meter">
<meter name="first_vaccination_percentage" value="{{ data_first_vaccination.total_percentage }}" max="100" title="{{ '{:.3n}'.format(data_first_vaccination.total_percentage) }} %"/>
<label for="first_vaccination_percentage">Erstimpfungen: <em>{{ '{:.3n}'.format(data_first_vaccination.total_percentage) }} %</em></label>
</div>
<div class="labelled_meter">
<meter name="second_vaccination_percentage" value="{{ data_second_vaccination.total_percentage }}" max="100" title="{{ '{:.3n}'.format(data_second_vaccination.total_percentage) }} %"/>
<label for="second_vaccination_percentage">Zweitimpfungen: <em>{{ '{:.3n}'.format(data_second_vaccination.total_percentage) }} %</em></label>
</div>
</section>
<section>
<h1>Aktuelles Impfziel</h1>
<p class="data-text">
Das Impfziel von EU-Kommission<sup><a href="#footnote-005">5</a></sup> und Bundesregierung ist, bis Ende des Sommers 70 % der Bevölkerung geimpft zu haben.
Bis zu diesem Ziel sind noch <em>{{ '{:n}'.format(data_first_vaccination.vaccinations_missing_until_target).replace('.', '') }}</em> Erstimpfungen nötig.
</p>
<p class="data-text">
Bis zum Ende des Sommers am <em>{{ target_date_for_herd_immunity_str }}</em> bleiben noch <em>{{ days_until_target }}</em> Tage, an denen die Erstimpfungen verabreicht werden können<sup><a href="#footnote-006">6</a></sup>.
Um das Ziel pünktlich zu erreichen, müssten in dieser Zeit jeden Tag durchschnittlich <em>{{ '{:n}'.format(data_first_vaccination.vaccination_rate_needed_for_target).replace('.', '') }}</em> Erstimpfungen vorgenommen werden.
Die bisherige durchschnittliche Erstimpfrate liegt bei <em>{{ '{:.3n}'.format(data_first_vaccination.vaccination_rate_needed_for_target_percentage ) }} %</em> dieser Rate.
</p>
</section>
<!--<section>
<h1>Details</h1>
<figure>
<div>
<table>
<thead>
<tr>
<th rowspan="3">Land</th>
<th rowspan="2" colspan="2">
Impfungen<br />
gesamt
</th>
<th colspan="8">Impfung wegen<sup><a href="#footnote-006">6</a></sup></th>
</tr>
<tr>
<th colspan="2">Alter</th>
<th colspan="2">Beruf</th>
<th colspan="2">Gesundheit</th>
<th colspan="2">Pflegeheim</th>
</tr>
<tr>
<th>Anzahl</th>
<th>%</th>
<th>Anzahl</th>
<th>%</th>
<th>Anzahl</th>
<th>%</th>
<th>Anzahl</th>
<th>%</th>
<th>Anzahl</th>
<th>%</th>
</tr>
</thead>
</table>
</div>
<figcaption>
<a name="table-001"><span class="ref">Tabelle 1:</span></a>
Details der Impfungen, aufgeschlüsselt nach Ländern<br />
Der Prozentwert bezieht sich bei den Gründen auf die in dem jeweiligen Land insgesamt vorgenommenen Impfungen, nicht auf die Größe der jeweiligen Gruppe.
Eine Impfung kann mehrere der genannten Gründe haben oder bei keinen der Gründen genannt werden, daher stimmen die Summe der Gründe und die Gesamtzahl der Impfungen nicht überein.
</figcaption>
</figure>
</section>-->
<section>
<h1>Fragen und Antworten</h1>
<section>
<h2>Was ist dieses Dashboard?</h2>
<p>
Dieses Dashboard soll einen Überblick über den aktuellen Stand sowie die Entwicklungen der Impfungen in Deutschland geben.
Inspiriert wurde es durch <a href="https://impfdashboard.de/" target="_blank" rel="noreferrer">impfdashboard.de</a>, ein Impfdashboard, das ebenfalls die Daten des Robert-Koch-Instituts auswertet und vom Bundesministerium für Gesundheit betrieben wird.
</p>
<p>
Als zusätzliche Informationen rechnet es aber aus, wie lange es dauert könnte, bis die Impfungen abgeschlossen sind oder wenigstens eine Herdenimmunität erreicht wird (sofern die aktuelle Schätzung der für eine Herdenimmunität benötigten Bevölkerung korrekt ist).
Dafür wird einerseits die durchschnittliche Impfrate aller Tage und andererseits die Impfrate der letzten sieben Tage herangezogen, die noch zu impfende Bevölkerung ausgerechnet und diese durch die Impfrate geteilt.
Dadurch erhält man die lineare Extrapolation, wenn jeden weiteren Tag genau mit dieser Impfrate weitergeimpft würde.
</p>
</section>
<section>
<h2>Wie oft werden die Daten aktualisiert?</h2>
<p>
Das Robert-Koch-Institut aktualisiert ihren Datensatz jeden Werktag (also jeden Tag außer Sonntag), jeweils auf den Stand aller Meldungen bis 11 Uhr.
Die Meldungen beziehen sich dabei auf die Impfungen des Vortags, das heißt, dass die Daten eines Tages frühestens am nächsten Werktag um 11 Uhr in den Daten auftauchen.
Die Meldungen von Samstag und Sonntag kommen montags gemeinsam, da Sonntag die Daten seitens des RKI nicht aktualisiert werden.
</p>
<p>
Das Skript, dass die Daten ausliest und das Dashboard und die Plots erstellt, läuft jeden Tag zur vollen Stunde von 8 Uhr bis 16 Uhr.
Sofern sich die Daten nicht verändert haben, wird natürlich nichts neu erstellt.
</p>
</section>
<section>
<h2>Wie genau sind die Daten?</h2>
<p>
Die Datenquelle ist das Robert-Koch-Institut.
Für die Meldungen der jeweiligen Tage gibt es immer etwas Meldeverzug, das heißt, dass teilweise Meldungen einige Tage im Nachhinein noch korrigiert werden.
Das allerdings für gewöhnlich nur nach oben, und bislang hat das auch nur wenig Unterschied verursacht.
</p>
<p>
Für die Extrapolation sieht das etwas anders aus.
Die lineare Extrapolation nimmt natürlich an, dass sich an dem Vorgang des Impfens über einen längeren Zeitraum nichts signifikant ändert.
Diese Annahme ist aber falsch;
aktuell (Stand: 17. Januar 2021) sind die meisten Impfzentren beispielsweise noch nicht geöffnet, stattdessen sind mobile Impfteams unterwegs, die hauptsächlich die Altenheime besuchen.
Dadurch liegt die aktuelle Impfrate deutlich unter dem, was bei den Impfzentren unter voller Last zu erwarten ist.
Entsprechend darf man vorsichtig optimistisch hoffen, dass die Impfrate in den nächsten Wochen und Monaten noch stark ansteigen wird.
Dennoch wird es vermutlich ungefähr anderthalb Jahre dauern, bis die meisten Menschen in Deutschland geimpft wurden.
</p>
<p>
Ich finde den Ausblick, auch wenn die Schätzung sehr unpräzise sein wird, dennoch interessant, deshalb habe ich das gemacht.
</p>
</section>
<section>
<h2>Kann ich mir alte Stände des Dashboards anschauen?</h2>
<p>
Ja, das geht!
Jede Version des Dashboards, die neue Daten bekommt, wird in einem Archiv gespeichert.
</p>
<a href="archive/">Zum Archiv</a>
</section>
<section>
<h2>Kann ich die Inhalte hier teilen?</h2>
<p>
Ja, das ist erlaubt, nach den Bedingungen der <a href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 4.0 International (CC BY-SA 4.0)</a>.
Das heißt, dass du einen Hinweis auf den Ersteller (also mich) geben musst (bevorzugt per Link auf diese Seite), und dass Abwandlungen, die du hiervon erstellst, wieder unter ähnlich freien Bedingungen weitergegeben werden müssen.
</p>
<p>
In den Plots stehen die nötigen Infos dafür oben mit drauf.
Ein Link wäre aber auch hier nett.
</p>
<p>
Der Python-Code für die Erstellung des Dashboards steht unter der <a href="https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12" target="_blank" rel="noreferrer">European Union Public Licence (EUPL) Version 1.2</a>.
Der Code ist verfügbar auf meinem <a href="https://gitea.bastin.nrw/benedikt/rki-impfparser" target="_blank">Gitea-Server</a>.
Der XHTML-Code für das Dashboard steht, wie oben erwähnt, unter der CC-BY-SA 4.0-Lizenz.
</p>
</section>
</section>
<section>
<h1>Plots</h1>
{% for fig in figures %}
<figure>
<picture>
<source type="image/svg+xml" srcset="{{ fig['filename']}}.svg" alt="{{ fig['caption']}}" />
<img type="image/png" src="{{ fig['filename'] }}.png" alt="{{ fig['caption'] }}" />
</picture>
<figcaption>
<a name="figure-{{ '{:03d}'.format(fig['index']) }}"><span class="ref">Abbildung {{ fig['index'] }}:</span></a>
{{ fig['caption'] }}<br />
<a href="{{ fig['filename'] }}.png" download="{{ fig['filename'] }}.png">Download als PNG</a>
<a href="{{ fig['filename'] }}.pdf" download="{{ fig['filename'] }}.pdf">Download als PDF</a>
<a href="{{ fig['filename'] }}.svg" download="{{ fig['filename'] }}.pdf">Download als SVG</a>
</figcaption>
</figure>
{% endfor %}
</section>
<section>
<h3>Fußnoten</h3>
<ol>
<li><a name="footnote-001">Starttermin der Erstimpfungen war der {{ data_first_vaccination.start_of_vaccination_date_str }} und {{ data_second_vaccination.start_of_vaccination_date_str }} war der Start für die Zweitimpfungen. Der letzte Tag der Daten ist der {{ data_first_vaccination.last_date_str }}.</a></li>
<li><a name="footnote-002">Bevölkerungsstand vom 31. Dezember 2019: {{ einwohner_deutschland }}.</a></li>
<li><a name="footnote-003">{{ herd_immunity }} % ist der Wert, bei dem aktuell von einer Herdenimmunität ausgegangen wird.</a></li>
<!--<li><a name="footnote-004">Die täglichen Impfraten unterliegen starken Schwankungen und sind daher wenig aussagekräftig.</a></li>-->
<li><a name="footnote-004">Durch die voneinander unabhängige Extrapolation von Erst- und Zweitimpfrate kann es passieren, dass die Zweitimpfungen vor den Erstimpfungen abgeschlossen würden. Das ist natürlich Unsinn, aber eben der Einfachheit des Modells geschuldet. Stattdessen wird es vorerst Schwankungen geben, welche der beiden Impfserien gerade schneller voranschreitet, wodurch sich die jeweils andere etwas verzögert (Stand 11. Juni 2021: Gerade sind die Zweitimpfungen schneller als die Erstimpfungen, absehbar auf drei Wochen).</a></li>
<li><a name="footnote-005">Quellen:
<ul>
<li>
<a href="https://www.tagesschau.de/ausland/europa/ursula-von-der-leyen-zu-corona-impfstoffen-101.html" target="_blank" rel="noreferrer">Tagesschau, 2021-02-10</a>: Von der Leyen (EU-Kommission): „Sie bekräftigte das Ziel, bis zum Ende des Sommers 70 Prozent der erwachsenen Bevölkerung in Europa zu impfen.“
</li>
<li>
<a href="https://www.tagesschau.de/inland/impfplan-gesundheitsministerium-spahn-corona-101.html" target="_blank" rel="noreferrer">Tagesschau, 2021-02-10</a>: Spahn (Bundesgesundheitsministerium): „Die Bundesregierung hält es aber weiter für möglich, bis Ende des Sommers allen ein Impfangebot zu machen.“
</li>
<li>
<a href="https://www.tagesschau.de/inland/impfgipfel-107.html" target="_blank" rel="noreferrer">Tagesschau, 2021-02-01</a>: Merkel (Bundesregierung): „Ein Impfangebot für alle bis Ende des Sommers - das sei auch mit den drei bislang zugelassenen Impfstoffen möglich, so Kanzlerin Merkel.“
</li>
</ul>
Teilweise (wie auch in einigen dieser Quellen) wird von 70 % der <em>erwachsenen</em> Bevölkerung gesprochen, zur Vereinfachung wird hier dennoch die Gesamtbevölkerung zugrunde gelegt.</a></li>
<li><a name="footnote-006">Von den verbleibenden Tagen wurden 21 Tage für die Zeit zwischen Erst- und Zweitimpfung abgezogen.</a></li>
</ol>
</section>
</body>
</html>