Discrétisation des valeurs continues (pd.cut, pd.qcut)

La discrétisation des valeurs continues consiste à diviser une variable continue en intervalles (ou « buckets ») afin de la transformer en variable catégorielle. Cela peut être utile pour simplifier un modèle ou pour effectuer une analyse en regroupant des valeurs similaires. Deux fonctions couramment utilisées dans Pandas pour la discrétisation des valeurs continues sont pd.cut() et pd.qcut() : pd.cut() : Cette fonction permet de diviser une variable continue en intervalles spécifiés par l’utilisateur, où chaque intervalle a des bornes fixes définies. Cela permet de catégoriser les données en fonction de tranches d’une plage de valeurs. Exemple : Si vous avez des données de revenus, vous pouvez les diviser en catégories telles que « Faible », « Moyenne », « Élevée » en définissant les bornes pour chaque catégorie. pd.qcut() : Contrairement à pd.cut(), pd.qcut() divise la variable continue en un nombre fixe de quantiles. Cela permet de garantir que chaque catégorie aura le même nombre d’observations. Exemple : Si vous avez 1000 enregistrements et que vous utilisez pd.qcut() pour diviser les données en 4 groupes, chaque groupe contiendra environ 250 observations, mais les intervalles seront ajustés en fonction des données. Ces méthodes sont très utiles lorsqu’il est nécessaire de transformer des variables continues en variables catégorielles, par exemple, pour des modèles de machine learning qui requièrent des variables catégorielles ou pour effectuer des analyses descriptives.

Fonctions :

  • pd.cut() & pd.qcut()

    Ces fonctions permettent de transformer une variable continue en classes discrètes : pd.cut() découpe en intervalles de largeur égale. pd.qcut() découpe en quantiles (effectifs équilibrés dans chaque groupe).

    Importation :

    import pandas as pd

    Attributs :

    Paramètre Description
    bins Nombre de catégories ou liste des bornes
    labels Noms des catégories
    right True (par défaut) inclut la borne droite dans l’intervalle
    duplicates raise (par défaut) ou drop pour éviter les doublons de bornes
    precision Nombre de décimales affichées

    Exemple de code :

    import pandas as pd
    
    # Création d'un DataFrame avec des valeurs continues
    df = pd.DataFrame({'valeurs': [1, 7, 5, 12, 15, 22, 30, 42, 50]})
    
    # Discrétisation en 3 intervalles de largeur égale
    df['bins'] = pd.cut(df['valeurs'], bins=3, labels=["Petit", "Moyen", "Grand"])
    
    df['quantiles'] = pd.qcut(df['valeurs'], q=3, labels=["Bas", "Moyen", "Haut"])
    print(df)
    Résultat du code

    Explication du code :

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

    Création d'un DataFrame avec des valeurs continues

    Un DataFrame df est créé avec une colonne 'valeurs' contenant une série de valeurs continues. Ces valeurs seront utilisées pour démontrer la discrétisation des données.

    Discrétisation en 3 intervalles de largeur égale

    La méthode pd.cut() permet de diviser les valeurs continues en intervalles. Ici, le paramètre bins=3 indique que les données doivent être séparées en trois intervalles de largeur égale. Les intervalles sont étiquetés comme "Petit", "Moyen", et "Grand" grâce au paramètre labels.

    La nouvelle colonne 'bins' contient donc les étiquettes correspondant à l'intervalle auquel chaque valeur appartient.

    Discrétisation en 3 quantiles

    La méthode pd.qcut() permet de diviser les valeurs en quantiles. Ici, le paramètre q=3 indique que les données doivent être séparées en trois quantiles, c'est-à-dire que chaque quantile contient environ un tiers des données. Les quantiles sont étiquetés comme "Bas", "Moyen", et "Haut" grâce au paramètre labels.

    La nouvelle colonne 'quantiles' contient donc les étiquettes correspondant à la position de chaque valeur dans les quantiles.

    Affichage du DataFrame

    La méthode print(df) affiche le DataFrame df, qui contient désormais deux nouvelles colonnes : 'bins' pour les intervalles de largeur égale, et 'quantiles' pour les quantiles.