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’intervalleduplicates
raise
(par défaut) oudrop
pour éviter les doublons de bornesprecision
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 :
import pandas as pd
importe la bibliothèque pandas, renommée ici enpd
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ètrebins=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ètrelabels
.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ètreq=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ètrelabels
.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 DataFramedf
, qui contient désormais deux nouvelles colonnes :'bins'
pour les intervalles de largeur égale, et'quantiles'
pour les quantiles.