-
파이썬 수치 데이터 구간화(Binning) 하기 - pd.cut, pd.qcutData Science/Pandas & Numpy&Scikit-learn 2022. 9. 27. 19:34반응형
1. 구간화(Binning)
구간화는 수치데이터를 특정 구간별로 묶어 범주형 데이터로 변경하는 데이터 처리 기법이다.
우리가 흔히 쓰는 10대, 20대와같은 말이 대표적인 구간화이다.
2. Pd.cut
대표적 데이터 처리 라이브러리인 Pandas에서 cut이라는 함수를 통해 구간화를 지원한다.
pd.cut은 인자로 수치형 데이터를 담은 리스트와 해당 데이터의 구간 개수를 입력받는다.
(리스트 대신 데이터프레임의 특정 컬럼도 입력 가능하다.)이때 구간은 리스트에서의 최소값과 최대값을 구간 개수만큼 분리하여 생성된다.
import pandas as pd lst = [1,2,3,4,5,6,7,8,9,10,20,30,40,100,200,1000,5000] # pd.cut(수치데이터, 구간개수) re = pd.cut(lst,4) # 생성되는 구간 # (0.101, 225.75] 0.101 초과 225.75 미만 # (225.75, 450.5] 225.75 초과 450.5 미만 # (450.5, 675.25] 450.5 초과 675.25 미만 # (675.25, 900.0] 675.25 초과 900.0 미만 print(list(re))
위의 결과를 보면 14개가 (0.101, 225.75] 구간에 속해있고 나머지 두개가 각각 (450.5, 675.75] ,(675.25, 900.0] 구간에 속한다.
단순 최소/최대값의 기준으로 구간을 나누다보니, 데이터가 고르지않을 경우 특정 구간에 대다수의 데이터가 몰릴 수 있다.
3. Pd.qcut
pd.qcut에서 q는 quantile(사분위)를 의미하며, pd.cut과 기능이 같으나 구간을 나누는 방법이 다르다.
구간을 나눌 때 데이터의 빈도를 고려하여 구간을 나눈다.
re = pd.qcut(lst,4) # 생성되는 구간 # (0.999, 4.75] 0.999 초과 4.75 미만 # (4.75, 8.5] 4.75 초과 8.5 미만 # (8.5, 55.0] 8.5 초과 55.0 미만 # (55.0, 900.0] 55.0 초과 900.0 미만 print(list(re))
구간의 길이가 균일하지 않지만, 구간별로 데이터가 4개씩 포함되는 것을 확인할 수 있다.
반응형'Data Science > Pandas & Numpy&Scikit-learn' 카테고리의 다른 글
Numpy random 함수 (rand, randint, randn, random, power) (0) 2022.10.12 [Pandas] 데이터프레임 필터링, 특정 조건에 맞는 행/열 추출하기 (DataFrame.loc[]) (0) 2022.10.02 [Pandas] Pandas를 통한 데이터 전처리 (0) 2022.09.13 회귀모델에서 타겟(y)값의 정규화 방법 비교 실험 (0) 2022.05.27 [Python]다중 조건으로 데이터 프레임 특정 행 추출하기(데이터 프레임 필터링) (0) 2022.05.10