Modul 1 » Einleitung in die Datenanalyse mit Python

Wir zeigen dir jetzt, wie du mit Python Daten verarbeiten, rechnen, und Diagramme erstellen kannst. Dabei bleiben wir allgemein: was du hier lernst, kannst du in allen wissenschaftlichen Gebieten anwenden!

Wie benutze ich Python?

Wir möchten dir zwei Wege vorstellen, wie du Python nutzen kannst. Die erste Methode ist interaktiv: Python als ein sehr praktischer Taschenrechner! Gib in die Kommandozeile einfach python ein, gefolgt von der Eingabetaste. Es wird dir angezeigt, welche Version von Python du gestartet hast, und das Zeichen zur Eingabe in der Kommandozeile ändert sich zu >>>. Achte auf die Version: es sollte ein Python 3.x.y sein. Python-Versionen, die mit 2 anfangen, sind veraltet und weichen von den hier gezeigten Beispielen ab. Jetzt kannst du Python-Befehle eingeben, und (wie immer) mit der Eingabetaste bestätigen. Probier es mal:

>>> 2+2
4
>>> a = 5
>>> b = a / 3.562
>>> b
1.403705783267827

Um einen bereits ausgeführten Befehl wieder aufzurufen, nutze die Pfeil-nach-oben-Taste, auch mehrmals hintereinander. So kannst du leicht eine kleine Änderung vornehmen, ohne alles wieder eintippen zu müssen. Und um aus Python wieder rauszukommen, nutze die Tastenkombination Ctrl-D (unter Windows Ctrl-Z), oder gib exit() ein.

Eine zweite Methode, Python zu nutzen, ist das schreiben eines Programms. Diese Python-Programme werden auch Skripte genannt. Dazu brauchst du einen Texteditor (wie z.B. geany oder gedit, siehe Benötigte Programme). Erstelle nun mit dem Texteditor eine neue Datei, z.B. mit folgendem Inhalt:

print("Hello World")
a = 6
print(a * 5.2)

Speichere diesen Skript unter dem Namen hallo.py. Python-Skripte enden immer mit ".py". Sobald du die Datei gespeichert hast, wird wahrscheinlich auch dein Texteditor merken, dass der Inhalt in Python geschrieben ist, und dir den Text automatisch farbig darstellen um dir das Programmieren zu erleichtern. Dabei geht es nur um eine Hilfe für uns Menschen: dem Programm Python ist diese farbige Darstellung egal, denn deine Datei hallo.py bleibt von dieser Darstellung unberührt.

Jetzt kannst du diesen Skript ganz einfach ausführen, indem du in die Kommandozeile python hallo.py eingibst. Wenn du dich mit der Kommandozeile nicht in dem gleichen Verzeichnis befindest, indem dein Skript abgespeichert ist, musst du dich entweder vorher dort hinbewegen (mit dem Befehl cd), oder den Pfad zum Skript angeben. So ein Pfad könnte z.B. so aussehen: python project_andromeda/hallo.py oder python /Users/bingo/Desktop/hallo.py.

Glückwunsch! Du kennst jetzt zwei sehr nützliche Arten, mit Python zu arbeiten. Alles, was wir dir ab jetzt zu Python zeigen, kannst du sowohl interaktiv wie auch in einem Skript nutzen. Die Befehle sind dabei genau die gleichen.

Grundlagen und einfaches rechnen mit Python

Text, den du mit Python verarbeiten oder ausgeben willst, muss als sogenannter "String" angegeben sein. Ein String ist durch Anführungszeichen begrenzt, zum Beispiel so: "Das ist ein String". Du kannst dabei einfache oder doppelte Anführungszeichen verwenden, solange an beiden Enden des Strings das gleiche Anführungszeichen verwendet wird: 'Das ist also auch ein String'. Diese Zeichen zur Begrenzung von Strings sind nötig, damit der Computer den Text des Strings von Python-Befehlen oder Variablen unterscheiden kann.

Der Funktion print() kann man mehrere Strings und auch variablen geben, durch Kommas getrennt. Diese werden dann einfach hintereinander ausgegeben.

a = 42
print("Die Antwort lautet ", a, "!")

Elementare Rechenaufgaben kannst du ganz natürlich in Python schreiben, und dabei auch Variablen verwenden.

a = 2.0
b = 3.5
print(a + b)
print(a - b)
print(a * b)
print(a / b)

Damit wir unsere Skripte besser verstehen können, schreiben wir immer Kommentare zu den wichtigsten Befehlen. Dadurch bekommst du eine Idee, was ein bestimmter Teil eines Skriptes macht.

