Подтвердить что ты не робот

В чем разница между pandas.qcut и pandas.cut?

В документации написано:

http://pandas.pydata.org/pandas-docs/dev/basics.html

"Непрерывные значения могут быть дискретизированы с использованием разреза (на основе значений) и qcut (бункеров на основе квантовых точек) функции"

Звучит очень абстрактно для меня... Я вижу различия в приведенном ниже примере, но что делает qcut (sample quantile) на самом деле/​​означает? Когда вы будете использовать 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]]`
4b9b3361

Ответ 1

Чтобы начать, обратите внимание, что квантилиты - это самый общий термин для вещей, таких как процентили, квартили и медианные. Вы указали пять бункеров в своем примере, поэтому вы запрашиваете qcut для квинтилей.

Итак, когда вы запрашиваете quintiles с 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 записями).

Ответ 2

Таким образом, qcut обеспечивает более равномерное распределение значений в каждом бункере, даже если они группируются в пространстве выборки. Это означает, что у вас меньше шансов иметь ящик с данными с очень близкими значениями и еще один бит с 0 значениями. В общем, это лучший выбор.