본문 바로가기
Data Science/Pandas, Numpy

[ Pandas ] Pandas.cut, qcut 개념 및 차이 정리

by Queen2 2022. 10. 2.
728x90
반응형

😎 Pandas.cut 란?

 

이산적인 간격으로 분포 되어 있는 값들을 n개의 구간으로 나눠주는 기능입니다

연속적인 변수들을 카테고리화시켜주는데 유용하게 사용됩니다

 

 


 

 

pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, 

                                                                                                            duplicates='raise', ordered=True)

 

x : 1차원 형태의 input array

bin: 어떤 간격으로 나눌것인지 결정

right: 가장 오른쪽 끝값의 포함 여부 명시

 

**각 변수의 세부 기능은 제일 하단의 pandas 사이트를 참조하시길 바랍니다

 


예시 코드)

 

활용방법이 와닿을 수 있도록 예시 코드를 보겠습니다.

 

input array와 간격, 각 간격에 해당하는 레이블 지정을 통해서 구간을 카테고리화했습니다

>>> pd.cut(np.array([1, 7, 5, 4, 6, 3]),3, labels=["bad", "medium", "good"])

['bad', 'good', 'medium', 'medium', 'good', 'bad']

 

 

Series에 pd.cut 적용시에는

좀 더 명시적으로 구간이 나뉜걸 보기 위해서는 index 를 사용할 수도 있습니다.

여기서 d와 e의 중복된 구간을 없애고 싶다면 duplicates = True 옵션을 적용할 수 있습니다

 

>>> s = pd.Series(np.array([2, 4, 6, 8, 10]),
...               index=['a', 'b', 'c', 'd', 'e'])
>>> pd.cut(s, 3)
... 
a    (1.992, 4.667]
b    (1.992, 4.667]
c    (4.667, 7.333]
d     (7.333, 10.0]
e     (7.333, 10.0]

 

 


 

 😮 Pandas.qcut 란?

pandas.cut과 동일하게 구간을 나눠주지만, 동일한 사이즈의 구간으로 n개의 구간을 나눠주는 차이 존재

 

사용하는 방식도 pandas.cut과 크게 다르지 않습니다

 

pandas.qcut(x, q, labels=None, retbins=False, precision=3, duplicates='raise')

 

다만 여기서 차이점은 cut은 최소-최대값에서 동일한 길이의 구간을 나눠준다면

qcut은 동일한 데이터의 크기(개수)로 구간을 나눈다는 점입니다

 

예시 코드)

 

데이터프레임의 Year이라는 시리즈를 5로 qcut 했다고 가정하고 그 분포를 보겠습니다

pd.qcut(df.Year, q=5,labels=['oldest','not so old','medium','newer','latest'],retbins=True)

qcut_series.value_counts()

Source: Geeks for geeks

 

이 분포가 5개의 구간을 20%씩 잘 나눴는지 보기 위해 직접 분위수를 통해 분류한 개수와 비교해보겠습니다

 

pd.qcut(df.Year,
		q=[0, 0.2, 0.4,
		0.6, 0.8, 1.0],
		labels=['oldest',
				'not so old',
				'medium',
				'newer',
				'latest']).value_counts()

Source: Geeks for geeks

 

개수가 각 분위수의 비율에 맞게 잘 분류되었음을 알 수 있습니다!

 

 

 

 

Source:

https://www.geeksforgeeks.org/how-to-use-pandas-cut-and-qcut/

https://pandas.pydata.org/docs/reference/api/pandas.cut.html

728x90
반응형

댓글