본문 바로가기

[Python] pd.get_dummies() :: One-Hot Encoding / 원핫인코딩

Python/Pandas 2019. 11. 21.

반응형

머신러닝에서 문자로 된 데이터는 모델링이 되지 않는 경우가 있다. 대표적으로 회귀분석은 숫자로 이루어진 데이터만 입력을 해야한다.

 

문자를 숫자로 바꾸어 주는 방법 중 하나로 One-Hot Encoding이 있다.

가변수(dummy variable)로 만들어주는 것인데, 이는 0과 1로만 이루어진 열을 생성하는 것이다.

이때 1은 있다, 0은 없다를 나타낸다.

 

 

0과 1로 이루어진 여러개의 열을 생성하는 One-Hot Encoding과 달리, LabelEncoding은 하나의 열에 사과 > 0, 바나나 > 1, 체리 > 2, 3,.. 식으로 숫자로 변환하는 것이다.

 

자세한건 여기서 볼 수 있다. https://mizykk.tistory.com/12

 

[Scikit-learn] LabelEncoder() :: Lablelling

sklearn.preprocessing.LabelEncoder — scikit-learn 0.21.3 documentation Parameters: deep : boolean, optional If True, will return the parameters for this estimator and contained subobjects that..

mizykk.tistory.com

 


import numpy as np   # numpy : 예시데이터의 NaN생성
import pandas as pd   

# 예시데이터 생성
fruit = pd.DataFrame({'name':['apple', 'banana', 'cherry', 'durian', np.nan],
                      'color':['red', 'yellow', 'red', 'green', np.nan]})   #예시 데이터 생성

예시로 사용할 데이터프레임을 생성하였다.

 

 

pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None)

 

 

1.

pd.get_dummies(fruit['name'])

fruit['name']열을 get_dummies해주니 결측값을 제외한 값들이 0과 1로 변환되었다.

 

 

2. 데이터프레임 전체

pd.get_dummies(fruit)

데이터프레임 전체를 get_dummies 하면 알아서 열 이름을 지정해준다.

 

 

3. dataframe에서 특정 열만 인코딩

pd.get_dummies(fruit, columns = ['name'])

지정되지 않은 열은 그대로이고, 지정된 열만 인코딩되었다.

1번 코트와 다른 점은 1번에는 'color' 열이 남아있지 않지만 이 코드에서는 데이터프레임 내에서 인코딩되었기에 'color' 열이 남아있다.

 

 

4. 열을 n-1개 생성

pd.get_dummies(fruit['name'], drop_first=True)   #N-1개 생성

가변수는 기존의 속성보다 열이 하나 작게 만들어진다는 말이 있다.

옵션을 지정해주지 않으면 pandas의 get_dummies는 모든 속성을 0, 1로 바꿔준다. 만약 n-1개의 열을 만들고 싶다면 drop_first = True를 하면 된다.

 

 

5. 결측값 처리

pd.get_dummies(fruit['name'], dummy_na = True)

위 코드들에서는 결측값은 제외되었었다. 하지만 dummy_na = True로 설정해주면 결측값도 인코딩에 포함할 수 있다. 

 

 

 

 

Reference

 

 

728x90

Comments