ドキュメントには次のように書かれています:
「連続値は、cut (値に基づくビン) および qcut (サンプルの分位数に基づくビン) 関数を使用して離散化できます。」
私には非常に抽象的に聞こえます...以下の例で違いがわかりますがqcut (サンプル クォンタイル) は実際には何を実行し、何を意味していますか? qcut と cut はいつ使用すればよいですか?
ありがとう。
factors = np.random.randn(30)
In [11]:
pd.cut(factors, 5)
Out[11]:
[(-0.411, 0.575], (-0.411, 0.575], (-0.411, 0.575], (-0.411, 0.575], (0.575, 1.561], ..., (-0.411, 0.575], (-1.397, -0.411], (0.575, 1.561], (-2.388, -1.397], (-0.411, 0.575]]
Length: 30
Categories (5, object): [(-2.388, -1.397] < (-1.397, -0.411] < (-0.411, 0.575] < (0.575, 1.561] < (1.561, 2.547]]
In [14]:
pd.qcut(factors, 5)
Out[14]:
[(-0.348, 0.0899], (-0.348, 0.0899], (0.0899, 1.19], (0.0899, 1.19], (0.0899, 1.19], ..., (0.0899, 1.19], (-1.137, -0.348], (1.19, 2.547], [-2.383, -1.137], (-0.348, 0.0899]]
Length: 30
Categories (5, object): [[-2.383, -1.137] < (-1.137, -0.348] < (-0.348, 0.0899] < (0.0899, 1.19] < (1.19, 2.547]]`
ベストアンサー1
まず、四分位数は、パーセンタイル、四分位数、中央値などの最も一般的な用語であることに注意してください。例では 5 つのビンを指定しているので、qcut
五分位数を求めていることになります。
したがって、 で五分位数を求めるとqcut
、各ビンに同じ数のレコードが含まれるようにビンが選択されます。レコードは 30 個あるので、各ビンには 6 個あるはずです (出力は次のようになりますが、ランダムな抽出によりブレークポイントは異なります)。
pd.qcut(factors, 5).value_counts()
[-2.578, -0.829] 6
(-0.829, -0.36] 6
(-0.36, 0.366] 6
(0.366, 0.868] 6
(0.868, 2.617] 6
逆に、cut
もっと不均一なものが見えるでしょう。
pd.cut(factors, 5).value_counts()
(-2.583, -1.539] 5
(-1.539, -0.5] 5
(-0.5, 0.539] 9
(0.539, 1.578] 9
(1.578, 2.617] 2
これは、cut
ビンを値自体に基づいて均等に間隔をあけて選択し、頻度これらの値の。したがって、ランダム正規分布から抽出したため、内側のビンでは頻度が高く、外側のビンでは頻度が低くなります。これは基本的に、ヒストグラムの表形式になります (30 レコードでかなりベル型になることが予想されます)。