Commit 5bba8675 authored by Brose, Jens's avatar Brose, Jens
Browse files

09 pandas exercise

parent 90e94e52
.ipynb_checkpoints
*~
09_pandas_exercise.txt
09_pandas_exercise_muster.ipynb
......@@ -2,9 +2,7 @@
"cells": [
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"metadata": {},
"source": [
"# Übungsaufgabe zur Monte-Carlo-Methode"
]
......@@ -507,7 +505,6 @@
{
"cell_type": "markdown",
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
......@@ -548,14 +545,14 @@
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
"pygments_lexer": "ipython3",
"version": "3.8.5"
},
"toc": {
"base_numbering": 1,
......@@ -572,5 +569,5 @@
}
},
"nbformat": 4,
"nbformat_minor": 0
"nbformat_minor": 1
}
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Übungsaufgaben zur Datenanalyse mit `pandas`"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import warnings\n",
"warnings.filterwarnings(\"ignore\")\n",
"import pandas as pd"
]
},
{
"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$ Tage 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": "markdown",
"metadata": {},
"source": [
"Laden der relevanten Spalten des Datensatzes in den `DataFrame df` (bitte vervollständigen). Spalten mit Zeitangaben sollten mit dem entsprechenden Datentyp eoingelesen 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 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
}
......@@ -2,9 +2,7 @@
"cells": [
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"metadata": {},
"source": [
"# Übungsaufgaben zur Numerischen Differentiation"
]
......@@ -178,7 +176,6 @@
{
"cell_type": "markdown",
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
......@@ -219,14 +216,14 @@
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
"pygments_lexer": "ipython3",
"version": "3.8.5"
},
"toc": {
"base_numbering": 1,
......@@ -243,5 +240,5 @@
}
},
"nbformat": 4,
"nbformat_minor": 0
"nbformat_minor": 1
}
......@@ -2,9 +2,7 @@
"cells": [
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"metadata": {},
"source": [
"# Übungsaufgaben zur Numerischen Integration"
]
......@@ -152,8 +150,8 @@
},
"outputs": [],
"source": [
"v_terminal =\n",
"s =\n",
"v_terminal = \n",
"s = \n",
"\n",
"print(\"Endgeschwindigkeit: {:.1f} ms⁻¹\\nStrecke: {:.1f} m\".format(v_terminal, s))"
]
......@@ -168,7 +166,6 @@
{
"cell_type": "markdown",
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
......@@ -209,14 +206,14 @@
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
"pygments_lexer": "ipython3",
"version": "3.8.5"
},
"toc": {
"base_numbering": 1,
......@@ -233,5 +230,5 @@
}
},
"nbformat": 4,
"nbformat_minor": 0
"nbformat_minor": 1
}
......@@ -2,9 +2,7 @@
"cells": [
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"metadata": {},
"source": [
"# Übungsaufgaben zur Numerischen Nullstellensuche"
]
......@@ -299,7 +297,6 @@
{
"cell_type": "markdown",
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
......@@ -340,14 +337,14 @@
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
"pygments_lexer": "ipython3",
"version": "3.8.5"
},
"toc": {
"base_numbering": 1,
......@@ -364,5 +361,5 @@
}
},
"nbformat": 4,
"nbformat_minor": 0
"nbformat_minor": 1
}
......@@ -2,9 +2,7 @@
"cells": [
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"metadata": {},
"source": [
"# Übungsaufgaben zur Numerischen Lösung von Differentialgleichungen"
]
......@@ -32,7 +30,6 @@
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% python\n"
}
......@@ -44,9 +41,7 @@
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"metadata": {},
"source": [
"Das _Verlet-Verfahren_ dient der numerischen Lösung von homogenen Differentialgleichungen 2. Ordnung, in denen die erste\n",
"Ableitung der gesuchten Funktion nicht vorkommt. Es ist damit zur Behandlung ortsabhängiger Kräfte geeignet.\n",
......@@ -62,7 +57,6 @@
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% python\n"
}
......@@ -98,9 +92,7 @@
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"metadata": {},
"source": [
"Berechnen Sie nun für zwei mathematische Pendel mit\n",
"$\\omega_{0/I,II}^2 = \\frac{g}{l} = 9.81~\\frac{1}{\\text{s}^2} =~\\text{const.}$ für die Anfangsauslenkungen\n",
......@@ -114,7 +106,6 @@
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% python\n"
}
......@@ -133,9 +124,7 @@
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"metadata": {},
"source": [
"Wir können uns nun die Auslenkungen im Zeitverlauf ansehen:"
]
......@@ -144,7 +133,6 @@
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% python\n"
}
......@@ -156,9 +144,7 @@
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"metadata": {},
"source": [
"Die Aufgabe ist richtig gelöst, wenn die Diagramme übereinstimmen. Ein technischer Test entfällt an dieser Stelle, da\n",
"es viele Freiheiten bei der Implementierung des Verfahrens gibt."
......@@ -224,9 +210,7 @@
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"metadata": {},
"source": [
"Implementieren Sie zuerst eine Funktion, welche den Wert der Beschleunigung in Abhängigkeit von Zeit, Ort und\n",
"Geschwindigkeit und weiteren Parametern für dieses Problem berechnet."
......@@ -236,7 +220,6 @@
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% python\n"
}
......@@ -252,9 +235,7 @@
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"metadata": {},
"source": [
"Das Runge-Kutta-Verfahren 4. Ordnung eignet sich zur Lösung dieses Problems. Schreiben Sie zunächst eine Funktion,\n",
"welche einen Einzelschritt des Verfahrens durchführt."
......@@ -264,7 +245,6 @@
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% python\n"
}
......@@ -292,9 +272,7 @@
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"metadata": {},
"source": [
"Wir können diese Funktion nun in eine allgemeine Lösungsfunktion einbetten:"
]
......@@ -303,7 +281,6 @@
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% python\n"
}
......@@ -350,9 +327,7 @@
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"metadata": {},
"source": [
"Jetzt können Sie diese Funktion auf das Problem anwenden:"
]
......@@ -361,7 +336,6 @@
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% python\n"
}
......@@ -385,9 +359,7 @@
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"metadata": {},
"source": [
"Visualisierung:"
]
......@@ -396,7 +368,6 @@
"cell_type": "code",
"execution_count": null,