Heim >Backend-Entwicklung >Python-Tutorial >FireDucks: Holen Sie sich Leistung, die Pandas übersteigt, ohne Lernkosten!

FireDucks: Holen Sie sich Leistung, die Pandas übersteigt, ohne Lernkosten!

Susan Sarandon
Susan SarandonOriginal
2024-10-03 06:23:021163Durchsuche

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!

Vergleich mit Pandas: Warum FireDucks?

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.

  • Betriebssystem Microsoft Windows 11 Pro
  • Version 10.0.22631 Build 22631
  • Systemmodell Z690 Pro RS
  • Systemtyp x64-basiert
  • PC-Prozessor Intel(R) Core(TM) i3–12100 der 12. Generation, 3300 MHz, 4 Kerne, 8 logische Prozessoren
  • Baseboard-Produkt Z690 Pro RS
  • Plattformrollen-Desktop
  • Installierter physischer Speicher (RAM)64,0 GB

FireDucks installieren und konfigurieren

Installieren Sie WSL

WSL wurde mit Hilfe der folgenden Microsoft-Dokumentation installiert; Die Linux-Distribution ist Ubuntu 22.04.1 LTS.

Installieren Sie FireDucks

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.

Verbesserte Leistung

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.)

FireDucks: Get performance beyond pandas with zero learning cost!

Keine Lernkosten

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"))

Es ist nahezu nicht erforderlich, einen vorhandenen Code zu ändern

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn