*Dieses Buch ist immer noch "Work in Progress", aber eines Tages soll es das "perfekte Python Buch für blutige Anfänger" werden, die Textanalyse lernen wollen.*

Dieses Buch ist für all diejenigen, die blutige Anfänger in Programmierung oder Data Science sind. Bis zum Ende des Buches werden dir all diese Punkte näher gebracht:

  • Programmierung
  • Verschiedene Methoden der Analyse von schriftlichen Werken
  • Erstellung von hübschen und einfach verständlichen Statistiken
  • 3D Grafen und Statistiken mit Animationen

Falls du ein blutiger Anfänger in Python sein solltest, dann lohnt es sich über das Kapitel Grundlagen zu gehen, sonst nutze dieses Buch gerne als Nachschlagewerk und springe zu den Kapitel, die dich interessieren.

Ziel dieses Buches ist es, das Verständnis dafür zu entwickeln, wie wir mit Python Texte analysieren, um wertvolle Erkenntnisse aus großen Textmengen zu extrahieren.

Was ist Python?

Python ist eine general-purpose language, oder Allzwecksprache auf Deutsch.

Das heißt wir können Python für so ziemlich alles verwenden. Zudem ist Python auch high level. "High level" kann man auch als "einfach" übersetzen. Programmierer kategorisieren Computersprachen in zwei Kategorieren: "high level" und "low level". "low level" bedeutet, dass etwas sehr nah an der "Maschine" ist. Sprich wenn ich "low level code" schreibe, dann könnte das bedeuten, dass ich mir mehr Gedanken machen muss, über Syscalls (Exekutionen die das Betriebssystem macht) oder ob etwas im "Stack" oder "Heap" vom RAM (Random Access Memory) gespeicher wird. Wenn du gerade nichts verstanden hast, dann ist das vollkommen ok, weil wir Python Code schreiben werden und weil Python "high level" ist, müssen wir nichts von diesen Sachen beachten und können, ohne komplette Computernerds zu sein, Code schreiben!

In anderen Worten: Low level = schwierig und High level = einfach.

Im Laufe des Buches werden wir uns auf Textanalyse, ein kleiner Teil von Datascience, konzentrieren, aber wir können mit Python auch Mobileapps, Videospiele, usw., so ziemlich alles, sogar Webseiten programmieren. Alle Skills, die du in diesem Buch lernen wirst, kannst du somit auch auf andere Bereiche anwenden und somit dein Horizont "ganz einfach" erweiteren und vielleicht sogar eine Karriere aufbauen.

Weil es nicht schaden kann, hier noch ein paar Fakten zu Python von Wikipedia:

  • Python wurde 1980 von Guido van Rossum erfunden.
  • Python ist Open Source, sprich komplett kostenlos
  • Python ist die beliebteste Sprache für Datascience und Machine Learning

Ein großer Vorteil von Python ist, dass der Code sehr an der normalen englischen Sprache erinnert und somit einfach verständlich ist, auch für diejenigen, die noch nie programmiert haben.

# Eine Liste von Zahlen erstellen
numbers = [1, 2, 3, 4, 5]

# Gesamtwert initialisieren
sum = 0

# Schleife durch jede Zahl in der Liste
for number in numbers:
    # Hinzufügen der Zahl zur Summe
    sum += number

# Ausgabe der Gesamtsumme
print("Die Summe der Zahlen ist:", sum)

In diesem Codebeispiel rechnen wir das Ergebnis aller Zahlen zusammen und geben das Ergebnis in einer Konsole aus.
Hier ist der Output des Codes:

Die Summe der Zahlen ist: 15

Vielleicht verstehst du nicht alles sofort von diesem Codebeispiel. Darum geht es auch gar nicht. Das werden wir in den nächsten Kapiteln noch lernen. Mit dem Codebeispiel wollte ich dir nur mal zeigen wie leicht verständlich Pythoncode auch für totale Programmieranfänger sein kann.

Übersicht

Python installieren

Vscode installieren

Grundlagen

Plots generieren

Textanalyse


Installiere Python

Um in Python programmieren zu können, sollte Python auch auf deinem System installiert sein. Glücklicherweise kann man Python so ziemlich auf alles installieren, vorallem auf Windows, macOS oder Linux.

Hier habe ich jeweils Anleitungen für die drei größten Betriebsysteme unserer moderenen Welt:

Windows

Der Windows-Installations Guide basiert auf diesen Digital Ocean Artikel.

Downloade den latest Python Installierer für Windows von python.org und führe die .exe Datei aus.

Du solltest dieses Fenster hier sehen:

Bevor du auf "Install Now" klickst, gehe sicher, dass "Add python.exe to PATH" angekreuzt ist, damit können wir nach der Installation Python in der "cmd"-Konsole ausführen.

Beim nächsten Schritt "Optional Features" kannst du ruhig alles ankreuzen, bevor du auf "Next" klickst. Aber geh bitte sicher, dass auf jedenfall "pip" und "py launcher" angekreuzt ist!

Kreuze alle "Advanced Options" wie im Screenshot an, aber auch hier kannst du ruhig alles ankreuzen. Es wir keinen großen Unterschied machen. Lieber zu viel installieren als zu wenig. Keine Sorge der Python Installierer installiert dir nur Programme, die wichtig für Python sind und keine Adware oder Malware wird installiert!

Wenn du "Setup was successfull" siehst, dann hat alles richtig funktioniert und du kannst die "cmd" Konsole öffnen und python --version eingeben. Wenn du Python <irgendeine version> sehen kannst, dann hast auch wirklich alles geklappt und du kannst im nächsten Kapitel dich darum kümmern einen Texteditor zu installieren.

