Par Maxime Jumelle
CTO & Co-Founder
Publié le 13 nov. 2020
Catégorie Machine Learning
Dans certains cas d'applications, la fonction groupby
de pandas
permet de regrouper les lignes qui partagent des mêmes valeurs sur une ou plusieurs colonnes, permettant ainsi de faire des aggrégations. Mais comment faut-il faire lorsque l'on souhaite aggréger non pas par valeurs, mais par paquets de lignes ? Les window functions ont justement été pensés pour ça.
Pour bien comprendre, chargeons le jeu de données suivant.
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns sns.set_theme(style="darkgrid") df = pd.read_csv("https://blent-learning-user-ressources.s3.eu-west-3.amazonaws.com/single_notebooks/data/monthly-sunspots.csv") df['Month'] = pd.to_datetime(df['Month']) df.head()
Il s'agit d'une série temporelle où la variable Sunspots
évolue selon Month
. Une Data Visualization permet en général de mieux comprendre.
plt.figure(figsize=(16, 10)) sns.lineplot( x="Month", y="Sunspots", data=df ) plt.show()
Ce que l'on voit, c'est une série temporelle qui évolue de 1749 à 1983. Pour améliorer la lisibilité, on souhaite applique une moyenne mobile.
La moyenne mobile est un calcul qui consiste à moyenner chaque observation avec ses n voisins. Par exemple, une moyenne mobile de taille 3 prendra à chaque fois, la ligne concernée plus les 2 dernières observations. Des paquets de 3 observations seront utilisés et moyennés, permettant de lisser la courbe.
Appliquons une moyenne mobile de taille 6 : pour chaque observation, la fonction rolling
va calculer la moyenne avec les 5 observations précédentes.
À lire aussi : découvrez notre formation MLOps
df['Sunspots_MA6'] = df['Sunspots'].rolling(6).mean() df['Sunspots_MA6']
⚠️ Avec une fonction
rolling
pandas
Si maintenant, nous faisons le même graphique que précédemment mais en sélectionnant la colonne de moyenne mobile, nous pouvons voir le résultat lissé.
plt.figure(figsize=(16, 10)) sns.lineplot( x="Month", y="Sunspots_MA6", data=df ) plt.show()
Dans cet exemple, nous avons utilisé des paquets finis d'observations, c'est-à-dire où l'on connaissait exactement combien d'observations nous allions utiliser pour chaque fenêtre.
Mais dans certains cas, les fenêtres par intervalle de temps vont nous simplifier la tâche !
Une autre fonctionnalité puissante de pandas
avec les window functions est sa gestion de la temporalité. Plutôt que de définir un nombre de lignes à considérer pour chaque fenêtre, nous pouvons utiliser à la place des intervalles de temps, utile lorsqu'il n'y a pas le même nombre de lignes pour chaque fenêtre.
Dans cet exemple de données, nous avons deux colonnes.
date
avec un format heure, minute et seconde au moment où la ligne a été généré.price
, qui correspond à un prix observé à la date correspondante.prices = pd.read_csv( "https://blent-learning-user-ressources.s3.eu-west-3.amazonaws.com/single_notebooks/data/window-function-price.csv", index_col=0 ) prices['date'] = pd.to_datetime(prices['date']) prices.sort_values('date').head(n=20)
Supposons maintenant que l'on souhaite calculer la moyenne des prix observés sur exactement un jour d'ancienneté.
À lire aussi : découvrez notre formation MLOps
Ce calcul, qui peut sembler complexe à réaliser soi-même, est en réalité très facile avec les délimiteurs temporels de pandas
.
prices_window = prices.sort_values('date').rolling('1D', on='date').mean() prices_window.head(n=20)
Dans la fonction rolling
, nous définissons deux arguments :
1D
, l'ancienneté observée est de 1 jour. D'autres valeurs sont également possibles, comme S
pour le nombre de secondes, H
le nombres d'heures, etc. Ces alias sont répertoriés ici.on
permet ensuite de spécifier sur quelle colonne la window function va être appliquée.Si l'on regarde maintenant la colonne price
, elle correspond bien à la moyenne des prix sur un jour d'ancienneté, comme nous l'avions calculé manuellement.
Maintenant, plus aucune raison de ne pas utiliser la fonction rolling
sous pandas
. 😉
Vous souhaitez vous former au MLOps ?
Dans cet article
Articles similaires
20 sept. 2022
Hugging Face est une startup française qui s'est fait connaître grâce à l'infrastructure NLP qu'ils ont développée. Aujourd'hui, elle est sur le point de révolutionner le domaine du Machine Learning et traitement automatique du langage naturel. Dans cet article, nous allons présenter Hugging Face et détailler les taches de base que cette librairie permet de réaliser. Nous allons également énumérer ses avantages et ses alternatifs.
Équipe Blent
Data Scientist
Lire l'article
12 juil. 2022
spaCy est une bibliothèque open-source pour le traitement avancé du langage naturel. Elle est conçue spécifiquement pour une utilisation en production et permet de construire des applications qui traitent et comprennent de grands volumes de texte.
Équipe Blent
Data Scientist
Lire l'article
4 juil. 2022
Un auto-encodeur est une structure de réseaux neuronaux profonds qui s'entraîne pour réduire la quantité de données nécessaires pour représenter une donnée d'entrée. Ils sont couramment utilisés en apprentissage automatique pour effectuer des tâches de compression de données, d'apprentissage de représentations et de détection de motifs.
Équipe Blent
Data Scientist
Lire l'article
60 rue François 1er
75008 Paris
Blent est une plateforme 100% en ligne pour se former aux métiers Tech & Data.
Organisme de formation n°11755985075.
Data Engineering
IA Générative
MLOps
Cloud & DevOps
À propos
Gestion des cookies
© 2025 Blent.ai | Tous droits réservés