Zehn Wintertage
Ein neuer Mitarbeiter zählt die Ausleihen der ersten zehn Tage des Jahres und sagt: „Wir verleihen etwa 197 Räder am Tag.“ Der Besitzer nickt.
Das ganze Jahr ergibt etwa 270. Die Zahl stimmte, die Aussage nicht. Ein Ergebnis ist nur so ehrlich wie die Stichprobe, die Streuung und die Gruppe dahinter.
Am Ende dieser Lektion
Notiz
Ich kann sagen, wie weit man dem Ergebnis einer Stichprobe trauen kann.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Stichprobe | einige Zeilen aus einer größeren Tabelle |
| Repräsentativ | eine Stichprobe, die der ganzen Tabelle ähnelt |
| Streuung | wie stark die Werte voneinander abweichen |
| Ausreißer | ein Wert weit von den übrigen, echt oder falsch |
| Median | der mittlere Wert, wenn die Werte geordnet sind |
| Gruppengröße | wie viele Zeilen hinter einem Mittelwert oder einer Zahl stehen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Eine Stichprobe muss dem Ganzen ähneln
Oft kann man nicht alles ansehen, also zieht man eine Stichprobe. Eine gute Stichprobe ist repräsentativ: Sie ähnelt der ganzen Tabelle in dem, was zählt.
Die ersten zehn Zeilen einer Tabelle sind selten repräsentativ. Sie stammen alle vom selben Ort oder aus derselben Zeit.
Drei Arten vergleichen, Tage zu wählen
docker exec jupyter python3 -c "import pandas as pd; h=pd.read_csv('hires.csv'); print(\"Mittelwert des Jahres:\", round(h['hires'].mean(),1)); print(\"Mittelwert der ersten 10 Tage:\", round(h['hires'].head(10).mean(),1)); print(\"Mittelwert jedes 36. Tages:\", round(h['hires'].iloc[::36].mean(),1), len(h['hires'].iloc[::36]))"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 Zufallsstichprobe wackelt trotzdem
Zufällig gezogene Zeilen vermeiden ein Muster. Aber eine kleine Zufallsstichprobe gibt jedes Mal einen anderen Mittelwert, eine größere wackelt weniger.
In pandas zieht sample(10, random_state=1) zehn Tage. Der random_state ist ein Startwert: Dieselbe Zahl gibt wieder dieselben Tage.
Sechs Stichproben mit 10, dann mit 100 Tagen
docker exec jupyter python3 -c "import pandas as pd; h=pd.read_csv('hires.csv'); print([round(h['hires'].sample(10, random_state=s).mean(),1) for s in range(1,7)]); print([round(h['hires'].sample(100, random_state=s).mean(),1) for s in range(1,7)])"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 großer Wert, und was man tut
Ein Ausreißer liegt weit von den übrigen. Er zieht den Mittelwert zu sich, bewegt den Median aber kaum.
Löschen Sie ihn nicht, nur weil er groß ist. Fragen Sie, ob er stimmen kann. Ein Fehler, etwa 5000 Ausleihen in einem Laden mit 30 Rädern, wird entfernt. Ein echter voller Tag bleibt und wird erwähnt.
Ein riesiger Tag, in Python gerechnet
# Sieben Tage Ausleihen an einer Station, dann dieselbe Liste mit einem riesigen Tag.
tage = [204, 173, 327, 173, 240, 198, 220]
def mitte(werte):
geordnet = sorted(werte)
haelfte = len(geordnet) // 2
if len(geordnet) % 2 == 1:
return geordnet[haelfte]
return (geordnet[haelfte - 1] + geordnet[haelfte]) / 2
print("Mittelwert:", round(sum(tage) / len(tage), 1), "Median:", mitte(tage))
tage.append(5000)
print("Mittelwert:", round(sum(tage) / len(tage), 1), "Median:", mitte(tage))
# Welche der beiden Zahlen hat sich stärker bewegt?
Eine erfundene 5000 an den ersten Tag setzen
docker exec jupyter python3 -c "import pandas as pd; h=pd.read_csv('hires.csv'); t=h.copy(); t.loc[t.index[0],'hires']=5000; print(round(h['hires'].mean(),1), h['hires'].median(), round(t['hires'].mean(),1), t['hires'].median())"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die drei größten Tage ansehen
docker exec jupyter python3 -c "import pandas as pd; h=pd.read_csv('hires.csv'); print(h.nlargest(3,'hires')[['date','weather','hires']].to_string(index=False))"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, der Median sei immer besser als der Mittelwert. Er ist bei einem Ausreißer stabiler, verbirgt aber dessen Größe. Geben Sie beide an, und sagen Sie, wie groß der größte Wert war und warum Sie ihn behalten haben.
Sehen Sie auf die Größe jeder Gruppe
Ein Mittelwert über 8 Tage und einer über 200 Tage sind nicht gleich starke Belege. Zeigen Sie neben jedem Mittelwert immer, wie viele Zeilen in der Gruppe sind.
Und achten Sie aufs Verb. Regentage gehen einher mit weniger Ausleihen in dieser Tabelle. Zu zeigen, dass Regen sie verursacht, braucht mehr als einen Mittelwert.
Regentage gegen Sonnentage
docker exec jupyter python3 -c "import pandas as pd; h=pd.read_csv('hires.csv'); r=h[h['weather']=='rainy']['hires']; s=h[h['weather']=='sunny']['hires']; print(len(r),len(s),round(r.mean(),1),round(s.mean(),1)); print(round(r.std(),1), round(s.std(),1))"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Beispiel: die Zahlen lesen
| Was man sieht | Was man sagen kann | Was man nicht sagen kann |
|---|---|---|
| 120 Regentage, Mittelwert 227.6 | Regentage hatten hier weniger Ausleihen | Dass Regen der einzige Grund ist |
| 131 Sonnentage, Mittelwert 312.2 | Sonnentage waren hier voller | Dass es nächstes Jahr so sein wird |
| Streuung 80.3 und 68.2 | Einzelne Tage schwanken stark | Dass ein Tag seinem Mittelwert gleicht |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Weiter: eine faire Regel für Ausreißer
Suchen Sie in Ihrem Notebook das 25. und das 75. Perzentil von hires mit quantile. Nennen Sie ihren Abstand den IQR.
Zählen Sie die Tage unter dem 25. Perzentil minus 1,5 IQR oder über dem 75. plus 1,5 IQR. Welche Tage sind das, und würden Sie einen löschen?