Python und Data Science: Ãœberblick

Pakete

Python Pakete für Data Science

  • Jupyter und IPython: interaktive Python Umgebungen
  • NumPy: Bibliothek zum effizienten Verarbeiten numerischer Daten
  • Pandas: Bibliothek zur Datenanalyse, basiert auf NumPy
  • Matplotlib und Pyplot: Bibliothek zur Datenvisualisierung
  • Scikit-Learn: Bibliothek für Machine Learning, basiert auf NumPy
  • Tensorflow / Keras: Bibliothek für Deep Learning

Kompilierte Pakete und Python-Versionen

Kompilierte Pakete (wie NumPy, TensorFlow oder PyTables) benötigen oft einige Monate, bis sie für eine neue Python-Version verfügbar sind.

Empfehlung: Verwende eine ältere Python-Version (z.B. 3.8 anstatt 3.9) oder eine vorkompilierte Distribution (wie Anaconda)

Python Pakete für Data Science

Installation der wichtigsten Pakete in einer vorhandenen Python-Umgebung:

pip install jupyter numpy pandas matplotlib sklearn tensorflow

Jupyter und IPython

IPython

IPython = Fortgeschrittene interaktive Python Konsole, beinhaltet u.a. Autovervollständigung

Jupyter Notebooks

  • interaktives Python-Dokument (basierend auf IPython)
  • Dateiformat mit Endung .ipynb
  • kann Python Code, Ausgaben / Grafiken und Dokumentation / Notizen beinhalten

Jupyter Interfaces

  • Jupyter Notebook: webbasiertes Interface, das auf einem Server oder lokal laufen kann
  • JupyterLab: Nachfolgeprojekt von Jupyter Notebook
  • VS Code: unterstützt Jupyter notebooks ebenfalls

Jupyter Notebook - online

kostenlose online Jupyter Notebooks:

Jupyter Notebook - VS Code

VS Code kann sich mit dem IPython-Kernel verbinden:

In der Befehlspalette von VS Code (via F1) suchen wir nach: Python: Create New Blank Jupyter Notebook

Jupyter Notebook - Jupyterlab

Ausführen von Jupyterlab aus dem Terminal:

jupyter-lab

Code schreiben und ausführen

Code in eine Zelle schreiben, z.B.

import time
time.sleep(3)
1 + 1

dann Shift + Enter drücken

Code schreiben und ausführen

In IPython gibt es nummerierte Eingaben, z.B. [1]

Code schreiben und ausführen

Wenn das letzte Statement in einer Zelle einen Wert ergibt, wird dies als Ausgabe angezeigt

Um dies zu unterdrücken, schließe das letzte Statement mit einem Semikolon ab

Code schreiben und ausführen

Interface-Funktionalität (je nach Notebook-Typ verschieden):

  • Zelle ausführen
  • neu starten (vergisst bisherige Variablen und Zustand)
  • alle Zellen ausführen / neu starten und alle Zellen ausführen
  • Ausführung unterbrechen

Dokumentation via Markdown

Wir können Dokumentation über die standardisierte Sprache Markdown hinzufügen:

Wechsle von Code auf Markdown und versuche den folgenden Code:

# Heading

- item 1
- item 2

Zelle ausführen (oder verlassen), um das Resultat anzuzeigen, doppelklicken zum erneuten Editieren

Markdown Cheatsheet

Dokumentation

Dokumentation zu Funktion / Klasse / Modul / ... in einer Python Konsole anzeigen:

help(str)

(Navigieren durch lange Ausgaben via Enter, Beenden via Q)

Shortcut in IPython / Jupyter:

str?

Terminal-Befehle ausführen

IPython beinhaltet direkten Zugriff auf viele Terminal-Befehle, z.B. ls, cd, ...

Wir können beliebige Terminal-Befehle ausführen, indem wir ein ! davor setzen

Vertiefung: Anaconda

Anaconda

Anaconda = Python Distribution, die viele vorkompilierte Pakete und Entwicklerwerkzeuge enthält

Benötigt ~5GB Platz auf der Festplatte

Conda

Conda: Environment- und Paketmanager für Anaconda

  • vorgefertigte Binaries für viele Pakete
  • Environments: Installation von verschiedenen Paketen und unterschiedlichen Versionen von Paketen für verschiedene Projekte

Installation von Anaconda

Download von https://www.anaconda.com/products/individual

Unter Windows sollte der Installationspfad keine Leerzeichen enthalten (Empfehlung: C:/anaconda) - siehe https://docs.anaconda.com/anaconda/user-guide/faq/#distribution-faq-windows-folder

Optionen während der Installation

  • Häkchen bei "Add Anaconda3 to my PATH environment variable" (auch wenn angegeben wird, dass dies nicht empfohlen wird)
  • Häkchen bei "Register Anaconda3 as my default Python 3.x"

Anaconda

zum Starten eines Jupyter Notebooks: Eintrag Jupyter Notebook im Startmenü / Befehl jupyter notebook im Terminal

