본문 바로가기
데이터분석/머신러닝

[데이터 분석-전처리] 범주형 데이터

by code cleaner 2018. 4. 24.
반응형

범주형 데이터는 명목형, 순위형으로 나뉨

- 명목형: 어떤 순서도 의미하지 않음 (예: 빨강, 노랑, 파랑)

- 순위형: 순위를 매길 수 있음, (예: 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


반응형