Les données catégorielles sont présentes dans presque tous les ensembles de données, n’est-ce pas ? Mais elles doivent faire l’objet d’un traitement particulier pour être utilisées efficacement, de manière à ce qu’elles puissent être utilisées pour les modèles de Machine Learning.
Encodage de variables catégorielles #
L’encodage des variables catégorielles consiste à les convertir en un format numérique que les algorithmes dee Machine Learning peuvent comprendre. Les deux méthodes les plus courantes sont l’encodage one-hot et l’encodage de label :
- Encodage one-hot à l’aide de
pd.get_dummies
: L’encodage one-hot crée des colonnes binaires (zéros et uns) pour chaque catégorie, indiquant la présence (uns) ou l’absence (zéros) d’une catégorie pour chaque point de données. Dans une colonne, s’il y a k valeurs uniques, il créera k nouvelles colonnes binaires, une pour chacune d’entre elles. Mais l’inconvénient c’est qu’il supprime la colonne d’origine !
import pandas as pd # Exemple de DataFrame avec une colonne catégorielle data = {'Category': ['A', 'B', 'A', 'C', 'B'], 'Count':[1,2,3,4,5]} df = pd.DataFrame(data) # Effectuer un encodage one-hot encoded_df = pd.get_dummies(df, columns=['Category']) print(encoded_df) -------------------------------------------------------------------- output: Observe that original Category column got Removed! Count Category_A Category_B Category_C 0 1 1 0 0 1 2 0 1 0 2 3 1 0 0 3 4 0 0 1 4 5 0 1 0
- Encodage de label : Supposons qu’il y ait 100 valeurs uniques dans une colonne catégorielle. Dans ce cas, si nous utilisons l’encodage one-hot, nous créerons 100 nouvelles colonnes ! Si nous ne voulons pas remplir les données de cette manière, nous avons une autre approche qui consiste à attribuer une valeur numérique unique à chaque catégorie. La méthode
.astype('category').cat.codes
est utilisée pour convertir les colonnes de catégories en encodage de label.
import pandas as pd # Exemple de DataFrame avec une colonne catégorielle data = {'Category': ['A', 'B', 'A', 'C', 'B']} df = pd.DataFrame(data) # Effectuer l'encodage de label df['Category_Encoded'] = df['Category'].astype('category').cat.codes print(df) ----------------------------------------------------------------- output: Category Category_Encoded 0 A 0 1 B 1 2 A 0 3 C 2 4 B 1
Tri de données ordinales #
Le tri des données ordinales consiste à organiser les points de données en fonction de leurs valeurs ordinales ou de leurs catégories dans un ordre spécifique. Les données ordinales représentent des catégories ayant un ordre naturel ou un classement, comme faible, moyen, élevé ou petit, moyen ou grand.
Nous pouvons réaliser ce tri en convertissant la colonne Ordinal en une colonne catégorielle Pandas à l’aide de pd.Categorical()
, et en spécifiant les paramètres categories=ordinal_order
et ordered=True
. Cela indique à Pandas que la colonne « Size » doit être traitée comme des données ordinales avec l’ordre spécifié.
Supposons que tu aies un DataFrame avec une colonne ordinale appelée « Size », et que tu souhaites le trier dans un ordre significatif : L’utilisation de sort_values
sur ces colonnes les triera par ordre alphabétique, ce qui n’est pas ce que nous attendons !
import pandas as pd # Exemple de DataFrame avec une colonne ordinale data = {'Product': ['Product A', 'Product B', 'Product C', 'Product D'], 'Size': ['Medium', 'Small', 'Large', 'Medium']} df = pd.DataFrame(data) # Définir l'ordre ordinal personnalisé ordinal_order = ['Small', 'Medium', 'Large'] # Avant le tri print('Tri normal :') print(df.sort_values(by='Size')) # Trier le DataFrame sur la base de la colonne 'Size' df['Size'] = pd.Categorical(df['Size'], categories=ordinal_order, ordered=True) print('Tri ordinal :') print(df.sort_values(by='Size')) ---------------------------------------------------------------------- output: Tri normal : Product Size 2 Product C Large 0 Product A Medium 3 Product D Medium 1 Product B Small Tri ordinal : Product Size 1 Product B Small 0 Product A Medium 3 Product D Medium 2 Product C Large