macOS

Auf macOS sollte Python schon vorinstalliert sein, also musste hier nichts machen. Um zu schauen, ob es auch wirklich auf deinem Mac installiert ist, gebe diesen Befehl ein:

python3 --version

Um Python Skripte, die wir hier schreiben, auf einen Mac auszuführen, musst du immer python3 anstelle python eingeben!

homebrew

Aber falls du eine neuerer Version von Python brauchst, dann kannst du diese ganze einfach mit dem "homebrew" Package Manager installieren. Dafür müssen wir erstmal homebrew installieren.

Öffne den Terminal und tippe in die Konsole:

xcode-select --install

Dies installiert alle "basic tools", die du brauchst fürs Programmieren.

Danach gehe auf die brew.sh Website und kopiere den Befehl unter Install Homebrew. Der müsste ungefähr so aussehen:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Achtung! Dieser Befehl downloadet ein Installations-skript und führt es auf deinem Computer aus, um homebrew auf deinen Mac zu installieren. Obwohl es relativ sicher ist, ist dies theoretisch sehr gefährlich einfach so Skripts zu downloaden und auszuführen. Also gehe sicher, dass du diesen Befehl von der originalen brew.sh Website kopierst!

Wenn homebrew erfolgreich installiert wurde, siehst du im Terminal die nächsten Schritte, die du machen musst, damit du auch homebrew benutzen kannst. In meinem Fall es drei Befehle:

echo >> /Users/marc/.zprofile
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/marc/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)

Achtung! Mein User hier heißt marc und deswegen sind deine drei Befehle wahrscheinlich ein bisschen anders!

Jetzt kannst du im Terminal brew doctor eingeben, um sicher zu gehen, dass alles richtig installiert wurde.

Nun kannst du mit nur einem Befehl Python installieren.

brew install python

Um sicher zu gehen ob Python auch funktioniert gebe python3 --version ein, um die installierte Version von Python ausgespuckt zu bekommen.

Ubuntu

Auf Ubuntu und wahrscheinlich jedem anderen Linux basierten Betriebsystem sollte Python vorinstalliert sein, wenn nicht dann kannst du es auf Ubuntu oder Debian mit diesem Befehl hier installieren:

sudo apt install python

Fertig! Zum Testen gebe python --version ein, um zu schauen ob es auch richtig installiert wurde.

Einführung in python

python

Schreibe Code in REPL

exit()

unter macOs und Windows einfach, aber windows?

erstelle main.py mit print("Hello World")

$ python main.py

Installation

Installiere Vscode, indem du auf dieser Webseite den richtigen Installer für dein Betriebssystem downloadest und die Installations Datei ausführst.

Windows

macOS

Ubuntu

Windows

macOS

Ubuntu

Einführung in

Öffne VsCode

erstelle einen Projektordner

erstelle main.py

print("Hello World")

führe die main.py aus

So jetzt müsste alles richtig eingerichtet sein und wir können uns darauf konzentrieren Python und die Basics der Programmierung zu lernen.
Also Let's go!

Jetzt können wir anfangen coden zu lernen! Im nächsten Kapitel lernen wir dazu die ganzen Basics, die man kennen sollte, bevor wir mit den ersten realen, praktischen Anwendungsbeispiel anfangen: der programmatischen Textanalyse. Aber zu aller erst schauen wir uns den ersten Baustein unseres Programmierfundamentes an.

Variablen

Variablen, den Begriff kennen wir schon von der Mathematik. Es bedeutet, dass ein Wert variabel ist, also sich verändern kann. Zum Beispiel die Variable x in y = x + 2 ist ein Platzhalter für beliebig vielen Werten.

Auch so in der Programmierung sind Variablen als eine Art "Platzhalter" oder viel mehr "Zwischenspeicher" für einen Wert, zu verstehen.

Aber durch Theorie allein kann man nur schwer lernen oder etwas verstehen, also lass uns eine Variable erstellen, die mein jetziges Alter "zwischenspeichert".

my_age = 25

Ich habe hier eine Variable mit den Namen my_age erstellt (in Programmierfachchinesisch nennt man das auch "deklarieren").

my_age bekommt den Wert 25 zugewiesen. Um in Python eine Variable zu deklarieren, dürfen wir das = nicht vergessen, dadurch weiß Python überhaupt erst, dass my_age eine Variable ist. Ohne das = könnte Python unser Code nicht verstehen und wir würden einen Error bekommen.

Wenn ich jetzt mein Alter wissen möchte (weil ich es wieder einmal vergessen habe, was mir oft passiert...), dann kann ich darauf zugreifen, indem ich in einer späteren Zeile im Skript einfach nur my_age schreibe.

Mit dem print Befehl können wir die my_age Variable in der Konsole ausgeben. Machen wir das einmal:

my_age = 25
print(my_age)

Wenn wir unser Skript ausfüheren, dann sehen wir folgendes in der Konsole:

25

Überall wo wir jetzt my_age brauchen, können wir, anstelle immer wieder 25 zu schreiben, my_age schreiben. Der Vorteil ist, wenn wir unser Code für einen anderen User anpassen möchten, dann müssen wir nur die Zeile, in der wir my_age deklariert haben, anpassen.

Datentypen

Neben Zahlen können wir auch Variablen für Text, Listen und viele, viele anderen Dinge erstellen.

In diesen Kapitel gehen wir Schritt für Schritt über die wichtigsten Datentypen von Python und wie man mit diesen arbeiten kann.

