Wie viele Ehen werden in Kiel geschlossen? Daten hierzu, wie auch zu zahlreichen anderen Themen, können vom Open-Data-Portal der Stadt Kiel heruntergeladen werden. Die meisten Datensätze liegen im CSV-Format vor, das maschinenlesbar ist. Die Daten lassen sich also durch Software verarbeiten. Und um so eine Verarbeitung geht es in diesem Artikel. Die Entwicklung der geschlossenen Ehen im Zeitraum von 1988 bis 2023 soll grafisch — als Liniendiagramm — dargestellt werden.
Das Thema Ehe ist in diesem Blog nicht neu. Im Jahre 2019 hatte ich bereits einen Datensatz zu Ehescheidungen in Kiel als Liniendiagramm dargestellt. Der Code dazu, wie auch zu anderen Beispielen zur Datenvisualisierung, findet ihr im Github-Repository Kiel-Open-Data. Realisiert wurde es mit Python und den Bibliotheken Pandas und Matplotlib. Ihr könnt sie — am besten in einer virtuellen Umgebung — mit pip installieren:
pip install pandas matplotlibDiese Bibliotheken werden auch in diesem Projekt genutzt. Beginnen wir also mit den Importanweisungen:
import pandas as pd
import matplotlib.pyplot as pltDen Datensatz liegt als CSV-Datei vor und kann von dieser Seite heruntergeladen werden.
Der Pfad zur CSV-Datei, die sich in einem Unterverzeichnis mit der Bezeichnung „csv-data“ befindet, weise ich der Variable csv_data zu. Pandas wird dann für das Lesen dieses Datensatzes verwendet:
csv_data = "csv-data/kiel-eheschliessungen.csv"
df = pd.read_csv(csv_data, sep=";")Von Interesse sind zwei Spalten, nämlich das Jahr und die Anzahl der Eheschließungen. Sie weisen wir den Variablen x und y zu:
x = df["Jahr"]
y = df["Eheschliessungen"]Wenn ihr einen Blick in die Spaltenbezeichnungen des Datensatzes werft, werdet ihr feststellen, dass von „Eheschliessungen“ ein Leerzeichen ist. Dem müsst ihr Rechnung tragen, indem ihr entweder in der CSV-Datei das Leerzeichen entfernt oder im Code ebenfalls ein Leerzeichen voranstellt. Dann würde diese Zeile wie folgt aussehen:
y = df[" Eheschliessungen"]Nun weisen wir die Werte eines Tupels, das die Funktion plt.subplots() zurückgibt den Variablen fig und ax zu.
fig, ax = plt.subplots()Bei fig (Figure) handelt es sich um ein Container-Objekt. Es ist sozusagen das gesamte Fenster mit den dazugehörigen Elementen wie Hintergrundfarbe, Fenstertitel, usw. Bei ax (Axes) handelt es sich um die x- und die y-Achse, also das Gitternetz, in dem dann das Liniendiagramm gezeichnet wird. Diese Vorgehensweise ist nicht zwingend erforderlich. Sie ist aber nützlich, da man so mehr Kontrolle über die grafische Darstellung erhält.
Nun werden ein Titel und die Bezeichnungen der Achsen hinzugefügt:
plt.title("Eheschliessungen in Kiel\n (Anzahl pro Jahr)", size="x-large")
plt.ylabel("Anzahl", size="large")
plt.xlabel("Jahr", size="x-large")Wenn ihr jetzt noch die Zeile plt.show() hinzufügt und den bisherigen Code ausführt, erscheint folgende Grafik:
Das Aussehen der x-Achse kann wie folgt angepasst werden:
ax.set_xticks(range(len(x)))
ax.set_xticklabels(x, rotation="vertical")Zum einen geben wir an, dass für die Beschriftung die Jahreszahlen verwendet werden sollen, zum anderen sollen die Jahreszahlen vertikal dargestellt werden. Dies verhindert Überlappungen.
Es fehlt jetzt noch eine Zeile, nämlich die Folgende:
plt.plot(y, "*-", markersize=5, linewidth=1, color="g")Damit werden die Punkte eingetragen und miteinander verbunden. Als Farbe habe ich grün gewählt. Das Ergebnis sieht nun wie folgt aus:
Zum Schluss nochmal der gesamte Code:
#!/usr/bin/env python3
import matplotlib.pyplot as plt
import pandas as pd
csv_data = "csv-data/kiel-eheschliessungen.csv"
df = pd.read_csv(csv_data, sep=";")
x = df["Jahr"]
y = df["Eheschliessungen"]
fig, ax = plt.subplots()
plt.title("Eheschliessungen in Kiel\n (Anzahl pro Jahr)", size="x-large")
plt.ylabel("Anzahl", size="large")
plt.xlabel("Jahr", size="x-large")
ax.set_xticks(range(len(x)))
ax.set_xticklabels(x, rotation="vertical")
plt.plot(y, "*-", markersize=5, linewidth=1, color="g")
plt.show()

