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.

Logo der Programmiersprache Python

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.

Flussdiagramm der Programmentwicklung mit Python. In der Entwicklungsumgebung wird ein Skript geschrieben, in der Konsole können Eingaben getätigt werden. Der Python Interpreter verarbeitet diese in Maschinencode, den der ausführende Computer in ein Ergebnis verarbeitet und Ausgibt.

Programmentwicklung mit Python

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.

Dargestellt ist eine Kategorisierung der Standardtypen in Python. Die Kategorisierung ist nicht vollständig deckungsgleich zu den in der Dokumentation genannten Kategorien von Datentypen. Der Typ None für Nullwerte hat keine weitere Unterteilung. Die Kategorie Numbers unterteilt sich in Zahlenwerte (Ganzzahlen, boolsche Wahrheitswerte), reele Zahlen (floats) und komplexe Zahlen. Die Kategorie Sequences unterteilt sich in Unveränderliche (Strings, Tuple, Bytes) und Veränderliche (Listen, Byte Arrays). Die Kategorie Set Types unterteilt sich in Sets (Mengen) und Frozen Sets. Die Kategorie Mappings enthält Dictionaries (Wörterbücher). Die Kategorie Callable umfasst Funktionen, Methoden und Klassen. Außerdem gibt es die Kategorie Module.

Datentypen in Python

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.

  1. 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!')
text_variable = 'Hallo Python!'
print(text_variable)
3
123: Hallo Welt!
Hallo Python!
  1. 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.
  1. 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 Beispiel print() können Zeilen nach jedem Komma fortgesetzt werden.
variable1 = 15
variable2 = 25

# Zeilenfortsetzung mit \
summe = variable1 + \
    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.

  1. Die Anzahl der Leerzeichen zwischen Operanden und Operatoren kann beliebig sein.
print(1+0, 1 + 1, 1 +                  2)
1 2 3
  1. 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:

zahl1 = 5
zahl2 = 7
verhältnis = zahl1 / zahl2
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

  1. 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 als E geschrieben wird.

  2. Wandeln Sie die Zahl 1015.39 in eine Zeichenfolge um und stellen Sie diese mit 12 Stellen rechtsbündig dar.

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

Arnold, Simone. 2023a. „Datenanalyse mit Python. Datentypen und Grundlagen.“ Fachhochschule Dortmund.
———. 2023b. „Datenanalyse mit Python. Funktionen Module Dateien.“ Fachhochschule Dortmund.
———. 2023c. „Datenanalyse mit Python. Idee des Kurses ’Datenanalyse mit Python’.“ Fachhochschule Dortmund.