Hier schonmal eine kleine Übersicht von all den Datentypen, die ich dir näher bringen werde:

DatentypEin-Wort-Erklärung
NumberZahl
BooleanWahr oder Falsch
StringText
ListListe an Werten
DictionaryKey und Value Liste

Den Typ einer Variable können wir mit dem type Befehl heraus bekommen. Zum Beispiel hier einmal der Datentyp von der Variabel my_age, die wir im letzten Kapitel erstellt haben.

print(type(my_age))
<class 'int'>

Mit dem print Befehl um type(my_age) gehe ich auch sicher, dass der Typ in der Konsole ausgespuckt wird.

Number

Einer der wohl wichtigsten und offensichtlichsten Datentypen einer Programmiersprache ist die Nummer oder auch Zahl.

In Python, sowie auch in vielen verschiedenen Programmiersprachen, gibt es zwei verschiedene Arten von Zahlen.

  • Integer sind Ganzzahlen, z.B. 420 oder -69 und so weiter...
  • Float sind Gleitkommazahlen, z.B. 24.7 oder -4.2069

Beachte: Python benutzt . für die Gleitkommazahlen, wie in der englischen Sprache.

Egal ob integer oder float mit beiden Zahlentypen können wir ganz normal rechnen:

Plus +

x = 5
y = 3.5
z = x + y
print(z)
8.5

Minus -

x = 5
y = 3.5
z = x - y
print(z)
1.5

Mal *

x = 5
y = 3.5
z = x * y
print(z)
17.5

Geteilt /

x = 5
y = 3.5
z = x / y
print(z)
1.4285714285714286

Hoch **

x = 5
y = 3.5
z = x ** y
print(z)
279.5084971874737

Modulus %

Der Modulus % wird verwendet, um den Rest einer Division zu berechnen.

Kannst du dich vielleicht noch erinnern, wie du in der Grundschule geteilt rechnen gelernt hast und am Ende der Rechnung den Rest angegeben hast, z.b. 5 / 2 = 2 Rest 1.

Der Modulus funktioniert genau so, aber dass wir nur den Rest bekommen! Also 5 % 2 gibt uns die Zahl 1 oder 11 % 3 ergibt 2.

Zum Beispiel können wir den Modulus verwenden, um zu erkennen ob eine Zahl gerade oder ungerade ist, denn wenn x % 2 null ergibt, dann ist die Zahl durch zwei teilbar und wenn es eins ergibt, dann eben offensichtlicher Weise nicht.

print(5 % 2)
print(8 % 2)
1
0

Noch mehr Mathe mit dem math Modul

Falls man aber noch mehr Mathe machen möchte als nur Plus, Minus oder Geteilt, dann lohnt sich ein Blick in das "Math" Modul.

Zu aller erst müssen wir "math" importieren. Schreibe dafür dies hier ganz oben als erste Zeile in der .py Skript Datei.

import math

math.ceil()

Mit math.ceil() können wir eine Zahl, die wir innerhalb der () Klammern packen, aufrunden.

x = math.ceil(9.3)
print(x)
10

math.floor()

Oder mit math.floor() können wir eine Zahl abrunden:

x = math.floor(9.3)
print(x)
9

math.trunc()

math.trunc() schneidet alles nach der Kommastelle weg, damit wir eine Ganzzahl bekommen.

x = math.trunc(9.3)
print(x)
9

math.exp()

math.exp() gibt uns das Ergebnis von "e hoch x":

x = math.exp(9)
print(x)
8103.083927575384

math.sqrt()

Ziehe die Wurzel von einer Zahl:

x = math.sqrt(9)
print(x)
3.0

math.cos()

Berechne den Kosinus von einer Zahl:

x = math.cos(0)
print(x)
1.0

Noch mehr Information zum "Math" Modul findest du hier.

Übungsaufgaben

Hier ein paar Übungsaufgaben, die du nun lösen kannst, um deine Programmierskills auf die Probe zustellen!

  1. Berechne die gesamte Anzahl an Tagen anhand des Alters einer Person.

  2. Berechne wie viele Sekunden X Stunden hat, wo X eine beliebige Zahl ist.

  3. Ermittle anhand des Geburtsjahres wie alt eine Person ist

  4. Ermittle den Rest einer Division von zwei Zahlen

  5. Berechne den Flächeninhalt eines Dreiecks (a: 5cm, b: 5cm, c: 10cm)

Boolean

Den nächsten Datentyp, den wir lernen werden, ist der Boolean.

Ein Boolean kann nur zwei mögliche Werte haben kann: "wahr" also True oder "falsch" also False.

Stelle dir einen Boolean wie einen Lichtschalter vor, der entweder ein- oder ausgeschaltet sein kann. In diesem Fall ist "eingeschaltet" True und "ausgeschaltet" False.

In der Programmierung sind Booleans nützlich, um Entscheidungen zu treffen oder den Ablauf eines Programms zu steuern. Zum Beispiel kann man Booleans verwendet, um zu bestimmen, ob ein Kunde erlaubt ist von einem Onlineshop Alkohol zu kaufen oder ob der User sein Programm in Light oder Dark Theme eingestellt hat.

is_light_theme = True
user_can_buy_alcohol = False

Die bool Funktion

Mit der bool können wir so ziemlich fast alles und auch Variablen zu einem boolean umkonvertieren.

x = 42
x_as_bool = bool(x) 

print(x_as_bool)
True

Warum 42 zu True wird, werden wir im nächsten Kapitel lernen!

Logische Operatoren

Logische Operatoren sind spezielle Symbole, die in der Programmierung verwendet werden, um logische Vergleiche zwischen zwei oder mehreren Ausdrücke zu machen.

