Pandas ist eine der beliebtesten Bibliotheken. Als ich nach einer einfacheren Möglichkeit suchte, ihre Leistung zu beschleunigen, entdeckte ich FireDucks und begann, mich dafür zu interessieren!
Je nachdem, wie es geschrieben wurde, kann es bei einem Pandas-Programm zu ernsthaften Leistungsproblemen kommen. Als Datenwissenschaftler möchte ich jedoch immer mehr Zeit damit verbringen, Daten zu analysieren, anstatt die Leistung meines Codes zu verbessern. Es wäre also großartig, wenn es so etwas wie die Vertauschung der Reihenfolge von Prozessen und die automatische Beschleunigung der Programmleistung bewerkstelligen könnte. Beispielsweise wird Prozess A =>Prozess B langsamer sein, daher werden wir ihn als Prozess B =>Prozess A ersetzen. (Natürlich ist das Ergebnis garantiert das gleiche.) Es heißt, dass Datenwissenschaftler etwa ausgeben 45 % ihrer Zeit bereiten sie auf die Daten vor, und als ich darüber nachdachte, etwas zu tun, um den Prozess zu beschleunigen, stieß ich auf ein Modul namens FireDucks.
Aus der FireDucks-Dokumentation geht hervor, dass es nur für Linux-Plattformen unterstützt wird. Da ich Windows auf meinem Hauptcomputer verwende, würde ich es gerne von WSL2 (Windows-Subsystem für Linux) aus ausprobieren, einer Umgebung, die Linux unter Windows ausführen kann.
Die Umgebung, die ich ausprobiert habe, ist wie folgt.
WSL wurde mit Hilfe der folgenden Microsoft-Dokumentation installiert; Die Linux-Distribution ist Ubuntu 22.04.1 LTS.
Dann installieren Sie tatsächlich FireDucks. Die Installation ist jedoch sehr einfach.
pip install fireducks
Die Installation von FireDucks (zusammen mit Pyarrow, Pandas und anderen Bibliotheken) dauert einige Minuten.
Ich habe versucht, den folgenden Code auszuführen. Die Ladegeschwindigkeit war so hoch, dass Pandas 4 Sekunden brauchte und FireDucks nur 74,5 ns.
# 1. analysis based on time period and creative duration # convert timestamp to date/time object df['timestamp_converted'] = pd.to_datetime(df['timestamp'], unit='s ') # define time period def get_part_of_day(hour): if 5 <= hour < 12: return 'morning' elif 12 <= hour < 17: return 'afternoon' else: return 'evening' # Add time period in new column df['part_of_day'] = df['timestamp_converted'].apply(lambda x: get_part_of_day(x.hour)) # Calculate average creative duration by time period df_ duration_by_time = df.groupby('part_of_day')['creative_duration'].mean() print(df_duration_by_time) # 2. campaign performance per different advertiser df_ campaigns_per_advertiser = df.groupby('advertiser_id')['campaign_id'].nunique() df_creatives_per_advertiser = df.groupby('advertiser_id ')['creatives_id'].nunique() print(df_campaigns_per_advertiser) print(df_creatives_per_advertiser) # 3. language and website association df_common_website_ per_language = df.groupby('placement_language')['website_id'].apply(lambda x: x.mode()[0]) print(df_common_website_per_language) # 4. Analyze referrer information def extract_domain(referrer): # if referrer is a float (e.g. NaN), return empty string if isinstance(referrer, float): return '' # otherwise, extract domain name return referrer.split('/')[0] df['referrer_domain'] = df['referrer_deep_three'].apply(extract_domain) df_referrer_distribution = df['referrer_domain'].value_counts() print(df_referrer_distribution)
All diese Datenvorverarbeitung und -analyse dauerte bei Pandas etwa 8 Sekunden, während sie bei Verwendung von FireDucks innerhalb von 4 Sekunden abgeschlossen werden konnte. Es konnte eine fast 2-fache Geschwindigkeitssteigerung erreicht werden.
Eines der stressigsten Dinge bei der Verwendung von Pandas ist das Warten beim Laden großer Datensätze, und dann muss ich auf komplexe Vorgänge wie Groupby warten. Da FireDucks andererseits eine verzögerte Auswertung durchführt, nimmt das Laden selbst überhaupt keine Zeit in Anspruch, sodass die Verarbeitung dort erfolgt, wo sie benötigt wird, und ich hatte das Gefühl, dass dies sehr wichtig war und die Gesamtwartezeit erheblich verkürzte.
Was die sonstige Leistung betrifft, so scheint es, dass eine bis zu 16-mal schnellere Leistung im Vergleich zu Pandas erreicht wurde, wie die Organisation offiziell bekannt gab. (Ich werde die Leistung das nächste Mal mit verschiedenen konkurrierenden Bibliotheken vergleichen.)
Die Möglichkeit, der genauen Pandas-Notation zu folgen, ohne über irgendetwas nachdenken zu müssen, ist ein großer Vorteil. Abgesehen von FireDucks gibt es noch andere Datenrahmenbeschleunigungsbibliotheken, aber sie sind zu teuer zum Erlernen und zu leicht zu vergessen.
Wenn Sie beispielsweise Spalten mit Polaren hinzufügen möchten, müssen Sie so etwas schreiben.
# pandas df["new_col"] = df["A"] + 1 # polars df = df.with_columns((pl.col("A") + 1).alias("new_col"))
Ich habe mehrere ETLs und andere Projekte, die Pandas verwenden, und es wäre schön, eine Leistungsverbesserung zu sehen, allein durch die Installation und Ersetzung der Importanweisung durch FireDucks.
Wenn Sie es weiter hinzufügen möchten, können Sie unten einen Kommentar abgeben.
Das obige ist der detaillierte Inhalt vonFireDucks: Holen Sie sich Leistung, die Pandas übersteigt, ohne Lernkosten!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!