구간화 (Binning) - 전처리

괴도소녀·2021년 7월 8일
0

데이터

목록 보기
9/14

구간화는 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가지 있다.

  • cut() : 균등하게 분할
  • qcut() : 데이터의 분포를 비슷한 크기의 그룹으로 분할

수치형 데이터를 구간화 함으로써 범주형 데이터로 변형시킨다.

우선 구간화 시켜줄 리스트를 미리 만들어 놓자.

bins = [0, 2000, 4000, 6000, 8000, 10000]

cut

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)

qcut

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

0개의 댓글