[데이터 사전 처리/범주형(카테고리) 데이터 처리] 구간 분할
데이터 분석 알고리즘에 따라서는 연속 데이터를 그대로 사용하기 보다는 일정한 구간(bin)으로 나눠서 분석하는 것이 효율적인 경우가 있다.
가격, 비용, 효율 등 연속적인 값을 일정한 수준이나 정도를 나타내는 이산적인 값으로 나타내어 구간별 차이를 드러내는 것이다.
이처럼 연속 변수를 일정한 구간으로 나누고, 각 구간을 범주형 이산 변수로 변환하는 과정을 구간 분할(binning)이라고 한다.
판다스 cut() 함수를 이용하면 연속 데이터를 여러 구간으로 나누고 범주형 데이터로 변환할 수 있다.
다음 예제에서 'horsepower' 열은 엔진 출력을 나타낸다. 경우에 따라서는 엔진 출력을 숫자로 표시하는 대신
'저출력', '보통출력', '고출력' 등 구간으로 나누어서 표시하는 것이 효율적일 수 있다.
판다스 cut() 메소드를 활용하려면 먼저 구간을 나누어야 한다.
'저출력', '보통출력', '고출력' 이라는 3개의 구간으로 구분하려면 [그림 1]과 같이 총 4개의 경계값이 필요하다.
경계값을 구하는 방법 중에서 Numpy 라이브러리의 histogram() 함수를 활용하는 방법을 설명한다.
나누려는 구간(bin) 개수를 bins 옵션에 입력하면 각 구간에 속하는 값의 개수(count)와 경계값 리스트(bin_dividers)를 반환한다.
# 예제 5-10(1)
import pandas as pd
import numpy as np
df = pd.read_csv('auto-mpg.csv', header=None)
df.columns = ['mpg', 'cylinders', 'displacement', 'horsepower', 'weight', 'acceleration', 'model year', 'origin', 'name']
df['horsepower'].replace('?', np.nan, inplace=True)
df.dropna(subset=['horsepower'], axis=0, inplace=True)
df['horsepower'] = df['horsepower'].astype('float')
count, bin_dividers = np.histogram(df['horsepower'], bins=3)
print(bin_dividers)
위 예제에서는 모두 4개의 경계값을 생성하고 3개의 구간이 만들어진다.
판다스 cut() 함수의 옵션을 설정한다. 앞에서 구한 경계값의 리스트(bin_dividers)를 bins옵션에 할당하고 각 구간의 이름(bin_names)을 labels 옵션에 할당한다.
# 예제 5-10(2)
import pandas as pd
import numpy as np
df = pd.read_csv('auto-mpg.csv', header=None)
df.columns = ['mpg', 'cylinders', 'displacement', 'horsepower', 'weight', 'acceleration', 'model year', 'origin', 'name']
df['horsepower'].replace('?', np.nan, inplace=True)
df.dropna(subset=['horsepower'], axis=0, inplace=True)
df['horsepower'] = df['horsepower'].astype('float')
count, bin_dividers = np.histogram(df['horsepower'], bins=3)
bin_names = ['저출력', '보통출력', '고출력']
df['hp_bin'] = pd.cut(x=df['horsepower'],
bins=bin_dividers,
labels=bin_names,
include_lowest=True)
print(df[['horsepower', 'hp_bin']].head(15))
include_lowest=Ture 옵션을 사용하면 각 구간의 낮은 경계값을 포함한다.
'horsepower'열의 숫자 데이터를 3개의 구간에 할당하고, 각 구간의 이름('저출력', '보통출력', '고출력')으로 입력하여 'hp_bin' 열에 저장한다.
![]() |
|
'공부 > 파이썬 머신러닝 판다스 데이터 분석' 카테고리의 다른 글
[데이터 사전 처리/정규화] (0) | 2022.12.05 |
---|---|
[데이터 사전 처리/범주형(카테고리) 데이터 처리] 더미 변수 (0) | 2022.12.02 |
[데이터 사전 처리/데이터 표준화] 자료형 변환 (1) | 2022.12.02 |
[데이터 사전 처리/데이터 표준화] 단위 환산 (0) | 2022.12.02 |
[데이터 사전 처리/데이터 표준화] (0) | 2022.12.02 |