앞에서 'horsepower' 열의 숫자형 연속 데이터를 'hp_bin' 열의 범주형 데이터로 변환하였다. 하지만 이처럼 범주형 데이터를 회귀분석 등 머신러닝 알고리즘에 바로 사용할 수 없는 경우가 있는데, 컴퓨터가 인식 가능한 입력값으로 변환해야 한다.
이럴 때 숫자 0 또는 1로 표현되는 더미변수(dummy variable)를 사용한다.
여기서 0과 1은 수의 크고 작음을 나타내지
않고, 어떤 특성의 존재여부를 표시한다.
get_dummies() 함수를 사용하면 범주형 변수의 모든 고유값을 각각 새로운 더미 변수로 변환한다.
import pandas as pd
import numpy as np
df = pd.read_csv(r'C:\Users\kjt63\OneDrive\바탕 화면\python\data_analysis\sample\part5\auto-mpg.csv',header=None)# 열 이름 지정
df.columns=['mpg','cylinders','displacement','horsepower','weight','acceleration','model year','origin','name']# horsepower 열의 누락데이터('?')를 삭제하고 실수형을 변환
df['horsepower'].replace('?',np.nan,inplace=True)
df.dropna(subset=['horsepower'],axis=0,how='any',inplace=True)
df['horsepower']= df['horsepower'].astype('float')
count, bin_dividers = np.histogram(df['horsepower'],bins=3)
bins_name =['저출력','보통출력','고출력']
df['hp_bin']=pd.cut(df['horsepower'],bins=bin_dividers, labels=bins_name,include_lowest=True)# get_dummies() 함수를 사용하여 열의 고유값 3개가 각각 새로운 더미 변수열의 이름이 된다.
horsepower_dummies = pd.get_dummies(df['hp_bin'])print(horsepower_dummies.head(15))
# 데이터프레임 df의 'hp_bin'열에 들어있는
범주형 데이터를 0,1을 원소로 갖는 원핫벡터로 변환한다.
결과는 희소행렬(Sparse Matrix)로 정리된다
# 희소행렬은 (행,열) 좌표와 값 형태로 정리된다.from sklearn import preprocessing
# 전처리를 위한 encoder 객체 만들기
label_encoder = preprocessing.LabelEncoder()# label_encoder 객체생성
onehot_ enocoder = preprocessing.OneHotEncoder()# onehot_encoder 생성# label encoder 로 문자열 범주를 숫자형 범주로 변경
onehot_labeled = label_encoder.fit_transform(df['hp_bin'].head(15))print(onehot_labeled)print(type(onehot_labled))# 2차원 행렬로 변경
onehot_reshaped = onehot_labeled.reshpae(len(onehot_labeled),1)print(onehot_reshaped)print(type(onehot_reshaped))# 희소행렬로 변경
one_fitted = onehot_encoder.fit_transform(onehot_reshaped)print(onehot_fitted)print(type(onehot_fitted))