CSV-Datei mit Pandas lesen und Daten visualisieren

Über Jahre ist die Zahl der Studierenden an der Christian-Albrechts-Universität zu Kiel (CAU) permanent gestiegen, bis die Zahlen ab dem Wintersemester 2020/21 zurückgingen. Dies ergibt sich aus einem Datensatz, der im CSV-Format auf dem Open-Data-Portal der Stadt Kiel zur Verfügung gestellt wird. In diesem Blogbeitrag möchte ich zeigen, wie Python genutzt werden kann, um mit Pandas diese Daten zu lesen und sie anschließend mit Matplotlib als Liniendiagramm visualisieren zu können.

Für Python-Projekte ist es sinnvoll eine virtuelle Umgebung zu erstellen. Nachdem sie aktiviert wurde, kann man dann Pandas und Matplotlib installieren:

pip install pandas matplotlib  # Windows
pip3 install pandas matplotlib # macOS, Linux

Den Anfang unseres Python-Skripts machen die erforderlichen Import-Anweisungen:

import matplotlib.pyplot as plt
import pandas as pd

Die Datei mit den Datensatz habe ich vom bereits erwähnten Open-Data-Portal heruntergeladen und in „kiel_students.csv“ umbenannt.

Das Lesen der Daten übernimmt die Methode read_csv():

df = pd.read_csv("kiel_students.csv", sep=";")

Die ersten fünf Zeilen könnte man sich nun anzeigen lassen, um sich einen Überblick über den Datensatz zu verschaffen:

print(df.head())

Die Datei enthält die Anzahl der Studierenden verschiedener Hochschulen. Für dieses Beispiel möchte ich aber nur die Daten der Spalte „Christian-Albrechts-Universitaet“ als Liniendiagramm darstellen. Um das Diagramm anpassen zu können, wird außerdem plt.subplots() verwendet. Dadurch erhält man eine Referenz auf ax, was uns später ermöglicht, die X-Achse anzupassen. Mit figsize wird die Breite des Diagramms definiert.

fig, ax = plt.subplots(figsize=(10, 5))

x = df["Wintersemester"]
y = df["Christian-Albrechts-Universitaet"]

Es folgen der Titel sowie die Beschriftung der X- und der Y-Achse:

plt.title("Studierende in Kiel (CAU)", size="x-large")
plt.ylabel("Anzahl", size="x-large")
plt.xlabel("Wintersemester", size="x-large")

Und dann wird das Liniendiagramm erstellt:

plt.plot(y, "*-", markersize=5, linewidth=1, color="b")

Die Datenpunkte werden als * dargestellt. Durch den Bindestriche in "*-" werden die Datenpunkte miteinander verbunden. Die Größe der Sternchen wird mit markersize und die Linienbreite mit linewidth definiert. Als Farbe wurde hier blau gewählt (color="b").

Schließlich müssen wir noch die X-Achse dahingehend anpassen, dass die Wintersemester angezeigt werden:

ax.set_xticks(range(len(x)))
ax.set_xticklabels(x, rotation="vertical")

Und gerne vergessen wird jene Zeile, die das Liniendiagramm überhaupt erst erscheinen lässt:

plt.show()

Nach der Ausführung dieses Skripts wird ein neues Fenster mit diesem Liniendiagramm dargestellt:

Anzahl der Studierenden an der CAU
Liniendiagramm mit der Anzahl der Studierenden an der CAU