# In Python sehen Kommentare so aus.
# Alles, was hinter einem # steht, wird vom Computer einfach ignoriert!

print(a**2) # So schreibt man "a hoch 2", also Potenzieren.

# Du kannst wie gewohnt Klammern verwenden, um die "Rangfolge" der
# Operationen zu bestimmen:
print( 3 * (65.8 - 4.2)/(2 - 0.1) )

Rechnen mit Numpy

In den bisherigen Beispielen haben wir einfache Rechnungen "direkt in Python" ausgeführt. Für wissenschaftliches Rechnen werden wir aber die Python-Bibliothek numpy verwenden. numpy steht für numerisches python, und ist ein sehr stark verbreitete Bibliothek.

Die wichtigste Funktion von numpy ist das rechnen mit sogenannten "Arrays". Ein Array ist eine Art Liste von Zahlen, die z.B. Vektoren und Matrizen darstellen kann (falls dir das etwas sagt, sonst macht das nichts). Wir schauen uns das gleich in einem Beispiel an.

Zunächst müssen wir am Anfang unseres Skriptes oder unserer interaktiven Arbeit numpy "importieren", und das geht so:

import numpy as np # Ab dieser Zeile ist numpy nun als "np" bekannt.

# Alles, was mit numpy zu tun hat, fängt nun mit "np." an.
# Hier ist ein Beipiel:
print("Die Zahl Pi hat ungefähr einen Wert von", np.pi)

Aber was sind denn nun diese Arrays, die wir eben besprochen haben?

# So können wir ein Array selber bauen:
a = np.array([1.5, 4.2, -2.0, 1.0])

# Dieses a ist nun ein Array mit 4 Zahlen:
print(a)

Und jetzt kommt der Clou: wenn man mit einem Array rechnet, werden viele Operationen automatisch auf alle Zahlen dieses Arrays angewandt. Das Ergebnis so einer Rechnung ist oft selber ein Array. Probiere folgende Beispiele aus:

import numpy as np
a = np.array([1.5, 4.2, -2.0, 1.0])

b = a + 2.0  # b ist nun auch ein Array mit 4 Zahlen...
print("b = ", b)

c = a**2     # c ist ebenfalls ein Array, mit jeder Zahl von a "hoch 2"!
print("c = ", c)

# Auch das rechnen mit mehreren Arrays funktioniert wie erwartet:
d = b - c   # Dafür müssen b und c allerdings die gleiche
            # Anzahl an Zahlen haben.
print("d = ", d)

Statt nur mit einzelnen Zahlen zu rechnen, können wir also mit numpy ganz einfach mit ganzen Arrays rechnen, und diese Arrays können dabei Millionen von Zahlen beinhalten.

Numpy bietet ausserdem eine Vielzahl an mathematischen Funktionen, die man sowohl auf Arrays wie auch auf einzelne Zahlen anwenden kann.

x = np.array([4, 2, 0]) # Folgendes geht genau so gut mit z.B. x = 5

# Trigonometrische Funktionen
y = np.sin(x) # Das ist die Sinusfunktion
print(y)
y = np.cos(x) # Cosinus
print(y)
y = np.tan(x) # Tangens
print(y)
# Das Argument von trigonometrischen Funktionen muss im Bogenmaß sein.
# Wenn dein x aber in Grad ist, nutze also np.sin(x * np.pi/180).

print(np.fabs(a)) # Absolutwert
print(np.sqrt(a)) # Quadratwurzel
print(np.power(a, 3)) # Allgemeines potenzieren, hier "hoch 3"

In unserem Projekt werden wir (ab dem zweiten Modul) die Logarithmusfunktion mit der Basis 10 verwenden. Was das ist, werden wir später erklären. Hier sei nur erwähnt, dass sie in numpy als np.log10(x) geschrieben wird:

x = 1000
print(np.log10(x))
# Achtung: nicht verwechseln der natürlichen Logarithmusfunktion np.log(x)

In dem bisherigen Beispielen wurden die Rechenoperationen jeweils auf jedes Element (also jede Zahl) des Arrays angewendet. Es gibt aber auch Operationen, die ein Array "zusammenfassen", und nur eine Zahl ausgeben. Zum Beispiel:

a = np.array([3, 4])

print(np.mean(a)) # Mittelwert
print(np.max(a)) # Maximalwert
print(np.min(a)) # Minimalwert

print(np.size(a)) # Größe des Arrays, also in diesem fall 2

