10 Einzeiler von Polars zur Beschleunigung von Daten-Workflows10 Einzeiler von Polars zur Beschleunigung von Daten-Workflows
Bild vom Herausgeber

# Einführung

Pandas ist zweifellos eine beeindruckende und vielseitige Bibliothek Datenabläufe verwalten und analysierenetwas Grundlegendes im Gesamtbild der Datenwissenschaft. Wenn die Datensätze jedoch sehr groß werden, ist dies möglicherweise nicht die effizienteste Choice, da sie hauptsächlich in einem einzelnen Thread ausgeführt wird und stark auf den Python-Interpreter angewiesen ist, was zu einer erheblichen Verarbeitungszeit führen kann.

Dieser Artikel verlagert den Fokus auf eine neuere Bibliothek, die Pandas-ähnliche Vorgänge beschleunigt: Polaren. Insbesondere werde ich mit Ihnen teilen 10 aufschlussreiche Polars-Einzeiler täglich zu rationalisieren und zu beschleunigen Datenmanipulations- und -verarbeitungsaufgaben.

Vergessen Sie dies nicht, bevor Sie beginnen import polars as pl Erste!

# 1. CSV-Dateien laden

Die Methode von Polars zum Lesen eines Datensatzes aus einer CSV-Datei sieht dem Pandas-Pendant sehr ähnlich, mit der Ausnahme, dass sie multithreaded ist (und intern in Rust geschrieben ist), wodurch Daten viel effizienter geladen werden können. Dieses Beispiel zeigt, wie eine CSV-Datei in einen Polars DataFrame geladen wird.

df = pl.read_csv("dataset.csv")

Selbst bei einem mittelgroßen Datensatz (nicht nur extrem großen) könnte der Zeitunterschied zum Lesen der Datei mit Polars etwa fünfmal schneller sein als mit Pandas.

# 2. Lazy Loading für skalierbarere Arbeitsabläufe

Das Erstellen eines sogenannten „Lazy Dataframe“ anstelle des eifrigen Lesens in einem Rutsch ist ein Ansatz, der es ermöglicht, nachfolgende Vorgänge im gesamten Datenworkflow zu verketten und sie nur dann auszuführen, wenn der accumulate() -Methode wird schließlich aufgerufen – eine sehr praktische Strategie für große Datenpipelines! Hier erfahren Sie, wie Sie das verzögerte Laden von Datenrahmen mithilfe von anwenden scan_csv() Verfahren:

df_lazy = pl.scan_csv("dataset.csv")

# 3. Auswählen und Umbenennen relevanter Spalten

Um die spätere Verarbeitung einfacher und übersichtlicher zu gestalten, empfiehlt es sich, sicherzustellen, dass Sie nur mit Spalten des Datensatzes arbeiten, die für Ihr Datenwissenschafts- oder Analyseprojekt related sind. Hier erfahren Sie, wie Sie dies effizient mit Polars-Datenrahmen tun. Angenommen, Sie verwenden einen Kundendatensatz wie Dieses hier. Sie können dann den folgenden Einzeiler verwenden, um relevante Spalten Ihrer Wahl wie folgt auszuwählen:

df = df.choose((pl.col("Buyer Id"), pl.col("First Identify")))

# 4. Filtern nach einer Teilmenge von Zeilen

Natürlich können wir auch bestimmte Zeilen, z. B. Kunden, nach Polars-Artwork filtern. Dieser Einzeiler wird verwendet, um Kunden zu filtern, die in einer bestimmten Stadt leben.

df_filtered = df.filter(pl.col("Metropolis") == "Hatfieldshire")

Möglicherweise möchten Sie eine Methode wie verwenden show() oder head() um das Ergebnis dieser „Abfrage“ zu sehen, additionally die Zeilen, die die angegebenen Kriterien erfüllen.

# 5. Gruppierung nach Kategorie und Berechnung von Aggregationen

Bei Vorgängen wie Gruppierung und Aggregation zeigt sich der Wert der Effizienz von Polars erst in größeren Datensätzen. Nehmen Sie diesen Einzeiler als Beispiel: Der Schlüssel hier ist das Kombinieren group_by auf einer kategorialen Spalte, mit agg() um eine Aggregation für alle Zeilen in jeder Gruppe durchzuführen, z. B. einen Durchschnitt für eine numerische Spalte oder einfach eine Anzahl von Zeilen in jeder Gruppe, wie unten gezeigt:

