from sklearn.preprocessing import LabelEncoder
items = ['TV','냉장고', '전자레인지', '컴퓨터', '선풍기', '선풍기','믹서','믹서']
#LabelEncoder를 객체로 생성한 후, fit()과 transform()으로 레이블 인코딩 수행
encoder = LabelEncoder()
encoder.fit(items)
labels = encoder.transform(items)
print('인코딩 변환값:',labels)
인코딩 변환값: [0 1 4 5 3 3 2 2]
print('인코딩 클래스:', encoder.classes_)
인코딩 클래스: ['TV' '냉장고' '믹서' '선풍기' '전자레인지' '컴퓨터']
print('디코딩 원본값:', encoder.inverse_transform([4,5,2,0,1,1,3,3]))
디코딩 원본값: ['전자레인지' '컴퓨터' '믹서' 'TV' '냉장고' '냉장고' '선풍기' '선풍기']
#원핫 인코딩 해보자
#주의할점 먼저 모든 문자열이 숫자형 값으로 변환 되어야한다.
#두번째 입력값으로 2차원 데이터가 필요하다.
from sklearn.preprocessing import OneHotEncoder
import numpy as np
items = ['TV','냉장고', '전자레인지', '컴퓨터', '선풍기', '선풍기','믹서','믹서']
#먼저 숫자 값으로 변환을 위해 LabelEncoder로 변환합니다.
encoder = LabelEncoder()
encoder.fit(items)
labels = encoder.transform(items)
#2차원 데이터로 변환합니다.
labels = labels.reshape(-1,1)
labels
#원핫 인코딩을 적용
oh_encoder = OneHotEncoder()
oh_encoder.fit(labels)
oh_labels = oh_encoder.transform(labels)
print('원핫 인코딩 데이터')
print(oh_labels.toarray())
print('원핫 인코딩 데이터차원')
print(oh_labels.shape)
원핫 인코딩 데이터
[[1. 0. 0. 0. 0. 0.]
[0. 1. 0. 0. 0. 0.]
[0. 0. 0. 0. 1. 0.]
[0. 0. 0. 0. 0. 1.]
[0. 0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0. 0.]
[0. 0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0. 0.]]
원핫 인코딩 데이터차원
(8, 6)
#원핫인코딩을 더쉽게 지원하는 API get_dummies()를 이용하면 된다
import pandas as pd
df=pd.DataFrame({'item':['TV','냉장고', '전자레인지', '컴퓨터', '선풍기', '선풍기','믹서','믹서']})
pd.get_dummies(df)
item_TV item_냉장고 item_믹서 item_선풍기 item_전자레인지 item_컴퓨터
0 1 0 0 0 0 0
1 0 1 0 0 0 0
2 0 0 0 0 1 0
3 0 0 0 0 0 1
4 0 0 0 1 0 0
5 0 0 0 1 0 0
6 0 0 1 0 0 0
7 0 0 1 0 0 0