Entwicklung der Luftqualität (Teil 2)

Zeitreihenanalyse der Luftqualität

Data Literacy
Entwicklung
Schadstoffe
Luftqualität
Zeitreihe
pandas
plotly

Im zweiten Teil der Zeitreihenanalyse wird die zeitliche 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

9. März 2026

1 Entwicklung der Luftqualität

Wie hat sich die Luftbelastung durch Schadstoffe in den letzten drei Jahrzehnten verändert?

An welchen Tagen traten besonders hohe Konzentrationen auf?

Diesen und weiteren Fragen werden im zweiten Teil der Zeitreihenanalyse untersucht.

Foto „Car exhaust“ (Ausschnitt) von eutrophication&hypoxia (Ruben de Rijcke) unter der Lizenz CC BY 2.0 via Flickr.

Foto „Car exhaust“ (Ausschnitt) von eutrophication&hypoxia (Ruben de Rijcke) unter der Lizenz CC BY 2.0 via Flickr.

2 Daten einlesen

Zunächst muss der Datensatz erneut mit dem Befehl read_csv(...) eingelesen und in einem DataFrame df gespeichert werden.

Aufgabe 1

  • Lese den Datensatz mit Hilfe der Funktion pd.read_csv(...) ein.
  • Der Datensatz ist unter folgendem Pfad gespeichert: data/air_quality.csv
  • Verwende die Parameter index_col='time' und parse_dates=True. Dadurch wird die Spalte time als Index festgelegt.

(5 Minuten)

WarnungLösung
# Data Science Bibliothek importieren
import pandas as pd

# Daten einlesen
df = pd.read_csv('data/air_quality.csv', index_col='time', parse_dates=True)

# Daten anzeigen
df
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

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 einschließlich 2023 eingeschränkt, um eine Verfälschung der Mittelwerte zu vermeiden.

Aufgabe 2

  1. Wie hat sich die Schadstoffbelastung in den letzten drei Jahrzehnten entwickelt?
  2. Wie hat sich die COVID-19-Pandemie (2020 - 2023) auf die Luftqualität ausgewirkt?
  3. 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)

    • Die Schadstoffkonzentration hat mit Außnahme von Ozon insgesamt kontinuierlich abgenommen.
    • Die Schwefeldioxidkonzentration ist so niedrig, dass diese nicht mehr gemessen wird.
  1. Die Schadstoffkonzentration hat während der Anfangsphase der Covid-19-Pandemie stark abgenommen und hat anschließend wieder zugenommen.
  2. 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.

Quelle: Umweltbundesamt

4 Durchschnittlicher Jahresverlauf

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.

Anschließend werden die Daten anhand der Liste der Monate gruppiert und der Mittelwert berechnet.

HinweisHinweis

Anders als zuvor wurden hier die Monate aus verschiedenen Jahren gruppiert, um einen mittleren Jahresverlauf zu ermitteln.

Aufgabe 3

  1. Welche Schadstoffe sind eher im Winter / eher im Sommer vorhanden?
  2. Wie lassen sich die unterschiedlichen Verläufe erklären? Nenne mögliche Ursachen! (Stichpunkte)

(10 Minuten)

  • 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.

Aufgabe 4

  1. Gruppiere die Daten nach den entsprechenden Wochentagen.
  2. Visualisiere die Daten anschließend in einem Säulendiagramm. Verwende dafür die Funktion px.bar(...) mit dem Parameter barmode='group'.
  3. Wie unterscheidet sich die Feinstaubbelastung am Wochenende von jener innerhalb der Woche? Suche im Internet nach einer Erklärung!

(10 Minuten)

WarnungLösung
# Daten nach Wochentag gruppieren
grouped = df.groupby(dayofweek)

# Mittelwert berechnen
weekday_mean = grouped.mean()

# Wochentagsnamen verwenden
weekday_mean.index = ['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag']
weekday_mean
NO NO2 O3 PM10 SO2
Montag 15.570733 26.232004 38.093747 17.756392 3.838803
Dienstag 17.106134 28.098035 36.942886 19.509177 4.314447
Mittwoch 16.271507 28.311813 36.914575 20.470413 4.416551
Donnerstag 15.957912 28.281339 36.860908 20.702060 4.336398
Freitag 16.399849 28.235863 36.970284 20.490711 4.649018
Samstag 10.447323 22.679652 41.149322 20.029203 3.891674
Sonntag 6.053957 16.676705 45.237550 18.625552 3.031871
Warnung
fig = px.bar(weekday_mean, barmode='group', title="Durchschnittliche Schadstoffkonzentration nach Wochentag")

fig.update_xaxes(title='Wochentag')
fig.update_yaxes(title='Schadstoffkonzentration')
fig.update_legends(title='Schadstoff')

fig.show()

Ozon Weekend Effect

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.

Quelle: Pierre Sicard, Elena Paoletti, Evgenios Agathokleous, Valda Araminienė, Chiara Proietti, Fatimatou Coulibaly, Alessandra De Marco, Ozone weekend effect in cities: Deep insights for urban air pollution control, Environmental Research, Volume 191, 2020

6 Feinstaub an Silvester und Neujahr (Zusatz)

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 5 (Zusatz)

  1. Gruppiere die Daten nach dem Tag im Jahr. Verwende dafür das Attribut df.index.dayofyear.
  2. Überprüfe, ob die Feinstaubbelastung an Silvester und Neujahr höher ist als im Rest des Jahres!

(15 Minuten)

WarnungLösung
fig = px.line(df.groupby(df.index.dayofyear).mean())

fig.update_xaxes(title='Tag')
fig.update_yaxes(title='Schadstoffkonzentration')
fig.update_legends(title='Schadstoff')

fig.show()

In der Abbildung ist ein deutlicher Anstieg der Feinstaubbelastung and Silvester und Neujahr zu beobachten.

7 Zusammenfassung

In diesem Notebook hast du gelernt, wie du:

  • Daten mit der Funktion read_csv() einlesen kannst,
  • ein Liniendiagramm mit line() und ein Säulendiagramm mit bar() erstellst,
  • eine bestimmte Spalte aus den Daten selektierst, z. B. mit df[<Spalte>],
  • Daten anhand einer Bedingung filterst, z. B. mit df[cond],
  • Zeitreihen mit resample() in Zeitintervalle gruppierst und mit Funktionen wie count(), mean(), min() oder max() aggregierst.

Wiederverwendung

Zitat

Mit BibTeX zitieren:
@online{sparmann2026,
  author = {Sparmann, Sören},
  title = {Entwicklung der Luftqualität (Teil 2)},
  date = {2026-03-09},
  url = {https://material.cdec.io/modul_2/submodules/01_luftqualitaet/02_entwicklung_luftqualitaet.html},
  langid = {de}
}
Bitte zitieren Sie diese Arbeit als:
Sparmann, Sören. 2026. “Entwicklung der Luftqualität (Teil 2).” March 9, 2026. https://material.cdec.io/modul_2/submodules/01_luftqualitaet/02_entwicklung_luftqualitaet.html.