CSV-Dateien mit Python einlesen

In diesem Beitrag zeige ich, wie CSV-Dateien mit Python eingelesen werden können. Als Datensatz dient hierfür die Anzahl der Verkehrsunfälle in Kiel, bereitgestellt vom Open Data Portal der Stadt Kiel.

Im Gegensatz zu älteren, ebenfalls in diesem Blog vorgestellten Vorgehensweisen, nutze ich für dieses Beispiel das Modul csv (anstelle von pandas).

Zunächst wird eine neue Python-Datei angelegt. Da es mir hier um die Darstellung der Verkehrsunfälle unter Alkoholeinfluss geht, habe ich die Datei “kiel_unfaelle_alkohol.py” genannt. Außerdem habe ich die CSV-Datei mit der Anzahl der Verkehrsunfälle heruntergeladen und in “kiel_unfaelle.csv” umbenannt. Dabei habe ich darauf geachtet, dass beim Speichern als Zeichenkodierung UTF–8 ausgewählt war.

Die Datei “kiel_unfaelle_alkohol.py” beginnt nun wie folgt:

#!/usr/bin/env python3

import csv
import matplotlib.pyplot as plt

filename = 'kiel_unfaelle.csv'

Neben dem Modul csv wird auch das Modul matplotlib importiert, das später für die Visualisierung der Daten genutzt werden soll.

Jetzt geht es an das Lesen der Daten. Folgende Zeilen sind dafür ausreichend:

with open(filename) as csv_file:
    reader = csv.reader(csv_file, delimiter=';')
    header_row = next(reader)

Wie Ihr sehen könnt, erwartet die Methode reader() zwei Argumente: Zum einen die einzulesende Datei, zum anderen das Zeichen, das die Daten trennt (hier ein Semikolon).

Die erste Zeile der CSV-Datei enthält die Überschriften zu den jeweiligen Spalten. Uns interessieren hier nur die Spalten zu den Jahresangaben und zu den Verkehrsunfällen unter Alkoholeinfluss, wobei wir die Indizes zu diesen Spalten benötigen. Wir können nun die Spalten zählen oder uns die Überschriften mit den Indizes mithilfe folgenden Codes anzeigen lassen:

for index, column_header in enumerate(header_row):
    print(index, column_header)

Dadurch erhalten wir u.a. folgende Ausgabe:
4 Jahr
10 Alkoholeinfluss

Die Indizes “4” und “10” können nun dazu genutzt werden, zwei Listen (“years” und “values”) mit Daten zu füllen:

years, values = [], []

for row in reader:
    years.append(row[4])
    value = int(row[10])
    values.append(value)

Schließlich kann dann matplotlib für die Visualisierung genutzt werden:

fig = plt.figure(dpi=128, figsize=(10, 6))
plt.plot(years, values, c='red')

plt.title("Verkehrsunfälle in Kiel - Alkoholeinfluss", fontsize=16)
plt.xlabel('Jahr', fontsize=16)

fig.autofmt_xdate()
plt.ylabel("Anzahl", fontsize=16)
plt.tick_params(axis='both', which='major')

plt.show()

Hinsichtlich dieses letzten Code-Abschnitts sei auf meine anderen Beiträge zur Visualisierung mit matplotlib verwiesen. Oder Ihr werft einen Blick in die offizielle Dokumentation.

Weiterführende Links

Zuletzt aktualisiert am 3. Juni 2020