In anderen, einfacheren Worten: ein Logischer Operator ist wie eine Behauptung, die entweder wahr oder falsch sein kann. Wenn ich behaupte, dass die Corona Impfung ein Versuch von Bill Gates sei, die Menschheit zu unterjochen, dann ist die Aussage entweder True oder False. :P

Hier eine Tabelle von allen Logischen Operatoren, die es in Python gibt. Einige sollten dir vom Mathe Unterricht bekannt sein:

OperatorBedeutung
andund
oroder
== oder isgleich
!= oder is notnicht gleich
notnicht
<kleiner als
>größer als
<=kleiner gleich
>=größer gleich

Aber keine Sorge, ich gehe über jeden Operator und gebe dir ein Beispiel, wie man es benutzt.

and

print(True and False)
False

Der "und"-Operator überprüft ob die beiden Werte, links und rechts, True sind.

Zum Beispiel wir wollen überprüfen ob ein Kunde, der Alkohol kaufen möchte, über 18 ist und einen Ausweis mit sich trägt. Nur wenn beides der Fall ist, können wir ihm guten Gewissens Alkohol verkaufen:

is_adult = True
has_passport = False

print(is_adult and has_passport)
False

Aber erst wenn ein Kunde unseren Onlineshop besucht und beides erfüllt, können wir endlich Profit mit unserem Alk machen.

is_adult = True
has_passport = True

print(is_adult and has_passport)
True

or

print(True or False)
True

Der "oder"-Operator überprüft ob links oder rechts True ist. Nur eine der beiden Seiten muss True sein, damit die Aussage als True gilt.

Zum Beispiel in einer Dating App möchte ich mit Personen gematched werden, die entweder Hunde oder Katzen mögen.

likes_cats = True
likes_dogs = False

print(likes_cats or likes_dogs)
True

== is

print(True == False)
print(True is False)
False
False

Der "gleich"-Operator überprüft ob die linke Seite identisch mit der rechten Seite ist. Wir können auch Zahlen und alle anderen Datentypen, die wir noch lernen werden, damit vergleichen. Dabei ist es egal ob wir == oder is schreiben. Benutze das was dir besser gefällt.

my_age = 25
your_age = 28

print(my_age == your_age)

your_age = 25 ## Überschreibe your_age mit 25

print(my_age == your_age)
False
True

!= is not

print(True != False)
print(True is not False)
True
True

Das selbe wie beim "gleich" können wir auch hier machen, aber umgedreht mit dem "nicht-gleich"-Operator. Dieser checkt ob die linke Seite nicht gleich mit der rechten Seite ist. Dabei ist es auch hier egal ob wir != oder is not schreiben. Benutze das was dir besser gefällt.

my_age = 25
your_age = 28

print(my_age != your_age)

your_age = 25 ## Überschreibe your_age mit 25

print(my_age != your_age)
True
False

not

print(not True)
False

Der "nicht"-Operator tut einen "boolischen" Wert (True oder False) umdrehen. So wie wir es oben im Beispiel sehen können, wo True mit not zu False umkonvertiert wird. Schauen wir uns weitere Beispiel des "nicht"-Operator an!

not True  ## -> False
not False ## -> True
not 42    ## -> False
not 0     ## -> True
not -42   ## -> False

Du fragst dich jetzt bestimmt warum not 0 True ist und warum not 42 sowie not -42 False ist. In vielen Programmiersprachen wird die Zahl 0 als False behandelt, während alle anderen Zahlen (sowohl positive als auch negative) als True behandelt werden.

Nun, da alle anderen Zahlen (außer 0) als True gelten, sind sowohl 42 als auch -42 wahr. Wenn wir den "nicht"-Operator auf 42 und -42 anwenden, kehren wir ihre Werte um, daher werden sowohl not 42 als auch not -42 zu False.

Wir können auch sebstverständlich den "nicht"-Operator an Variablen verwenden.

is_r_cool = False
print(not is_r_cool)
True

<

print(42 < 24)
False

Das "kleiner als"-Symbol wird verwendet, um zwei Zahlen miteinander zu vergleichen. Wenn die Zahl auf der linken Seite des Symbols kleiner ist als die Zahl auf der rechten Seite, dann ist die Aussage True oder andernfalls False.

>

print(42 > 24)
True

Das selbe auch beim "größer als"-Symbol.

<=

print(42 <= 24)
False

Das "kleiner gleich"-Symbol tut nicht nur True geben, wenn die linke Seite kleiner ist als die rechte, sondern auch wenn die linke Seite gleich der rechten Seite ist.

print(42 <= 43)
print(42 <= 42)
print(42 <= 41)
True
True
False

>=

print(42 >= 24)
True

Das selbe auch beim "größer gleich"-Symbol.

print(42 >= 43)
print(42 >= 42)
print(42 >= 41)
False
True
True

Im nächsten Kapitel werden wir all diese Operatoren verwenden, um mit Hilfe von if und else in unserem Programm Entscheidungen treffen zu können.

Der Unterschied zwischen is und ==

Der == Operator gibt True zurück, wenn beide Werte, die wir vergleichen wollen, gleich sind, während is kontrolliert ob beide Werte die selbe Memoryadresse haben.

Ok... Ich muss mehr ausholen. Jede Variable, die wir erstellen, und jeder Wert, den wir ihr zuweisen, werden im RAM vom Computer gespeichert. Zum Beispiel dieser Pythoncode hier:

my_age = 27

