データセット中の連続量の値に対して簡単にラベルを付与したいと思ったことはないでしょうか。例えば、収入の分布を値に応じて「低」「中」「高」などに分けたいなどです。pandasで提供されている関数qcut
とcut
は簡単にラベルの付与が可能です。
この記事がカバーする内容
- qcutによる分位数ベースの分割
- cutによる等間隔の分割
- qcutとcutの使い分け
スポンサーリンク
qcut
qcutはサンプルの分位数にあわせて均等サイズのビンにデータを分割する分位数ベース関数です。例を使ってqcutの機能を確認します。
import numpy as np
import pandas as pd
#make a dataframe
data = [0,100,200,300,400,500,600,700,800,900,1000]
df = pd.DataFrame({"data":data})
# apply qcut
label = ["Low", "Medium", "High", "Very High"]
df['class'] = pd.qcut(df["data"],q=4,labels=label)
print(df)
データを4分割してみます。qcutによりデータがそれぞれのパーセンタイルの値を境に4分割されました。
data class
0 0 Low
1 100 Low
2 200 Low
3 300 Medium
4 400 Medium
5 500 Medium
6 600 High
7 700 High
8 800 Very High
9 900 Very High
10 1000 Very High
cut
cut
はデータの値の範囲を等間隔に分けます。
# apply cut
labels = ["Small", "Medium", "Large"]
df["class"] = pd.cut(df["data"],bins=3, labels=labels)
print(df)
0-1000の範囲で3等分してラベルを与えてみます。
data class
0 0 Small
1 100 Small
2 200 Small
3 300 Small
4 400 Medium
5 500 Medium
6 600 Medium
7 700 Large
8 800 Large
9 900 Large
10 1000 Large
qcutとcutの使い分け
- qcut: 各カテゴリに同じ件数を入れたい、外れ値の影響を抑えたい
- cut: 値の区間幅で分けたい、区間を自分で指定して分けたい
まとめ
qcutやcutを使用すると、連続値をカテゴリに変換してより分かりやすい分析が可能になります。また、データラベリングすることで、可視化、集計にも役立てることができます。
qcutとcut
- qcut:
- 分位数に従ってデータを均等に分ける。
- 各ビンに同じ数のデータが入る
- 外れ値があってもバランスよく分ける
- データの偏りに強い
- cut:
- 値の範囲を等間隔に分けてデータを分ける
- 外れ値が多いとデータ数が偏る可能性がある
参考資料
(1) pandas.qcut (2023/5/7アクセス)
この記事はpandasの関数 qcutとcutの使い方についてまとめます。