Stoppen: Quit im rechten oberen Eck der Ordneransicht (üblicherweise unter http://localhost:8888/tree)

Vertiefung: Prozessmodelle für Data Mining

Vertiefung: Prozessmodelle für Data Mining

  • CRISP-DM: Cross-industry standard process for data mining
  • ASUM-DM: Analytics Solutions Unified Method for Data Mining/Predictive Analytics

CRISP-DM

Hauptphasen in CRISP-DM:

  • Business Understanding
  • Data Understanding
  • Data Preparation
  • Modeling
  • Evaluation
  • Deployment

CRISP-DM

Ressource: PDF Version

ASUM-DM

Phasen:

  • Analyze
  • Design
  • Configure and Build
  • Operate and Optimize

NumPy: Ãœberblick und Demo

NumPy

NumPy: Library zur effizienten Verarbeitung numerischer Daten - basierend auf mehrdimensionalen Arrays

NumPy: Ãœberblick und Demo

import numpy as np

# create a 2-dimensional array
iris = np.array([[5.1, 3.5, 1.4, 0.2],
                 [4.9, 3.0, 1.4, 0.2],
                 [4.7, 3.2, 1.3, 0.2],
                 [4.6, 3.1, 1.5, 0.2],
                 [5.0, 3.6, 1.4, 0.2]])

NumPy: Ãœberblick und Demo

# get the first column
iris[:, 0]  # [5.1, 4.9, 4.7, 4.6, 5.0]
# get the second column
iris[:, 1]  # [3.5, 3.0, 3.2, 3.1, 3.6]

NumPy: Ãœberblick und Demo

# get the mean value of the first column
iris[:, 0].mean()  # 4.86

# divide the entries in the first column by the entries
# in the second column
iris[:, 0] / iris[:, 1]  # [1.46, 1.63, 1.47, 1.48, 1.39]

Pandas: Ãœberblick und Demo

Pandas

Pandas: Library für Datenanalyse, basiert auf NumPy

Pandas: Ãœberblick und Demo

Laden einer Tabelle (DataFrame) aus einer CSV-Datei:

import pandas as pd

titanic = pd.read_csv(
    "https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv",
    index_col="PassengerId",
)

Pandas: Ãœberblick und Demo

Anzeigen von Daten:

titanic

Anzeigen einer Spalte ("Series"):

titanic["Age"]

Pandas: Ãœberblick und Demo

Zusammenfassung aller numerischen Daten:

titanic.describe()

Zusammenfassung einer Spalte ("Series"):

titanic["Age"].describe()

Durchschnitt einer Spalte ("Series"):

titanic["Age"].mean()

Pandas: Ãœberblick und Demo

kategorische Daten:

titanic["Pclass"].value_counts()

Pandas: Ãœberblick und Demo

Abfragen von Daten: Passagiere jünger als 1 Jahr

titanic[titanic["Age"] < 1]

Pandas: Ãœberblick und Demo

Vorbereiten der Daten für eine Machine Learning Übung:

# column with a numeric value
titanic["Female"] = titanic["Sex"].replace(
    {"female": 1, "male": 0}
)

# remove rows with missing age
titanic = titanic.dropna(subset=["Age"])

Pyplot: Ãœberblick und Demo

Pyplot: Ãœberblick und Demo

Pyplot: Interface zum Darstellen von Daten - in matplotlib beinhaltet, aus pandas aufrufbar

Pyplot: Ãœberblick und Demo

direktes Verwenden von pyplot:

import matplotlib.pyplot as plt

plt.hist(
    titanic["Pclass"],
    bins=[1, 2, 3, 4],
    align="left",
)
plt.xticks([1, 2, 3]);

pyplot aus pandas heraus verwenden:

titanic["Pclass"].plot.hist(
    bins=[1, 2, 3, 4],
    align="left",
    xticks=[1, 2, 3],
);

Pyplot: Ãœberblick und Demo

plt.boxplot(
    titanic["Age"].dropna(),
    whis=(0, 100),
    labels=["Age"]
);

Pyplot: Ãœberblick und Demo

plt.hist(
    titanic["Age"],
    bins=[0, 10, 20, 30, 40, 50, 60, 70, 80],
);

Scikit-learn: Ãœberblick und Demo

Scikit-learn: Ãœberblick und Demo

Ãœbung: Voraussagen von Ãœberleben auf der Titanic basierend auf einer linearen Regression

Einfache Algorithmen können trainiert werden, um mit ca 80%-iger Sicherheit vorauszusagen, ob ein Passagier überlebt hat (basierend auf Geschlecht, Passagierklasse, Alter, Anzahl an Geschwistern bzw Eheleuten, Anzahl an Eltern bzw Kindern)

Scikit-learn: Ãœberblick und Demo

Definieren von Eingangsdaten und vorherzusagenden Ausgangsdaten:

passenger_data = titanic[
    ["Female", "Pclass", "Age", "SibSp", "Parch"]
]
survived = titanic["Survived"]

Scikit-learn: Ãœberblick und Demo

"Trainieren" eines Modells:

from sklearn.linear_model import LinearRegression

model = LinearRegression()

model.fit(passenger_data, survived)

Scikit-learn: Ãœberblick und Demo

Voraussagen eines Wertes für das Überleben von:

  • 40 Jahre alte Frau in der ersten Klasse (ohne Begleitung)
  • 40 Jahre alter Mann in der zweiten Klasse (ohne Begleitung)
new_passenger_data = pd.DataFrame(
    [
        [1, 1, 40, 0, 0],
        [0, 2, 40, 0, 0]
    ],
    columns=["Female", "Pclass", "Age", "SibSp", "Parch"],
)
model.predict(new_passenger_data)
# [0.93, 0.23]