import pandas as pd
Pythonで、同じ個数で配列をビン分割する方法です。
使用するのは、Pythonのpandasライブラリのcutメソッドです。
ビン分割とは、配列の各要素を最小と最大の境界値で区切り、カテゴリ分けする操作のことです。
ser = pd.Series([11, 46, 65, 34,
25, 12, 35, 79])
ser
pd.qcut(ser, q=4)
このようなシリーズを用意します。
qcutの第一引数にシリーズの変数名、第二引数ビン分割する数を指定します。
引数のqは省略可能ですが、今回は指定して実行します。
4つのカテゴリに分けて、同じ個数でビン分割することができました。
デフォルトでは、最小値である左側の境界値は含まれず、最大値である右側の境界値は含まれるようになっています。
例えば、11は10.999より大きく、28以下というカテゴリに分割されます。
pd.qcut(ser, 4).value_counts()
なお、value_countsメソッドを使用すると、同じ個数でビン分割されているかを確認することができます。
それぞれ4つのカテゴリが2個ずつ作成されていることが確認できました。
pd.qcut(ser, 4, retbins=True)
それぞれの境界値を、配列で取得することもできます。
引数retbinsにTrueを指定します。
実行します。
境界値も併せて取得することができました。
pd.qcut(ser, 4, labels=['tiny', 'small',
'medium','big'])
また、ビン分割する値にラベルを指定することもできます。
引数にlabelsで、ラベルにしたい値をリストで指定します。
実行します。
ラベルで表示することができました。
なお、同じようにビン分割を行うメソッドで、cutメソッドがあります。
cutメソッドでは、このように作成されるビンの個数はそれぞれ異なります。
また、同じ間隔でそれぞれのビンが分割されたり、境界値をリストで指定できたりする点が主な違いです。
pd.cut(ser, 4).value_counts()
pd.cut(ser, [10, 15, 55, 95])