범주형 데이터는 명목형, 순위형으로 나뉨
- 명목형: 어떤 순서도 의미하지 않음 (예: 빨강, 노랑, 파랑)
- 순위형: 순위를 매길 수 있음, (예: XL > L > M )
예제:
''''''''' 범주형 데이터 다루기 '''''''''
# 데이터 만들기
import pandas as pd
df = pd.DataFrame([['green', 'M', '10.1', 'class1'],
['red', 'L', '13.5', 'class2'],
['blue', 'XL', '15.3', 'class1']])
df.columns = ['color', 'size', 'price', 'classlabel']
print(df)
color size price classlabel
0 green M 10.1 class1
1 red L 13.5 class2
2 blue XL 15.3 class1
# 순위형 피처(컬럼) 매핑
size_mapping = {'XL':3, 'L':2, 'M':1} # 사전 형태로 map 메서드를 활용하여 변환 str, 문자 컬럼을 자동으로 변환
df['size'] = df['size'].map(size_mapping)
print(df)
color size price classlabel
0 green 1 10.1 class1
1 red 2 13.5 class2
2 blue 3 15.3 class1
# 순위형 피처(컬럼) 매핑 / 원래값 갖고 오기
inv_size_mapping = {v: k for k,v in size_mapping.items()} # 사전의 특징상, items는 사전의 keys, values를 모두 갖고옴.
print(inv_size_mapping) # 기존 사전의 키값과 밸류값이 바뀜
{3: 'XL', 2: 'L', 1: 'M'}
df['size'] = df['size'].map(inv_size_mapping)
print(df)
color size price classlabel
0 green M 10.1 class1
1 red L 13.5 class2
2 blue XL 15.3 class1
# 분류형 만들기
import numpy as np
class_mapping = {label: idx for idx, label in enumerate(np.unique(df['classlabel']))}
df['classlabel'] = df['classlabel'].map(class_mapping)
print(df)
color size price classlabel
0 green M 10.1 0
1 red L 13.5 1
2 blue XL 15.3 0
# 분류형 만들기 / 원래 값 갖고 오기
inv_class_mapping = {v: k for k,v in class_mapping.items()}
df['classlabel'] = df['classlabel'].map(inv_class_mapping)
print(df)
color size price classlabel
0 green M 10.1 class1
1 red L 13.5 class2
2 blue XL 15.3 class1
# 분류형 데이터 sklearn 활용해서 변환하기
from sklearn.preprocessing import LabelEncoder
class_le = LabelEncoder()
y = class_le.fit_transform(df['classlabel'].values)
df['classlabel'] = y
print(df)
color size price classlabel
0 green M 10.1 0
1 red L 13.5 1
2 blue XL 15.3 0
y = class_le.inverse_transform(y)
df['classlabel'] = y
print(df)
color size price classlabel
0 green M 10.1 class1
1 red L 13.5 class2
2 blue XL 15.3 class1
'데이터분석 > 머신러닝' 카테고리의 다른 글
[데이터 분석] 의미있는 피처(컬럼) 선택 (0) | 2018.05.17 |
---|---|
[데이터 분석-전처리] 범주형 데이터_원핫인코딩 쉽게하기 (0) | 2018.05.17 |
[데이터 분석-전처리] 결측치 처리하는 방법 (3) | 2018.04.24 |
[이론] 머신러닝 알고리즘 기초 (인공뉴런-퍼셉트론, 에이다라인) (0) | 2018.04.24 |
머신러닝 관련 알아두면 좋은 내용 (0) | 2018.04.19 |