La documentación dice:
http://pandas.pydata.org/pandas-docs/dev/basics.html
"Los valores continuos se pueden discretizar utilizando las funciones cut (bins basados en valores) y qcut (bins basados en cuantiles de muestra)"
Suena muy abstracto para mí ... Puedo ver las diferencias en el siguiente ejemplo, pero ¿qué significa realmente qcut (cuantil de muestra)? ¿Cuándo usarías qcut versus cut?
Gracias.
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]]`
Respuestas:
Para empezar, tenga en cuenta que cuantiles es el término más general para elementos como percentiles, cuartiles y medianas. Especificó cinco contenedores en su ejemplo, por lo que solicita
qcut
quintiles.Entonces, cuando solicite quintiles con
qcut
, se elegirán los contenedores para que tenga el mismo número de registros en cada contenedor. Tiene 30 registros, por lo que debería tener 6 en cada contenedor (su salida debería verse así, aunque los puntos de interrupción diferirán debido al sorteo aleatorio):Por el contrario,
cut
verá algo más desigual:Eso es porque
cut
elegirá los contenedores para que estén espaciados uniformemente de acuerdo con los valores en sí mismos y no con la frecuencia de esos valores. Por lo tanto, debido a que extrajo de una normal aleatoria, verá frecuencias más altas en los contenedores internos y menos en los externos. Básicamente, será una forma tabular de un histograma (que esperaría que tenga una forma de campana con 30 registros).fuente
cut
o puede que le interese más el 5% más alto y el usoqcut
fuente
Por lo tanto, qcut asegura una distribución más uniforme de los valores en cada contenedor, incluso si se agrupan en el espacio muestral. Esto significa que es menos probable que tenga un contenedor lleno de datos con valores muy cercanos y otro contenedor con valores 0. En general, es mejor muestrear.
fuente
Pd.qcut distribuye elementos de una matriz al hacer la división sobre la base de ((no. De elementos en la matriz) / (no. De bins - 1)), luego divide esta cantidad de no. de elementos en serie en cada bins.
Pd.cut distribuye elementos de una matriz al hacer la división sobre la base de ((primer + último elemento) / (no. De bins-1)) y luego distribuye el elemento de acuerdo con el rango de valores en el que se encuentran.
fuente