pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise', ordered=True)

값을 불연속 간격으로 구간화 하는 함수이다.
값을 구간으로 분할하고 정렬해야 하는 경우  사용한다. 
이 함수는 연속형 변수에서 범주형 변수로 전환하는 데 유용하다. 
예를 들어, cut은 연령을 연령대 그룹으로 변환할 수 있습니다. 
동일한 수의 빈 또는 미리 지정된 빈 배열로의 비닝을 지원합니다.

x : 1차원 배열 값
bins : 정수값 또는 구간 배열
right = True : 오른쪽 값을 포함할지
labels : 구간의 레이블 지정한다.
precision : 소수점 자리 표시
include_lowest : 첫번째 구간이 왼쪽을 포함할지 여부
duplicates : 구간 가장자리가 고유하지 않는 경우, 오류발생시키거나 drop한다.

 

pandas.qcut(x, q, labels=None, retbins=False, precision=3, duplicates='raise')
분위수 기반으로 구간화 하는 함수이다.

순위 또는 샘플 분위수를 기반으로 변수를 동일한 크기의 구간으로 이산화한다. 
예를 들어 10개의 분위수에 대한 1000개의 값은 각 데이터 요소에 대한 분위수 구성원을 나타내는 Categorical 개체를 생성한다.

매개변수
x : 1차원 배열값
q : 정수값 또는 구간 비율 배열(0~1)
    예를 들어 사분위수는 [0, .25, .5, .75, 1.]
labels : 구간의 레이블 지정한다.
retbins : (빈, 레이블)을 반환할지 여부입니다. 
precision : 소수점 자리 표시
duplicates : 구간 가장자리가 고유하지 않는 경우, 오류발생시키거나 drop한다.

 

import pandas as pd
from numpy.random import randint

data = {
    "name" : ["kim","lee","park","choi","yu","son"],
    "score" : randint(1,100,6),
}
df = pd.DataFrame(data)
"""
	name	score
0	kim		39
1	lee		76
2	park	71
3	choi	89
4	yu		84
5	son		34
"""

df["CUT1"] = pd.cut(df.score, bins=[0,40,70,100])
df["CUT2"] = pd.cut(df.score, bins=[0,40,70,100], labels=["good", "medium", "bad"])
print("0~40, 40~70, 70~100 binning")
print(df.CUT1.value_counts())
print("----------------------")
print("0~40, 40~70, 70~100 binning후 label 을 bad, medium, good label 설정")
print(df.CUT2.value_counts())
print("----------------------")
"""
0~40, 40~70, 70~100 구간화
(70, 100]    4
(0, 40]      2
(40, 70]     0
Name: CUT1, dtype: int64
----------------------
bad       4
good      2
medium    0
Name: CUT2, dtype: int64
----------------------
"""


df["CUT3"] = pd.cut(df.score, bins=3)
df["CUT4"] = pd.cut(df.score, bins=3, labels=["good", "medium", "bad"])
print("min max 값으로 3개 구간으로 binning")
print(df.CUT3.value_counts())
print("----------------------")
print("min max 값으로 3개 구간으로 binning 후 bad medium good label설정")
print(df.CUT4.value_counts())
print("----------------------")
"""
----------------------
(70.667, 89.0]      4
(33.945, 52.333]    2
(52.333, 70.667]    0
Name: CUT3, dtype: int64
----------------------
bad       4
good      2
medium    0
Name: CUT4, dtype: int64
----------------------
"""

# qcat는 quantile 로 비닝한다. 40% 30% 30% 로 나눈다.
df["CUT5"] = pd.qcut(df.score, q=[0, 0.4 , 0.7 , 1.0])
df["CUT6"] = pd.qcut(df.score, q=[0, 0.4 , 0.7 , 1.0], labels=["good", "medium", "bad"])
print(df.CUT5.value_counts())
print("----------------------")
print(df.CUT6.value_counts())
print("----------------------")
"""
----------------------
(33.999, 71.0]    3
(80.0, 89.0]      2
(71.0, 80.0]      1
Name: CUT5, dtype: int64
----------------------
good      3
bad       2
medium    1
Name: CUT6, dtype: int64
----------------------
"""

# 3개 비닝으로 비율로 나눈다. 2개씩 비율로 나뉘어져있다.
df["CUT7"] = pd.qcut(df.score, q=3)
df["CUT8"] = pd.qcut(df.score, q=3, labels=["good", "medium", "bad"])
print("----------------------")
print(df.CUT7.value_counts())
print("----------------------")
print(df.CUT8.value_counts())
"""
(33.999, 60.333]    2
(60.333, 78.667]    2
(78.667, 89.0]      2
Name: CUT7, dtype: int64
----------------------
good      2
medium    2
bad       2
Name: CUT8, dtype: int64
"""

'전처리' 카테고리의 다른 글

범주형데이터처리 - get_dummies, Label Encoder, OneHotEncoding  (1) 2023.06.22
결측치 처리  (0) 2023.06.22
Pandas groupby section5 unstack  (0) 2023.06.21
Pandas groupby secton4 transform  (0) 2023.06.20
Pandas groupby section3 (agg)  (0) 2023.06.20

+ Recent posts