10  Grundlagen

Dieses Kapitel bietet eine Einführung in die grundlegenden Konzepte von Python, die für Data Science und KI essentiell sind. Für eine praktische Lernerfahrung kann das gesamte Kapitel als Jupyter Notebook heruntergeladen werden:

⬇️ Jupyter Notebook herunterladen

Nach dem Herunterladen kann das Notebook im code Ordner gespeichert und in Jupyter Notebook geöffnet werden.

10.1 Bibliotheken importieren

In Python erweitern Pakete und Bibliotheken die Funktionalität der Sprache. Sie werden am Anfang des Skripts importiert, üblicherweise als erster Code-Block unterhalb der ersten Markdown-Zelle. Dies hilft, den Code übersichtlich und effizient zu gestalten. Oft werden Aliase (Kurzformen) verwendet, um die Bibliotheken im Code einfacher anzusprechen.

Folgender Code importiert wichtige Data Science-Bibliotheken:

# Bibliotheken importieren
import numpy as np      # Für numerische Operationen
import pandas as pd     # Für Datenmanipulation und -analyse
import altair as alt    # Für Datenvisualisierung

Erklärung der importierten Bibliotheken:

  • NumPy (np): Stellt Funktionen für komplexe mathematische Operationen bereit.
  • Pandas (pd): Ermöglicht die effiziente Handhabung und Analyse von strukturierten Daten wie Tabellen.
  • Altair (alt): Bietet eine intuitive Möglichkeit zur Erstellung von interaktiven Visualisierungen.

10.2 Kommentare einfügen

Kommentare sind ein wichtiges Werkzeug zur Dokumentation des Codes. Sie helfen, den Code verständlicher zu machen und erleichtern die Zusammenarbeit mit anderen Entwicklerinnen und Entwicklern. In Python gibt es verschiedene Möglichkeiten, Kommentare zu nutzen.

10.2.1 Einzeilige Kommentare

Einzeilige Kommentare beginnen mit dem #-Zeichen:

# Dies ist ein einzeiliger Kommentar
x = 5  # Kommentare können auch am Ende einer Codezeile stehen

10.2.2 Mehrzeilige Kommentare

Für mehrzeilige Kommentare werden oft dreifache Anführungszeichen verwendet.

"""
Dies ist ein 
mehrzeiliger 
Kommentar
"""
'\nDies ist ein \nmehrzeiliger \nKommentar\n'

10.2.3 Docstrings

Mehrzeilige Kommentare werden auch als “Docstring” (Documentation-String) bezeichnet, wenn sie bspw. direkt nach der Definition einer Funktion stehen:

def example_function():
    """
    Dies ist ein Docstring für eine Funktion.
    Er beschreibt, was die Funktion tut,  
    welche Parameter sie akzeptiert  
    und was sie zurückgibt.  
    """
    pass

Durch die Verwendung von Docstrings wird der Code nicht nur für Menschen lesbarer, sondern auch für automatisierte Tools zur Dokumentationserstellung zugänglicher. Dies ist besonders in größeren Projekten und bei der Entwicklung von Bibliotheken oder Frameworks von Vorteil.

10.2.4 Code auskommentieren

Kommentare können auch zur temporären Deaktivierung von Code (auch als “auskommentieren” bekannt) genutzt werden.

# Auskommentieren
# x = 5 

10.3 Variablen und Datentypen

In der Programmierung spielen Variablen und Datentypen eine zentrale Rolle. Sie bilden das Fundament, auf dem komplexe Analysen und Algorithmen aufbauen.

10.3.1 Variablen

Variablen sind benannte Speicherorte im Arbeitsspeicher eines Computers. Sie dienen dazu, Daten zu speichern und zu manipulieren.

Bei der Benennung von Variablen in Python gibt es einige wichtige Konventionen zu beachten:

  1. Snake Case: Wir verwenden Kleinbuchstaben und trennen Wörter durch Unterstriche. Beispiel: benutzer_name, gesamtpreis_mit_rabatt

  2. Beschreibende Namen: Aussagekräftige Namen nutzen, die den Zweck der Variable verdeutlichen (Variablennamen müssen mit einem Buchstaben oder Unterstrich beginnen, nicht mit Zahlen). Gut: alter_in_jahren, gesamtpreis Schlecht: a, x1

  3. Keine reservierten Wörter: Keine Python-Schlüsselwörter wie if, for, class verwenden.

Durch Einhaltung dieser Konventionen wird der Code lesbarer und wartbarer, was besonders in größeren Projekten und bei der Zusammenarbeit in Teams wichtig ist.

Beispielsweise können wir eine Variable mit dem Namen alter erstellen und ihr der Wert 25 zugewiesen.

alter = 25

In Python können den Variablen ganz unterschiedliche Werte zugewiesen werden:

