[파이썬] 데이터 변형 | 원핫인코딩
2020. 4. 4. 14:08ㆍ노트/Python : 프로그래밍
머신러닝을 하기 위해서 전처리 작업을 할때, 컴퓨터 알고리즘이 읽을 수 있는 범주형 데이터로 바꿔주는 작업이 필요하다. 이를 원핫인코딩이라고 한다.
import seaborn as sns
tip=sns.load_dataset("tips")
tip.head()
원데이터를 확인해보면 'sex' colomn의 경우 Female과 Male로 되어있다. 이러면 알고리즘이 해당 데이터를 읽지 못한다. 그래서 숫자로 바꿔주어야 한다.
# 원핫 인코딩 Female -> 0 , Male -> 1
from sklearn.preprocessing import LabelEncoder
def genToInt(data):
data['sex']=LabelEncoder().fit(['Female','Male']).transform(data['sex'])
return data
원데이터를 복사해서 대입하는 습관을 들이자! 그래야 나중에 잘못되었을 때 엎어쳐서 다시 작업할 수 있다.
* 원본은 건드리지 말것 *
tipsCopy=genToInt(tip)
tipsCopy.head()
'sex' column의 data가 0과 1로 변환된 것을 확인할 수 있다.
여러가지 배열을 한꺼번에 원핫인코딩하는 예제를 확인해보자.
# 원핫인코더
from sklearn.preprocessing import OneHotEncoder
#[성별,연령,학점]
data = np.array([[0,0,0],
[0,1,1],
[0,2,2],
[1,0,3],
[1,1,4]])
data
성별, 연령, 학점으로 이산화된 배열 데이터이다.
ohe = OneHotEncoder()
ohe.fit(data)
ohe.transform(data).toarray()
>>>
array([[1., 0., 1., 0., 0., 1., 0., 0., 0., 0.],
[1., 0., 0., 1., 0., 0., 1., 0., 0., 0.],
[1., 0., 0., 0., 1., 0., 0., 1., 0., 0.],
[0., 1., 1., 0., 0., 0., 0., 0., 1., 0.],
[0., 1., 0., 1., 0., 0., 0., 0., 0., 1.]])
OneHotEncoder 클래스로 데이터를 fitting 해주면 위과 같이 변환된다.
ohe.active_features_
#[남,여,20,30,40,a,b,c,d,e]
>>>
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int64)
ohe.n_values_
#범주 갯수
>>>
array([2, 3, 5])
ohe.feature_indices_
# 성별 : 0이상 2미만,
# 연령 : 2이상 5미만,
# 학점 : 5이상 10미만
>>>
array([ 0, 2, 5, 10], dtype=int32)
위와 같이 원핫인코더 객체의 범주 특징을 확인할 수 있다.
# 예시
data2=np.array([[1,2,3]]) # 여성, 40대, d학점
ohe.transform(data2).toarray()
>>>
array([[0., 1., 0., 0., 1., 0., 0., 0., 1., 0.]])
결론: 원핫인코딩은 알고리즘이 읽을 수 있는 0,1 데이터로 변환하는 것을 의미한다.
이를 위해서는 사전에 데이터가 이산화가 되어있어야 한다.
이산화 과정 참고
2020/04/14 - [스킬/Python : 프로그래밍] - [파이썬] 데이터변형 | 이항변수화 , 이산화
'노트 > Python : 프로그래밍' 카테고리의 다른 글
[파이썬기초] 데이터전처리 결측값 (NaN) 처리 (0) | 2020.04.06 |
---|---|
[파이썬기초] 한글 깨짐 방지코드 (0) | 2020.04.06 |
[Kaggle] 자전거 수요 예측 분석 (bike-sharing demand prediction) (0) | 2020.04.02 |
[파이썬기초] 주민번호 뒷자리를 별표(*)로 변경하기 (0) | 2020.04.02 |
[파이썬 기초] 데이터 그룹화 (0) | 2020.04.02 |