Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Eine kleine Datenpipeline

Nach dieser Lektion: Ich kann eine kleine Pipeline schreiben, die bereinigt, verbindet und berichtet und stoppt, wenn eine Prüfung fehlschlägt.

Lektion, 60 Min.6 BefehleJupyterLab-Lab für Data Science: pandas, Matplotlib und scikit-learn im Browser

Dieselbe Bereinigung, jeden Montag

Der Besitzer schickt jeden Montag einen neuen Export. Er hat dieselben Fehler wie letzte Woche: Wiederholungen, Wörter, wo Zahlen stehen sollten, seltsame Schreibweisen.

Sie könnten ihn jedes Mal von Hand in einem Notebook bereinigen. Oder Sie schreiben die Schritte einmal in der richtigen Reihenfolge in ein Skript, das jedes Mal gleich läuft.

Am Ende dieser Lektion

Notiz

Ich kann eine kleine Pipeline schreiben, die bereinigt, verbindet und berichtet und stoppt, wenn eine Prüfung fehlschlägt.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
PipelineSchritte der Reihe nach, jeder nutzt das Ergebnis des vorigen
Schrittein Teil der PipelineDuplikate entfernen
Prüfungein Test in der Pipeline, der sie anhalten kann
Exit-Codedie Zahl, mit der ein Skript endet, 0 bei Erfolgsys.exit(1)
Reproduzierbarliefert bei jedem Start dasselbe Ergebnis

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Schritte in fester Reihenfolge

Eine Pipeline ist eine Liste von Schritten. Jeder nimmt eine Tabelle und gibt eine zurück. Die Reihenfolge zählt: Man kann nicht über das Datum verbinden, bevor die Daten sauber sind.

Nach jedem Schritt kann die Pipeline ausgeben, wie viele Zeilen übrig sind. Ein plötzlicher Sprung nach unten ist das erste Zeichen, dass ein Schritt schiefging.

Beispiel: die Schritte der heutigen Pipeline

SchrittWas er tutErwartete Zeilen
lesenLädt den unsauberen Export367
ohne DuplikateEntfernt Zeilen, die doppelt vorkommen365
echte ZahlenBehält Ausleihen ab 0, als Zahlen363
JoinFügt die Feiertagsspalte hinzu und behält jeden Tag363

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Die Feiertagsliste noch einmal schreiben

Befehl
docker exec jupyter sh -c "printf '%s\n' 'date,feiertag' '2025-01-01,Neujahr' '2025-04-18,Karfreitag' '2025-04-21,Ostermontag' '2025-05-01,Tag der Arbeit' '2025-05-29,Christi Himmelfahrt' '2025-06-09,Pfingstmontag' '2025-10-03,Tag der Deutschen Einheit' '2025-12-25,Erster Weihnachtstag' > feiertage.csv"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Das ganze Skript hat etwa zwanzig Zeilen

Der nächste Block zeigt das Skript. Lesen Sie es zuerst. Die Funktion schritt gibt die übrigen Zeilen aus und beendet das ganze Skript mit Exit-Code 1, wenn weniger als minimum da sind.

Die Zahl minimum geben Sie beim Start an, Sie wählen also, wie streng die Prüfung ist.

steps/ablauf.py

Code: python
import sys
import pandas as pd
from mess import make

minimum = int(sys.argv[1])

def schritt(name, tabelle):
    print(name, "->", len(tabelle), "Zeilen")
    if len(tabelle) < minimum:
        print("ABBRUCH:", name, "lässt weniger als", minimum, "Zeilen")
        sys.exit(1)
    return tabelle

make()
tabelle = schritt("lesen", pd.read_csv("messy.csv"))
tabelle = schritt("ohne Duplikate", tabelle.drop_duplicates())
tabelle["hires"] = pd.to_numeric(tabelle["hires"], errors="coerce")
tabelle = schritt("echte Zahlen", tabelle[tabelle["hires"] >= 0])
tabelle["weather"] = tabelle["weather"].str.strip().str.lower()
tabelle = schritt("Join", tabelle.merge(pd.read_csv("feiertage.csv"), on="date", how="left"))
tabelle.to_csv("bericht.csv", index=False)
print(tabelle.groupby("weather")["hires"].mean().round(1).to_string())

Die Pipeline ins Lab schreiben

