Bin Data usando SciPy, NumPy y Pandas en Python

Zeeshan Afridi 21 junio 2023
  1. Clasificación en Python
  2. Importancia del agrupamiento de datos
  3. Diferentes formas de agrupar datos en Python
Bin Data usando SciPy, NumPy y Pandas en Python

Con el crecimiento exponencial de los datos y los casos de uso, la agrupación o categorización de datos se vuelve necesaria para dar sentido a estos datos.

Con respecto al binning de datos, existen diferentes técnicas disponibles, como el agrupamiento de datos o técnicas estadísticas más clásicas como el análisis de regresión.

Veremos por qué necesita el agrupamiento de datos y qué técnica es la más adecuada para cada contexto.

Clasificación en Python

El binning es una de las técnicas analíticas más poderosas para inferir la relación de diferentes variables.

El agrupamiento es una técnica no paramétrica y altamente flexible donde las variables se clasifican en diferentes conjuntos para revelar patrones y tendencias. Es ampliamente aplicable a varios conjuntos de datos y tamaños de muestra pequeños.

Binning es un proceso de agrupar datos en bins. Se puede hacer para varios propósitos, como agrupar puntos de datos por rango, agrupar puntos de datos por densidad o agrupar puntos de datos por similitud.

Hay varias formas de agrupar datos en python, como usar la función numpy.digitize(), la función pandas.cut() y usar la función scipy.stats.binned_statistic().

Cada método tiene ventajas y desventajas, por lo que es esencial elegir el método adecuado para la tarea.

Importancia del agrupamiento de datos

El agrupamiento de datos es un concepto simple: clasificar datos para un análisis más directo. Por ejemplo, puede tener varias tablas de datos grandes en un CSV y desea dividir los datos en partes más pequeñas.

El agrupamiento de datos le permite colocar los datos en diferentes grupos para que pueda analizarlos mejor, y también podemos usarlos para crear visualizaciones bonitas.

Entonces, ¿por qué es necesario el agrupamiento de datos? Primero, el agrupamiento de datos es esencial porque lo ayuda a analizar mejor sus datos. Por ejemplo, puede dividir una tabla de datos completa en partes más pequeñas que sean más fáciles de entender o visualizar.

El agrupamiento de datos puede ayudarlo a encontrar patrones en los datos y facilitar la identificación de valores atípicos. Le permite tomar un conjunto de datos masivo y hacerlo más manejable para llegar al meollo del problema.

El agrupamiento de datos es un proceso de subdivisión de una variable continua en contenedores discretos. Como ejemplo aproximado, si tiene la variable de temperatura de un paciente, puede dividir la temperatura en cinco intervalos (por ejemplo, < 36,5, 36,5–37,5, 37,5–38,5, 38,5–39,5 y > 39,5).

Esta ventaja es que puede visualizar la variable en un histograma o diagrama de caja utilizando los rangos de contenedores.

Diferentes formas de agrupar datos en Python

Hay varias formas de agrupar datos en Python, pero podría decirse que usar las bibliotecas SciPy y NumPy es la más eficiente.

Use SciPy y NumPy para agrupar datos en Python

Para comenzar con SciPy y NumPy, supongamos que tiene una lista de puntos de datos que desea agrupar. El primer paso es importar las bibliotecas SciPy y NumPy:

import numpy as np
import scipy as sp

A continuación, deberá definir los bordes de los contenedores. Se puede hacer usando la función linspace:

bin_edges = np.linspace(start, stop, num=num_bins)

Donde start y stop son los valores mínimo y máximo de los datos, respectivamente, y num_bins es el número de contenedores que desea crear. Finalmente, puede usar la función de histograma SciPy para agrupar los datos:

binned_data = sp.histogram(data, bin_edges)

La variable binned_data ahora contendrá una tupla con dos elementos. El primer elemento es una matriz de los datos agrupados y el segundo es una matriz de los bordes de la bandeja.

Use Numpy para agrupar datos en Python

Ejemplo de código:

# import Numpy library
import numpy

# define the edges of bin
data = numpy.random.random(100)
bins = numpy.linspace(0, 1, 10)

# finally, bin the data using numpy
digitized = numpy.digitize(data, bins)
bin_means = [data[digitized == i].mean() for i in range(1, len(bins))]
bins = numpy.linspace(0, 1, 10)

digitized = numpy.digitize(data, bins)
[data[digitized == i].mean() for i in range(1, len(bins))]

Producción :

[0.05308461260140375,
 0.16559348769870028,
 0.28950800899648155,
 0.3874228665181473,
 0.5046647094141071,
 0.6254841134474202,
 0.7216935463408317,
 0.8374773268113803,
 0.9421576008815353]

Use Pandas para agrupar datos en Python

Ejemplo de código:

# import libraries
import numpy as np
import pandas

df = pandas.DataFrame({"a": np.random.random(100), "b": np.random.random(100) + 10})

# will Bin the data frame by "a" in 10 bins
bins = np.linspace(df.a.min(), df.a.max(), 10)
groups = df.groupby(pandas.cut(df.a, bins))

# Get the b mean that the values will bin
print(groups.mean().b)

Producción :

a
(0.00762, 0.117]    10.576639
(0.117, 0.226]      10.319629
(0.226, 0.335]      10.633805
(0.335, 0.444]      10.404979
(0.444, 0.553]      10.551616
(0.553, 0.662]      10.420306
(0.662, 0.771]      10.434091
(0.771, 0.88]       10.402038
(0.88, 0.989]       10.537547
Name: b, dtype: float64

Use SciPy para agrupar datos en Python

Ejemplo de código:

# import libraries
import numpy as np
from scipy import stats

# define array
arr = [20, 2, 7, 1, 34]
print("\narr : \n", arr)

# start binning
print(
    "\nbinned_statistic for median : \n",
    stats.binned_statistic(arr, np.arange(5), statistic="median", bins=4),
)

Producción :

Array = [20, 2, 7, 1, 34]

Binned statistics for median

BinnedStatisticResult(statistic=array([ 2., nan,  0.,  4.]), bin_edges=array([ 1.  ,  9.25, 17.5 , 25.75, 34.  ]), binnumber=array([3, 1, 1, 1, 4], dtype=int64))
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