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 |