Appliquer une fonction personnalisée sur une fenêtre glissante avec apply()
Appliquer une fonction personnalisée sur une fenêtre glissante avec apply() permet d’appliquer des transformations ou des calculs spécifiques sur les données d’une fenêtre glissante. Par exemple, vous pouvez calculer des indicateurs spécifiques, des statistiques personnalisées ou même appliquer des algorithmes de traitement sur chaque sous-ensemble de données dans la fenêtre. L’utilisation de apply() offre une grande flexibilité pour définir des fonctions qui ne sont pas directement disponibles dans les fonctions d’agrégation standard (comme la moyenne ou la somme). Cela se fait généralement en définissant une fonction, puis en la passant à la méthode rolling() suivie de apply().
Fonctions :
-
.rolling().apply()
La méthode apply() permet d'appliquer une fonction personnalisée sur chaque fenêtre glissante. Plutôt que d'utiliser une fonction d'agrégation prédéfinie comme mean() ou sum(), l'utilisation de apply() avec une fonction lambda permet de personnaliser l'opération à réaliser sur chaque sous-ensemble de données. Cela est utile lorsque des calculs plus complexes ou spécifiques sont nécessaires, comme par exemple le calcul de la médiane, de l'écart-type, ou des statistiques personnalisées.
Importation :
import pandas as pd import numpy as np
Attributs :
Paramètre Description window
Le nombre d'observations sur lesquelles appliquer la fonction. Ce paramètre peut être un nombre entier, définissant la taille de la fenêtre glissante. apply()
Permet d'appliquer une fonction personnalisée sur chaque sous-ensemble de données de la fenêtre glissante. La fonction peut être une fonction lambda, une fonction définie par l'utilisateur ou une fonction prédéfinie de la bibliothèque. min_periods
Le nombre minimum d'observations non-nulles nécessaires dans la fenêtre pour calculer le résultat. Par défaut, il est égal à la taille de la fenêtre. axis
L'axe sur lequel appliquer l'opération (par défaut, 0
pour les lignes).closed
Définit si la fenêtre est fermée à gauche, à droite, ou les deux. Par défaut, elle est ouverte à droite. Exemple de code :
import pandas as pd import numpy as np # Création d'un DataFrame exemple data = { 'date': ['2025-01-01', '2025-01-02', '2025-01-03', '2025-01-04', '2025-01-05'], 'ventes': [100, 150, 200, 250, 300] } df = pd.DataFrame(data) # Définir la colonne 'date' comme index df['date'] = pd.to_datetime(df['date']) df.set_index('date', inplace=True) # Appliquer une fonction personnalisée (médiane) sur une fenêtre glissante de taille 3 df['custom_rolling'] = df['ventes'].rolling(window=3).apply(lambda x: np.median(x)) # Affichage du DataFrame après application de la fonction personnalisée print(df)
Explication du code :
La ligne
import pandas as pd
importe la bibliothèque pandas, renommée ici enpd
pour simplifier son utilisation dans le code.La ligne
import numpy as np
importe la bibliothèque numpy, renommée ici ennp
, qui est utilisée pour des fonctions mathématiques comme la médiane.Création d'un DataFrame exemple
Un DataFrame nommé
df
est créé avec les colonnesdate
etventes
. La colonnedate
contient des dates sous forme de chaînes, et la colonneventes
contient des chiffres représentant les ventes associées à chaque date.Définir la colonne 'date' comme index
La méthode
pd.to_datetime(df['date'])
est utilisée pour convertir la colonnedate
en format datetime. Cela permet de traiter correctement les dates pour les calculs qui suivent. Ensuite,set_index('date', inplace=True)
définit la colonnedate
comme index du DataFrame, ce qui est nécessaire pour effectuer des opérations basées sur des dates.Appliquer une fonction personnalisée (médiane) sur une fenêtre glissante de taille 3
La méthode
rolling(window=3)
est utilisée pour appliquer une fenêtre glissante de taille 3 sur la colonneventes
. Ensuite, la fonctionapply(lambda x: np.median(x))
applique une fonction personnalisée, ici la médiane calculée avecnp.median(x)
, sur chaque fenêtre de 3 éléments. La médiane est calculée pour chaque sous-ensemble de 3 valeurs consécutives de la colonneventes
.Le résultat est stocké dans une nouvelle colonne appelée
custom_rolling
.Affichage du DataFrame après application de la fonction personnalisée
La ligne
print(df)
affiche le DataFrame après l'ajout de la colonnecustom_rolling
, qui contient la médiane des ventes sur une fenêtre glissante de 3 jours. Pour les 2 premiers jours, la médiane seraNaN
, car il n'y a pas suffisamment de données dans la fenêtre glissante pour effectuer le calcul.