본문 바로가기
데이터분석/머신러닝

[데이터 분석-전처리] 범주형 데이터_원핫인코딩 쉽게하기

by code cleaner 2018. 5. 17.
반응형

범주형 데이터는 숫자의 차이가 의미가 없기 때문에 원핫인코딩/더미화 하여 데이터 처리를 해줘야 한다.


즉, 색상이 


1. 빨강

2. 노랑

3. 파랑


인 경우를 본다면, 1,2,3의 순서나 크기가 데이터 분석에 영향을 줄 수 있기 때문이다.


따라서 빨강인이 아닌지에 대한 여부로 변수를 변경해야 한다.


이렇게 되면 색상 컬럼/변수 하나가 3개의 컬럼으로 증가하여 빨강인지 아닌지, 노랑인지 아닌지, 파랑인지 아닌지로 변경하게 된다.


이런 데이터 변경을 쉽게 해주는 코드들은 아래와 같다.



1. 기본 데이터 셋 만들기


import pandas as pd

df = pd.DataFrame([['green', 'M', '10.1', 'class1'],

                   ['red', 'L', '13.5', 'class2'],

                   ['blue', 'XL', '15.3', 'class1']])

df.columns = ['color', 'size', 'price', 'classlabel']

print(df)


  color size price classlabel

0  green    M  10.1     class1

1    red    L  13.5     class2

2   blue   XL  15.3     class1



2. 데이터 셋에서 필요한 부분들을 숫자로 변경한다. 


   => color, size를 숫자로 변경하고 price는 데이터 타입을 변경함.


X = df[['color', 'size', 'price']].values # 데이터 프레임에서 numpy.narray로 변환됨.

color_le = LabelEncoder() # 원핫인코딩을 위해 string을 int 라벨로 변환함

X[:, 0] = color_le.fit_transform(X[:,0]) # 인텍스 '0'에 있는 color 변경

X[:, 1] = color_le.fit_transform(X[:,1]) # 인텍스 '1'에 있는 size 변경

X[:,2] = X[:,2].astype(dtype=float)

print(X)


[[1 1 10.1]

 [2 0 13.5]

 [0 2 15.3]]


3. 원핫인코딩


  3-1. scikit-learn 사용


from sklearn.preprocessing import OneHotEncoder

ohe = OneHotEncoder(categorical_features=[0]) # 인텍스 '0'의 데이터를 원핫인코딩함

ohe = ohe.fit_transform(X).toarray() # 원핫인코딩으로 명목변수 변경 후 numpy로 변경

print(ohe)


[[ 0.   1.   0.   1.  10.1]

 [ 0.   0.   1.   0.  13.5]

 [ 1.   0.   0.   2.  15.3]]



  3-2. pandas 사용


X_df = pd.get_dummies(df[['color', 'size','price']])

print(X_df)


  color_blue  color_green  color_red  size_L  size_M  size_XL  price_10.1  \

0           0            1          0       0       1        0           1   

1           0            0          1       1       0        0           0   

2           1            0          0       0       0        1           0   


   price_13.5  price_15.3  

0           0           0  

1           1           0  

2           0           1 


반응형