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)
    Résultat du code

    Explication du code :

    La ligne import pandas as pd importe la bibliothèque pandas, renommée ici en pd pour simplifier son utilisation dans le code.

    La ligne import numpy as np importe la bibliothèque numpy, renommée ici en np, 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 colonnes date et ventes. La colonne date contient des dates sous forme de chaînes, et la colonne ventes 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 colonne date en format datetime. Cela permet de traiter correctement les dates pour les calculs qui suivent. Ensuite, set_index('date', inplace=True) définit la colonne date 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 colonne ventes. Ensuite, la fonction apply(lambda x: np.median(x)) applique une fonction personnalisée, ici la médiane calculée avec np.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 colonne ventes.

    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 colonne custom_rolling, qui contient la médiane des ventes sur une fenêtre glissante de 3 jours. Pour les 2 premiers jours, la médiane sera NaN, car il n'y a pas suffisamment de données dans la fenêtre glissante pour effectuer le calcul.