Pandasのqcut
関数について、基本的な役割から実用的な使い方、注意点まで詳しく解説します。
目次
qcut
とは?
pandas.qcut
は、数値データを「分位数(quantile)」に基づいて区間分割する関数です。
つまり、データを等しい割合になるようにビン分け(binning)します。
cut
は値の範囲に基づいて「等幅」に分割するのに対し、qcut
はデータの分布に基づいて「等しい数の要素」を持つビンに分けます。
import pandas as pd
# データ準備
data = [7, 15, 36, 39, 45, 72, 83, 88, 95, 100]
# 4分位数に分割
result = pd.qcut(data, 4)
print(result)
この場合、データは4分位数に分けられ、それぞれのビンに同じ数のデータが入ります。
基本的な構文
import pandas as pd
data = [7, 15, 36, 39, 45, 72, 83, 88, 95, 100]
# 4分位数に分けて、整数ラベルを付与
result = pd.qcut(data, 4, labels=False)
print(result)
引数の意味
- x: 分割対象の配列やSeries。
- q:
- 分割する数(例:
4
なら四分位数)、 - または分位数のリスト(例:
[0, 0.25, 0.5, 0.75, 1.0]
)。
- 分割する数(例:
- labels:
False
→ 区間のインデックス番号を返す。True
またはリスト → 区間にラベルをつける。
- retbins:
True
にすると、分割に使った境界値も返す。
- precision: ビンの端点の小数点精度。
- duplicates:
- 分位数が重なって同じ境界になる場合の扱い。
'raise'
(デフォルト)ならエラー、'drop'
なら重複を無視して区間を減らす。
使用例
四分位数で分割
import pandas as pd
data = [7, 15, 36, 39, 45, 72, 83, 88, 95, 100]
result = pd.qcut(data, 4, labels=False)
print(result)
ラベルをカスタム
labels = ['低', '中低', '中高', '高']
result = pd.qcut(data, 4, labels=labels)
print(result)
境界値も確認する
cats, bins = pd.qcut(data, 4, retbins=True)
print(cats)
print(bins)
cut
との違い
関数 | 分割方法 | 適したケース |
---|---|---|
cut | 値の範囲を「等間隔」で分ける | 値のスケールが重要な場合(例:0〜100を10刻み) |
qcut | データを「等しい数の要素」に分ける | データの順位・分布を考慮したい場合(例:上位25%を抽出) |
実用例
顧客を購買金額でセグメント化
import pandas as pd
# 顧客ごとの購買金額データ
df = pd.DataFrame({
'customer': list('ABCDEFGHIJ'),
'purchase': [200, 500, 1500, 700, 3000, 400, 1200, 900, 2500, 600]
})
# 4分位に分割してラベルを付与
df['rank'] = pd.qcut(df['purchase'], 4, labels=['低額', '中低額', '中高額', '高額'])
print(df)
RFM分析や顧客セグメンテーションなどに便利。
注意点
- データに重複が多い場合:同じ値が境界に集まると、分位数の区切りがうまくいかない場合がある。そのときは
duplicates='drop'
を検討。 - 外れ値がある場合:
qcut
は分布に基づくので、極端な値に影響されにくい(cutよりも外れ値耐性がある)。 - カテゴリ化の意味:
qcut
の結果はカテゴリ型(Categorical
)で返されるので、集計やグループ化と相性が良い。
まとめるとqcut
は「データを分布に基づいて均等にグループ化したいとき」に使う強力な関数で、顧客分析・スコア分布の分位分類・統計的解析の前処理などで非常に役立ちます。
以上、PythonのPandasのqcut関数についてでした。
最後までお読みいただき、ありがとうございました。