9.2 - Übungen - 19.01.18
%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
Wetterdaten einlesen¶
Dafür benutzen wir read_csv. CSV steht für "Comma Separated Values".
data = pd.read_csv("produkt_klima_tag_19510101_20150322_01957.txt", sep=";")
data.head()
# Um jetzt schön plotten zu können, tun wir zwei Dinge:
# 1) wir wandeln die Integers in der Spalte "MESS_DATUM", die in der Form 19510101 (stellvertretend für Jahr, Monat, Tag) auftreten
# in echte Datumsobjekte um
# 2) wir sagen Pandas, dass wir das Datum als unseren Default-Index benutzen möchten
data.MESS_DATUM = pd.to_datetime(data.MESS_DATUM, format="%Y%m%d")
data = data.set_index("MESS_DATUM")
data.head()
Die Spalten sind zur Zeit nicht sehr aussagekräftig. Auf der Webseite des DWD wird aber erklärt, für was die Kürzel stehen (ftp://ftp-cdc.dwd.de/pub/CDC/observations_germany/climate/daily/kl/historical/BESCHREIBUNG_obsgermany_climate_daily_kl_historical_de.pdf)
Wir geben den Spalten nun bessere Namen
data.columns = ["id", "quali1", "windspitze_max", "windgeschwindigkeit_mittel", "quali2",
"niederschlagshöhe", "niederschlagsform", "sonnenscheindauer", "schneehöhe", "bedeckungsgrad",
"dampfdruck", "luftdruck", "temperatur", "relative_feuchte", "temperatur_max", "temperatur_min",
"bodentemperatur", "eor"]
# Jetzt können wir noch die letzte Spalte eor löschen, die keine Information liefert
del data["eor"]
data.columns
# Wenn wir uns nun die Lufttemperatur ausgeben lassen, wird als Index automatisch das Datum der Messung angezeigt
data.temperatur.tail()
Daten filtern¶
# Nun sortieren wir die Daten etwas aus. Oft gibt es fehlerhafte Daten, bei denen die Temperatur auf -999 gesetzt ist
data_good = data.query('temperatur > -50')
# Die gesäuberten Daten können wir nun leicht plotten
# Da wir das Messdatum als Index ausgewählt haben, benutzt Pandas es automatisch als x-Achse
print(data_good.temperatur.describe())
data_good.temperatur.plot()
plt.show()
Daten gruppieren¶
Diesmal wollen wir herausfinden, wieviel Schnee im Durchschnitt in jedem Monat seit Beginn der Aufzeichnungen gefallen ist.
snow = data[["schneehöhe"]] # hier die extra Klammer beachten. Dadurch bekommen wir wieder einen DataFrame
# statt einer Series
# hier fügen wir zusätzliche Spalten ein und nehmen nur die Tage, an denen vernünftige Werte gemessen wurden
snow_selection = (snow.assign(month = snow.index.month)
.query('schneehöhe >= 0'))
snow_selection.head()
Schneehöhe und Bodentemperatur¶
-
Benutzen Sie data.query um wieder fehlerhafte Werte in den Spalten schneehöhe und bodentemperatur auszusortieren
-
Erstellen Sie einen Scatterplot, auf dem die x-Achse die Bodentemperatur, und die y-Achse die Schneehöhe darstellt
Temperaturverlauf¶
Plotten Sie den durchschnittlichen jährlichen Temperaturverlauf. Führen Sie dafür folgende Schritte durch:
-
Selektieren Sie die Spalte temperatur
-
fügen Sie mittels assign eine neue Spalte doy = data.index.dayofyear hinzu
-
Benutzen Sie groupby("doy")
-
Bestimmen Sie das Mittel
-
Plotten Sie das Ergebnis
Sonnenscheindauer¶
- Wiederholen Sie die obige Prozedur für die Sonnenscheindauer
Niederschlag und Temperatur¶
-
Erstellen Sie einen Scatter-Plot für Niederschlag und Temperatur
-
Erstellen Sie einen Scatter-Plot für Sonnenscheindauer und Temperatur