# Verschiedene Variablen speichern
name = "Alice" 
studiert = True
zahlen = [1, 2, 3]
person = {"name": "Alice", "alter": 30}

Um den Inhalt von Variablen anzuzeigen, wird die print()-Funktion verwendet:

print(alter)
25

Eine Variable kann man sich wie eine beschriftete Box vorstellen, in der Informationen aufbewahrt werden. Der Name der Variable ist die Beschriftung auf der Box, und der Inhalt der Box repräsentiert den Wert der Variable. Dieser Wert kann im Laufe des Programms verändert werden, daher der Name “Variable”.

alter = 60
print(alter)
60

10.3.2 Datentypen

Datentypen bestimmen die Art der Daten, die in einer Variable gespeichert werden können. Sie definieren auch, welche Operationen mit diesen Daten durchgeführt werden können. Python ist eine dynamisch typisierte Sprache, was bedeutet, dass der Datentyp einer Variable automatisch erkannt wird.

Jeder Datentyp hat seine eigenen Eigenschaften und Verwendungszwecke. Zum Beispiel verwendet man “Strings” für Text, “Integer” für ganze Zahlen und “Floats” für Dezimalzahlen. “Listen” und “Dictionaries” sind komplexere Datentypen, die mehrere Werte oder Schlüssel-Wert-Paare speichern können.:

Datentyp Beschreibung Beispiel Verwendung
String Textdaten, in Anführungszeichen gesetzt "Hallo Welt" Für Namen, Texte, Sätze
Integer Ganze Zahlen ohne Dezimalstellen 42, -10 Für Zählungen, Indizes, ganze Mengen
Float Zahlen mit Dezimalstellen 3.14, -0.5 Für Messwerte, Berechnungen mit Dezimalstellen
Boolean Logische Werte (True oder False) True, False Für Bedingungen, Flags, Zustandsabfragen
List Geordnete Sammlung von Elementen, veränderbar [1, 2, 3], ['a', 'b', 'c'] Für Sequenzen von Daten, geordnete Sammlungen
Dictionary Sammlung von Schlüssel-Wert-Paaren {'name': 'Max', 'alter': 30} Für strukturierte Daten, Zuordnungen, Konfigurationen

Anzeigen des Datentyps in Python:

# Verwendung der type() Funktion
zahl = 42
text = "Hallo Welt"
dezimal = 3.14
logisch = True
liste = [1, 2, 3]
wörterbuch = {"name": "Max", "alter": 30}

print(type(zahl))
print(type(text)) 
print(type(dezimal))
print(type(logisch))
print(type(liste))
print(type(wörterbuch))
<class 'int'>
<class 'str'>
<class 'float'>
<class 'bool'>
<class 'list'>
<class 'dict'>

10.4 Operatoren und Berechnungen

Operatoren ermöglichen mathematische und logische Operationen in Python.

10.4.1 Arithmetische Operatoren

Für die folgenden Operationen erzeugen wir zunächst zwei numerische Variablen:

laenge = 10
breite = 5

Berechnung der Fläche und des Umfangs:

 # Multiplikation
flaeche = laenge * breite
# Addition und Multiplikation
umfang = 2 * (laenge + breite) 
# Ausgabe der Variable
print(umfang) 
30

10.4.2 Vergleichsoperatoren

ist_quadratisch überprüft, ob die beiden Seiten gleich lang sind:

# Gleichheit überprüfen
ist_quadratisch = laenge == breite
# Ausgabe: Ist es ein Quadrat? 
print(f"Ist es ein Quadrat? {ist_quadratisch}")
Ist es ein Quadrat? False

Wir nutzen in dem print()-Befehl einen sogenannten f-string (formatted string literal), mit dem wir Text und Python-Objekte kombiniert ausgeben können. Das Python-Objekt wird dabei in einer geschwungenen Klammer eingefügt.

10.4.3 Logische Operatoren

ist_grosses_rechteck verwendet logische Operatoren, um festzustellen, ob das Rechteck sowohl eine große Fläche als auch einen großen Umfang hat (mit Werten, die wir festgelegt haben).

ist_grosses_rechteck = (flaeche > 20) and (umfang > 10)
# Ausgabe
print(f"Ist es ein großes Rechteck? {ist_grosses_rechteck}")  
Ist es ein großes Rechteck? True

10.4.4 Arten von Operatoren

Hier eine Übersicht einiger wichtiger Operatoren:

Kategorie Operatoren Beschreibung
Arithmetische Operatoren +, -, *, /, // Addition, Subtraktion, Multiplikation, Division, Ganzzahldivision
%, ** Modulo (Rest), Potenz
Vergleichsoperatoren ==, != Gleichheit, Ungleichheit
<, >, <=, >= Kleiner als, Größer als, Kleiner oder gleich, Größer oder gleich
Logische Operatoren and, or, not Logisches UND, ODER, NICHT

