ColumnTransformer
Дивлячись наперед, коли ви викликаєте метод .fit_transform(X)
для об'єкта Pipeline
, він застосовує кожен трансформер до всього набору ознак у X
. Однак така поведінка може бути не завжди бажаною.
Наприклад, ви можете не хотіти кодувати числові значення або вам потрібно застосувати різні трансформери до певних стовпців — наприклад, використовувати OrdinalEncoder
для порядкових ознак і OneHotEncoder
для номінативних ознак.
ColumnTransformer
вирішує цю проблему, дозволяючи обробляти кожен стовпець окремо. Для створення ColumnTransformer
можна скористатися функцією make_column_transformer
з модуля sklearn.compose
.
Функція приймає як аргументи кортежі з трансформером і списком стовпців, до яких цей трансформер має бути застосований.
Наприклад, можна створити ColumnTransformer
, який застосовує OrdinalEncoder
лише до стовпця 'education'
, а OneHotEncoder
— лише до стовпця 'gender'
.
ct = make_column_transformer(
(OrdinalEncoder(), ['education']),
(OneHotEncoder(), ['gender']), remainder='passthrough'
)
Аргумент remainder
визначає дію щодо стовпців, які не згадані у make_column_transformer
(у цьому випадку, стовпці, відмінні від 'gender'
та 'education'
).
За замовчуванням він встановлений у 'drop'
, тобто всі незгадані стовпці будуть видалені з набору даних. Щоб залишити ці стовпці незмінними у вихідних даних, встановіть remainder
у 'passthrough'
.
Наприклад, розглянемо файл exams.csv
. Він містить кілька номінативних стовпців ('gender'
, 'race/ethnicity'
, 'lunch'
, 'test preparation course'
) та один порядковий стовпець — '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())
Використовуючи ColumnTransformer
, номінативні дані можна трансформувати за допомогою OneHotEncoder
, а порядкові — за допомогою OrdinalEncoder
за один крок.
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))
ColumnTransformer
сам є трансформером, тому надає стандартні методи .fit()
, .fit_transform()
та .transform()
.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
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
ColumnTransformer
Свайпніть щоб показати меню
Дивлячись наперед, коли ви викликаєте метод .fit_transform(X)
для об'єкта Pipeline
, він застосовує кожен трансформер до всього набору ознак у X
. Однак така поведінка може бути не завжди бажаною.
Наприклад, ви можете не хотіти кодувати числові значення або вам потрібно застосувати різні трансформери до певних стовпців — наприклад, використовувати OrdinalEncoder
для порядкових ознак і OneHotEncoder
для номінативних ознак.
ColumnTransformer
вирішує цю проблему, дозволяючи обробляти кожен стовпець окремо. Для створення ColumnTransformer
можна скористатися функцією make_column_transformer
з модуля sklearn.compose
.
Функція приймає як аргументи кортежі з трансформером і списком стовпців, до яких цей трансформер має бути застосований.
Наприклад, можна створити ColumnTransformer
, який застосовує OrdinalEncoder
лише до стовпця 'education'
, а OneHotEncoder
— лише до стовпця 'gender'
.
ct = make_column_transformer(
(OrdinalEncoder(), ['education']),
(OneHotEncoder(), ['gender']), remainder='passthrough'
)
Аргумент remainder
визначає дію щодо стовпців, які не згадані у make_column_transformer
(у цьому випадку, стовпці, відмінні від 'gender'
та 'education'
).
За замовчуванням він встановлений у 'drop'
, тобто всі незгадані стовпці будуть видалені з набору даних. Щоб залишити ці стовпці незмінними у вихідних даних, встановіть remainder
у 'passthrough'
.
Наприклад, розглянемо файл exams.csv
. Він містить кілька номінативних стовпців ('gender'
, 'race/ethnicity'
, 'lunch'
, 'test preparation course'
) та один порядковий стовпець — '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())
Використовуючи ColumnTransformer
, номінативні дані можна трансформувати за допомогою OneHotEncoder
, а порядкові — за допомогою OrdinalEncoder
за один крок.
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))
ColumnTransformer
сам є трансформером, тому надає стандартні методи .fit()
, .fit_transform()
та .transform()
.
Дякуємо за ваш відгук!