knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.width=12, fig.height=12 )
Das COVID-Project ist ein Package, welches dem Nutzer aktuelle Daten des Robert-Koch-Instituts zur Coronapandemie zur Verfügung stellt. Die Datentabelle wird anhand der Anforderungen des Nutzers neu gefiltert und Daten werden aggregiert, um dem Nutzer spezifische Fragen zu den Coronazahlen zu beantworten. Zudem können die Daten in verschiedensten Plots dargestellt werden.
Führe den untenstehenden Befehl aus, um das Package zu laden.
library(covidproject) library(dplyr)
Zudem muss zu Beginn einmal die Datentabelle des Robert-Koch-Instituts heruntergeladen werden:
dir_path <- system.file("extdata", package="covidproject") # aus Performanzgründen laden wir hier direkt die .csv datei #data_downloader("path...") cov_data <- read.csv(paste0(dir_path, "/data.csv")) print(cov_data)
Die Datentabelle enthält folgende Felder:
IdBundesland: Id des Bundeslands des Falles mit 1=Schleswig-Holstein bis 16=Thüringen
Bundesland: Name des Bundeslandes
Landkreis ID: Id des Landkreises des Falles in der üblichen Kodierung 1001 bis 16077=LK Altenburger Land
Landkreis: Name des Landkreises
Altersgruppe: Altersgruppe des Falles aus den 6 Gruppe 0-4, 5-14, 15-34, 35-59, 60-79, 80+ sowie unbekannt
Altersgruppe2: Altersgruppe des Falles aus 5-Jahresgruppen 0-4, 5-9, 10-14, ..., 75-79, 80+ sowie unbekannt
Geschlecht: Geschlecht des Falles M=männlich, W=weiblich und unbekannt
AnzahlFall: Anzahl der Fälle in der entsprechenden Gruppe
AnzahlTodesfall: Anzahl der Todesfälle in der entsprechenden Gruppe
Meldedatum: Datum, wann der Fall dem Gesundheitsamt bekannt geworden ist
Datenstand: Datum, wann der Datensatz zuletzt aktualisiert worden ist
NeuerFall:
NeuerTodesfall:
Referenzdatum: Erkrankungsdatum bzw. wenn das nicht bekannt ist, das Meldedatum
AnzahlGenesen: Anzahl der Genesenen in der entsprechenden Gruppe
NeuGenesen:
IstErkrankungsbeginn: 1, wenn das Refdatum der Erkrankungsbeginn ist, 0 sonst
Die filter functions dienen dazu, die umfangreiche Datentabelle des Robert-Koch-Instituts, welche alle Fälle seit Beginn der Pandemie führt, zu filtern und Daten zu aggregieren.
Jede get_...-Methode gibt eine neue Datentabelle zurück, die dem Nutzer genau die gewünschte Information aufzeigt. Folgende Eingabeparameter kann der Nutzer variieren:
Mit der Methode get_deaths_per_federal_state kann man sich zum Beispiel Todeszahlen zu einzelnen Bundesländern anzeigen lassen.
deaths_bayern_hessen <- get_deaths_per_federal_states(cov_data, date_start = "2020/06/01", date_end = "2020/12/01", federal_state = c("Bayern", "Hessen")) print(deaths_bayern_hessen)
Hier wird eine Tabelle mit der Anzahl von Todesfällen in Bayern und Hessen im Zeitraum vom 1. Juni 2020 bis 1. Dezember 2020 ausgegeben. Es werden hierbei alle Altersgruppen betrachtet, da diese nicht mittels der Parameter eingeschränkt wurden. Weitere Beispiele gibt es mit der Funktion covidproject::examples.
Mit der Methode get_incidence_per_district kann man sich die Inzidenz für bestimmte Landkreise anzeigen lassen. Die Inzidenz gibt an, wie viele Neuinfektionen pro 100.000 Einwohner in einer gewissen Zeitspanne gab. In der Regel liegt diese bei 7 Tagen, man kann sie aber mithilfe vom Parameter incidence_days variieren.
incidence_flensburg_kiel <- get_incidence_per_district(cov_data, district = c("SK Flensburg", "SK Kiel"), date_start = "2020/04/01", date_end = "2021/04/01") print(incidence_flensburg_kiel)
Teilweise gibt es in der Datentabelle Daten, die fehlerhaft oder unvollständig sind und die mit diesen Funktionen entfernt werden können. Hierzu zählen:
unclean_data <- get_unclean_data(cov_data) clean_data <- remove_unclean_data(unclean_data) print(unclean_data)
Die plot functions dienen dazu die neu generierten Datentabellen grafisch darzustellen. Hierbei muss der Nutzer keine weiteren Parameter angeben. Die Funktion findet automatisch zu jeder Tabelle den passenden Plot.
Um die Beispieltabelle von oben zu plotten, kann ganz einfach folgender Befehl ausgeführt werden:
plot_function(deaths_bayern_hessen)
Die Fallsterblichkeit gibt den Anteil an Todesfällen pro entdecktem Infektionsfall an. An der Fallsterblichkeit lässt sich erkennen wie todesgefährlich eine Krankheit ist. Mit der Funktion get_fallsterblichkeit_overall lässt sich ein Dataframe erstellen, welches den Verlauf der Fallsterblichkeit über den gesamten Coronazeitraum darstellt. Hierbei ist es möglich mithilfe von Parametern die Altersgruppen einzuschränken.
fallsterblichkeit <- get_fallsterblichkeit_overall(cov_data) plot_function(fallsterblichkeit)
Die Fallsterblichkeit weist einen starken Spike zu Anfang des Jahres 2020 auf, bleibt danach jedoch niedrig. Es ist eine Saisonalität zu erkennen (niedrigere Fallsterblichkeit im Sommer).
Mit der Funktion predict_future_progress wird versucht eine zukünftige Prognose für Coronazahlen zu geben. Mithilfe einer Zeitreihe aus den Daten und einem Prophet-Model, werden Daten prognostiziert. Mit dem Parameter future_days lässt sich angeben, wie viele Tage man in die Zukunft sehen möchte. Im folgenden Beispiel wird die Zukünftige Entwicklung der täglichen Infektionszahlen, bzw. Todesfälle für ganz Deutschland für die nächsten zwei Jahre vorhergesagt:
infection_data <- get_deaths_per_federal_states(cov_data, date_start = "2020/06/01", date_end = "2021/08/07") predict_future_progress(infection_data, future_days = 730)
infection_data <- get_infections_per_federal_states(cov_data, date_start = "2020/06/01", date_end = "2021/08/07") predict_future_progress(infection_data, future_days = 730)
Es ist erkennbar, dass das Model leicht sinkende Todesfälle vorhersagt. Interessanterweise ist dies für Infektionen nicht der Fall. Hier werden steigende Zahlen über die Jahre vorhergesehen. Es ist anzumerken, dass die Vorhersagen nur auf den historischen Fallzahlen und der Annahme, dass jährliche Saisonalität bei den Verläufen vorliegt, basieren.
Um zu vergleichen für wie viele Fälle das Erkrankungsdatum bekannt ist, kann man sich mit der Methode get_infections_overall die Summe dieser Fälle ausgeben lassen. Hierfür ist in der Datentabelle des Robert-Koch-Instituts eine Zeile verfügbar, die genau diesen Sachverhalt bestimmen lässt. Um die Zahl mit der Gesamtzahl zu vergleichen nutzt man die bereits bekannten get_infections_...-Methoden, um das zugehörige Dataframe zu erzeugen.
infections_with_date <- get_infections_overall(cov_data) infections_all <- get_infections_per_federal_states(cov_data) infections_with_date %>% summarise(Faelle_gesamt = sum(Infections)) -> infections_with_date print(paste("# Datum bekannt:", infections_with_date$Faelle_gesamt[1]))
Um einen Überblick über das Pandemiegeschehen in Deutschland zu erhalten, plotten wir zunächst die bisherigen Infektionsfälle, sowie Todesfälle je Landkreis.
(Da der erzeugte Plot nicht innerhalb einer Vignette angezeigt werden kann, zeigen wir hier den zuvor gespeicherten Output.)
#cov_data %>% # distinct(Landkreis) -> landkreise #landkreise <- landkreise$Landkreis #infections_per_district <- get_infections_per_district(cov_data, district = landkreise) #plot_district_map(infections_per_district)
#deaths_per_district <- get_deaths_per_district(cov_data, district = landkreise) #plot_district_map(deaths_per_district)
Man kann erkennen, dass Infektionen, aber besonders Todesfälle in Landkreisen Sachsens im Verlauf der Pandemie vergleichsweise häufig waren.
Mit der Methode get_correlation_for_incidence_pairs lässt sich die Korrelation der Inzidenzen zwischen zwei Landkreisen berechnen. Man kann schauen wie sehr die einzelnen Inzidenzen von verschiedenen Landkreisen im Zusammenhang stehen.
incidences <- get_incidence_per_district(cov_data, date_start = "2020/04/01", date_end = "2021/04/01") correlations <- get_correlation_for_incidence_pairs(incidences) plot_incidence_correlations_barchart(correlations)
Für einige dieser Landkreise möchten wir eine Korrelationsmatrix darstellen:
plot_incidence_correlations_matrix(correlations, districts=c("SK Bochum", "LK Rhein-Sieg-Kreis", "SK Dortmund", "LK Minden-Lübbecke", "SK Oberhausen", "LK Main-Kinzig-Kreis", "LK Wesel"))
Es zeigt sich, dass Landkreise mit sehr hoher Korrelation der Inzidenzen auch geographisch nahe zueinander liegen. Außerdem weisen die Top-7 Landkreispaare mit den stärksten Korrelationen hohe Korrelationen untereinander auf.
Oft wird behauptet, die Coronazahlen hingen stark von dem Wetter ab. Es wird davon ausgegangen, das Virus verbreite sich schlechter bei warmem Wetter. Mithilfe des Parameters add_weather in der plot_function kann man sich die zugehörige Durchschnittstemperatur für den bestimmten Zeitraum einzeichnen lassen. So kann untersucht werden, ob das Wetter Einfluss auf die Coronazahlen hat.
infections_data <- get_infections_per_federal_states(cov_data, date_start = "2020/03/01", date_end = "2021/03/01") #infections_bayern_hessen <- get_infections_per_federal_states(cov_data, date_start = "2020/06/01", date_end = "2020/12/01", federal_state = c("Bayern", "Hessen")) plot_function(infections_data, add_weather = TRUE)
Es ist erkennbar, dass bei hohen Temperaturen die Infektionszahlen niedrig sind.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.