df_city = df.group_by("Metropolis").agg((pl.len().alias("num_customers")))

Seien Sie vorsichtig! Bei Pandas ist das groupby() hat kein Unterstrich-Image, in Polars jedoch schon.

# 6. Abgeleitete Spalten erstellen (Easy Function Engineering)

Dank der vektorisierten Berechnungsfunktionen von Polars ist die Erstellung neuer Spalten aus arithmetischen Operationen auf bestehenden deutlich schneller. Dieser Einzeiler demonstriert dies (berücksichtigt man nun das beliebte Wohnen in Kalifornien Datensatz für die folgenden Beispiele!):

df = df.with_columns((pl.col("total_rooms") / pl.col("households")).alias("rooms_per_household"))

# 7. Anwenden bedingter Logik

Kontinuierliche Attribute wie Einkommensniveaus oder ähnliche Attribute können vektorisiert und ohne Overhead kategorisiert und in beschriftete Segmente umgewandelt werden. In diesem Beispiel wird eine erstellt income_category Spalte basierend auf dem Durchschnittseinkommen professional Bezirk in Kalifornien:

df = df.with_columns(pl.when(pl.col("median_income") > 5).then(pl.lit("Excessive")).in any other case(pl.lit("Low")).alias("income_category"))

# 8. Ausführen einer Lazy Pipeline

Dieser Einzeiler ist zwar etwas größer, fasst jedoch mehrere der in den vorherigen Beispielen gezeigten Ideen zusammen, um eine Lazy-Pipeline zu erstellen, die mit ausgeführt wird accumulate Verfahren. Denken Sie daran: Damit dieser Lazy-Ansatz funktioniert, müssen Sie den Einzeiler Nummer 2 verwenden, um Ihre Datensatzdatei „auf die Lazy-Artwork“ zu lesen.

consequence = (pl.scan_csv("https://uncooked.githubusercontent.com/ageron/handson-ml/grasp/datasets/housing/housing.csv")
        .filter(pl.col("median_house_value") > 200000)
        .with_columns((pl.col("total_rooms") / pl.col("households")).alias("rooms_per_household"))
        .group_by("ocean_proximity").agg(pl.imply("rooms_per_household").alias("avg_rooms_per_household"))
        .kind("avg_rooms_per_household", descending=True)
        .accumulate())

# 9. Zusammenfügen von Datensätzen

Nehmen wir an, wir hätten einen zusätzlichen Datensatz namens region_stats.csv mit statistischen Informationen, die für die kalifornischen Bezirke gesammelt wurden. Wir könnten dann einen Einzeiler wie diesen verwenden, um Verknüpfungsoperationen auf eine bestimmte kategoriale Spalte anzuwenden, wie folgt:

df_joined = df.be part of(pl.read_csv("region_stats.csv"), on="ocean_proximity", how="left")

Das Ergebnis wäre eine effiziente Kombination der Wohnungsdaten mit Metadaten auf Bezirksebene über die Multithread-Joins von Polars, die die Leistung auch über größere Datensätze hinweg bewahren.

# 10. Durchführen rollierender Berechnungen

Bei stark schwankenden Datenvariablen sind rollierende Combination nützlich, um beispielsweise durchschnittliche Hauswerte über Breiten- und Längengrade hinweg zu glätten. Dieser Einzeiler veranschaulicht, wie eine so schnelle, vektorisierte Operation angewendet wird: perfekt für zeitliche oder geografische Sequenzen.

df = df.kind("longitude").with_columns(pl.col("median_house_value").rolling_mean(window_size=7).alias("rolling_value_avg"))

# Zusammenfassung

In diesem Artikel haben wir 10 praktische Einzeiler für den effizienten Einsatz von Polars als schnelle Various zu Pandas für die Verarbeitung großer Datenmengen aufgelistet. Diese Einzeiler fassen schnelle, optimierte Strategien für die Verarbeitung großer Datenmengen in kürzerer Zeit zusammen. Nutzen Sie diese, wenn Sie das nächste Mal mit Polars in Ihren Projekten zusammenarbeiten, und Sie werden zweifellos eine Reihe von Verbesserungen feststellen.

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