Ein Jahr Ausleihen und zwei Fragen
Ein Fahrradverleih speichert für jeden Tag des Jahres eine Zeile. Die Inhaberin will zwei Dinge wissen. Ist am Wochenende wirklich mehr los? Und an wie vielen Tagen wurden die Räder knapp?
Wer 365 Zeilen durchblättert, findet keine Antwort. Ein paar Zeilen pandas finden sie in Sekunden.
Am Ende dieser Lektion
Notiz
Ich kann eine Datentabelle laden und ihr Fragen stellen.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| DataFrame | eine Tabelle in pandas mit benannten Spalten | |
| Spalte | ein benanntes Feld, in jeder Zeile vorhanden | ausleihen["temp_c"] |
| Filter | behält nur die Zeilen, die eine Prüfung bestehen | ausleihen["hires"] > 400 |
| Gruppieren | die Zeilen nach dem Wert einer Spalte aufteilen | groupby("weather") |
| Zusammenfassen | viele Werte zu einem machen, etwa zu einem Mittelwert | |
| Median | der mittlere Wert, wenn die Werte sortiert sind | |
| Modus | der Wert, der am häufigsten vorkommt |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Zwei Wege ins Lab
Klicken Sie in der Leiste der Lektion auf Lab starten und warten Sie, bis es läuft. Das Terminal daneben hat kein eigenes Python. Jede Schaltfläche Ausführen tippt docker exec jupyter und führt damit einen Befehl im Container des Labs aus.
Öffnen Sie JupyterLab über die Leiste und legen Sie ein neues Notebook an. Ein Block mit dem Titel Im Notebook eingeben gehört in eine Zelle. Auf dieser Seite läuft er nicht, denn ihr Python hat kein pandas.
Ein DataFrame ist eine Tabelle mit Spaltennamen
pd.read_csv liest eine CSV-Datei in einen DataFrame. Die Spaltennamen stammen aus der ersten Zeile der Datei. Hier sind sie englisch, etwa weather für das Wetter und hires für die Ausleihen.
Eckige Klammern mit einem Namen wählen eine Spalte: ausleihen["rain_mm"] ist der Regen jedes Tages. Eine Spalte hat eigene Methoden wie max, mean und value_counts.
Die rohe Datei ansehen
docker exec jupyter head -n 4 hires.csvHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Im Notebook eingeben: eine Spalte
import pandas as pd
ausleihen = pd.read_csv("hires.csv")
# Eine Spalte: der Regen in Millimetern, Tag für Tag.
ausleihen["rain_mm"].max()
Ein Filter behält Zeilen, die eine Prüfung bestehen
ausleihen["hires"] > 400 stellt jeder Zeile eine Frage. Die Antwort ist eine Spalte aus True und False.
Steht diese Antwort in ausleihen[...], behält pandas nur die Zeilen mit True. Zwei Prüfungen verbinden Sie mit & für „und“ oder | für „oder“. Jede Prüfung bekommt eigene Klammern.
Die sehr vollen Tage zählen
docker exec jupyter python3 steps/filter.pyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Im Notebook eingeben: zwei Prüfungen
# Regentage, an denen trotzdem viel los war.
regen_voll = ausleihen[(ausleihen["weather"] == "rainy") & (ausleihen["hires"] >= 300)]
len(regen_voll)
Ein häufiger Fehler
Warnung
Viele denken, das Python-Wort and verbinde in pandas zwei Prüfungen. Das stimmt nicht: and erwartet ein einziges True oder False, eine Spalte liefert aber 365 davon. pandas bricht mit „The truth value of a Series is ambiguous“ ab. Schreiben Sie & und Klammern um jede Prüfung.
groupby teilt die Zeilen auf und fasst zusammen
ausleihen.groupby("weather")["hires"].median() macht drei Dinge. Es teilt die Zeilen nach dem Wetter auf. Es nimmt in jeder Gruppe die Spalte hires. Es bildet den Median jeder Gruppe.
Der Mittelwert wird von wenigen extremen Tagen verschoben, der Median kaum. Sehen Sie sich deshalb beide an. Der Modus passt zu einer Spalte aus Wörtern wie dem Wetter.
Beispiel: ein einziger Ausreißer
| Tage | Mittelwert | Median | Modus |
|---|---|---|---|
| 188, 240, 305, 240, 199, 412, 240, 276 | 2100 / 8 = 262,5 | (240 + 240) / 2 = 240 | 240, dreimal |
| Dieselben, 412 ersetzt durch 900 | 2588 / 8 = 323,5 | (240 + 240) / 2 = 240 | 240, dreimal |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Mittelwert und Median von Hand
# Acht Tage Ausleihen an einer Station.
tage = [188, 240, 305, 240, 199, 412, 240, 276]
summe = 0
for wert in tage:
summe = summe + wert
print("Mittelwert:", summe / len(tage))
sortiert = sorted(tage)
mitte = len(sortiert) // 2
print("Median:", (sortiert[mitte - 1] + sortiert[mitte]) / 2)
# Ersetzen Sie 412 durch 900 und starten Sie erneut.
# Welche der beiden Zahlen bewegt sich stärker?
Wochenende und Werktage vergleichen
docker exec jupyter python3 steps/weekend.pyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Im Notebook eingeben: je Wetter
# Der mittlere Tag für jede Wetterlage.
ausleihen.groupby("weather")["hires"].median()
Weiterführend: der stärkste Wochentag
Gruppieren Sie in Ihrem Notebook nach weekday und bilden Sie den Mittelwert von hires. Sortieren Sie das Ergebnis mit sort_values.
Stellen Sie danach eine eigene Frage mit einem Filter und einer Gruppierung zugleich. Zum Beispiel: Ist das Wochenende auch an Regentagen voller? Schreiben Sie Ihre Erwartung auf, bevor Sie die Zelle ausführen.