[데이터 사이언스/문법] 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]
결과적으로, 전처리된 데이터는 수치형 특성에 대해 결측치 대체 및 표준화가 적용되고,
범주형 특성에 대해 원-핫 인코딩이 적용된 상태입니다.
각 행은 원래 데이터의 수치형 특성 값이 표준화된 값으로,
범주형 특성 값이 원-핫 인코딩된 값으로 변환된 결과를 나타냅니다.
'데이터 사이언스' 카테고리의 다른 글
[머신러닝] 공모전 추천 시스템(1) - 코랩/설치 라이브러리 (0) | 2024.08.29 |
---|---|
[데이터 사이언스/문법] df[df[ ]] 과 df[ ]의 차이가 무엇일까? (0) | 2024.08.17 |
[데이터 사이언스/개념/문법] oneHotCoding이란? (0) | 2024.08.16 |
[데이터 사이언스/개념] 표준화의 장점 및 데이터 scale 차이에 따른 영향 (0) | 2024.08.15 |
[데이터 사이언스/개념/문법] pipeline이란? (0) | 2024.08.15 |