[데이터 사이언스/문법] columnTransformer란?

2024. 8. 16. 19:42데이터 사이언스

전처리기 정의

preprocessor = ColumnTransformer(
    transformers=[
        ('num', num_transformer, num_features),
        ('cat', cat_transformer, cat_features)
    ])

상세 설명

preprocessor =
  • preprocessor라는 변수에 ColumnTransformer 객체를 할당합니다.
  • 이 변수는 이후에 데이터 전처리를 수행하는 데 사용됩니다.
ColumnTransformer(
  • ColumnTransformer 클래스는 여러 개의 변환기를 각기 다른 열에 적용할 수 있게 해주는 클래스입니다.
  • ColumnTransformer를 사용하면 수치형 데이터와 범주형 데이터를 각각의 적절한 방법으로 변환할 수 있습니다.
  • sklearn.compose 모듈에서 임포트하여 사용합니다.
transformers=[...]
  • transformers 인자는 변환기 리스트를 받습니다.
  • 이 리스트는 각 변환기에 대해 이름, 변환기 객체, 적용할 열을 지정한 튜플로 구성됩니다.
  • 예시: ('num', num_transformer, num_features).
('num', num_transformer, num_features)
  • 첫 번째 튜플입니다.
  • num: 변환기의 이름입니다. 수치형 데이터에 대한 변환기를 의미합니다.
  • num_transformer: 수치형 데이터를 변환하기 위한 Pipeline 객체입니다. 결측치 대체와 표준화를 포함합니다.
  • num_features: 수치형 데이터의 열 이름 리스트입니다.

예제 코드

import pandas as pd
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer

# 예시 데이터프레임 생성
df = pd.DataFrame({
    'industry': ['tech', 'health', 'tech', 'finance'],
    'sector': ['IT', 'Healthcare', 'IT', 'Finance'],
    'marketCap': [1.2e10, 2.5e9, 1.8e10, 7.5e9],
    'beta': [1.1, 0.9, 1.2, 0.8]
})

# 수치형 특성
num_features = ['marketCap', 'beta']

# 범주형 특성
cat_features = ['industry', 'sector']

# 수치형 변환기
num_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='mean')),
    ('scaler', StandardScaler())
])

# 범주형 변환기
cat_transformer = OneHotEncoder(handle_unknown='ignore')

# 전처리기 생성
preprocessor = ColumnTransformer(
    transformers=[
        ('num', num_transformer, num_features),
        ('cat', cat_transformer, cat_features)
    ])

# 데이터 전처리
df_preprocessed = preprocessor.fit_transform(df)

# 전처리된 데이터 출력
print("Transformed DataFrame:")
print(df_preprocessed)


출력 결과

Transformed DataFrame:
[[ 0.39223227  0.90453403  0.          0.          1.          1.
   0.          0.        ]
 [-1.37281295 -0.90453403  0.          1.          0.          0.
   0.          1.        ]
 [ 0.98058068  1.50755672  0.          0.          1.          1.
   0.          0.        ]
 [ 0.          0.          1.          0.          0.          0.
   1.          0.        ]]

원본 데이터

  industry      sector      marketCap  beta
0     tech          IT   1.200000e+10   1.1
1   health  Healthcare   2.500000e+09   0.9
2     tech          IT   1.800000e+10   1.2
3  finance      Finance  7.500000e+09   0.8

수치형 변환

marketCap
  • 평균: (1.2e10 + 2.5e9 + 1.8e10 + 7.5e9) / 4 = 1.1125e10
  • 표준편차: sqrt(((1.2e10 - 1.1125e10)^2 + (2.5e9 - 1.1125e10)^2 + (1.8e10 - 1.1125e10)^2 + (7.5e9 - 1.1125e10)^2) / 4)
  • 표준화된 값: (각 값 - 평균) / 표준편차
  • 예시: (1.2e10 - 1.1125e10) / 표준편차 = 0.39223227
beta
  • 평균: (1.1 + 0.9 + 1.2 + 0.8) / 4 = 1.0
  • 표준편차: sqrt(((1.1 - 1.0)^2 + (0.9 - 1.0)^2 + (1.2 - 1.0)^2 + (0.8 - 1.0)^2) / 4)
  • 표준화된 값: (각 값 - 평균) / 표준편차
  • 예시: (1.1 - 1.0) / 표준편차 = 0.90453403

범주형 변환

industry
  • finance -> [1, 0, 0]
  • health -> [0, 1, 0]
  • tech -> [0, 0, 1]
sector
  • Finance -> [1, 0, 0]
  • Healthcare -> [0, 1, 0]
  • IT -> [0, 0, 1]

 

 

결과적으로, 전처리된 데이터는 수치형 특성에 대해 결측치 대체 및 표준화가 적용되고,
범주형 특성에 대해 원-핫 인코딩이 적용된 상태입니다.

각 행은 원래 데이터의 수치형 특성 값이 표준화된 값으로,
범주형 특성 값이 원-핫 인코딩된 값으로 변환된 결과를 나타냅니다.