Python – Daten aus CSV-Datei lesen und visualisieren

In diesem Tutorial zeige ich, wie mit Python Daten aus einer CSV-Datei gelesen und anschließend visualisiert werden können. Als Datensatz verwende ich dazu die Anzahl der Berufspendler in Kiel, bereitgestellt vom Open-Data-Portal der Stadt Kiel. Die dort zur Verfügung gestellte CSV-Datei habe ich heruntergeladen und in „kiel-berufspendler.csv“ umbenannt.

Für dieses Beispiel habe ich Python in Version 3.12 verwendet. Darüber hinaus ist es notwendig Matplotlib zu installieren:

$ pip3 install matplotlib  # Linux, macOS
PS> pip install matplotlib # Windows

Den Anfang machen die erforderlichen Importe:

#!/usr/bin/python3

import matplotlib.pyplot as plt
import csv

CSV-Datei mit csv.reader() lesen

Für das Lesen der CSV-Datei wird csv.reader() verwendet. Der Code sieht wie folgt aus:

filename: str = "csv-data/kiel-berufspendler.csv"

with open(filename) as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=";")

Da als Trennzeichen ein Semikolon verwendet wird, ist es hier wichtig, den Parameter delimiter=";" zu verwenden, andernfalls wird der Datensatz nicht richtig gelesen.

Jetzt können die Werte gelesen werden, wobei sie zu den Listen einpendler, auspendler und jahr hinzugefügt werden:

with open(filename) as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=";")

    header_row = next(csv_reader)

    einpendler: list[int] = []
    auspendler: list[int] = []
    jahr: list = []

    for row in csv_reader:
        einpendler.append(int(row[5]))
        auspendler.append(int(row[6]))
        jahr.append(int(row[4]))

Folgende Zeile ist nur erforderlich, wenn ein bestimmtes Aussehen verwendet werden soll:

plt.style.use("bmh")

Eine Übersicht zu den zur Verfügung stehenden Styles findet Ihr in diesem Github-Repository.

Liniendiagramm mit Matplotlib erstellen

Anschließend geht es an die Erstellung des Liniendiagramms. Mit der Zeile

fig = plt.figure(dpi=144, figsize=(10, 6))

werden die dots per inch und die Größe festgelegt.

Die Einpendler-Linie soll blau, die Auspendler-Linie blau dargestellt werden:

plt.plot(jahr, einpendler, c="blue")
plt.plot(jahr, auspendler, c="red")

Den Titel und die Schriftgröße lege ich so fest:

plt.title("Berufspendler in Kiel\n1994-2022", size=18)

Und die Achsenbeschriftungen werden mit folgendem Code hinzugefügt:

python
plt.xlabel("Jahr", size=14)
fig.autofmt_xdate()
plt.ylabel("Anzahl der Berufspendler", size=14)

Zum Schluss nicht die Zeile

plt.show()

vergessen. Nur dann erscheint das Diagramm auch auf dem Bildschirm.

Hier nochmal der vollständige Code:

#!/usr/bin/python3

import matplotlib.pyplot as plt
import csv

filename: str = "csv-data/kiel-berufspendler.csv"

with open(filename) as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=";")

    header_row = next(csv_reader)

    einpendler: list[int] = []
    auspendler: list[int] = []
    jahr: list[str] = []

    for row in csv_reader:
        einpendler.append(int(row[5]))
        auspendler.append(int(row[6]))
        jahr.append(row[4])

plt.style.use("bmh")

fig = plt.figure(dpi=144, figsize=(10, 6))

plt.plot(jahr, einpendler, c="blue")
plt.plot(jahr, auspendler, c="red")

plt.title("Berufspendler in Kiel\n1994-2022", size=18)

plt.xlabel("Jahr", size=14)
fig.autofmt_xdate()
plt.ylabel("Anzahl der Berufspendler", size=14)

plt.show()

Wie dem Code entnommen werden kann, werden in diesem Beispiel die Datentypen explizit angegeben, z.B.

jahr: list[str] = []

Das ist nicht zwingend erforderlich, da es sich bei Python um eine Sprache mit dynamischer Typisierung handelt.

Legende hinzufügen

Zum Liniendiagramm kann eine Legende hinzugefügt werden. Dazu sind zwei Dinge erforderlich. Zum einen sind label-Parameter hinzuzufügen:

plt.plot(jahr, einpendler, c="blue", label="Einpendler")
plt.plot(jahr, auspendler, c="red", label="Auspendler")

Zum anderen muss vor plt.show() folgende Zeile hinzugefügt werden, damit die Legende auch tatsächlich erscheint:

plt.legend(loc=(0.1, 0.8))