Wir erwähnen auch noch kurz einige nützliche numpy-Funktionen, mit denen man Arrays erstellen kann:

a = np.linspace(-5, 5, 21)
print(a)
# Ergibt ein Array mit 21 Zahlen, die in regelmässigen Abständen zwichen -5
# und 5 verteilt sind.

rng = np.random.default_rng() # Das ist ein Pseudozufallszahlengenerator
b = rng.uniform(-5, 5, 100)
print(b)
# Ergibt ein Array mit 100 "zufälligen" gleichverteilten Zahlen zwischen -5
# und 5.

Einlesen von Daten

Python bietet sehr viele verschiedene Möglichkeiten, Daten (wie z.B. eine Tabelle mit Zahlen) aus einer Datei einzulesen, um dann mit diesen Daten zu rechnen. Manche Methoden sind sehr einfach, andere dafür sehr flexibel. Entscheidend ist, in welchem Format die Daten abgespeichert sind.

Wir werden in diesem Projekt unsere Daten immer als einfache Text-Dateien abspeichern, im Format tab-separated values (abgekürzt "tsv"), das sehr ähnlich zu dem Format comma-separated values (csv) ist. Wir nutzen daher für diese Dateien auch Dateinahmen mit der Endung .tsv. So eine Datei kannst du immer auch mit einem Texteditor öffnen und bearbeiten. Nehmen wir als Beispiel an, du hast eine Datei kleine_tabelle.tsv mit folgendem Inhalt:

x➡️temperatur
0.01➡️21.10
0.02➡️21.20
0.03➡️21.25
0.04➡️21.20
0.05➡️21.30

Die Datei besteht also aus mehreren Zeilen, und die erste Zeile gibt die "Namen" der Spalten an (hier "x" und "temperatur"). Wie der Name tab-separated values schon verrät, sind die Spalten in jeder Zeile mit einem Tabulatorzeichen getrennt. Das Tabulatorzeichen wird auch als "Tab" oder \t bezeichnet, und du bekommst es natürlich über die Tabulator-Taste. Ein Tab wird üblicherweise in Texteditoren nicht direkt angezeigt, und sieht daher oft aus wie ein Lehrzeichen. Daher haben wir es im Beispiel oben mit einem ➡️ dargestellt.

Probiere es jetzt mal aus! Schreibe mit deinem Texteditor eine .tsv-Datei, mit mehreren Spalten (z.B. x und temperatur wie im obigen Beispiel), und fülle diese Spalten mit einigen erfundenen Zahlen. Die Spalten trennst du mit einem Tabulator. Am sicherchsten geht das, wenn du diesen Tabulator auch sehen kannst. Viele Texteditoren ermöglichen das. Bei Geany geht das ganz einfach über das Menu View, und dann Show White Space (auf Deutsch: "zeige Lehrzeichen an").

Es ist sehr wichtig, dass immer nur ein einziger Tab den Inhalt zweier Spalten trennt. Dagegen ist es völlig unwichtig, wie die Zahlen einer Spalte im Vergleich zum Namen der Spalte ausgerichtet sind.

Speichere nun deine .tsv-Datei, und lies sie mit folgender numpy-Funktion in einem einzigen Schritt ein:

import numpy as np # Falls das noch nicht gemacht sein sollte

daten = np.genfromtxt("kleine_tabelle.tsv", delimiter="\t", names=True)

Falls das nicht klappen sollte (typischer Fehler: "could not convert string to float"), stelle sicher, dass deine Zahlen tatsächlich durch Tabs und nicht durch Lehrzeichen getrennt sind 1.

Dann können wir praktischerweise den "Namen" der spalten nutzen, um die Zahlen der Spalten als Array zu verwenden. Versuche das mit folgendem Beispiel:

print(daten["x"]) # Das ist ein Array der Spalte x
temperaturen_in_Kelvin = daten["temperatur"] + 273.15 # Auch ein Array

durchschnittstemperatur = np.mean(daten["temperatur"])
print("Durchschnittstemperatur:", durchschnittstemperatur)

Plotten mit Matplotlib

Als letzten Schritt dieser Einleitung zu Python wollen wir dir zeigen, wie du ganz allgemein Diagramme erstellen kannst. Dazu verwenden wir eine andere sehr anerkannte Python-Bibliothek: matplotlib. Mit dieser Bibliothek können alle Aspekte eines Diagramms bis ins letzte Detail kontrolliert werden, und trotzdem bleibt das erstellen von einfachen Diagrammen so unkompliziert wie möglich. Führe folgendes Beispiel mit Python aus (und wie schon erwähnt, nenne dein Skript nicht einfach matplotlib.py):