Der Wert von my_age wird im RAM gespeichert, damit unser Programm sich es auch merken kann und wir in späteren Zeilen darauf zugreifen können, um damit zu rechnen oder es in der Konsole auszugeben:

print(my_age)

Der ganze Prozess, im RAM abspeichern, den Ort, wo es abgespeichert wurde, und dies mit my_age zu verlinken, passiert komplett automagisch im Hintergrund umnd wir müssen uns keine Gedanken drüber machen. Der Ort, die Adresse, wo die Variable im RAM gespeichert wird, nennt man in Programmierfachchinesisch auch "Pointer". Der Pointer zeigt auf die Stelle im RAM, in der die Variable existiert.

Hier nochmal visualisiert:

a = 1000
b = "Hello"
c = 1000
d = a + c

Dieser Pythoncode sieht dann ganz abstrakt im RAM so aus:

Wie du sehen kannst, haben a und c, obwohl die den selben Wert haben, unterschiedliche Pointer. Das können wir auch sehen wenn wir is benutzen:

print(a == c)
print(a is c)
True
False

Das selbe, aber nur umgedreht, gilt natürlich auch für is not und !=.

print(a != c)
print(a is not c)
False
True

if und else

Mit if und else können wir innerhalb unseres Programmes Entscheidungen treffen, um eine Aktion auszuführen, wenn eine bestimmte Bedingung erfüllt ist und eine andere Aktion, wenn die Bedingung nicht erfüllt sein sollte.

number = 5

if number % 2 == 0:
    print("number is even")
else:
    print("number is odd")

Nach dem if-Schlüsselwort folgt ein Aussage, die sich entweder zu True oder False auflöst. In der nächsten Zeile ist, der Code, der ausgeführt werden soll, wenn die Aussage True ist, indentiert mit einem Tab. Wenn aber die Aussage False ist, wird der else Block ausgeführt.

Also nochmal einfacher erklärt mit einem Pseudocode-Beispiel:

if this_is_true:
    do_this()
else:
    do_that()

Im Beispiel von ganz oben wird "number is even" in der Console ausgegeben, wenn der Rest von number geteilt durch zwei null ist, also die Zahl gerade ist und wenn dies nicht der Fall ist, dann wird "number is odd" ausgegeben.

Wir können auch mehrere if's hintereinander reihen um mehrere Bedingungen Schritt für Schritt zu überprüfen.

if this_is_true:
    do_x()
elif or_this_is_true:
    do_y()
else:
    do_z()

elif steht hierbei für else if, oder auch "oder wenn" auf Deutsch.

Lass uns ein Beispiel schreiben, bei dem in der Console eine Nachricht geschrieben wird, wenn die Zahl positiv, negativ oder null ist.

number = -7

if number < 0:
  print("Number is negative.")
elif number > 0:
  print("Number is positive.")
else:
  print("Number is null.")

Als erstes checken wir ob die Zahl kleiner als null ist, dann printen wir "Number is negative" und wenn die Zahl größer als null ist, dann printen wir "Number is positive". Wenn beides nicht der Fall ist, also beide Aussagen False sind dann wird der else Block ausgeführt und logisch können wir ab diesen Punkt ab an davon ausgehen, dass die Zahl 0 sein muss!

Wir sind aber nicht verpflichtet ein else zu verwenden am Ende einer if-Kette.

do_x()

if this_is_true:
    do_y()

do_z()

So können wir zum Beispiel erst x machen und wenn die if-Aussage True ist, dann machen wir auch y, aber wenn es False ist, naja, dann machen wir halt y nicht und ungeachtet der if Aussage, machen wir z als nächstes.

Übungsaufgaben

  1. Hier ein paar Übungsaufgaben mit if und else:

  2. Teile eine Zahl durch eine andere und prüfe, ob das Ergebnis eine ganze Zahl ist.

  3. Überprüfe, ob eine Zahl positiv, negativ oder null ist und gib eine entsprechende Meldung aus.

  4. Überprüfe, ob eine Zahl gerade oder ungerade ist

  5. Vergleiche zwei Zahlen und gib an, welche größer ist.

  6. Überprüfe, ob eine Zahl in einem bestimmten Bereich liegt (z.B. zwischen 10 und 20).

  7. Schreibe eine Bedingung, die prüft, ob eine Zahl durch eine andere teilbar ist.

  8. Schreibe eine Bedingung, die überprüft, ob eine Zahl ein Vielfaches von 10 ist.

  9. Schreibe ein Programm, welches aus einer Punktzahl (0-100) eine Note (1-6) zuweist

  10. Erkenne aus 3 Zahlen welche davon die größte ist und welche davon die kleinste ist

  11. Empfehle aufgrund des Alters einer Person einen Film

match

Normal

match x:
    case 10:
        # ...
    case 20:
        # ...
    case _:
        # ...

String

match greeting:
    case "hi":
        # ...
    case "hello":
        # ...
    case _:
        # ...

Grouping

match x:
    case 10 | 20 | 30:
        # ...
    case _:
        # ...

Mit if statement

match x:
    case x if x % 2 == 0:
        # ...
    case _:
        # ...

Mit Listen

match my_list:
    case [a, b, c]:
        # ...
    case [a, b, c, d]:
        # ...
    case _:
        # ...

Mit Listen

match my_dict:
    case { "name": name, "age": age }:
        # ...
    case _:
        # ...

TODO test was wenn kein default, dann error so wie in Rust?

String

Ein String, auf Deutsch Zeichenkette, ist einfach nur Text... Damit Python Text auch als string erkennen kann, müssen wir den Text mit " oder ' einkapseln.

Beispieltext mit ":

