Diamonds - Encoding
1. 1. Analyse du dataset pour l'encodage
Analyse du Dataset
df = sns.load_dataset('diamonds')
df.head()
carat cut color clarity depth table price x y z 0 0.23 Ideal E SI2 61.5 55.0 326 3.95 3.98 2.43 1 0.21 Premium E SI1 59.8 61.0 326 3.89 3.84 2.31 2 0.23 Good E VS1 56.9 65.0 327 4.05 4.07 2.31 3 0.29 Premium I VS2 62.4 58.0 334 4.20 4.23 2.63 4 0.31 Good J SI2 63.3 58.0 335 4.34 4.35 2.75
3 colonnes ne sont pas numériques et ont une hiérachie :
- 'cut' : Qualité de la découpe du diamand
- 'color' : Qualité de la couleur du diamand
- 'clarity' : Qualité de la transparence du diamand
- 'cut' : Qualité de la découpe du diamand
- 'color' : Qualité de la couleur du diamand
- 'clarity' : Qualité de la transparence du diamand
Liste des valeurs de la colonne 'cut'
df['cut'].unique()
['Ideal', 'Premium', 'Good', 'Very Good', 'Fair'] Categories (5, object): ['Ideal', 'Premium', 'Very Good', 'Good', 'Fair']
Liste des valeurs de la colonne 'color'
df['color'].unique()
['E', 'I', 'J', 'H', 'F', 'G', 'D'] Categories (7, object): ['D', 'E', 'F', 'G', 'H', 'I', 'J']
Liste des valeurs de la colonne 'clarity'
df['clarity'].unique()
['SI2', 'SI1', 'VS1', 'VS2', 'VVS2', 'VVS1', 'I1', 'IF'] Categories (8, object): ['IF', 'VVS1', 'VVS2', 'VS1', 'VS2', 'SI1', 'SI2', 'I1']
2. 2. Encodage (ordinal)
Ordinal Encoder
from sklearn.preprocessing import OrdinalEncoder
cut_order = ['Very Bad', 'Bad', 'Fair', 'Good', 'Very Good', 'Premium', 'Ideal']
color_order = ['J', 'I', 'H', 'G', 'F', 'E', 'D']
clarity_order = ['I1', 'SI2', 'SI1', 'VS2', 'VS1', 'VVS2', 'VVS1', 'IF']
encoder = OrdinalEncoder(
categories = [cut_order, color_order, clarity_order],
handle_unknown = 'use_encoded_value',
unknown_value = -1
)
encoder.fit_transform(df[['cut', 'color', 'clarity']])
cut color clarity 0 4.0 5.0 1.0 1 3.0 5.0 2.0 2 1.0 5.0 4.0 3 3.0 1.0 3.0 4 1.0 0.0 1.0 ... ... ... ... 53935 4.0 6.0 2.0 53936 1.0 6.0 2.0 53937 2.0 6.0 2.0 53938 3.0 2.0 1.0 53939 4.0 6.0 1.0 [53940 rows x 3 columns]
Si de nouvelles données...
encoder.transform([['Fair', 'G', 'A+']])
cut color clarity 0 0.0 3.0 -1.0
Remarque
Il est intéressant d'ajouter des catégories qui n'existent pas encore dans le dataset. Par exemple 'Bad' et 'Very Bad'
Il est intéressant d'ajouter des catégories qui n'existent pas encore dans le dataset. Par exemple 'Bad' et 'Very Bad'