Analyse von Open Data mit Pandas

Seite 2: Wetterdaten für Deutschland

Inhaltsverzeichnis

Einen Überblick über die Temperaturen in Deutschland vermittelt die Meteostat-Python-Library. Ein separater Download der Daten erübrigt sich, da die Library automatisch die erforderlichen Dateien herunterlädt.

Dafür ist zunächst eine Liste von Wetterstationen erforderlich. Da in Deutschland davon über 1000 existieren, bietet es sich an, die Analyse nur mit einer Teilmenge durchzuführen. In der Statistik heißt dieses Verfahren Sampling. Folgendes Beispiel verwendet eine Stichprobengröße von 50:

# Mehrere Threads für schnellere Downloads
Daily.max_threads = 6

# Zeitliche Periode
start = datetime(2019, 12, 1)
end = datetime(2020, 11, 30)

# 50 Zufällige Wetterstationen in Deutschland
stations = Stations()
stations = stations.region('DE')
stations = stations.inventory('daily', (start, end))
stations = stations.fetch(limit=50, sample=True)

Der Code filtert die Wetterstationen zunächst nach der Region Deutschland und wählt nur Stationen aus, die im gewünschten Zeitraum Daten gemeldet haben. Die resultierende Liste lässt sich im Anschluss verwenden, um Tageswerte zu laden und nach Monaten zu gruppieren. Im Hintergrund nutzt Meteostat unterschiedliche Pandas-Methoden zur Gruppierung und Aggregation der Daten.

# Tageswerte laden
weather = Daily(stations, start, end)

# Daten monatlich aggregieren
weather = weather.aggregate('1MS', spatial=True).fetch()

Der Parameter spatial legt fest, dass die Meteostat-Bibliothek die Daten zusätzlich räumlich zusammenfassen soll. Die Library gibt für fetch() immer einen DataFrame zurück, der sich zum weiteren Verarbeiten der Daten nutzen lässt. Eine Ausgabe der räumlich gemittelten Maximaltemperaturen zeigt, dass nun genau eine Zeile pro Monat im _DataFrame_ vorhanden ist:

| time                |    tmax |
|:--------------------|--------:|
| 2019-12-01 00:00:00 | 13.8271 |
| 2020-01-01 00:00:00 | 12.7167 |
| 2020-02-01 00:00:00 | 15.8875 |
| 2020-03-01 00:00:00 | 16.7625 |
| 2020-04-01 00:00:00 |  23.175 |
| 2020-05-01 00:00:00 | 24.5771 |
| 2020-06-01 00:00:00 | 29.3542 |
| 2020-07-01 00:00:00 | 30.9776 |
| 2020-08-01 00:00:00 | 34.3633 |
| 2020-09-01 00:00:00 | 30.0796 |
| 2020-10-01 00:00:00 | 19.9265 |
| 2020-11-01 00:00:00 | 19.6367 |

Da die Analyse nur eine kleine Teilmenge aller Wetterstationen in Deutschland einbezieht, decken sich die Werte vermutlich nicht mit den offiziellen Gebietsmittelwerten des DWD. Sie sind aber ausreichend, um einen Trend zu erkennen. Dabei gilt es zu beachten, dass es sich bei den Werten um gemittelte und nicht um absolute Maximaltemperaturen handelt.

Da nun beide Datensätze als DataFrame vorliegen, lassen sich die Werte in einem gemeinsamen Diagramm visualisieren, um den Zusammenhang zu verdeutlichen. Pandas stellt dafür die plot()-Methode bereit, die im Hintergrund Matplotlib verwendet.

# Titel des Diagramms
TITLE =\
 'Interesse an Klimaanlagen & Max. Temperaturen in Deutschland'

# Darstellung der Seitenaufrufe
ax = pageviews['Klimaanlage'].plot(color='tab:blue', 
                                   title=TITLE)
ax.set_ylabel('Seitenaufrufe', color='tab:blue')

# Darstellung der Temperaturspitzen
ax2 = ax.twinx()
ax2.set_ylabel('Max. Temperatur (°C)', color='tab:red')
weather['tmax'].plot(ax=ax2, color='tab:red')

# Ausgabe des Diagramms
plt.show()

Das Ergebnis veranschaulicht deutlich den Zusammenhang zwischen dem Aufruf der Informationen zu Klimaanlagen und den Temperaturspitzen in Deutschland:

Darstellung der Seitenaufrufe des Artikels über Klimaanlagen bei Wikipedia und der Temperaturmaxima in Deutschland (Datenquelle: Meteostat, pageviews.toolforge.org)

Die Darstellung des zugegebenermaßen vorhersehbaren Ergebnisses zeigt, welche Analysen frei verfügbare Daten ermöglichen. Das Beispiel lässt sich prinzipiell mit einem beliebigen Wikipedia-Artikel reproduzieren. Das Hinzufügen weiterer Datensätze erfordert keinen großen Aufwand.

Das vollständige Skript inklusive der benötigten CSV-Datei ist auf GitHub verfügbar.