구간화는 Binnig 혹은 bucketing이라고 한다. 구간화도 전처리 방법중 하나이다.
salary는 소득데이터이다.
salary = pd.Series([4300, 8370, 1750, 3830, 1840, 4220, 3020, 2290, 4740, 4600,
2860, 3400, 4800, 4470, 2440, 4530, 4850, 4850, 4760, 4500,
4640, 3000, 1880, 4880, 2240, 4750, 2750, 2810, 3100, 4290,
1540, 2870, 1780, 4670, 4150, 2010, 3580, 1610, 2930, 4300,
2740, 1680, 3490, 4350, 1680, 6420, 8740, 8980, 9080, 3990,
4960, 3700, 9600, 9330, 5600, 4100, 1770, 8280, 3120, 1950,
4210, 2020, 3820, 3170, 6330, 2570, 6940, 8610, 5060, 6370,
9080, 3760, 8060, 2500, 4660, 1770, 9220, 3380, 2490, 3450,
1960, 7210, 5810, 9450, 8910, 3470, 7350, 8410, 7520, 9610,
5150, 2630, 5610, 2750, 7050, 3350, 9450, 7140, 4170, 3090])
pandas로 구간화를 하는 방법은 2가지 있다.
수치형 데이터를 구간화 함으로써 범주형 데이터로 변형시킨다.
우선 구간화 시켜줄 리스트를 미리 만들어 놓자.
bins = [0, 2000, 4000, 6000, 8000, 10000]
bins옵션을 쓰면 구간화를 할 수 있다.
cut_salary = pd.cut(salary, bins=bins)
cut_salary로 해당 salary가 속한 구간을 확인할 수 있다.
밑에 코드는 salary[0]이 속한 구간인 4300으로 4000에서 6000를 확인한다.
[코드]
print('cut_salary[0]:', cut_salary[0])
[결과]
cut_salary[0]: (4000, 6000]
구간이 몇개씩 분할되어 나눠졌는지 확인해보자.
[코드]
cut_salary.value_counts().sort_index()
[결과]
(0, 2000] 12
(2000, 4000] 34
(4000, 6000] 29
(6000, 8000] 9
(8000, 10000] 16
dtype: int64
위와 같이 bins 옵션에 리스트를 넣어줘서 특정 구간을 지정해줘도 되고, 구간의 개수를 지정해줄 수도 있다.
bins 옵션에 정수를 입력하면 데이터의 최솟값에서 최댓값을 균등하게 bins 개수만큼 나눠준다.
cut_salary = pd.cut(salary, bins=6)
cut
와 사용방법은 동일하다.
cut_salary = pd.qcut(salary, q=5)
분할된 구간과 구간에 나눠진 데이터들의 갯수를 확인해보자.
[코드]
print(cut_salary.value_counts().sort_index())
[결과]
(1539.999, 2618.0] 20
(2618.0, 3544.0] 20
(3544.0, 4648.0] 20
(4648.0, 7068.0] 20
(7068.0, 9610.0] 20
dtype: int64