Alles über die Methodenverkettungsfunktion von Pyjanitor und warum sie nützlich ist
Bild vom Herausgeber

# Einführung

Die intensive Arbeit mit Daten in Python lehrt uns alle eine wichtige Lektion: Die Datenbereinigung fühlt sich normalerweise nicht so an, als würde man Information Science betreiben, sondern eher wie ein digitaler Hausmeister. Folgendes ist in den meisten Anwendungsfällen erforderlich: Laden eines Datensatzes, Feststellen, dass viele Spaltennamen chaotisch sind, Auffinden fehlender Werte und am Ende viele temporäre Datenvariablen, von denen nur die letzte Ihren endgültigen, sauberen Datensatz enthält.

Pyjanitor bietet einen saubereren Ansatz zur Durchführung dieser Schritte. Diese Bibliothek kann zusammen mit dem Konzept der Methodenverkettung verwendet werden, um ansonsten mühsame Datenbereinigungsprozesse in Pipelines umzuwandeln, die elegant, effizient und lesbar aussehen.

Dieser Artikel zeigt, wie und entmystifiziert die Methodenverkettung im Kontext von Pyjanitor und Datenbereinigung.

# Methodenverkettung verstehen

Methodenverkettung ist im Bereich der Programmierung nichts Neues: Tatsächlich handelt es sich um ein intestine etabliertes Codierungsmuster. Es besteht darin, mehrere Methoden in sequentieller Reihenfolge für ein Objekt aufzurufen: alles in nur einer Anweisung. Auf diese Weise müssen Sie nicht nach jedem Schritt eine Variable neu zuweisen, da jede Methode ein Objekt zurückgibt, das die nächste angehängte Methode usw. aufruft.

Das folgende Beispiel hilft, das Konzept im Kern zu verstehen. Beobachten Sie, wie wir mit „Commonplace“-Python mehrere einfache Änderungen an einem kleinen Textstück (String) vornehmen würden:

textual content = "  Howdy World!  "
textual content = textual content.strip()
textual content = textual content.decrease()
textual content = textual content.substitute("world", "python")

Der resultierende Wert im Textual content ist: "hi there python!".

Mit der Methodenverkettung würde derselbe Prozess nun wie folgt aussehen:

textual content = "  Howdy World!  "
cleaned_text = textual content.strip().decrease().substitute("world", "python")

Beachten Sie, dass der logische Ablauf der angewandten Operationen von hyperlinks nach rechts verläuft: alles in einer einzigen, einheitlichen Gedankenkette!

Wenn Sie es verstanden haben, verstehen Sie jetzt den Begriff der Methodenverkettung perfekt. Lassen Sie uns diese Imaginative and prescient nun auf den Kontext der Datenwissenschaft übertragen Pandas. Eine standardmäßige Datenbereinigung für einen Datenrahmen, die aus mehreren Schritten besteht, sieht normalerweise ohne Verkettung so aus:

# Conventional, step-by-step Pandas strategy
df = pd.read_csv("information.csv")
df.columns = df.columns.str.decrease().str.substitute(' ', '_')
df = df.dropna(subset=('id'))
df = df.drop_duplicates()

Wie wir gleich sehen werden, werden wir durch die Anwendung der Methodenverkettung eine einheitliche Pipeline konstruieren, in der Datenrahmenoperationen mithilfe von Klammern gekapselt werden. Darüber hinaus benötigen wir keine Zwischenvariablen mehr, die nicht endgültige Datenrahmen enthalten, was einen saubereren, fehlerresistenteren Code ermöglicht. Und (wieder einmal) darüber hinaus macht Pyjanitor diesen Prozess reibungslos.

# Eingabe von Pyjanitor: Anwendungsbeispiel

Pandas selbst bietet in gewissem Umfang native Unterstützung für die Methodenverkettung. Einige seiner wesentlichen Funktionen wurden jedoch nicht streng nach diesem Muster entwickelt. Dies ist eine der Hauptmotivationen für die Geburt von Pyjanitor, basierend auf einem quick gleichnamigen R-Paket: janitor.

