TransformadorDeColunas
Olhando adiante, ao invocar o método .fit_transform(X) em um objeto Pipeline, cada transformador é aplicado ao conjunto completo de features em X. No entanto, esse comportamento pode não ser sempre o desejado.
Por exemplo, pode não ser interessante codificar valores numéricos ou pode ser necessário aplicar transformadores diferentes para colunas específicas — como utilizar OrdinalEncoder para features ordinais e OneHotEncoder para features nominais.
O ColumnTransformer resolve essa questão ao permitir que cada coluna seja tratada separadamente. Para criar um ColumnTransformer, pode-se utilizar a função make_column_transformer do módulo sklearn.compose.
A função recebe como argumentos tuplas com o transformador e a lista de colunas às quais esse transformador deve ser aplicado.
Por exemplo, é possível criar um ColumnTransformer que aplica o OrdinalEncoder apenas à coluna 'education' e o OneHotEncoder apenas à coluna 'gender'.
ct = make_column_transformer(
(OrdinalEncoder(), ['education']),
(OneHotEncoder(), ['gender']), remainder='passthrough'
)
O argumento remainder especifica a ação a ser tomada com as colunas não mencionadas em make_column_transformer (neste caso, colunas diferentes de 'gender' e 'education').
Por padrão, está definido como 'drop', ou seja, quaisquer colunas não mencionadas serão removidas do conjunto de dados. Para incluir essas colunas sem alterações na saída, defina o remainder como 'passthrough'.
Por exemplo, considere o arquivo exams.csv. Ele contém várias colunas nominais ('gender', 'race/ethnicity', 'lunch', 'test preparation course') e uma coluna ordinal, '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())
Utilizando o ColumnTransformer, dados nominais podem ser transformados com o OneHotEncoder e dados ordinais com o OrdinalEncoder em uma única etapa.
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))
O ColumnTransformer é ele próprio um transformador, portanto fornece os métodos padrão .fit(), .fit_transform() e .transform().
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
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
TransformadorDeColunas
Deslize para mostrar o menu
Olhando adiante, ao invocar o método .fit_transform(X) em um objeto Pipeline, cada transformador é aplicado ao conjunto completo de features em X. No entanto, esse comportamento pode não ser sempre o desejado.
Por exemplo, pode não ser interessante codificar valores numéricos ou pode ser necessário aplicar transformadores diferentes para colunas específicas — como utilizar OrdinalEncoder para features ordinais e OneHotEncoder para features nominais.
O ColumnTransformer resolve essa questão ao permitir que cada coluna seja tratada separadamente. Para criar um ColumnTransformer, pode-se utilizar a função make_column_transformer do módulo sklearn.compose.
A função recebe como argumentos tuplas com o transformador e a lista de colunas às quais esse transformador deve ser aplicado.
Por exemplo, é possível criar um ColumnTransformer que aplica o OrdinalEncoder apenas à coluna 'education' e o OneHotEncoder apenas à coluna 'gender'.
ct = make_column_transformer(
(OrdinalEncoder(), ['education']),
(OneHotEncoder(), ['gender']), remainder='passthrough'
)
O argumento remainder especifica a ação a ser tomada com as colunas não mencionadas em make_column_transformer (neste caso, colunas diferentes de 'gender' e 'education').
Por padrão, está definido como 'drop', ou seja, quaisquer colunas não mencionadas serão removidas do conjunto de dados. Para incluir essas colunas sem alterações na saída, defina o remainder como 'passthrough'.
Por exemplo, considere o arquivo exams.csv. Ele contém várias colunas nominais ('gender', 'race/ethnicity', 'lunch', 'test preparation course') e uma coluna ordinal, '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())
Utilizando o ColumnTransformer, dados nominais podem ser transformados com o OneHotEncoder e dados ordinais com o OrdinalEncoder em uma única etapa.
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))
O ColumnTransformer é ele próprio um transformador, portanto fornece os métodos padrão .fit(), .fit_transform() e .transform().
Obrigado pelo seu feedback!