import numpy as np
import matplotlib.pyplot as plt # Wir werden matplotlib immer so importieren

# Matplotlib funktioniert mit Arrays, wir bauen uns also ein Beispiel:
x = np.linspace(0, 5, 50) # 50 regelmässig verteilte Zahlen zwischen 0 und 5
y = np.sqrt(x) # Das Array y enthält also die Quadratwurzeln der Werte von x

plt.plot(x, y, "b-") # Das erklären wir gleich...
plt.show()

Mit plt.plot(x, y, "b-") machen wir also ein Diagramm der y-Werte gegen die x-Werte, indem diese (x, y)-Punkte mit einem blauen strich verbunden sind. Dieses "b-" steht für blauer strich. Und mit plt.show() wird das Diagramm in einem neuen Fenster angezeigt, das so aussieht:

Ein Matplotlib Fenster
Punkt 1
Mit dem Heim-Knopf kommst du immer wieder auf die Standardeinstellung des Fensters zurück.
Punkt 2
Klicke auf dieses Tool, um den Inhalt des Diagramms mit der linken Maustaste verschieben zu können, und mit der rechten Maustaste zoomen zu können.
Punkt 3
Klicke auf diese Lupe, um mit der Maus schnell in einen "Ausschnitt" zoomen zu können.
Punkt 4
Hier kannst du das Diagramm als Bilddatei abspeichern, und zwar sowohl als Vektorgrafik (z.B. pdf) wie auch als Punktgrafik (z.B. png).
Punkt 5
Hier werden dir laufend die Koordinaten des Mauszeigers angezeigt.

Nachdem du diesen Skript ausgeführt hast, musst du dieses neue Fenster schließen, um mit der Kommandozeile weiterarbeiten zu können (z.B. um den Skript erneut auszuführen).

Du kannst ein Diagramm auch gleich als Datei abspeichern, ohne erst ein Fenster anzuzeigen. Das ist sehr nützlich, um mit einem Skript völlig automatisch ein Diagramm erstellen zu können. Ersetze dazu das plt.show() durch ein plt.savefig(), und gib dabei einen Dateinamen mit der Endung ".png" oder ".pdf" für das Bild an, so wie hier:

#plt.show()
plt.savefig("mein_diagramm.png")

In einem wissenschaftlichen Diagramm sollte nie eine Überschrift und die Beschreibung der Achsen fehlen. Ausserdem ist es oft sehr hilfreich, den Ausschnitt eines Diagramms festzulegen, grade wenn man mit echten verrauschten Daten arbeitet und das Diagramm direkt mit savefig abspeichern möchte. Das lässt sich alles sehr einfach mit matplotlib machen, indem du folgende Zeilen je nach Bedarf zwischen dem plot und dem show oder savefig einfügst:

plt.title("Ein Titel")
plt.xlabel("Name der X-Achse")
plt.ylabel("Name der Y-Achse")

plt.xlim(-1, 9.5) # Die X-Achse wird nun von -1 bis 9.5 gezeigt
plt.ylim(0, 100) # Und die Y-Achse von 0 bis 100

Schließlich sei noch erwähnt, dass matplotlib viele weitere Diagramm-Arten erstellen kann. So bekommt man zum Beispiel ein Histogramm der Werte eines Arrays:

x = np.random.uniform(0, 10, 1000) # 1000 zufällige Zahlen zwischen 0 und 10

plt.hist(x, 50) # Ein Histogramm dieser 1000 Zahlen, mit 50 Balken
plt.show()

Das war eine allererster Überblick der wissenschaftlichen Datenanalyse mit Python. Auf den nächsten Seiten werden wir viele weitere interessante Funktionen von numpy und matplotlib kennenlernen. Dann allerdings mit richtigen Daten!

Weitere Lernmaterialien zu Python

Wer danach noch mehr über das Programmieren, Python, Numpy und co lernen möchte, dem empfehlen wir diese frei verfügbaren deutschsprachigen Seiten:

Und weitere Links:

Fußnoten

1.
^ Im Zweifel musst du in deinem Texteditor einstellen, dass Tabs nicht automatisch durch Lehrzeichen ersetzt werden. Die gewünschte Einstellung nennt sich oft "hard tabs", statt "soft tabs". In Geany solltest du damit aber keine Probleme haben. Du kannst auch einstellen, dass Tabs mit einem Symbol angezeigt werden. Diese Einstellung heisst "Show whitespace".

Letzte Aktualisierung: 2023-12-04 11:26