Commit 2f8bb63b authored by Brose, Jens's avatar Brose, Jens
Browse files

correct pandas exercise

parent 8cf8c263
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Übungsaufgaben zur Datenanalyse mit `pandas`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Reproduktionszahl R während der Covid-19 Pandemie\n",
"Nutzen Sie den im Selbstlern-Modul verwendeten [Datensatz des Robert-Koch-Instituts](data/RKI_COVID19.csv), um die zeitliche Entwicklung der sensitiven Reproduktionszahl R4 (4 Tage Mittelung) und der geglätten Reproduktionszahl R7 (7 Tage Mittelung) in Deutschland seit dem 1. März 2020 grafisch darzustellen.\n",
"\n",
"Disclaimer: Das hier erläuterte Verfahren kann nicht für eine realistische Abschätzung des R-Wertes verwendet werden, da die statistischen Methoden der *Imputation* (Schätzung der Ansteckungstage durch das RKI für alle Fälle, bei denen der Tag nicht bekannt bekannt ist) sowie des *Nowcasting* (statistische Schätzung, wann die Infizierten tatsächlich erkrankt sind) nicht zur Verfügung stehen. Die hier vorgenommene Analyse dient ausschließlich der Übung im Umgang mit dem `python` Modul `pandas`.\n",
"\n",
"Eine [Erläuterung der einzelnen Spalten des Datensates](https://npgeo-corona-npgeo-de.hub.arcgis.com/datasets/dd4580c810204019a7b8eb3e0b329dd6_0) finden Sie beim RKI.\n",
"\n",
"1. Bereinigen Sie zuerst die Daten:\n",
" - Beschränkung auf die notwendigen Spalten\n",
" - Ausschluss negativer Werte bei den Fallzahlen\n",
" - Ausblenden von Daten vor dem 1. März 2020\n",
"\n",
"2. Verwenden Sie das Referenzdatum (entspricht meist dem Beginn der Erkrankung) als Index des `DataFrame`.\n",
"\n",
"3. Fassen Sie die von den Gesundheitsämtern gemeldeten Fallzahlen zu einer Anzahl pro Tag für Deutschland zusammen.\n",
"\n",
"4. Berechnen Sie zeitliche Variation der sensitiven und der geglätteten Reproduktionszahl (gleitender Mittelwert über 4 bzw. 7 Tage) und stellen Sie diese in einem Diagramm grafisch dar:\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Mit $E_t$: Anzahl von Neuerkrankungen an einem Tag $t$ ergibt sich der [R-Wert als Quotient zweier gleitendender Mittel über $\\tau$ Tage der Anzahl $E$ der Neuerkrankungen an den letzten $\\tau$ Tagen und der gleich langen Zeitperiode davor](https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Projekte_RKI/R-Wert-Erlaeuterung.pdf?__blob=publicationFile):\n",
"\n",
"$$R_{t,\\tau}=\\frac{<E_t>^\\tau}{<E_{t-4}>^\\tau}=\\frac{\\frac{1}{\\tau}\\sum_{s=t-\\tau+1}^tE_s}{\\frac{1}{\\tau}\\sum_{s=t-\\tau+1}^tE_{s-4}}$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Damit erhält man den sensitiven R-Wert für $\\tau=4$\n",
"\n",
"$$R_{t,4}=\\frac{<E_t>^4}{<E_{t-4}>^4}=\\frac{\\sum_{s=t-3}^tE_s}{\\sum_{s=t-3}^tE_{s-4}}$$\n",
"\n",
"und den geglätteten R-Wert für $\\tau=7$\n",
"\n",
"$$R_{t,7}=\\frac{<E_t>^7}{<E_{t-4}>^7}=\\frac{\\sum_{s=t-6}^tE_s}{\\sum_{s=t-6}^tE_{s-4}}$$\n",
"\n",
"Eine gelungene Erläuterung der Berechnung des R-Wertes ist bei der [Süddeutschen Zeitung](https://www.sueddeutsche.de/wissen/coronavirus-die-verflixte-reproduktionszahl-1.4958524) zu finden."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import warnings\n",
"warnings.filterwarnings(\"ignore\")\n",
"import pandas as pd"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Laden der relevanten Spalten des Datensatzes in den `DataFrame df` (bitte vervollständigen). Spalten mit Zeitangaben sollten mit dem entsprechenden Datentyp eingelesen werden:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"relevant_columns = []\n",
"df = pd.read_csv(\"data/RKI_COVID19.csv\", index_col=\"ObjectId\", usecols=relevant_columns, \\\n",
" parse_dates=[])\n",
"print(df.info())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Belegen Sie die folgenden Variablen mit der Gesamtanzahl der Meldungen (Zeilen) im Datensatz und der Anzahl der Meldungen mit negativen Werten in der Spalte *AnzahlFall*:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"gesamt = \n",
"negativ = \n",
"print(f\"Unter den {gesamt} Meldungen sind {negativ} mit negativer AnzahlFall.\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Entfernen Sie die negativen Einträge aus dem Datensatz. Wie groß ist dieser jetzt?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"nicht_negativ = \n",
"print(f\"Bereinigte AnzahlFall: {nicht_negativ}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Entfernen Sie Daten, die ein *Refdatum* vor dem 1. März 2020 haben. Wie groß ist der Datensatz jetzt? "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"ab_maerz = \n",
"print(f\"Anzahl der Meldungen ab 1. März 2020: {ab_maerz}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Wie groß ist der prozentuale Anteil der Fälle (eine Nachkommastelle), bei denen das Refernzdatum dem Tag der Erkrankung (Eintrag 1 in Spalte *IstErkrankungsbeginn*) entspricht?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"ist_erkrankungsbeginn = \n",
"print(f\"In {ist_erkrankungsbeginn:.1%} der Fälle ist das Referenzdatum der Krankheitsbeginn.\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Setzen Sie jetzt die Spalte *Refdatum* als Index eines neuen `DataFrame df_t`:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df_t = \n",
"print(type(df_t.index))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Fassen Sie die Meldungen in einem neuen `DataFrame df_tag` so zusammen, dass dort für jeden Tag genau ein Eintrag mit der Gesamtzahl der neuen Fälle in Deutschland enthalten ist. Die Anzahl der Fälle der aktuellen Publikation ergibt sich laut [RKI](https://npgeo-corona-npgeo-de.hub.arcgis.com/datasets/dd4580c810204019a7b8eb3e0b329dd6_0) als Summe(*AnzahlFall*), wenn *NeuerFall* in (0,1):"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df_tag ="
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Die Größe des Datensatzes sollte jetzt der Anzahl der Tage zwischen dem 1.3.2020 und dem Tag des Herunterladens der Datei entsprechen:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"anzahl_zeilen =\n",
"print(f\"Nach Gruppieren der Daten enthält der Datensatz {anzahl_zeilen} Einträge.\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Berechnung der Reproduktionszahlen und grafische Darstellung:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"R_4 = \n",
"R_7 = "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Referenz:\n",
"\n",
"Unter den 1514416 Meldungen sind 150 mit negativer AnzahlFall.\n",
"\n",
"Bereinigte AnzahlFall: 1514266\n",
"\n",
"Anzahl der Meldungen ab 1. März 2020: 1512911\n",
"\n",
"In 69.1% der Fälle ist das Referenzdatum der Krankheitsbeginn.\n",
"\n",
"Nach Gruppieren der Daten enthält der Datensatz 393 Einträge."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"%run -i exercises/pandas/ex1_sol"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Sie können dieses Dokument unter `File -> Download as` exportieren, um es als zukünftige Referenz aufzubewahren. Der Server speichert die Daten mindestens bis zum Ende des Kurses."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Kursmaterial nur für den universitätsinternen Gebrauch.\n",
"\n",
"Konzeption: [Konstantin Köhring](https://www.galaxy102.de)\n",
"Betreuung: [Dr. Jens Brose](https://tu-dresden.de/mn/physik/die-fakultaet/it-service/jens-brose)\n",
"\n",
"Technische Universität Dresden\n",
"01062 Dresden\n",
"\n",
"Tel.: +49 (0) 351 463-32104"
]
}
],
"metadata": {
"hide_input": false,
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment