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))