Die Arbeit mit Daten in Python lehrt uns eine wichtige Lektion: Die Datenbereinigung fühlt sich oft weniger wie Datenwissenschaft an, sondern eher wie die Tätigkeit eines digitalen Hausmeisters. In den meisten Anwendungsfällen bedeutet dies, ein Datenset zu laden, unordentliche Spaltennamen zu entdecken, auf fehlende Werte zu stoßen und am Ende mit zahlreichen temporären Datenvariablen zu arbeiten, von denen nur die letzte das endgültige, bereinigte Datenset enthält.
Pyjanitor bietet einen klareren Ansatz zur Durchführung dieser Schritte. Diese Bibliothek kann in Verbindung mit der Methodenkette verwendet werden, um ansonsten mühsame Datenbereinigungsprozesse in elegante, effiziente und lesbare Pipelines zu verwandeln.
Dieser Artikel zeigt, wie dies funktioniert und entmystifiziert die Methodenkette im Kontext von Pyjanitor und der Datenbereinigung.
Verständnis der Methodenkette
Die Methodenkette ist kein neues Konzept in der Programmierung: Tatsächlich handelt es sich um ein gut etabliertes Codierungsmuster. Es besteht darin, mehrere Methoden in sequentieller Reihenfolge auf ein Objekt anzuwenden – alles in einer einzigen Anweisung. Auf diese Weise muss eine Variable nach jedem Schritt nicht neu zugewiesen werden, da jede Methode ein Objekt zurückgibt, das die nächste angehängte Methode aufruft, und so weiter.
Das folgende Beispiel verdeutlicht das Konzept im Kern. Betrachten wir, wie wir mehrere einfache Modifikationen an einem kleinen Textstück (String) mit „standard“ Python anwenden würden:
text = “ Hello World! „
text = text.strip()
text = text.lower()
text = text.replace(„world“, „python“)
Der resultierende Wert in text wird sein: „hello python!“.
Nun würde der gleiche Prozess mit der Methodenkette so aussehen:
text = “ Hello World! „
cleaned_text = text.strip().lower().replace(„world“, „python“)
Beachten Sie, dass der logische Fluss der durchgeführten Operationen von links nach rechts verläuft: alles in einer einzigen, einheitlichen Gedankenkette!
Wenn Sie das verstanden haben, haben Sie das Konzept der Methodenkette perfekt erfasst. Lassen Sie uns diese Vision nun auf den Kontext der Datenwissenschaft mit Pandas übertragen. Eine Standard-Datenbereinigung eines DataFrames, die aus mehreren Schritten besteht, sieht ohne Kettenbildung typischerweise so aus:
df = pd.read_csv(„data.csv“)
df.columns = df.columns.str.lower().str.replace(‚ ‚, ‚_‘)
df = df.dropna(subset=[‚id‘])
df = df.drop_duplicates()
Wie wir gleich sehen werden, können wir durch die Anwendung der Methodenkette eine einheitliche Pipeline erstellen, bei der die DataFrame-Operationen in Klammern gekapselt sind. Darüber hinaus benötigen wir keine Zwischenvariablen mehr, die nicht endgültige DataFrames enthalten, was zu einem saubereren, fehlerresistenteren Code führt. Und (einmal mehr) darüber hinaus macht Pyjanitor diesen Prozess nahtlos.
Einführung in Pyjanitor: Anwendungsbeispiel
Pandas selbst bietet in gewissem Maße native Unterstützung für die Methodenkette. Allerdings wurden einige seiner wesentlichen Funktionen nicht strikt mit diesem Muster im Hinterkopf entwickelt. Dies ist ein zentrales Motiv für die Entstehung von Pyjanitor, basierend auf einem nahezu gleichnamigen R-Paket: janitor.
Im Wesentlichen kann Pyjanitor als eine Erweiterung für Pandas betrachtet werden, die eine Reihe von benutzerdefinierten Datenbereinigungsprozessen in einer methodenkettenfreundlichen Weise bereitstellt. Beispiele für die Namen seiner Anwendungsprogrammierschnittstelle (API) sind clean_names(), rename_column(), remove_empty() und so weiter. Seine API verwendet eine Reihe intuitiver Methodennamen, die die Ausdruckskraft des Codes auf ein ganz neues Niveau heben. Darüber hinaus basiert Pyjanitor vollständig auf Open-Source-Tools und kann nahtlos in Cloud- und Notebook-Umgebungen wie Google Colab ausgeführt werden.
Um zu verstehen, wie die Methodenkette in Pyjanitor angewendet wird, erstellen wir zunächst ein kleines, synthetisches Datenset, das absichtlich unordentlich aussieht, und fügen es in ein Pandas DataFrame-Objekt ein.
WICHTIG: Um häufige, jedoch etwas schreckliche Fehler aufgrund von Inkompatibilitäten zwischen Bibliotheksversionen zu vermeiden, stellen Sie sicher, dass Sie die neueste verfügbare Version von sowohl Pandas als auch Pyjanitor haben, indem Sie zuerst !pip install --upgrade pyjanitor pandas verwenden.
messy_data = {
‚First Name ‚: [‚Alice‘, ‚Bob‘, ‚Charlie‘, ‚Alice‘, None],
‚ Last_Name‘: [‚Smith‘, ‚Jones‘, ‚Brown‘, ‚Smith‘, ‚Doe‘],
‚Age‘: [25, np.nan, 30, 25, 40],
‚Date_Of_Birth‘: [‚1998-01-01‘, ‚1995-05-05‘, ‚1993-08-08‘, ‚1998-01-01‘, ‚1983-12-12‘],
‚Salary ($)‘: [50000, 60000, 70000, 50000, 80000],
‚Empty_Col‘: [np.nan, np.nan, np.nan, np.nan, np.nan]
}
df = pd.DataFrame(messy_data)
print(„— Messy Original Data —„)
print(df.head(), „\n“)
Jetzt definieren wir eine Pyjanitor-Methodenkette, die eine Reihe von Verarbeitungen sowohl auf die Spaltennamen als auch auf die Daten selbst anwendet:
cleaned_df = (
df
.rename_column(‚Salary ($)‘, ‚Salary‘) # 1. Manuell schwierige Namen BEHEBEN, BEVOR sie verfälscht werden
.clean_names() # 2. Alles standardisieren (macht es ’salary‘)
.remove_empty() # 3. Leere Spalten/Zeilen entfernen
.drop_duplicates() # 4. Duplikate entfernen
.fill_empty( # 5. Fehlende Werte imputieren
column_names=[‚age‘], # ACHTUNG: Nach vorherigen Schritten, nehmen Sie den Kleinbuchstaben-Namen an: ‚age‘
value=df[‚Age‘].median() # Median aus dem ursprünglichen Roh-DF ziehen
)
.assign( # 6. Eine neue Spalte mit assign erstellen
salary_k=lambda d: d[’salary‘] / 1000
)
)
Der obige Code ist selbsterklärend, mit Inline-Kommentaren, die jede Methode erläutern, die in jedem Schritt der Kette aufgerufen wird.
Dies ist die Ausgabe unseres Beispiels, die die ursprünglichen unordentlichen Daten mit der bereinigten Version vergleicht:
— Messy Original Data —
First Name Last_Name Age Date_Of_Birth Salary ($) Empty_Col
0 Alice Smith 25.0 1998-01-01 50000 NaN
1 Bob Jones NaN 1995-05-05 60000 NaN
2 Charlie Brown 30.0 1993-08-08 70000 NaN
3 Alice Smith 25.0 1998-01-01 50000 NaN
4 NaN Doe 40.0 1983-12-12 80000 NaN
— Cleaned Pyjanitor Data —
first_name_ _last_name age date_of_birth salary salary_k
0 Alice Smith 25.0 1998-01-01 50000 50.0
1 Bob Jones 27.5 1995-05-05 60000 60.0
2 Charlie Brown 30.0 1993-08-08 70000 70.0
4 NaN Doe 40.0 1983-12-12 80000 80.0
Fazit
In diesem Artikel haben wir gelernt, wie wir die Pyjanitor-Bibliothek nutzen können, um die Methodenkette anzuwenden und ansonsten mühsame Datenbereinigungsprozesse zu vereinfachen. Dies macht den Code sauberer, ausdrucksstärker und – in gewisser Weise – selbstdokumentierend, sodass andere Entwickler oder Ihr zukünftiges Ich die Pipeline lesen und leicht nachvollziehen können, was auf dieser Reise vom Rohdatensatz zum bereiten Datensatz geschieht.
Gut gemacht!
Iván Palomares Carrascosa ist ein führender Experte, Autor, Redner und Berater in den Bereichen KI, maschinelles Lernen, tiefes Lernen und LLMs. Er schult und leitet andere an, wie sie KI in der realen Welt nutzen können. Weitere Informationen finden Sie in unserem Artikel über effektive Python-Dekoratoren und Optimierung von KI-Agenten.
„`
Bildquelle: ai-generated-gemini