Im zweiten Teil der Zeitreihenanalyse wird die Entwicklung der Luftqualität in deutschen Großstädten am Beispiel von Bielefeld untersucht. Die zugrunde liegenden Daten stammen von einer Messstation des Landesamts für Natur, Umwelt und Klima Nordrhein-Westfalen (https://www.lanuk.nrw.de/) und enthalten Tagesmittelwerte verschiedener Schadstoffkonzentrationen über einen Zeitraum von 30 Jahren. Analysiert werden die Konzentrationen von Stickstoffmonoxid (NO), Stickstoffdioxid (NO2), Ozon (O3), Feinstaub (PM10) sowie Schwefeldioxid (SO2). Ziel ist es, ein besseres Verständnis für die langfristige Entwicklung der Luftqualität zu gewinnen und möglichen Handlungsbedarf aufzuzeigen.
Autor:in
Zugehörigkeit
Sören Sparmann
Universität Paderborn
Veröffentlichungsdatum
30. Mai 2025
1 Entwicklung der Luftqualität
Wie hat sich die Luftbelastung durch Schadstoffe in den letzten drei Jahrzehnten verändert?
An welchen Tagen treten besonders hohe Konzentrationen auf?
Diesen und weiteren Fragen werden im zweiten Teil der Zeitreihenanalyse untersucht.
Zunächst werden die Daten erneut mit dem Befehl read_csv() eingelesen und in einem DataFrame df gespeichert.
# Bibliothek für das Arbeiten mit tabellarischen Daten importierenimport pandas as pd# Daten einlesendf = pd.read_csv('data/air_quality.csv', index_col='time', parse_dates=True)# Daten anzeigendf
NO
NO2
O3
PM10
SO2
time
1989-07-01
0.521739
32.739130
32.000000
NaN
0.000000
1989-07-02
1.347826
13.130435
47.291667
NaN
0.000000
1989-07-03
19.545455
26.227273
46.130435
NaN
2.636364
1989-07-04
18.652174
29.826087
43.500000
NaN
6.347826
1989-07-05
20.300000
38.300000
49.619048
NaN
21.352941
...
...
...
...
...
...
2022-12-27
0.000000
11.695652
51.541667
4.541667
NaN
2022-12-28
0.000000
1.869565
58.608696
1.708333
NaN
2022-12-29
0.000000
1.913043
61.043478
0.000000
NaN
2022-12-30
0.000000
3.130435
52.000000
0.000000
NaN
2022-12-31
0.000000
0.000000
55.391304
0.000000
NaN
12237 rows × 5 columns
Hinweis
Der Eintrag NaN (Not a Number) bedeutet, dass an der betreffenden Stelle kein Messwert vorliegt (z.B. weil keine Messung durchgeführt wurde oder ein Messfehler vorliegt).
3 Jahresmittelwerte
Um die Entwicklung der Schadstoffbelastung zu analysieren, werden zunächst die Jahresmittelwerte für den gesamten Zeitraum berechnet.
Da die Daten für die Jahre 1989 und 1990 unvollständig sind, wird der Betrachtungszeitraum auf die Jahre 1991 bis 2024 eingeschränkt, um eine Verfälschung der Mittelwerte zu vermeiden.
import plotly.express as px# Daten auf den Zeitraum von 1990 bis 2023 einschränkendf = df.loc['1991':'2024']# Jahresdurchschnitt ermittelnannual_mean = df.resample('YS').mean()# Daten visualisierenfig = px.line(annual_mean, title='Entwicklung der Luftqualität seit 1991')fig.update_xaxes(title="Jahr")fig.update_yaxes(title="Schadstoffkonzentration<br>Jahresmittelwert")fig.update_legends(title="Schadstoff")fig.show()
Aufgabe 4
Wie hat sich die Schadstoffbelastung in den letzten drei Jahrzehnten entwickelt?
Wie hat sich die COVID-19-Pandemie (2020 - 2023) auf die Luftqualität ausgewirkt?
Wie lässt sich die Entwicklung der einzelnen Schadstoffe erklären? Recherchiere im Internet nach Ursachen für den Rückgang bzw. Zuwachs des jeweiligen Schadstoffs! (1-2 Stichpunkte)
(10 Minuten)
Lösung
Die Schadstoffkonzentration hat mit Außnahme von Ozon insgesamt kontinuierlich abgenommen.
Die Schwefeldioxidkonzentration ist so niedrig, dass diese nicht mehr gemessen wird.
Die Schadstoffkonzentration hat während der Anfangsphase der Covid-19-Pandemie stark abgenommen und hat anschließend wieder zugenommen.
Der folgende Ausschnitt aus einem Artikel liefert eine Erklärung für den Anstieg der Ozonkonzentration:
Bodennahes Ozon wird nicht direkt freigesetzt, sondern bei intensiver Sonneneinstrahlung durch komplexe photochemische Prozesse aus Vorläuferstoffen - überwiegend Stickstoffoxiden und flüchtigen organischen Verbindungen - gebildet. Es wird deshalb als sekundärer Schadstoff bezeichnet. Hohe Lufttemperaturen und starke Sonneneinstrahlung begünstigen die Entstehung von bodennahem Ozon in der Atmosphäre. Dies ist typisch für die meteorologischen Bedingungen während sommerlicher Hochdruckwetterlagen.
In welchem Monaten ist die Schadstoffbelastung in der Luft besonders hoch?
Um die Daten anhand der Monate zu gruppieren, muss zunächst der Monat für jeden Eintrag ermittelt werden. Dazu wird auf das Attribut month (Monat) zugegriffen.
# Jahresverlauffig = px.line(monthly_mean, title="Durchschnittliche Schadstoffkonzentration in Verlauf eines Jahres")fig.update_xaxes(title="Monat")fig.update_yaxes(title="Schadstoffkonzentration<br>Monatsmittelwert [µg/m<sup>3</sup>]")fig.update_legends(title="Schadstoff")fig.show()
Aufgabe 5
Welche Schadstoffe sind eher im Winter / eher im Sommer vorhanden?
Wie lassen sich die unterschiedlichen Verläufe erklären? Nenne mögliche Ursachen! (Stichpunkte)
(10 Minuten)
Lösung
Die Kontentration von NO, NO2, PM10 und SO2 sind im Winter höher als im Sommer, da in dieser Jahrezeit mehr geheizt wird.
Die Ozonkonzentration ist dagegen im Sommer erhöht, da die hohen Temperaturen die Bildung von bodennahem Ozon begünstigen.
5 Durchschnittliche Schaddstoffbelastung nach Wochentag
Auf die gleiche Weise wie zuvor lassen sich die Daten auch anhand des Wochentags gruppieren. Hierfür wird das Attribut dayofweek (Wochentag) verwendet.
Der Ozone Weekend Effect in Städten bezeichnet das Phänomen, dass die Ozonkonzentrationen an Wochenenden oft höher sind als an Werktagen, trotz geringerer Emissionen von Vorläuferstoffen wie Stickoxiden. Dies liegt daran, dass an Werktagen Stickoxide aus Verkehr und Industrie als Ozonzerstörer wirken, während an Wochenenden die geringeren Emissionen dazu führen, dass weniger Ozon abgebaut wird. Zudem tragen veränderte meteorologische Bedingungen und eine Verschiebung der chemischen Prozesse zur Ozonbildung an Wochenenden bei. Die genaue Dynamik variiert je nach Stadt und regionalen Bedingungen.
Vielleicht hast du schon einmal davon gehört, dass die Feinstaubbelastung in der Silvesternacht besonders hoch sein soll. Aber stimmt das wirklich?
In den letzten beiden Abschnitt wurden die Daten mit der groupby() Methode nach dem Attributen df.index.month (Monat) und df.index.dayofweek (Wochentag) gruppiert.
Aufgabe 6
Gruppiere die Daten nach dem Tag im Jahr. Verwende dafür das Attribut df.index.dayofyear.
Überprüfe, ob die Feinstaubbelastung an Silvester und Neujahr höher ist als im Rest des Jahres!