Pandasで数値をもとにグループにわけたい(cut,qcutを使う)

使い方がややこしい、cutqcutの話です。
デシル分析をする際に便利なqcutは下記記事でも使いました。

esu-ko.hatenablog.com

上記記事のなかで、グループの中のユーザー数ではなく、数値そのものを等分する場合の話も触れました。

実はPandasにはその時に使うと便利なcutと言うものも存在しています。

挙動の違い

dat = [0,0,0,1,50,100]]

こんなリストがあり、二つのグループになるように分けるとします。

cutの場合、0~100の数値を二つにわけるため、50を境目にします。

そのため、100だけが50より上、100以下のグループになります。

2グループにわかれていますが、それぞれのグループの個数とは異なっています。

これは、場合によっては、値が入らないグループが出てくることもあります。

 pd.cut([0,0,0,1,50,100],2)
#Categories (2, interval[float64]): [(-0.1, 50.0] < (50.0, 100.0]]

qcutの場合、個数が同じになるようにグループを分けようとします。

そのため、データは6個のため、1グループ3個になるようにグループをわけます。 また、同数になるように分けた時に、境目がうまく行かない場合、qcutはエラーを出します。(今回、3つのグループに分けようとするとエラーを出します)

pd.qcut([0,0,0,1,50,100],2)
#Categories (2, interval[float64]): [(-0.001, 0.5] < (0.5, 100.0]]

使い方

最初の記事のように、ユーザー属性として単純に使いたい場合がひとまずわかりやすい使い方です。

他にも機械学習や統計モデルの特徴量として使う場合に、数値の増加と影響の増加が、同率出ないことがわかっている場合に用いることもあります。

その場合は、1カラムではなく、複数カラムに展開したくなりますが、get_dummiesを用いると便利です。

esu-ko.hatenablog.com