Columntrasformatore
Guardando al futuro, quando si invoca il metodo .fit_transform(X)
su un oggetto Pipeline
, esso applica ogni trasformatore all'intero insieme di feature in X
. Tuttavia, questo comportamento potrebbe non essere sempre desiderato.
Ad esempio, potresti non voler codificare valori numerici oppure potresti aver bisogno di applicare trasformatori diversi a colonne specifiche — come utilizzare OrdinalEncoder
per feature ordinali e OneHotEncoder
per feature nominali.
Il ColumnTransformer
risolve questo problema consentendo di trattare ogni colonna separatamente. Per creare un ColumnTransformer
, è possibile utilizzare la funzione make_column_transformer
dal modulo sklearn.compose
.
La funzione accetta come argomenti delle tuple con il trasformatore e la lista delle colonne a cui applicare tale trasformatore.
Ad esempio, possiamo creare un ColumnTransformer
che applica l'OrdinalEncoder
solo alla colonna 'education'
e l'OneHotEncoder
solo alla colonna 'gender'
.
ct = make_column_transformer(
(OrdinalEncoder(), ['education']),
(OneHotEncoder(), ['gender']), remainder='passthrough'
)
L'argomento remainder
specifica l'azione da intraprendere con le colonne non menzionate in make_column_transformer
(in questo caso, colonne diverse da 'gender'
ed 'education'
).
Per impostazione predefinita, è impostato su 'drop'
, il che significa che tutte le colonne non menzionate verranno eliminate dal dataset. Per includere queste colonne inalterate nell'output, impostare remainder
su 'passthrough'
.
Ad esempio, considera il file exams.csv
. Contiene diverse colonne nominali ('gender'
, 'race/ethnicity'
, 'lunch'
, 'test preparation course'
) e una colonna ordinale, 'parental level of education'
.
12345import 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())
Utilizzando ColumnTransformer
, i dati nominali possono essere trasformati con OneHotEncoder
e i dati ordinali con OrdinalEncoder
in un solo passaggio.
123456789101112131415import 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))
Il ColumnTransformer
è esso stesso un trasformatore, quindi fornisce i metodi standard .fit()
, .fit_transform()
e .transform()
.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
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
Columntrasformatore
Scorri per mostrare il menu
Guardando al futuro, quando si invoca il metodo .fit_transform(X)
su un oggetto Pipeline
, esso applica ogni trasformatore all'intero insieme di feature in X
. Tuttavia, questo comportamento potrebbe non essere sempre desiderato.
Ad esempio, potresti non voler codificare valori numerici oppure potresti aver bisogno di applicare trasformatori diversi a colonne specifiche — come utilizzare OrdinalEncoder
per feature ordinali e OneHotEncoder
per feature nominali.
Il ColumnTransformer
risolve questo problema consentendo di trattare ogni colonna separatamente. Per creare un ColumnTransformer
, è possibile utilizzare la funzione make_column_transformer
dal modulo sklearn.compose
.
La funzione accetta come argomenti delle tuple con il trasformatore e la lista delle colonne a cui applicare tale trasformatore.
Ad esempio, possiamo creare un ColumnTransformer
che applica l'OrdinalEncoder
solo alla colonna 'education'
e l'OneHotEncoder
solo alla colonna 'gender'
.
ct = make_column_transformer(
(OrdinalEncoder(), ['education']),
(OneHotEncoder(), ['gender']), remainder='passthrough'
)
L'argomento remainder
specifica l'azione da intraprendere con le colonne non menzionate in make_column_transformer
(in questo caso, colonne diverse da 'gender'
ed 'education'
).
Per impostazione predefinita, è impostato su 'drop'
, il che significa che tutte le colonne non menzionate verranno eliminate dal dataset. Per includere queste colonne inalterate nell'output, impostare remainder
su 'passthrough'
.
Ad esempio, considera il file exams.csv
. Contiene diverse colonne nominali ('gender'
, 'race/ethnicity'
, 'lunch'
, 'test preparation course'
) e una colonna ordinale, 'parental level of education'
.
12345import 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())
Utilizzando ColumnTransformer
, i dati nominali possono essere trasformati con OneHotEncoder
e i dati ordinali con OrdinalEncoder
in un solo passaggio.
123456789101112131415import 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))
Il ColumnTransformer
è esso stesso un trasformatore, quindi fornisce i metodi standard .fit()
, .fit_transform()
e .transform()
.
Grazie per i tuoi commenti!