범주형 (categorical) 데이터가 존재할 경우 이를 수치화하는 대표적인 방법은 One-hot Encoding 입니다. One-hot encoding은 범주의 개수만큼 dummy variable을 만들어 0 또는 1을 각 범주마다 할당해서 새로운 특성으로 바꾸는 방법입니다. 밑의 그림에서는 3개의 범주 (red, blue, green)에 대해 3개의 dummy variable을 할당한 뒤 red/blue/green 마다 각각 0 또는 1을 개별적으로 할당하는 것을 볼 수 있습니다.
Pandas에서는 get_dummies 라는 one-hot encoding 을 실행하는 함수를 지원합니다.
get_dummies
get_dummies 함수의 대표적인 파라미터를 알아보면,
Parameters | Description |
data | One-hot encoding을 적용할 데이터 |
prefix | 생성할 dummy variable의 column 이름 앞에 붙을 prefix를 지정합니다. 범주형 column에 따라 리스트나 딕셔너리를 통해 column 별 prefix를 따로 지정할 수 있음 |
prefix_sep | prefix와 범주 사이의 separator로 '_'가 default로 지정되어 있음 |
dummy_na | NaN도 dummy variable에 포함시킬 지 여부. default는 False |
columns | One-hot encoding 될 column |
drop_first | k개의 범주에서 k-1개로 dummy variable을 만들 때 사용. 나머지 하나는 다른 dummy로 표현됨 |
dtype | 새로운 column의 데이터 타입. default는 np.unit8 |
Example
먼저 예시 데이터를 생성해 보겠습니다.
fruit = pd.DataFrame({'name':['apple', 'banana', 'cherry', 'durian', np.nan],
'color':['red', 'yellow', 'red', 'green', np.nan]}) #예시 데이터 생성
바로 get_dummies 함수를 적용해보면,
pd.get_dummies(fruit)
prefix와 prefix_sep을 지정해 보겠습니다.
pd.get_dummies(fruit, prefix=['fruit', 'clr'], prefix_sep='__')
dummy_na를 True로 하면 NaN 에도 dummy variable이 생긴 것을 알 수 있습니다.
pd.get_dummies(fruit, prefix=['fruit', 'clr'], dummy_na=True)
columns를 따로 지정하면 지정한 column에 대해서만 one-hot encoding을 수행합니다.
pd.get_dummies(fruit, columns=['name'], dummy_na=True)
drop_first를 True로 지정하면 맨 처음 범주에 대해서는 별도로 dummy variable을 할당하지 않고 나머지 범주의 여집합으로 표현합니다. k개의 범주에 대해 k-1개의 dummy variable이 생성됩니다.
pd.get_dummies(fruit, columns=['name'], drop_first=True, dummy_na=True)
마지막으로 dtype을 float으로 지정하면 정수가 아닌 실수형으로 표현됩니다.
pd.get_dummies(fruit, columns=['name'], drop_first=True, dummy_na=True, dtype=float)
'Computer > Pandas' 카테고리의 다른 글
Onehot 인코딩의 역변환 (inverse transform) (0) | 2021.07.25 |
---|---|
Pandas Multiple Columns Label Encoding (1) | 2021.07.14 |
Pandas DataFrame 합치기 - merge, concat (0) | 2021.03.31 |
Pandas 에서 데이터 이상치 찾기 - Z-score, Modified Z-score, IQR (0) | 2021.03.31 |
Pandas - datetime64 타입 (0) | 2021.03.26 |