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)

    Explication du code :

    • pd.qcut() divise en q=3 groupes contenant chacun environ le même nombre de valeurs.
    • Contrairement à pd.cut(), les bornes ne sont pas fixes mais dépendent de la distribution des données.

    🔎 Remarques

    • pd.cut() est utile lorsque les intervalles doivent être fixes.
    • pd.qcut() est recommandé pour créer des groupes équilibrés.
    • Vérifier la distribution des données avant d’appliquer ces méthodes pour éviter des intervalles vides.