Im Wesentlichen kann Pyjanitor als Erweiterung für Pandas betrachtet werden, die eine Reihe benutzerdefinierter Datenbereinigungsprozesse auf eine Methodenverkettungs-freundliche Weise bietet. Beispiele für die Namen der API-Methoden (Utility Programming Interface) 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 kostenlosen Open-Supply-Instruments und kann nahtlos in Cloud- und Pocket book-Umgebungen wie Google Colab ausgeführt werden.

Lassen Sie uns anhand eines Beispiels vollständig verstehen, wie die Methodenverkettung in Pyjanitor angewendet wird, in dem wir zunächst einen kleinen, synthetischen Datensatz erstellen, der absichtlich chaotisch aussieht, und ihn in einen Pandas einfügen DataFrame Objekt.

WICHTIG: Um häufige, aber etwas schreckliche Fehler aufgrund von Inkompatibilität zwischen Bibliotheksversionen zu vermeiden, stellen Sie sicher, dass Sie über die neueste verfügbare Model von Pandas und Pyjanitor verfügen, indem Sie verwenden !pip set up --upgrade pyjanitor pandas Erste.

messy_data = {
    'First Identify ': ('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'),
    'Wage ($)': (50000, 60000, 70000, 50000, 80000),
    'Empty_Col': (np.nan, np.nan, np.nan, np.nan, np.nan)
}

df = pd.DataFrame(messy_data)
print("--- Messy Unique Information ---")
print(df.head(), "n")

Jetzt definieren wir eine Pyjanitor-Methodenkette, die eine Reihe von Verarbeitungen sowohl auf Spaltennamen als auch auf die Daten selbst anwendet:

cleaned_df = (
    df
    .rename_column('Wage ($)', 'Wage')  # 1. Manually repair difficult names BEFORE getting them mangled
    .clean_names()                          # 2. Standardize all the pieces (makes it 'wage')
    .remove_empty()                         # 3. Drop empty columns/rows
    .drop_duplicates()                      # 4. Take away duplicate rows
    .fill_empty(                            # 5. Impute lacking values
        column_names=('age'),               # CAUTION: after earlier steps, assume lowercase title: 'age'
        worth=df('Age').median()            # Pull the median from the unique uncooked df
    )
    .assign(                                # 6. Create a brand new column utilizing assign
        salary_k=lambda d: d('wage') / 1000
    )
)

print("--- Cleaned Pyjanitor Information ---")
print(cleaned_df)

Der obige Code ist selbsterklärend. Inline-Kommentare erläutern jede Methode, die in jedem Schritt der Kette aufgerufen wird.

Dies ist die Ausgabe unseres Beispiels, das die ursprünglichen unordentlichen Daten mit der bereinigten Model vergleicht:

--- Messy Unique Information ---
  First Identify    Last_Name   Age Date_Of_Birth  Wage ($)  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 Information ---
  first_name_ _last_name   age date_of_birth  wage  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

# Zusammenfassung

In diesem Artikel haben wir gelernt, wie man die Pyjanitor-Bibliothek verwendet, um Methodenverkettung anzuwenden und ansonsten mühsame Datenbereinigungsprozesse zu vereinfachen. Dadurch wird der Code sauberer, ausdrucksvoller und – sozusagen – selbstdokumentierend, sodass andere Entwickler oder Ihr zukünftiges Ich die Pipeline lesen und leicht verstehen können, was auf diesem Weg vom Rohdatensatz zum fertigen Datensatz vor sich geht.

Tolle Arbeit!

Iván Palomares Carrascosa ist ein führender Autor, Redner und Berater in den Bereichen KI, maschinelles Lernen, Deep Studying und LLMs. Er schult und leitet andere darin, KI in der realen Welt zu nutzen.

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert