Python

[Python] 데이터 사전 처리(Preprocessing)_3

구루싸 2019. 10. 7. 23:07
반응형
SMALL

데이터 사전 처리(Preprocessing) 세번째 시간입니다-_-

이번에는 범주형(Category) 데이터를 처리하는 방법을 학습해보겠습니다

우리가 수집하는 데이터 중에 가격, 비용, 효율 등 연속적인 값을 가지는 데이터가 있습니다

때로는 이런 데이터를 그대로 사용하기 보다는

일정한 수준이나 정도를 나타내는 이산 값으로 구간(bin)을 생성해 그 차이를 드러낼 필요가 있을 수 있습니다

이런 과정을 구간분할(binning)이라고합니다 

또한 구간분할을 통해 범주형(Category) 데이터로 변환하여도 컴퓨터가 인식할 수 있도록 변환해주어야합니다

컴퓨터는 계산만 빠르게할 수 있다는-_-

이번 학습은 바로 이런 과정을 익히는 것입니다

# 판다스(Pandas)
import pandas
import numpy
from sklearn import preprocessing
filepath = "/Users/dennis_sa/Documents/"
#header가 없고 길이가 정해지지 않은 공백이 구분자인 데이터
read_data = pandas.read_csv(filepath+"auto-mpg.data-original", header = None, sep = '\s+') 
read_data.columns = ['연비(mpg)', '실린더 수(cylinders)', '배기량(displacement)', '출력(horsepower)',
                     '차중(weight)', '가속능력(acceleration)', '출시년도(model_year)', '제조국(origin)', '모델명(name)']
print(read_data.head(), end = '\n') #앞 5행 보기

# 데이터 자료형 확인
print(read_data.dtypes, end = '\n')

# 출력(horsepower)의 고유값 확인
print(read_data['출력(horsepower)'].unique())

# 누락 데이터 제거
read_data.dropna(subset = ['출력(horsepower)'], axis = 0, inplace = True)
print(read_data['출력(horsepower)'].unique())

# 경계값 리스트 구하기
count, bin_dividers = numpy.histogram(read_data['출력(horsepower)'], bins = 3) # 각 구간에 속하는 값의 개수, 경계값 리스트 반환
print("개수 : ", count, "경계값 : ", bin_dividers, end = '\n')

bin_names = ['저출력', '중출력', '고출력']
read_data['출력구간'] = pandas.cut(x = read_data['출력(horsepower)'], # data
                                 bins = bin_dividers, # 경계값 
                                 labels = bin_names, # 경계값 이름
                                 include_lowest = True) # 첫 경계값 표현
print(read_data[['출력(horsepower)', '출력구간']])

# 원핫인코딩(one-hot-encoding)
horsepower_dummies = pandas.get_dummies(read_data['출력구간'])
print(horsepower_dummies.head(), end = '\n')

label_encoder = preprocessing.LabelEncoder()
onehot_encoder = preprocessing.OneHotEncoder()
# 문자열 범주를 숫자형 범주로 변환
onehot_label = label_encoder.fit_transform(read_data['출력구간'])
print(onehot_label, end = '\n')
# 2차원 행렬로 변환
onehot_reshaped = onehot_label.reshape(len(onehot_label), 1)
print(onehot_reshaped, end = '\n')
# 희소행렬(sparse matrix)
onehot_fitted = onehot_encoder.fit_transform(onehot_reshaped)
print(onehot_fitted, end = '\n')
...더보기

※ 참고

  • 원핫인코딩(one-hot-encoding) : 범주형 데이터를 컴퓨터가 인식할 수 있도록 0과 1로만 구성되는 원핫벡터(one hot vector)로 변환
  • 희소행렬(sparse matrix) : 행렬의 값이 대부분 0인 행렬 반대되는 표현으로 밀집행렬(dense matrix)이 사용

 

새로운 라이브러리 preprocessing이 등장했네요-_-

원핫인코딩(one-hot-encoding)의 경우는 추후에 회귀분석 등 본격적으로 머신러닝 알고리즘을 학습할 때 좀 더 알아보도록 하겠습니다

지금은 데이터 분석을 위해 필요한 기능들을 알아두고 체험? 해보는 것으로 만족하고 진도를 쭉쭉 빼야할 때입니다

그럼 오늘은 이만-_-

반응형
LIST