Befehl
docker exec jupyter sh -c "printf '%s\n' 'import sys' 'import pandas as pd' 'from mess import make' '' 'minimum = int(sys.argv[1])' '' 'def schritt(name, tabelle):' '    print(name, \"->\", len(tabelle), \"Zeilen\")' '    if len(tabelle) < minimum:' '        print(\"ABBRUCH:\", name, \"lässt weniger als\", minimum, \"Zeilen\")' '        sys.exit(1)' '    return tabelle' '' 'make()' 'tabelle = schritt(\"lesen\", pd.read_csv(\"messy.csv\"))' 'tabelle = schritt(\"ohne Duplikate\", tabelle.drop_duplicates())' 'tabelle[\"hires\"] = pd.to_numeric(tabelle[\"hires\"], errors=\"coerce\")' 'tabelle = schritt(\"echte Zahlen\", tabelle[tabelle[\"hires\"] >= 0])' 'tabelle[\"weather\"] = tabelle[\"weather\"].str.strip().str.lower()' 'tabelle = schritt(\"Join\", tabelle.merge(pd.read_csv(\"feiertage.csv\"), on=\"date\", how=\"left\"))' 'tabelle.to_csv(\"bericht.csv\", index=False)' 'print(tabelle.groupby(\"weather\")[\"hires\"].mean().round(1).to_string())' > steps/ablauf.py"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Mit einem Minimum von 300 Zeilen starten

Befehl
docker exec jupyter python3 steps/ablauf.py 300

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Eine Prüfung, die die Pipeline anhält

Eine Prüfung ist nur nützlich, wenn sie Nein sagen kann. Hier ist es ein Minimum an übrigen Zeilen. Geben Sie ihr ein Minimum, das die Daten nicht halten können: Die Pipeline stoppt bei dem ersten Schritt, der es bricht.

Das Skript endet dann mit Exit-Code 1, und was es gestartet hat, weiß, dass es scheiterte.

Mindestens 365 Zeilen verlangen

Befehl
docker exec jupyter python3 steps/ablauf.py 365 || echo "Exit-Code $?"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Mindestens 400 Zeilen verlangen

Befehl
docker exec jupyter python3 steps/ablauf.py 400 || echo "Exit-Code $?"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Prüfen, was der fertige Lauf geschrieben hat

Befehl
docker exec jupyter python3 -c "import pandas as pd; r=pd.read_csv('bericht.csv'); print(r.shape, r['feiertag'].notna().sum(), r['date'].is_unique, r['hires'].isna().sum())"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein häufiger Fehler

Warnung

Viele denken, eine Pipeline, die ohne Fehler endete, sei richtig. Sie hat nur die Prüfungen bestanden, die jemand geschrieben hat. Die Zeilenzahlen sagen nichts darüber, ob die Wetterwörter gleich geschrieben sind. Fügen Sie für jeden schon gesehenen Fehler eine Prüfung hinzu.

Das Schrittmuster, in Python gerechnet

Code: python
# Das Schrittmuster in einfachem Python: tun, melden, stoppen, wenn zu wenig übrig bleibt.
zeilen = [3, 8, 1, 9, 4, 2]
minimum = 3

def ueber(grenze, werte):
    behalten = []
    for x in werte:
        if x > grenze:
            behalten.append(x)
    return behalten

def schritt(name, grenze, zeilen):
    zeilen = ueber(grenze, zeilen)
    print(name, "->", len(zeilen), "Zeilen")
    if len(zeilen) < minimum:
        print("ABBRUCH:", name)
        return None
    return zeilen

zeilen = schritt("behalte über 2", 2, zeilen)
if zeilen is not None:
    zeilen = schritt("behalte über 5", 5, zeilen)
if zeilen is None:
    print("gestoppt")
else:
    print("fertig")
# Setzen Sie minimum auf 2 und starten Sie noch einmal.

Weiter: eine Prüfung hinzufügen

Fügen Sie zu steps/ablauf.py einen Schritt hinzu, der stoppt, wenn ein Wetterwort nicht cloudy, rainy oder sunny ist. Nutzen Sie set(tabelle["weather"]) und vergleichen Sie.

Probieren Sie ihn mit den bereinigten Daten, dann vor der Zeile strip. Was findet diese Prüfung, das die Zeilenzahlen übersehen haben?

Über dieses Lab und seinen Quellcode: JupyterLab-Lab für Data Science: pandas, Matplotlib und scikit-learn im Browser

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.