반응형
데이터를 보면 대부분은 쓸 수 없습니다. 정렬되지 않은 게 이 세상의 데이터이죠,
데이터 사이언스는 이런 데이터를 정제하는 능력을 갖춰야 합니다.
이런 업무를 데이터 전처리라고 합니다. 분석하고자 하는 모든 건 숫자로 바꿔줘야 합니다. 문자는 인식할 수 없기 때문입니다.
데이터 전처리에는 크게 두 가지가 있습니다.
1. 레이블 인코딩
2. 원핫 인코딩
레이블 인코딩
먼저 라이브러리를 불러옵니다.
from sklearn.preprocessing import LabelEncoder
import pandas as pd
예시를 리스트에 담아서 fit 시키고 transfrom 시켜보겠습니다.
items = ["tv", "냉장고", "컴퓨터", "전자레인지", "믹서", "선풍기", "믹서"]
encoder = LabelEncoder()
encoder.fit(items)
labels = encoder.transform(items)
print(labels)
출력
[0 1 5 4 2 3 2]
보면 items들이 숫자로 변환됐습니다.
tv는 0, 냉장고는 1, 컴퓨터는 5처럼 하나의 짝을 지어 변환됐습니다.
지금이야 양이 적지만, 만약 양이 많아진다면 확인하기 어렵습니다.
각 인덱스의 매칭을 알려주는 함수가 있습니다. "classes_"입니다.
print(encoder.classes_)
출력
['tv' '냉장고' '믹서' '선풍기' '전자레인지' '컴퓨터']
0, 1, 2, 3, 4, 5 이렇게 순서대로 매칭 돼 있다는 걸 알려줍니다.
다음으로는 당연히 디코딩을 할 수 있습니다.
print(encoder.inverse_transform([4, 5, 3, 2, 4, 2, 0, 1, 1]))
출력
['전자레인지' '컴퓨터' '선풍기' '믹서' '전자레인지' '믹서' 'tv' '냉장고' '냉장고']
"inverse_transform()"를 사용하여 내가 궁금한 인덱스 번호를 리스트 형태로 주면, 해당하는 문자열을 반환해줍니다.
원 핫 인코딩
저는 이 방법을 선호합니다. API의 형태입니다. 뜻은 하나만 1로 남기고 나머진 0으로 바꿉니다.
함수는 "get_dummies()"를 사용하면 됩니다. 사용법이 간단합니다.
df = pd.DataFrame({'items': items})
print(df)
print(pd.get_dummies(df))
출력
0 tv
1 냉장고
2 컴퓨터
3 전자레인지
4 믹서
5 선풍기
6 믹서
items_tv items_냉장고 items_믹서 items_선풍기 items_전자레인지 items_컴퓨터
0 1 0 0 0 0 0
1 0 1 0 0 0 0
2 0 0 0 0 0 1
3 0 0 0 0 1 0
4 0 0 1 0 0 0
5 0 0 0 1 0 0
6 0 0 1 0 0 0
이렇게 열에 추가하여 사용합니다. 믹서를 보면 6, 4번 인덱스에만 1이 표기돼 있음을 알 수 있습니다.
반응형
댓글