Ein Export mit Lücken
Das Buchungssystem des Verleihs exportiert ein Jahr zur Auswertung. Einige Temperaturen sind leer. Ein Tag meldet 99,9 Grad. Eine Ausleihzahl lautet „unknown“.
Ein Modell, das mit dieser Datei lernt, lernt die Fehler gleich mit. Das Bereinigen kommt zuerst, und es ist der größte Teil der Arbeit.
Am Ende dieser Lektion
Notiz
Ich kann fehlende und falsche Werte in einem Datensatz finden und beheben.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Fehlender Wert | eine Zelle ohne Inhalt | NaN |
| Datentyp | die Art von Wert, die eine Spalte enthält | float64 |
| Duplikat | eine Zeile, die eine andere genau wiederholt | |
| Ausreißer | ein Wert weit weg von den übrigen | |
| Imputieren | einen fehlenden Wert durch eine vernünftige Schätzung ersetzen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Vier Fehler, nach denen Sie suchen
Unsaubere Daten haben meist einen von vier Fehlern. Ein Wert fehlt. Eine Spalte hat den falschen Datentyp, Zahlen stehen also als Text darin. Eine Zeile ist ein Duplikat. Oder ein Wert kann nicht stimmen.
Für jeden Fehler gibt es in pandas eine schnelle Prüfung. Schauen Sie zuerst nach, bevor Sie etwas ändern.
Beispiel: jeder Fehler und seine Prüfung
| Fehler | Woran man ihn sieht | Die Prüfung |
|---|---|---|
| Fehlender Wert | NaN in einer Zelle | roh.isna().sum() |
| Falscher Datentyp | object, wo Zahlen stehen sollten | roh.dtypes |
| Duplikat | mehr Zeilen als Tage | roh.duplicated().sum() |
| Unmöglicher Wert | ein Höchstwert, den es nicht geben kann | roh["temp_c"].max() |
| Abweichende Schreibweise | Sunny und sunny getrennt gezählt | roh["weather"].value_counts() |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Die unsaubere Kopie anlegen und prüfen
docker exec jupyter python3 steps/messy.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: die Lücken
import pandas as pd
roh = pd.read_csv("messy.csv")
# Nur die Daten der Tage ohne Temperatur.
roh[roh["temp_c"].isna()]["date"]
Eine Textspalte versteckt ein Zahlenproblem
Ein einziges Wort in einer Zahlenspalte genügt, und pandas speichert die ganze Spalte als Text. Ihr Typ wird object, und ein Mittelwert geht nicht mehr.
pd.to_numeric(spalte, errors="coerce") macht aus jedem lesbaren Wert eine Zahl. Was es nicht lesen kann, wird NaN, und Sie finden es.
Bei Wörtern lauert dieselbe Falle. „Sunny “ mit Leerzeichen und „SUNNY“ sind für einen Rechner verschiedene Werte.
Im Notebook eingeben: falsche Zahlen
# Die Zahlen umwandeln; was nicht lesbar ist, wird NaN.
zahlen = pd.to_numeric(roh["hires"], errors="coerce")
roh[zahlen.isna() | (zahlen < 0)]
Wörter aufräumen und Zahlen prüfen
# Drei Wetterwörter aus einem unsauberen Export.
woerter = ["sunny", "Sunny ", "SUNNY"]
for wort in woerter:
print(repr(wort), "wird zu", repr(wort.strip().lower()))
# Ist eine Ausleihzahl eine ganze Zahl?
for text in ["318", "-12", "n/a"]:
print(text, text.isdigit())
# Fügen Sie "7.5" zur zweiten Liste hinzu. Was sagt isdigit?
Ein häufiger Fehler
Warnung
Viele denken, jeder Ausreißer sei ein Fehler zum Löschen. Ein ungewöhnlicher Wert kann aber stimmen: Der vollste Tag mit 487 Ausleihen ist ein echter Tag. Entfernen oder ersetzen Sie einen Wert nur, wenn er nicht stimmen kann, etwa 99,9 Grad oder eine negative Zahl.
Löschen, füllen oder korrigieren, und alles festhalten
Für jeden Fehler wählen Sie eines von drei Dingen. Löschen Sie die Zeile, wenn sie nicht zu retten ist, etwa bei „unknown“. Korrigieren Sie, wenn der richtige Wert klar ist, etwa „Sunny “ zu „sunny“. Imputieren Sie, wenn eine Schätzung genügt, etwa mit dem Median der Temperaturen.
Lassen Sie die Rohdatei unverändert und bereinigen Sie eine Kopie. So lässt sich jeder Schritt prüfen und wiederholen.
Beispiel: die Schritte der Reihe nach
| Schritt | Zeilen danach | Warum |
|---|---|---|
| messy.csv lesen | 367 | Der Export, wie er kam |
| drop_duplicates | 365 | Zwei Zeilen waren Wiederholungen |
| Nur Zahlen ab 0 behalten | 363 | „unknown“ und -5 sind keine Anzahlen |
| Temperaturen über 45 als fehlend setzen | 363 | Die 99,9 kommt zu den Lücken |
| Lücken mit dem Median füllen | 363 | Hier ist eine Schätzung besser als eine Lücke |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Die Schritte ausführen
docker exec jupyter python3 steps/clean.pyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Weiterführend: mit dem Monat füllen
Bereinigen Sie messy.csv in Ihrem Notebook auf eine andere Art. Füllen Sie jede fehlende Temperatur nicht mit dem Median des Jahres, sondern mit dem Median ihres Monats.
Hinweis: groupby("month")["temp_c"].transform("median") gibt jeder Zeile den Median ihres Monats. Vergleichen Sie die Werte für den 21. Januar und den 31. Mai mit dem Median des Jahres. Welcher wirkt glaubwürdiger, und warum?