Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Transformateur de Colonnes | Pipelines
Introduction au ML Avec Scikit-Learn

bookTransformateur de Colonnes

À l'avenir, lorsque vous invoquez la méthode .fit_transform(X) sur un objet Pipeline, elle applique chaque transformateur à l'ensemble des caractéristiques de X. Cependant, ce comportement n'est pas toujours souhaité.

Par exemple, il se peut que vous ne vouliez pas encoder des valeurs numériques ou que vous ayez besoin d'appliquer différents transformateurs à des colonnes spécifiques — comme utiliser OrdinalEncoder pour les variables ordinales et OneHotEncoder pour les variables nominales.

Le ColumnTransformer résout ce problème en permettant de traiter chaque colonne séparément. Pour créer un ColumnTransformer, vous pouvez utiliser la fonction make_column_transformer du module sklearn.compose.

La fonction prend en arguments des tuples composés du transformateur et de la liste des colonnes auxquelles ce transformateur doit être appliqué.

Par exemple, nous pouvons créer un ColumnTransformer qui applique le OrdinalEncoder uniquement à la colonne 'education' et le OneHotEncoder uniquement à la colonne 'gender'.

ct = make_column_transformer(
   (OrdinalEncoder(), ['education']),
   (OneHotEncoder(), ['gender']), remainder='passthrough'
)
Note
Remarque

L'argument remainder spécifie l'action à effectuer avec les colonnes non mentionnées dans make_column_transformer (dans ce cas, les colonnes autres que 'gender' et 'education').

Par défaut, il est défini sur 'drop', ce qui signifie que toutes les colonnes non mentionnées seront supprimées du jeu de données. Pour inclure ces colonnes inchangées dans la sortie, définissez remainder sur 'passthrough'.

Par exemple, considérez le fichier exams.csv. Il contient plusieurs colonnes nominales ('gender', 'race/ethnicity', 'lunch', 'test preparation course') et une colonne ordinale, 'parental level of education'.

12345
import pandas as pd df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/exams.csv') print(df.head())
copy

En utilisant ColumnTransformer, les données nominales peuvent être transformées avec OneHotEncoder et les données ordinales avec OrdinalEncoder en une seule étape.

123456789101112131415
import pandas as pd from sklearn.compose import make_column_transformer from sklearn.preprocessing import OneHotEncoder, OrdinalEncoder df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/exams.csv') # Ordered categories of parental level of education for OrdinalEncoder edu_categories = ['high school', 'some high school', 'some college', "associate's degree", "bachelor's degree", "master's degree"] # Making a column transformer ct = make_column_transformer( (OrdinalEncoder(categories=[edu_categories]), ['parental level of education']), (OneHotEncoder(), ['gender', 'race/ethnicity', 'lunch', 'test preparation course']), remainder='passthrough' ) print(ct.fit_transform(df))
copy

Le ColumnTransformer est lui-même un transformateur, il fournit donc les méthodes standards .fit(), .fit_transform() et .transform().

question mark

Supposons que vous disposez d'un jeu de données avec les caractéristiques 'education', 'income', 'job'. Que va-t-il se passer avec la colonne 'income' après l'exécution du code suivant ? (Remarquez que l'argument remainder n'est pas spécifié)

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 2

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Suggested prompts:

Can you explain what the `remainder='passthrough'` argument does?

How do I specify custom order for ordinal categories in `OrdinalEncoder`?

What does the output of `ct.fit_transform(df)` look like?

Awesome!

Completion rate improved to 3.13

bookTransformateur de Colonnes

Glissez pour afficher le menu

À l'avenir, lorsque vous invoquez la méthode .fit_transform(X) sur un objet Pipeline, elle applique chaque transformateur à l'ensemble des caractéristiques de X. Cependant, ce comportement n'est pas toujours souhaité.

Par exemple, il se peut que vous ne vouliez pas encoder des valeurs numériques ou que vous ayez besoin d'appliquer différents transformateurs à des colonnes spécifiques — comme utiliser OrdinalEncoder pour les variables ordinales et OneHotEncoder pour les variables nominales.

Le ColumnTransformer résout ce problème en permettant de traiter chaque colonne séparément. Pour créer un ColumnTransformer, vous pouvez utiliser la fonction make_column_transformer du module sklearn.compose.

La fonction prend en arguments des tuples composés du transformateur et de la liste des colonnes auxquelles ce transformateur doit être appliqué.

Par exemple, nous pouvons créer un ColumnTransformer qui applique le OrdinalEncoder uniquement à la colonne 'education' et le OneHotEncoder uniquement à la colonne 'gender'.

ct = make_column_transformer(
   (OrdinalEncoder(), ['education']),
   (OneHotEncoder(), ['gender']), remainder='passthrough'
)
Note
Remarque

L'argument remainder spécifie l'action à effectuer avec les colonnes non mentionnées dans make_column_transformer (dans ce cas, les colonnes autres que 'gender' et 'education').

Par défaut, il est défini sur 'drop', ce qui signifie que toutes les colonnes non mentionnées seront supprimées du jeu de données. Pour inclure ces colonnes inchangées dans la sortie, définissez remainder sur 'passthrough'.

Par exemple, considérez le fichier exams.csv. Il contient plusieurs colonnes nominales ('gender', 'race/ethnicity', 'lunch', 'test preparation course') et une colonne ordinale, 'parental level of education'.

12345
import pandas as pd df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/exams.csv') print(df.head())
copy

En utilisant ColumnTransformer, les données nominales peuvent être transformées avec OneHotEncoder et les données ordinales avec OrdinalEncoder en une seule étape.

123456789101112131415
import pandas as pd from sklearn.compose import make_column_transformer from sklearn.preprocessing import OneHotEncoder, OrdinalEncoder df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/exams.csv') # Ordered categories of parental level of education for OrdinalEncoder edu_categories = ['high school', 'some high school', 'some college', "associate's degree", "bachelor's degree", "master's degree"] # Making a column transformer ct = make_column_transformer( (OrdinalEncoder(categories=[edu_categories]), ['parental level of education']), (OneHotEncoder(), ['gender', 'race/ethnicity', 'lunch', 'test preparation course']), remainder='passthrough' ) print(ct.fit_transform(df))
copy

Le ColumnTransformer est lui-même un transformateur, il fournit donc les méthodes standards .fit(), .fit_transform() et .transform().

question mark

Supposons que vous disposez d'un jeu de données avec les caractéristiques 'education', 'income', 'job'. Que va-t-il se passer avec la colonne 'income' après l'exécution du code suivant ? (Remarquez que l'argument remainder n'est pas spécifié)

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 2
some-alt