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é !
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.
WSL a été installé à l'aide de la documentation Microsoft suivante ; la distribution Linux est Ubuntu 22.04.1 LTS.
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.
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.)
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"))
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!