Maison  >  Article  >  développement back-end  >  FireDucks : obtenez des performances supérieures à celles des pandas avec un coût d'apprentissage nul !

FireDucks : obtenez des performances supérieures à celles des pandas avec un coût d'apprentissage nul !

Susan Sarandon
Susan Sarandonoriginal
2024-10-03 06:23:02999parcourir

Pandas est l'une des bibliothèques les plus populaires, alors que je cherchais un moyen plus simple d'accélérer ses performances, j'ai découvert FireDucks et je m'y suis intéressé !

Comparaison avec les pandas : Pourquoi FireDucks ?

Un programme Pandas peut rencontrer de sérieux problèmes de performances selon la façon dont il a été écrit. Cependant, en tant que data scientist, je souhaite passer de plus en plus de temps à analyser les données plutôt qu'à améliorer les performances de mon code. Ce serait donc formidable s'il pouvait faire quelque chose comme inverser l'ordre des processus et accélérer automatiquement les performances du programme. Par exemple, Process A =>Process B sera plus lent, nous le remplacerons donc par Process B =>Process A. (Bien sûr, le résultat est garanti d'être le même.) On dit que les data scientists dépensent environ 45 % de leur temps à préparer les données, et alors que je pensais faire quelque chose pour accélérer le processus, je suis tombé sur un module appelé FireDucks.

D'après la documentation FireDucks, il semble être pris en charge uniquement pour les plates-formes Linux. Puisque j'utilise Windows sur ma machine principale, j'aimerais l'essayer depuis WSL2 (Windows Subsystem for Linux), un environnement qui peut exécuter Linux sur Windows.

L'environnement que j'ai essayé est le suivant.

  • OS Microsoft Windows 11 Pro
  • Version 10.0.22631 Construire 22631
  • Modèle de système Z690 Pro RS
  • Type de système basé sur x64
  • Processeur PC Intel(R) Core(TM) i3-12100 de 12e génération, 3 300 MHz, 4 cœurs, 8 processeurs logiques
  • Produit de plinthe Z690 Pro RS
  • Bureau de rôle de plateforme
  • Mémoire physique installée (RAM)64,0 Go

Installation et configuration de FireDucks

Installer WSL

WSL a été installé à l'aide de la documentation Microsoft suivante ; la distribution Linux est Ubuntu 22.04.1 LTS.

Installer FireDucks

Ensuite, installez FireDucks. Cependant, il est très facile à installer.
pip installe des canards de feu

L'installation de FireDucks prendra quelques minutes (avec pyarrow, pandas et autres bibliothèques).

J'ai essayé d'exécuter le code ci-dessous, la vitesse de chargement était si rapide, les pandas ont pris 4 secondes et les fireDucks n'ont pris que 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)


Tous ces prétraitements et analyses de données prenaient environ 8 secondes chez les pandas, alors qu'ils pouvaient être terminés en 4 secondes avec FireDucks. Une accélération presque 2 fois supérieure pourrait être obtenue.

Performances améliorées

L'une des choses les plus stressantes concernant l'utilisation de pandas est d'attendre lors du chargement de grands ensembles de données, puis je dois attendre une opération complexe comme groupby. D'un autre côté, comme FireDucks effectue une évaluation paresseuse, le chargement lui-même ne prend aucun temps, donc le traitement est effectué là où il est nécessaire, et j'ai pensé que c'était très significatif avec une grande réduction du temps d'attente total.

En ce qui concerne les autres performances, il semble que des performances jusqu'à 16 fois plus rapides que celles des pandas aient été atteintes, comme l'a officiellement annoncé l'organisation. (Je comparerai les performances avec diverses bibliothèques concurrentes la prochaine fois.)

FireDucks: Get performance beyond pandas with zero learning cost!

zéro coût d'apprentissage

La possibilité de suivre la notation exacte des pandas sans avoir à penser à quoi que ce soit est un énorme avantage. Outre FireDucks, il existe d'autres bibliothèques d'accélération de trames de données, mais elles sont trop coûteuses à apprendre et trop faciles à oublier.

Par exemple, si vous souhaitez ajouter des colonnes avec des polaires, vous devez écrire quelque chose comme ceci.

# pandas df["new_col"] = df["A"] + 1
# polars 
df = df.with_columns((pl.col("A") + 1).alias("new_col"))

Presque pas besoin de modifier un code existant

J'ai plusieurs ETL et autres projets qui utilisent des pandas, et ce serait bien de voir une amélioration des performances simplement en installant et en remplaçant l'instruction d'importation par FireDucks.

Si vous souhaitez l'ajouter davantage, n'hésitez pas à commenter ci-dessous.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn