{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Wetterdaten einlesen\n", "\n", "Dafür benutzen wir read_csv. CSV steht für \"Comma Separated Values\"." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
STATIONS_IDMESS_DATUMQN_3FXFMQN_4RSKRSKFSDKSHK_TAGNMVPMPMTMKUPMTXKTNKTGKeor
0195719510101-999-999.0-999.050.08-999.0166.24.5988.2-1.083.02.2-19.4-20.3eor
1195719510102-999-999.0-999.050.00-999.0173.84.3983.6-3.287.02.0-9.3-13.0eor
2195719510103-999-999.0-999.0510.01-999.0147.85.1993.50.285.02.0-5.4-7.5eor
3195719510104-999-999.0-999.050.01-999.0136.45.31005.80.781.02.4-1.6-7.7eor
4195719510105-999-999.0-999.050.81-999.0128.06.41001.83.086.04.40.0-3.4eor
\n", "
" ], "text/plain": [ " STATIONS_ID MESS_DATUM QN_3 FX FM QN_4 RSK RSKF SDK \\\n", "0 1957 19510101 -999 -999.0 -999.0 5 0.0 8 -999.0 \n", "1 1957 19510102 -999 -999.0 -999.0 5 0.0 0 -999.0 \n", "2 1957 19510103 -999 -999.0 -999.0 5 10.0 1 -999.0 \n", "3 1957 19510104 -999 -999.0 -999.0 5 0.0 1 -999.0 \n", "4 1957 19510105 -999 -999.0 -999.0 5 0.8 1 -999.0 \n", "\n", " SHK_TAG NM VPM PM TMK UPM TXK TNK TGK eor \n", "0 16 6.2 4.5 988.2 -1.0 83.0 2.2 -19.4 -20.3 eor \n", "1 17 3.8 4.3 983.6 -3.2 87.0 2.0 -9.3 -13.0 eor \n", "2 14 7.8 5.1 993.5 0.2 85.0 2.0 -5.4 -7.5 eor \n", "3 13 6.4 5.3 1005.8 0.7 81.0 2.4 -1.6 -7.7 eor \n", "4 12 8.0 6.4 1001.8 3.0 86.0 4.4 0.0 -3.4 eor " ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = pd.read_csv(\"produkt_klima_tag_19510101_20150322_01957.txt\", sep=\";\")\n", "data.head()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
STATIONS_IDQN_3FXFMQN_4RSKRSKFSDKSHK_TAGNMVPMPMTMKUPMTXKTNKTGKeor
MESS_DATUM
1951-01-011957-999-999.0-999.050.08-999.0166.24.5988.2-1.083.02.2-19.4-20.3eor
1951-01-021957-999-999.0-999.050.00-999.0173.84.3983.6-3.287.02.0-9.3-13.0eor
1951-01-031957-999-999.0-999.0510.01-999.0147.85.1993.50.285.02.0-5.4-7.5eor
1951-01-041957-999-999.0-999.050.01-999.0136.45.31005.80.781.02.4-1.6-7.7eor
1951-01-051957-999-999.0-999.050.81-999.0128.06.41001.83.086.04.40.0-3.4eor
\n", "
" ], "text/plain": [ " STATIONS_ID QN_3 FX FM QN_4 RSK RSKF SDK SHK_TAG \\\n", "MESS_DATUM \n", "1951-01-01 1957 -999 -999.0 -999.0 5 0.0 8 -999.0 16 \n", "1951-01-02 1957 -999 -999.0 -999.0 5 0.0 0 -999.0 17 \n", "1951-01-03 1957 -999 -999.0 -999.0 5 10.0 1 -999.0 14 \n", "1951-01-04 1957 -999 -999.0 -999.0 5 0.0 1 -999.0 13 \n", "1951-01-05 1957 -999 -999.0 -999.0 5 0.8 1 -999.0 12 \n", "\n", " NM VPM PM TMK UPM TXK TNK TGK eor \n", "MESS_DATUM \n", "1951-01-01 6.2 4.5 988.2 -1.0 83.0 2.2 -19.4 -20.3 eor \n", "1951-01-02 3.8 4.3 983.6 -3.2 87.0 2.0 -9.3 -13.0 eor \n", "1951-01-03 7.8 5.1 993.5 0.2 85.0 2.0 -5.4 -7.5 eor \n", "1951-01-04 6.4 5.3 1005.8 0.7 81.0 2.4 -1.6 -7.7 eor \n", "1951-01-05 8.0 6.4 1001.8 3.0 86.0 4.4 0.0 -3.4 eor " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Um jetzt schön plotten zu können, tun wir zwei Dinge:\n", "# 1) wir wandeln die Integers in der Spalte \"MESS_DATUM\", die in der Form 19510101 (stellvertretend für Jahr, Monat, Tag) auftreten\n", "# in echte Datumsobjekte um\n", "# 2) wir sagen Pandas, dass wir das Datum als unseren Default-Index benutzen möchten\n", "\n", "data.MESS_DATUM = pd.to_datetime(data.MESS_DATUM, format=\"%Y%m%d\")\n", "data = data.set_index(\"MESS_DATUM\")\n", "\n", "data.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Die Spalten sind zur Zeit nicht sehr aussagekräftig. Auf der Webseite des DWD wird aber erklärt, für was die Kürzel\n", "stehen (ftp://ftp-cdc.dwd.de/pub/CDC/observations_germany/climate/daily/kl/historical/BESCHREIBUNG_obsgermany_climate_daily_kl_historical_de.pdf)\n", "\n", "Wir geben den Spalten nun bessere Namen" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['id', 'quali1', 'windspitze_max', 'windgeschwindigkeit_mittel',\n", " 'quali2', 'niederschlagshöhe', 'niederschlagsform', 'sonnenscheindauer',\n", " 'schneehöhe', 'bedeckungsgrad', 'dampfdruck', 'luftdruck', 'temperatur',\n", " 'relative_feuchte', 'temperatur_max', 'temperatur_min',\n", " 'bodentemperatur'],\n", " dtype='object')" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.columns = [\"id\", \"quali1\", \"windspitze_max\", \"windgeschwindigkeit_mittel\", \"quali2\", \n", " \"niederschlagshöhe\", \"niederschlagsform\", \"sonnenscheindauer\", \"schneehöhe\", \"bedeckungsgrad\",\n", " \"dampfdruck\", \"luftdruck\", \"temperatur\", \"relative_feuchte\", \"temperatur_max\", \"temperatur_min\",\n", " \"bodentemperatur\", \"eor\"]\n", "\n", "# Jetzt können wir noch die letzte Spalte eor löschen, die keine Information liefert\n", "del data[\"eor\"]\n", "data.columns" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "MESS_DATUM\n", "2015-03-18 8.4\n", "2015-03-19 5.3\n", "2015-03-20 4.3\n", "2015-03-21 2.5\n", "2015-03-22 1.6\n", "Name: temperatur, dtype: float64" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Wenn wir uns nun die Lufttemperatur ausgeben lassen, wird als Index automatisch das Datum der Messung angezeigt\n", "data.temperatur.tail()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Daten filtern" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Nun sortieren wir die Daten etwas aus. Oft gibt es fehlerhafte Daten, bei denen die Temperatur auf -999 gesetzt ist\n", "\n", "data_good = data.query('temperatur > -50')" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "count 23142.000000\n", "mean 9.353379\n", "std 7.640788\n", "min -19.900000\n", "25% 3.700000\n", "50% 9.600000\n", "75% 15.400000\n", "max 30.100000\n", "Name: temperatur, dtype: float64\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/scratch/kabbe/programs/anaconda3/lib/python3.6/site-packages/matplotlib/figure.py:1743: UserWarning: This figure includes Axes that are not compatible with tight_layout, so its results might be incorrect.\n", " warnings.warn(\"This figure includes Axes that are not \"\n" ] }, { "data": { "image/png": "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\nQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Die gesäuberten Daten können wir nun leicht plotten\n", "# Da wir das Messdatum als Index ausgewählt haben, benutzt Pandas es automatisch als x-Achse\n", "print(data_good.temperatur.describe())\n", "data_good.temperatur.plot()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Daten gruppieren\n", "\n", "Diesmal wollen wir herausfinden, wieviel Schnee im Durchschnitt in jedem Monat seit Beginn der\n", "Aufzeichnungen gefallen ist." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [], "source": [ "snow = data[[\"schneehöhe\"]] # hier die extra Klammer beachten. Dadurch bekommen wir wieder einen DataFrame\n", " # statt einer Series" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
schneehöhemonth
MESS_DATUM
1951-01-01161
1951-01-02171
1951-01-03141
1951-01-04131
1951-01-05121
\n", "
" ], "text/plain": [ " schneehöhe month\n", "MESS_DATUM \n", "1951-01-01 16 1\n", "1951-01-02 17 1\n", "1951-01-03 14 1\n", "1951-01-04 13 1\n", "1951-01-05 12 1" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# hier fügen wir zusätzliche Spalten ein und nehmen nur die Tage, an denen vernünftige Werte gemessen wurden\n", "snow_selection = (snow.assign(month = snow.index.month)\n", " .query('schneehöhe >= 0'))\n", "\n", "snow_selection.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Aufgaben\n", "\n", "### Schneehöhe\n", "\n", "* Benutzen Sie groupby, um snow_selection nach Monaten zu gruppieren\n", "\n", "* Wenden Sie auf das resultierende Objekt .mean() an, um die mittlere Schneehöhe für jeden Monat zu erhalten\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Schneehöhe und Bodentemperatur\n", "\n", "* Benutzen Sie data.query um wieder fehlerhafte Werte in den Spalten schneehöhe und bodentemperatur auszusortieren\n", "\n", "* Erstellen Sie einen Scatterplot, auf dem die x-Achse die Bodentemperatur, und die y-Achse die Schneehöhe darstellt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Temperaturverlauf\n", "\n", "Plotten Sie den durchschnittlichen jährlichen Temperaturverlauf. \n", "Führen Sie dafür folgende Schritte durch:\n", "\n", "* Selektieren Sie die Spalte temperatur\n", "\n", "* fügen Sie mittels assign eine neue Spalte doy = data.index.dayofyear hinzu\n", "\n", "* Benutzen Sie groupby(\"doy\")\n", "\n", "* Bestimmen Sie das Mittel\n", "\n", "* Plotten Sie das Ergebnis\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sonnenscheindauer\n", "\n", "* Wiederholen Sie die obige Prozedur für die Sonnenscheindauer " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Niederschlag und Temperatur\n", "\n", "* Erstellen Sie einen Scatter-Plot für Niederschlag und Temperatur\n", "\n", "* Erstellen Sie einen Scatter-Plot für Sonnenscheindauer und Temperatur" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "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.6.2" } }, "nbformat": 4, "nbformat_minor": 1 }