name = "Marc"

oder mit ':

name = 'Marc'

aber, wenn wir die " oder ' vergessen, dann bekommen einen Error:

name = Marc
Traceback (most recent call last):
  File "/home/marc/Documents/Projects/python_word2vec/main.py", line 2, in <module>
    name = Marc
           ^^^^
NameError: name 'Marc' is not defined
make: *** [Makefile:8: start] Error 1

Python denkt, dass Marc eine Variable ist, aber natürlich gibt es Marc als Variable nicht, weswegen wir den Error 'Marc' is not defined bekommen.

Ein string kann auch ein Satz sein, ergo Leerzeichen innerhalb der " oder ' sind erlaubt!

name <- "Marc Mäurer"

Wie dir vielleicht aufgefallen ist, haben wir die " Syntax auch schon beim print Befehl benutzt.

Wir können auch "multi-line strings" mit drei """ erstellen:

lorem_ipsum = """Soluta aut quo tempore quisquam corrupti cum velit deserunt. 
Sint ea fugiat eaque aut. 
Autem ea suscipit voluptas omnis est. 
Et sit id sit aperiam aut ut. 
Fuga rerum qui consequatur reiciendis.
"""

in

Mit den in Operator kann man schauen ob ein "Substring" in einem "String" ist, zum Beispiel ob "Hello" in "Hello World" ist.

Sprich "Hello" in "Hello World" ist True und "Justice" in "Hello World" wäre dementsprechend False.

x = "Hello World"
is_world_in_x = "World" in x
print(is_world_in_x)
True

List

Stell dir eine Liste wie eine stink-normale Einkaufsliste vor. In dieser Liste können viele verschiedene Sachen drinne stehen, wie z.B. "Ketchup" "Tomaten" "Paprika" etc...

Um eine Liste in Python zu erstellen benutzen wir den [] Klammern und innerhalb der [] Klammer kommen mit einem Komma getrennt alle Werte rein.

einkaufsliste = ["Ketchup", "Tomaten", "Paprika", "Banane"]
print(einkaufsliste)
["Ketchup", "Tomaten", "Paprika", "Banane"]

In einer Liste kann alles rein, Zahlen, Strings, Booleans, komplett egal was. Hier zum ein Beispiel eine Liste an Zahlen:

numbers = [23, 63, 39, 35, 84, 58]
print(numbers)
[23, 63, 39, 35, 84, 58]

Oder hier eine "gemischte" Liste von verschiedenen Datentypen:

numbers = ["Python", True, 42, False, -10]
print(numbers)
["Python", True, 42, False, -10]

Mit der len Funktion können wir herausfinden wie lang eine Liste ist. Hier zum Beispiel die Länge unserer einkaufsliste

len(einkaufsliste)
4

Indexing

Wenn wir jetzt wissen wollten was an einer bestimmten Stelle in unserer Einkaufsliste steht, dann brauchen wir die [] Klammern. Innerhalb der [] Klammern kommt dann die Zahl für welchen Index wir den Wert haben wollen. Dabei fangen wir bei 0 and zu zählen, sprich 0 ist der erste Wert, 1 ist der zweite und so weiter.

print(einkaufsliste[0])
print(einkaufsliste[1])
print(einkaufsliste[2])
print(einkaufsliste[3])
Ketchup
Tomaten
Paprika
Banane

Mit einer Minuszahl können wir rückwärts der Liste entlang gehen:

print(einkaufsliste[-1])
print(einkaufsliste[-2])
print(einkaufsliste[-3])
print(einkaufsliste[-4])
Banane
Paprika
Tomaten
Ketchup

Coole Funktionen mit Listen

Listen geben uns viele coole, hilfreiche Funktionen zur Verfügung. Als aller erstes lass uns eine neue Liste erstellen:

my_list = [1, 2, 3, 4]
.append(5)                ### Füge Value am Ende einer Liste hinzu
.pop(1)                   ### Entferne letztes Item wenn leer oder Item am Index
.remove("yeah")           ### Entferne erstes Vorkommnis eines Values
.clear()                  ### entferne alles
.copy()                   ### Clone Liste
.count(value)             ### zähle wie oft value vorkommt
.extend(list)             ### erweitere Liste mit einer weiteren Liste
.index(value)             ### Bekomme Index vom Value
.reverse()                ### Clone? und kehre Liste um
.sort()                   ### Clone? und sortiere Liste
.insert(index, value)     ### Schiebe Value in einer Liste an einem Index. Values am Index werden nach links verschoben.

Strings sind Listen von Characters

Strings in Python sind nichts als Listen aus Buchstaben. Sprich man kann auf jeden einzelnen Buchstaben eines Strings mit dem entsprechenden Index zugreifen.

my_str = "Hello World"

print(my_str[0])
print(my_str[1])
print(my_str[2])
print(my_str[3])
print(my_str[4])
H
e
l
l
o

Oder man kann auch die Länge eines Strings, wie als wäre es eine stink-normale Liste, mit der len Funktion ermitteln.

print(len(my_str))
11

Tuple

Tuples sind wie Listen, die man nicht verändern kann (in Programmierfachchinesisch nennt man das auch "immutable").

Lass uns verschiedene Tuples erstellen:

a = (1, 20, 3)
b = ("marc", "leon", "david")
c = (420, True, -5, "hallo", False)

All diese Tuples sind immutable. Wir können nichts mehr hinzufügen, entfernen oder bearbeiten. Aber sonst ist ein Tuple wie eine Liste, also können wir auf die einzelne Indexe wie gewohnt zugreifen:

a = (1, 20, 3)

print(a[1])
20

Nun wenn wir den Tuple ändern wollen, dann ist das einzige, was wir machen können, ein komplett neuen Tupel zu erstellen, um damit den alten Tupel zu überschreiben. Zum Beispiel so:

a = (1, 20, 3)
a = (1, 2, 3, 4)

print(a)
print(len(a))
(1, 2, 3, 4)
4

Oder wir können ein Tupel mit der list Funktion zu einer Liste konvertieren, dieser Liste einen weiteren Wert hinzufügen, diese wieder mit der tuple Funktion zu einem Tupel konvertieren, um dann damit den alten Tupelwert zu überschreiben.

a = (1, 2, 3)
a_list = list(a)

a_list.append(4)
a_list[1] = 20

a = tuple(a_list)

print(a)
print(len(a))
(1, 20, 3, 4)
4

Dictionary

Dictionaries sind ziemlich cool. Du kannst es dir sprichwörtlich wie ein Wörterbuch vorstellen. In einem Wörterbuch gibt es zu jedem Wort einen Eintrag und jedes Wort sollte es in einem guten Wörterbuch auch nur einmal geben. Naja in Python wäre ein Wort das "field" und die Definition zu dem Wort das "value". So wie es in einem Wörterbuch mehrer verschiedene Wörter gibt, so kann man in einem Dictionary mehrere verschiedene "fields" haben. Zum Beispiel lass uns mal einen "Dict" erstellen:

ages = {
    "marc": 27,
    "leon": 25,
    "david": 29,
    }
    
print(ages)
print(type(ages))
print(len(ages))
{'marc': 27, 'leon': 25, 'david': 29}
<class 'dict'>
3

TODO Indexing und Mutability

my_dict["field"]
len(dict)

Schleifen

In so ziemlich jeder Programmiersprache gibt es Schleifen oder auch "Loops" auf Englisch genannt.

Schleifen ermöglichen es dir, bestimmte Aktionen mehrmals wiederholen zu lassen (in Programmierfachchinesisch wird ein solche Wiederholung einer Schleife auch "Iteration" genannt). Dies ist besonders nützlich, wenn du Code hast, der viele Male hintereinander durchgeführt werden soll und du nicht unbedingt 100-mal hintereinander den selben Code copy-pasten willst.

In Python gibt es zwei verschiedene Arten von Schleifen, die für verschiedene Usecases verwendet werden:

for

Die for Schleife gibt es so ziemlich in jeder Programmiersprache. Kurzgesagt funktioniert sie so: Für die Variable x in einer Sequenz führe Code aus. In Python-Code sieht es ungefähr so aus:

for x in sequence:
    ## ...code

Um die for Schleife besser verstehen zu können, müssen wir uns ein Beispiel anschauen:

for x in range(1, 10):
    print(x)
1
2
3
4
5
6
7
8
9

range(1, 10) erstellt uns eine Liste [1, 2, 3, 4, 5, 6, 7, 8, 9].
Japp, bis 9 und nicht bis 10!! Warum?? Keine Ahnung, es ist einfach so ¯\_(ツ)_/¯

x ist die Variable, die jeden Wert innerhalb dieser Liste animmt. In diesem Beispiel ist x beim ersten mal durchlaufen der Schleife 1 und dann beim zweiten Mal 2 und so weiter bis 9. x nimmt dabei pro Durchlauf jeden einzelnen Wert der Sequenz von 1 bis 9 an.

Wir sind nicht gezwungen unsere Schleifen-Variable x zu nennen. Wir können unsere Schleifenvariable so benennen, wie es gerade am besten zu unserem Code passt.

Für jeden Durchlauf wird der indentierte Code darunter ausgeführt, deswegen sehen wir in der Konsole 1 bis 9 je in einer Zeile. Der Code darunter kann so lang sein, wie wir wollen, solange er die gleichte Indentierung hat. Lass uns zum Beispiel eine for Schleife schreiben, die von 1-12, für die Monate in einem Jahr, geht und in die Konsole schreibt, ob es ein Sommer oder Winter Monat ist:

for month in range(1, 13):
    if month >= 6:
        print("Summer, month", month)
    else:
        print("Winter, month", month)
Winter, month 1
Winter, month 2
Winter, month 3
Winter, month 4
Winter, month 5
Summer, month 6
Summer, month 7
Summer, month 8
Summer, month 9
Summer, month 10
Summer, month 11
Summer, month 12

continue und break

Innerhalb einer Schleife können wir auch continue und break benutzen.

continue tut jeden weiteren Code, der kommen würde, überspringen und geht direkt in die nächste Schleifeniteration.

## Schleife von 1 bis 10
for x in range(1, 11):
    ## Wenn es durch 3 teilbar ist, dann überspringe
    if i % 3 == 0:
        continue
    ## Sonst printe die Zahl in der Konsole
    print(i)
1
2
4
5
7
8
10

break bricht eine Schleife sofort ab und es wird keine weiter Iteration und kein weiterer Code der Schleife ausgeführt.

## Schleife von 1 bis 10
for i in range(1, 11):
    ## Wenn i gleich 5 ist, dann breche die Schleife ab
    if i == 5:
        break
    ## Sonst printe die Zahl in der Konsole
    print(i)
}
1
2
3
4

for ... else

else als finally

for x in ...:
    .....
else:
    print("done")
...
done

fizzbuzz

"fizzbuzz" wohl die bekannteste Programmieraufgabe auf der Welt. Jeder der Programmieren lernt oder studiert, wird früher oder später diese Aufgabe mal gestellt bekommen, denn fizzbuzz das perfekte Problem für Programmieranfänger, die Schleifen lernen. Dann lass uns mal anfangen!

Gehe von 1 bis 100

  • Wenn eine Zahl durch 3 teilbar ist, dann gebe "fizz" in die Konsole aus
  • Wenn eine Zahl durch 5 teilbar ist, dann gebe "buzz" in die Konsole aus
  • Sonst gebe die Zahl so wie sie ist in die Konsole aus

Zum Beispiel:

1
2
fizz
4
buzz
fizz
7
8
...

TODO: Lösung kommt hier hin und wird collapsable gemacht mit html/css on print collapsed

Jetzt bearbeite dein Code und gebe "fizzbuzz" in die Konsole aus, wenn die Zahl durch 3 und 5 teilbar ist.

Zum Beispiel:

1
2
fizz
4
buzz
fizz
7
8
fizz
buzz
11
fiz
13
14
fizzbuzz
16
...

TODO: Lösung kommt hier hin und wird collapsable gemacht mit html/css on print collapsed

mit Listen

mit Tuples

mit Strings

mit Dictonaries

Übungsaufgaben

  1. Addiere alle ungeraden Zahlen zwischen 1 und 100 miteinander

  2. Zähle wie oft ein Buchstabe in einem String vorkommmt

  3. Lass den User eine Zahl eingeben und berechne den faktorialen Wert

  4. Lass den User ein Text eingeben und zähle wie viele Konsanten und Vokale darin vorkommmen

  5. Berechne Medium, Maximum und Minimum von einem Zahlenvektor

  6. Lass den User eine Zahl eingeben und addiere alle Zahlen bis null darauf. Sprich wenn der User die Zahl 89 eingibt, dann addiere 88, 87, 86 ... bis 0 auf auf die ursprüngliche Zahl.

  7. Tannenbaum

while

Funktionen

Eigene Funktionen schreiben

Named Parameters (Benannte Parameter)

return

Übungsaufgaben

  1. Schreibe eine Funktion, die zwei Zahlen addiert und das Ergebnis zurückgibt.

  2. Erstelle eine Funktion, die das Minimum und das Maximum aus einer Liste von Zahlen zurückgibt.

  3. Schreibe eine Funktion, die eine Zahlenfolge nimmt und die geraden Zahlen zurückgibt.

  4. Erstelle eine Funktion, die einen String und eine Zahl nimmt und den String so oft wiederholt wie die Zahl angibt.

  5. Schreibe eine Funktion, die eine Celsius-Temperatur in Fahrenheit umwandelt. Die Formel um Celcius zu Fahrenheit umzuwandeln lautet: °F = (°C x 1.8) + 32

Class

Virtuelle Umgebung

Herzlichen Glückwunsch, wenn du es bis hier hin geschafft hast, dann haste schon alle Basics der Programmierung hinter dich und ab dem nächsten Kapitel fangen wir mit dem Datascience-ischen Part. Dafür müssen wir auch Thirdparty Packages installieren mit dem pip Python Package Manager, der mit der Python Installierung per Konsole aufrufbar sein sollte. Daher lohnt es sich mal anzuschauen wie moderne Python Projekte aufgesetzt werden.

Virtuelle Umgebungen, oder "virtual environments", ermöglichen es uns Packages und Libraries auf Projektebene zu installieren. Wenn wir pip einfach so benutzen, um Python Packages zu installieren, dann werden all dieses Packages system-weit installiert. Das ist auch nicht so schlimm, aber wenn wir mehr als zwei Projekte haben, die das selbe Package brauchen, aber verschiedene Versionen davon, dann tauchen Probleme auf...

Deshalb sind "virtual environments" wie venv so geil und venv ist mega einfach aufzusetzen!

Packages und Libraries, die wir installieren müssen, damit unser Projekt funktioniert, nennt man auch "dependencies".

venv

In der Konsole gebe diesen Befehl ein, in dem Ordner, indem du dein Python Projekt aufsetzten möchtest.

python -m venv env

Der Befehl erstellt mit venv eine virtuelle Umgebung, die ich env genannt habe. Der Name ist egal. Viele benutzen auch den Namen des Projekts mit "_env" oder irgendwas dahinter. Ich finde "env" schon klar genug.

Mit dem Befehl wird ein neuer Ordner "env" erstellt. Innerhalb diesem Ordner interessiert uns eigentlich nur der "bin" Ordner. In dem "bin" Ordner gibt es viele verschiedene Skripts für viele verschiedene "Shells".

In der Konsole musst du in den Projektordner cd und dann diesen Befehl, je nach Betriebsystem, ausfüheren:

  • Windows: venv\bin\activate.ps1
  • macOS: source venv/bin/activate
  • Ubuntu: source venv/bin/activate

Nun können wir mit der selben Konsole, mit der wir die virtuelle Umgebung gestartet haben, pip ganz normal benutzten, aber alle Packages werden nur innerhalb dieser Umgebung installiert, und außerhalb des Projektes weiß existieren diese Packages nicht. Das ist genau, dass was wir wollen, denn somit haben wir unser Projekt mehr isoliert und gehen sicher, dass auch alles funktioniert; denn je mehr Isolierung desto weniger Außenfaktoren gibt es die uns beim Programmieren stören könnten.

plotly

mehrere Plots in einem Plot

Legende im Plot

Plots speichern

Übungsaufgaben

Text Mining

License

Dieses Werk ist lizensiert unter GNU Free Documentation License Version 1.3, 3 November 2008

Contributors

Author: Marc Mäurer < marc.maeurer@pm.me >