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 :
-
Fenêtre glissante avec
rolling(window=3)
:
Ici, la méthoderolling(window=3)
crée une fenêtre glissante de 3 éléments sur la colonne'colonne'
. La fenêtre glissante va parcourir les valeurs de cette colonne et, à chaque itération, un sous-ensemble de 3 valeurs consécutives sera sélectionné pour l'application de la fonction. -
Application de la fonction personnalisée avec
apply()
:
La méthodeapply()
permet d'appliquer une fonction à chaque sous-ensemble de données de la fenêtre. Ici, la fonction lambdalambda x: np.median(x)
est utilisée pour calculer la médiane des valeurs dans chaque fenêtre glissante de 3 éléments. -
Résultat :
À chaque position dans la colonne'custom_rolling'
, la médiane des 3 valeurs précédentes dans la colonne'colonne'
sera calculée et stockée. Si les données sont insuffisantes pour remplir la fenêtre (par exemple au début de la série), le résultat seraNaN
.
🔹 Remarques pratiques
-
Utilisation de fonctions complexes :
apply()
permet d'utiliser n'importe quelle fonction (lambda, fonction utilisateur ou pré-existante) pour appliquer une logique plus complexe sur chaque sous-ensemble de la fenêtre. Cela peut être utile pour calculer des métriques autres que les agrégations classiques, comme la médiane, l'écart-type, des transformations mathématiques, etc. -
Performance :
L'application de fonctions personnalisées peut être plus lente que l'utilisation de fonctions d'agrégation standard, surtout si la fenêtre glissante est large et que la fonction appliquée est complexe. Il est donc important de tester la performance de votre code avec de grandes séries de données. -
Valeurs manquantes :
Comme pour les autres fonctions glissantes, si la fenêtre ne contient pas suffisamment de valeurs pour effectuer le calcul (par exemple, en début de série), la fonction renverraNaN
. Vous pouvez ajuster le comportement avec le paramètremin_periods
si nécessaire. -
Fenêtre variable :
Si vous souhaitez appliquer cette fonction sur une fenêtre de taille variable, vous pouvez ajuster la taille de la fenêtre en fonction de critères comme la fréquence des données ou des conditions spécifiques à votre analyse.
-