10.5 Arbeiten mit DataFrames

DataFrames, bereitgestellt durch das Pandas-Paket, sind zentral für die Datenanalyse in Python. Sie organisieren Daten in Zeilen und Spalten, ähnlich einer Tabelle.

# Erstellen eines dictionarys
daten = {
    "Zahlen": [1, 2, 3, 4, 5],
    "Quadrate": [1, 4, 9, 16, 25]
}
# Ausgabe
print(daten)
{'Zahlen': [1, 2, 3, 4, 5], 'Quadrate': [1, 4, 9, 16, 25]}

Das Dictionary daten enthält zwei Listen: Zahlen und deren Quadrate.

Erstellen eines DataFrame mit Pandas:

df = pd.DataFrame(daten)

Wir nennen den DataFrame df (dies ist eine gängige Abkürzung für DataFrame). Unser DataFrame wird aus dem Wörterbuch daten mit der Funktion pd.DataFrame erstellt, welche die Daten in Zeilen und Spalten organisiert.

Den DataFrame ausgeben (dafür verwenden wir nicht print()):

# DataFrame anzeigen
df
Zahlen Quadrate
0 1 1
1 2 4
2 3 9
3 4 16
4 5 25

Das Eingeben von df in eine Jupyter Notebook-Zelle zeigt den DataFrame in tabellarischer Form an.

10.6 Methoden verstehen

Eine Methode ist eine Funktion, die mit einem Objekt (wie einem DataFrame, einer Liste oder einem String) verknüpft ist und über die Punktnotation (.) aufgerufen wird. Dies erleichtert die Manipulation des Objekts und das Abrufen von Informationen.

Hier ein Beispiel der String-Methode .upper(), mit welcher Text in Großbuchstaben ausgegeben werden kann:

# String-Methode
text = "hello, world"
# Ausgabe
print(text.upper())  
HELLO, WORLD

Mit der Methode .sort() können Werte in einer Liste sortiert werden:

# Liste erstellen
numbers = [3, 1, 4, 1, 5, 9]
# Liste sortieren
numbers.sort()
# Liste ausgeben
print(numbers)  
[1, 1, 3, 4, 5, 9]

Die folgenden Beispiele sind DataFrame-Methoden des Pakets Pandas, die häufig in Datenprojekten zum Einsatz kommen. Beispielsweise ist .head() eine Methode, welche die ersten Zeilen eines DataFrames anzeigt:

df.head() 
Zahlen Quadrate
0 1 1
1 2 4
2 3 9
3 4 16
4 5 25

Die Methode .describe() liefert zusammenfassende Statistiken wie Mittelwert, Anzahl und Standardabweichung. Zusätzlich verwenden wir hier die Methode .round(2), um die Werte auf die zweite Dezimalstelle zu runden:

df.describe().round(2) 
Zahlen Quadrate
count 5.00 5.00
mean 3.00 11.00
std 1.58 9.67
min 1.00 1.00
25% 2.00 4.00
50% 3.00 9.00
75% 4.00 16.00
max 5.00 25.00

Zuletzt noch ein Beispiel, wie der Mittlwert mit Hilfe der Methode .mean() berechnet werden kann. Wir erzeugen dafür ein neues Objekt mit der Bezeichnung mean_value und geben dieses dann mit einem f-String aus:

mean_value = df['Zahlen'].mean()
# Ergebnis ausgeben
print(f"Mittelwert: {mean_value}")
Mittelwert: 3.0

Hier nochmals eine Zusammenfassung der wichtigsten Punkte zu Methoden:

  • Objekt: Eine Entität, die Daten und Funktionalität enthält (z.B. DataFrame, Liste oder String).
  • Methode: Eine Funktion, die mit einem Objekt verknüpft ist.
  • Punktnotation (.): Wird verwendet, um eine Methode auf einem Objekt aufzurufen.

10.7 Daten mit Altair visualisieren

Nachdem wir die Struktur eines DataFrames verstanden haben, können wir die Daten mit Hilfe von Altair visualisieren:

# Einfaches Streudiagramm erstellen
chart = alt.Chart(df).mark_point().encode(
    x='Zahlen',
    y='Quadrate'
)
# Diagramm anzeigen
chart

Komponenten des Altair-Diagramms:

  • alt.Chart(df): Erstellt ein neues Diagrammobjekt aus dem DataFrame df.
  • mark_point(): Gibt den Diagrammtyp an (in diesem Fall ein Streudiagramm).
  • encode: Ordnet DataFrame-Spalten Diagrammattributen zu.
    • x='Numbers': Legt die horizontale Achse auf die Spalte Numbers fest.
    • y='Squares': Legt die vertikale Achse auf die Spalte Squares fest.

Diese prägnante Syntax ermöglicht die schnelle Erstellung und Anpassung von Visualisierungen.