Inhaltsverzeichnis

Data Processing in Python

Präsentation

Wir haben nun einige Erfahrung gesammelt, um mit Tabellenprogrammen Daten zu bearbeiten und darzustellen. Aber was, wenn wir mehr Daten haben, als Excel darstellen kann?

Wieviel ist viel? 1000?

Aufgabe 1

Finde heraus, bei wie vielen Zeilen Excel oder Google Sheets in die Knie gehen.

Das Dateisystem

Alle Dateien sind im Permanentspeicher in einer hierarchischen Ordnerstruktur abgelegt. Mit Python kann die Ordnerstruktur gelesen und manipuliert werden. Damit eine Datei gelesen oder beschrieben werden kann, muss sie zuerst geöffnet werden.

Absolute und relative Pfade

Ein Dateipfad identifiziert eine Datei:

Es gibt zwei spezielle Pfadnamen:

Dateinamen und Erweiterungen

Ein Dateiname (ohne den Ordnerpfad) hat meist eine durch einen Punkt abgetrennte Erweiterung, die den Typ der Datei anzeigt:

Windows versteckt die Erweiterung standardmässig, es empfiehlt sich, sie anzuzeigen.

Dateioperationen mit Python

Mit os.listdir können wir die Dateien im momentanen Arbeitsverzeichnis auflisten:

from os import listdir print(listdir())

Dateien einlesen

Grossen Datenmengen sind natürlich nur ein Grund, weshalb wir mit einem Programm Daten lesen und schreiben wollen. Andere Gründe: wir wollen Benutzerdaten lesen oder speichern können, den Programmzustand abspeichern (und beim Neustart wieder einlesen), etc.

Wie lesen wir Daten in einer Text-Datei?

# Opens a file for reading (and closes it again after the 'with'). with open('beispiel.txt', 'r') as infile: count = 0 # Loops over all lines in the file for line in infile: count += 1 print(count)

Aufgabe 2

Lade die Datei gemeinden.csv herunter und speichere sie im Ordner, wo du dein Python-Programm abspeicherst. Verwende obigen Python-Code, um herauszufinden, wieviele Zeilen die Datei hat.

Alternativ dazu kannst du auch direkt obigen Code modifizieren - die Datei gemeinden.csv ist bereits hinterlegt.

Encoding

Achtung, Mac-Users: Die Datei verwendet in Mitteleuropa die Latin1-Codierung, einer Erweiterung von ASCII, um auch Umlaute anzeigen zu können. Diese ist in Windows voreingestellt. MacOS hingegen verwendet standardmässig die universelle Unicode (UTF-8) Codierung. Beim Öffnen der Datei kann die Abweichung korrigiert werden:

# Specify text encoding when opening a file.
with open('dateiname.txt', 'r', encoding='latin1') as infile:

Dateien schreiben

Schreiben funktioniert ganz ähnlich wie lesen, aber als zweites Argument muss 'w' (für write) angegeben werden:

with open('dateiname.txt', 'w') as outfile:
    for i in range(10):
        line = "Zeile " + str(i) + "\n"
        outfile.write(line)

Beachte:

Aufgabe 3

Beschreibe eine Datei mit einigen Zeilen. Es ist ungünstig, mehr als einige zehntausend Zeilen zu schreiben…

CSV-Format

Die Datei gemeinden.csv ist im Comma-Separated-Values Format gespeichert: Die Daten sind ganz ähnlich gespeichert wie in einer Tabelle und können auch mit Excel und Sheets geöffnet werden. Jede Zeile entspricht einer Zeile der Tabelle; die Spalten sind meist mit Kommas voneinander getrennt. Manchmal werden aber auch Semikolons (;) oder ein Tabulator (\t) als Trennzeichen verwendet.

Oft werden in der ersten Zeile die Spaltennamen festgelegt:

Gemeinde,Kanton,Einwohner,Fläche
Aadorf,TG,9216,19.93
Aarau,AG,21726,12.36
...

Wollen wir eine Zeile in die einzelnen Werte aufspalten, müssen wir dafür ein paar String-Operationen kennen:

Aufgabe 4

Wandle den Code aus Aufgabe 2 so ab, dass jeweils der Kanton auf der Konsole ausgegeben wird:

Text in Zahlen umwandeln.

Alles, was wir aus der Textdatei lesen, ist… well, Text. Damit wir mit den Werten rechnen können, müssen wir die Strings umwandeln. Dazu verwenden wir die folgenden eingebauten Funktionen:

Allerdings funktioniert das nur, wenn der String auch wirklich eine Zahl darstellt. Sonst wird eine Exception geworfen; wir können sie mit try...except auffangen:

try: my_number = int("abc") # may throw an exception print(my_number) # only executes if the above was successful except ValueError: print("not a number") # executed if an exception was thrown

Aufgabe 5

Benütze try...except um in deinem Code die Bevölkerung und die Fläche der Gemeinden auszulesen.

Aufgabe 6

Schreibe Python-Code, um die folgenden Fragen zu beantworten:

Lösung:

Aufgabe 7

Erweitere den Code, um folgende Fragen zu beantworten:

Nächstes Kapitel

Weiter mit Dictionaries.