Pandas cut() vs funciones qcut()

Zeeshan Afridi 21 junio 2023
  1. Función cortar() de Pandas
  2. Función qcut() de Pandas
  3. Diferencia entre las funciones cut() y qcut()
  4. Conclusión
Pandas cut() vs funciones qcut()

La vinculación de datos numéricos continuos en varios cubos para un análisis adicional suele ser útil cuando se trata de dichos datos. El agrupamiento también se puede llamar agrupamiento, agrupamiento discreto, discretización o cuantificación.

Función cortar() de Pandas

Los elementos de la matriz se dividen en varios contenedores utilizando la función cut() de Pandas. La función cortar se utiliza principalmente para el análisis estadístico de datos escalares.

Sintaxis:

cut(
    x,
    bins,
    right=True,
    labels=None,
    retbins=False,
    precision=3,
    include_lowest=False,
    duplicates="raise",
)

Función qcut() de Pandas

qcut() es una función de discretización basada en cuantiles, según la descripción de Pandas. Lo que significa que qcut se esfuerza por crear contenedores de igual tamaño a partir de los datos subyacentes. En lugar de usar los bordes numéricos reales de los contenedores, la función los determina usando percentiles dependiendo de cómo se distribuyan los datos.

Sintaxis:

pandas.qcut(x, q, labels=None, retbins=False, precision=3, duplicates="raise")

Diferencia entre las funciones cut() y qcut()

En resumen, es la distinción clave entre cut() y qcut(). Use qcut() para asegurarse de que los artículos en sus contenedores se distribuyan por igual y use cut() para crear sus propios rangos de contenedores numéricos personalizados.

Vamos a aprender esta diferencia en el ejemplo dado a continuación.

Ejemplo de código:

# import libraries
import numpy as np
import pandas as pd

# create a data frame
df = pd.DataFrame(
    {
        "column_x": np.random.randint(1, 50, size=50),
        "column_y": np.random.randint(20, 100, size=50),
        "column_z": np.random.random(size=50).round(2),
    }
)
df.head()

Producción :

      column_x  column_y  column_z
0         6        68      0.70
1        30        83      0.50
2        35        64      0.41
3        28        98      0.73
4         5        24      0.79

En las primeras columnas 2, hay números en los rangos de 1 a 50 y 20 a 100, respectivamente. Los flotadores en la tercera columna van desde 0 a 1, y generamos aleatoriamente estos valores usando rutinas numpy.

Ahora, como sabemos, la función cortar() distribuye todo el rango de valores en pequeños contenedores, y el rango cubierto por cada contenedor será el mismo. Como resultado, asignamos diferentes números enteros entre 1 y 50 a la primera columna (columna x). Primero verifiquemos los valores más bajos y más altos de esta columna.

Ejemplo de código:

df.column_x.max(), df.column_x.min()

Producción :

(49, 3)

Si dividimos esta columna en 5 partes iguales, por ejemplo, obtendremos el tamaño de cada contenedor como 9.2, como el siguiente.

$$
(49 - 3) / 5 = 9,2
$$

Este proceso de binning lo lleva a cabo la función cut(), que coloca cada valor en el bin correspondiente.

Ejemplo de código:

df["column_x_binned"] = pd.cut(df.column_x, bins=5)
df.column_x_binned.value_counts()

Producción :

(21.4, 30.6]     16
(39.8, 49.0]     14
(12.2, 21.4]      8
(30.6, 39.8]      6
(2.954, 12.2]     6

Como puede ver, cada contenedor tiene exactamente 9.2 pulgadas de tamaño, excepto el más pequeño. Los límites inferiores no incluyen nada.

Para incluirlo, el límite inferior del bin más pequeño debe ser algo menor que el valor más bajo, 3.

Al especificar manualmente los límites de los contenedores, puede modificar la apariencia de los contenedores. El argumento bins recibe los valores de borde como una lista.

Ejemplo de código:

pd.cut(df.column_x, bins=[0, 10, 40, 50]).value_counts()

Producción :

(10, 40]    33
(40, 50]    13
(0, 10]      4

Por defecto, los bordes derechos son inclusivos. Sin embargo, esto se puede modificar.

Ejemplo de código:

pd.cut(df.column_x, bins=[0, 10, 40, 50], right=False).value_counts()

Producción :

[10, 40)    33
[40, 50)    13
[0, 10)      4

Los valores que caen en cada contenedor mientras usas la función cortar() están completamente fuera de tu control. Está limitado a definir los bordes del bin.

Debe familiarizarse con la función qcut() en este punto. Los valores se pueden dividir en cubos para que aproximadamente los mismos valores estén en cada cubo.

Ejemplo de código:

pd.qcut(df.column_x, q=4).value_counts()

Producción :

(40.75, 49.0]    13
(19.5, 25.0]     13
(2.999, 19.5]    13
(25.0, 40.75]    11

Cada uno de nuestros cubos 4 contiene aproximadamente los mismos valores. Los cubos a veces se conocen como cuartiles cuando hay cuatro.

El primer cuartil contiene una cuarta parte del número total de valores, y los dos primeros cubos contienen el cincuenta por ciento, y así sucesivamente.

No controlamos los bordes del contenedor con la función qcut(). Se calculan automáticamente.

Considere una columna que contiene valores 40 (40 filas), y deseamos tener 4 cubos. El rango superior del primer cubo se elegirá de modo que contenga valores 10 comenzando desde el valor más pequeño.

Conclusión

Un conjunto de valores continuos se puede transformar en una variable discreta o categórica utilizando las funciones cut() o qcut().

La función cut() se refiere al rango de valores de los contenedores. La diferencia entre los números más pequeños y más grandes se utiliza para establecer el rango completo.

A continuación, el rango completo se divide en el número deseado de contenedores. De forma predeterminada, cada contenedor tiene aproximadamente el mismo tamaño y la única variable es la distancia entre los bordes de los contenedores inferior y superior.

La cantidad de valores en cada contenedor es el foco principal de la función qcut(). Los valores están ordenados en orden decreciente de valor.

Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn

Artículo relacionado - Pandas Function