1 Einleitung: Datenanalyse mit Python
Stärken:
Einstieg: sehr einfach, da die Sprache genau dafür entworfen wurde und mit wenigen Strukturen und Funktionalitäten auskommt
Generalität: wird weltweit in allen Disziplinen eingesetzt ohne domänenspezifische Vereinfachungen zu nutzen
Erweitbarkeit: riesige Anzahl bereits verfügbarer Module mit sehr umfangreichen Funktionsumfängen. Die Installation klappt in der Regel reibungslos und schnell
Verfügbarkeit: freie Interpreter für alle populären Computersysteme, sowohl der Interpreter als auch fast alle Module sind quelloffen und frei verfügbar
Schwächen:
Python wurde nicht speziell für die Datenanalyse gemacht. Die Sprache und die verfügbaren Module entwickeln sich dynamisch, sodass viele Dinge nicht einheitlich umgesetzt ist. Die Dokumentation ist sehr umfangreich, aber nicht sonderlich zugänglich
Die Erzeugung und Auswertung von Daten ist ein zentraler Bestandteil wissenschaftlicher Forschung. Die computergestützte Datenanalyse ermöglicht es, große Datenmengen (teil-)automatisiert auszuwerten. Gut lesbare Skriptsprachen wie Python sorgen für eine nachvollziehbare Datenverarbeitung und ermöglichen es, Analysen “auf Knopfdruck” zu wiederholen oder anzupassen.
Python Logo von Python Software Foundation steht unter der GPLv3. Die Wort-Bild-Marke ist markenrechtlich geschützt: https://www.python.org/psf/trademarks/. Das Werk ist abrufbar auf wikimedia. 2008
Python kommt als schlichte Konsole daher. Python-Code wird in die Konsole eingegeben oder in einer reinen Textdatei, dem Skript, gespeichert. Der Programmcode wird von einem sogenannten Interpreter ausgeführt. Der Interpreter übersetzt die Programmanweisungen des Skripts in Maschinencode für das jeweilige Computersystem. Dadurch kann das Skript auf verschiedenen Computersystemen ausgeführt werden. Moderne Python-Interpreter sind nicht auf durch ASCII darstellbare Zeichen limitiert und können auch mit Zeichen aus dem Format UTF-8 umgehen, das das ASCII-Format z. B. um deutsche Sonderzeichen erweitert.
Zahlreiche Funktionen wie Codeformatierung, Codevervollständigung und Fehleranalyse werden durch eine sogenannte integrierte Entwicklungsumgebung (Integrated Development Environment, IDE) bereitgestellt.
1.1 Grundbegriffe der objektorientierten Programmierung
Python ist eine objektorientierte Programmiersprache. Die objektorientierte Programmierung ist ein System, um Ordnung in komplexe Computerprogramme zu bringen. In diesem Abschnitt werden die Grundbegriffe der objektorientierten Programmierung mit Python vermittelt. Sie erfahren, was der Unterschied zwischen einem Objekt, einer Klasse und dem Datentyp ist.
Klassen, Typen, Objekte, Attribute
Ein Pythonprogramm besteht aus verschiedenen Elementen: Operatoren und Operanden, Funktionen und Methoden, Werten und Variablen und vielem mehr. Alles in Python ist ein Objekt.
Jedes Objekt gehört zu einer Klasse, beispielsweise zur Klasse der Ganzzahlen. Die Klasse bestimmt als Blaupause die Eigenschaften und das Verhalten des Objekts - etwa welche Daten gespeichert und welche Operationen ausgeführt werden können. Ein kurzes Beispiel: Abhängig von ihrer Klasse, verhalten sich Objekte anders mit dem Operator +
.
print(type(2), 2 + 2, "Ganzzahlen werden addiert.")
print(type('a' and '2'), 'a' + '2', "Zeichen werden verkettet.")
print(type(True), True + True, "Wahrheitswerte werden addiert.")
<class 'int'> 4 Ganzzahlen werden addiert.
<class 'str'> a2 Zeichen werden verkettet.
<class 'bool'> 2 Wahrheitswerte werden addiert.
Das liegt daran, dass das Verhalten des Operators +
für die Klassen Ganzzahlen (‘int’), Zeichenfolgen (‘str’) und Boolesche Werte (‘bool’) definiert ist. Anders verhält es sich mit None
, einer Klasse, mit der nicht existente Werte verarbeitet werden:
print(None + None)
unsupported operand type(s) for +: 'NoneType' and 'NoneType'
Python kennt sehr viele Klassen. In Python werden Klassen (class) auch Typen (type) genannt. In früheren Versionen von Python waren Klassen und Typen noch verschieden. Inzwischen gibt es diesen Unterschied nicht mehr, beide Begriffe kommen aber noch in der Sprache vor.
Python 3. The standard type hierarchy. von Максим Пе ist lizensiert unter CC BY SA 4.0 und abrufbar auf wikimedia. 2018
Zu welcher Klasse bzw. zu welchem Typ ein Objekt gehört, kann mit der Funktion type()
ermittelt werden.
print(type(print))
<class 'builtin_function_or_method'>
Attribute speichern Eigenschaften eines Objekts. Sie treten in der Form objekt.attribut
auf und werden ohne nachfolgende Klammern aufgerufen. Attribute haben an dieser Stelle der Einführung keine praktische Bedeutung, werden uns aber später wieder begegnen. Eine zweite Form der Attribute ist die Methode. Methoden sind Funktionen, die zu einer bestimmten Klasse gehören. Methoden haben die Form objekt.methode()
, werden also mit nachfolgenden Klammern aufgerufen. Die Benutzung von Funktionen und Methoden lernen wir in den kommenden Kapiteln kennen. Wie Sie die verfügbaren Attribute und Methoden eines Objekts bestimmen, erfahren Sie in Beispiel 7.1 und Beispiel 3.1.
1.2 Programmcode formatieren
Bei der Formatierung von Python-Code müssen nur wenige Punkte beachtet werden. Um mit Python eine Ausgabe zu erzeugen, wird die Funktion print(eingabe)
verwendet. Diese Funktion gibt das Argument eingabe aus.
- Zahlen und Operatoren können direkt eingegeben werden. Text, genauer eine Zeichenfolge, muss in einfache oder doppelte Anführungszeichen gesetzt werden, andernfalls interpretiert Python diesen als Namen eines Objekts. Zeichenfolgen können neben Buchstaben, Sonderzeichen und Zahlen enthalten.
print(1 + 2)
print('123: Hallo Welt!')
= 'Hallo Python!'
text_variable print(text_variable)
3
123: Hallo Welt!
Hallo Python!
- Kommentare werden mit einer vorangestellten Raute
#
gekennzeichnet. Kommentare markieren Code, der nicht ausgeführt werden soll, oder Erläuterungen.
# Ein reiner Kommentar
# print("Python ist großartig!") # auskommentierter Code, gefolgt von einem Kommentar
print("Python ist ziemlich gut.") # auszuführender Code, gefolgt von einem Kommentar
Python ist ziemlich gut.
- Ausdrücke müssen in einer Zeile stehen. Längere Ausdrücke können mit dem Backslash
\
über mehrere Zeilen fortgesetzt werden (hinter\
darf keine#
stehen). Innerhalb von Funktionen wie zum Beispielprint()
können Zeilen nach jedem Komma fortgesetzt werden.
= 15
variable1 = 25
variable2
# Zeilenfortsetzung mit \
= variable1 + \
summe
variable2
# Zeilenfortsetzung innerhalb einer Funktion
print(variable1,
variable2, summe)
15 25 40
In dem obenstehenden Beispiel werden Variablen angelegt. Mit Variablen beschäftigten wir uns im nächsten Kapitel. Trotzdem möchte ich Sie bitten, sich variable1 und variable2 nocheinmal kurz anzusehen. Wir kommen später darauf zurück.
- Die Anzahl der Leerzeichen zwischen Operanden und Operatoren kann beliebig sein.
print(1+0, 1 + 1, 1 + 2)
1 2 3
- Die Einrückung mit Leerzeichen kennzeichnet einen zusammengehörigen Code-Block. Innerhalb eines Code-Blocks muss immer die gleiche Anzahl Leerzeichen verwendet werden. Es muss mindestens ein Leerzeichen gesetzt werden, ansonsten ist die Anzahl der Leerzeichen beliebig. Üblich sind 2 oder 4 Leerzeichen.
Die folgende for-Schleife führt alle Anweisungen im eingerückten Ausführungsblock aus. Die anschließende, nicht eingerückte Zeile markiert den Beginn einer neuen, nicht zur Schleife gehörigen Anweisung.
for i in range(2):
print(variable1)
print(variable2)
print(summe)
15
25
15
25
40
1.3 Ausgabe formatieren
Mit sogenannten f-Strings
können formatierte Zeichenfolgen erstellt werden. Formatierte Zeichenfolgen werden mit einem den Anführungsstrichen vorangestellten f
erstellt. Werte und Variablen können durch Platzhalter eingesetzt werden, die mit geschweiften Klammern {}
angegeben und mit Formattierungsinformationen versehen werden. Das Formatierungsformat innerhalb der geschweiften Klammer ist vereinfacht dargestellt:
{Variablenname:PlatzbedarfAusgabetyp}
Ein f-String mit Platzhaltern ohne Formatierungsinformationen:
= 5
zahl1 = 7
zahl2 = zahl1 / zahl2
verhältnis print(f"Das Verhältnis von {zahl1} zu {zahl2} ist {verhältnis}.")
Das Verhältnis von 5 zu 7 ist 0.7142857142857143.
Die Anzahl der darzustellenden Nachkommastellen kann wie folgt festgelegt werden: {verhältnis:.2f}
.
:
leitet die Formatierungsbefehle ein..
gibt an, dass Formatierungsinformationen für die Darstellung hinter dem Dezimaltrennzeichen folgen.2
ist der Wert für die darzustellenden Nachkommastellen.f
spezifiziert die Darstellung einer Gleitkommazahl ‘float’.
print(f"Das Verhältnis von {zahl1} zu {zahl2} ist {verhältnis:.2f}.")
Das Verhältnis von 5 zu 7 ist 0.71.
Das Gleiche ist mit einem Wert möglich:
print(f"Das Verhältnis ist genauer {0.7142857142857143:.3f}.")
Das Verhältnis ist genauer 0.714.
Ein Wert für die insgesamt darzustellenden Stellen wird vor dem Dezimaltrennzeichen übergeben {verhältnis:7.2f}
bzw. inklusive führender Nullen {verhältnis:07.2f}
:
print(f"Das Verhältnis von {zahl1} zu {zahl2} ist {verhältnis:7.2f}.")
print(f"Das Verhältnis ist genauer {0.7142857142857143:07.3f}.")
Das Verhältnis von 5 zu 7 ist 0.71.
Das Verhältnis ist genauer 000.714.
Das Dezimaltrennzeichen zählt als eine Stelle.
Häufig verwendete Formatierungen sind:
Ganze Zahlen haben den Ausgabetyp d
.
Formatierung | Ausgabe |
---|---|
nd |
n-Stellen werden für die Ausgabe verwendet |
0nd |
Ausgabe von n-Stellen, wobei die Leerstellen mit Nullen aufgefüllt werden. |
+d |
Ausgabe des Vorzeichens auch bei positiven Zahlen |
Gleitkommazahlen haben die Ausgabetypen f
und e
.
Formatierung | Ausgabe |
---|---|
.mf |
m-Stellen werden für die Nachkommastellen genutzt. |
n.mf |
Insgesamt werden n-Stellen verwendet, wobei m-Stellen für die Nachkommastellen genutzt werden. |
n.me |
Genauso, aber die Ausgabe erfolgt in exponentieller Schreibweise. |
Zeichenfolgen haben den Ausgabetyp s
.
Formatierung | Ausgabe |
---|---|
ns |
Insgesamt werden n-Stellen verwendet. |
<ns , >ns , ^ns |
Genauso, jedoch wird die Zeichenfolge linksbündig, rechtsbündig bzw. zentriert platziert. |
Eine Auflistung aller verfügbaren Ausgabetypen findet sich in der Python Dokumentation.
1.4 Aufgaben
Gleitkommazahlen können natürlich, z. B. {1015.39:12.4f}, oder wissenschaftlich, {1015.39:e}, dargestellt werden.
Verändern Sie die natürliche Schreibweise so, dass nur noch eine Stelle nach dem Komma angezeigt wird. Was fällt auf?
Verändern Sie die wissenschaftliche Schreibweise so, dass anstelle von
e
die Zehnerbasis alsE
geschrieben wird.
Wandeln Sie die Zahl 1015.39 in eine Zeichenfolge um und stellen Sie diese mit 12 Stellen rechtsbündig dar.
Geben Sie mit Hilfe der formatierten Zeichenfolge eine Tabelle aus, welche die Spalten \(x\), \(x^2\) und \(x^3\) für ganze Zahlen zwischen -2 und 2 auflistet.
Die Musterlösung kann Marc machen.
(Arnold 2023a, 2023b, 2023c)