Agrupando los datos con Python

El agrupamiento de datos o binning en ingles, es un método de preprocesamiento de datos y consiste en agrupar valores en compartimientos. En ocasiones este agrupamiento puede mejorar la precisión de los modelos predictivos y, a su vez, puede mejorar la comprensión de la distribución de los datos. El método nos lo proporciona panda y se llama “pd. cut”.

Veamos un ejemplo utilizando los datos del Titanic, vamos agrupar en compartimientos los datos de la columna de la “Edad”, en este caso vamos a crear seis grupos de edades, divididos de la siguiente forma:

  • el primer grupo lo comprenda las personas con edades entre 0 a 5,
  • el segundo grupo serán las personas con edades entre 6 a 12,
  • en el tercer grupo estarán las personas entre 13 a 18 años,
  • en el cuarto grupo estará formado por las personas con edades comprendidas entre 19 a 35 años,
  • el quinto lo forman las personas entre 36 años a 60, y
  • el último grupo esta comprendido por las personas entre 61 año a 100 años.

Toma en cuenta que estos rangos son seleccionados al azar tú puedes seleccionar tus propios rangos de edades, de acuerdo a tu análisis.

Agrupando los datos 1

Una vez definido nuestros rangos vamos a crear una variable llamada “bins” en donde colocaremos nuestros rangos, solamente se debe colocar desde donde inicia el primer rango y en donde finaliza el resto de los rangos, por esa razón colocamos de primero el cero que es donde inicia nuestro primer rango, y seguidamente colocamos en donde termina el resto de los rangos.

bins = [0, 5, 12, 18, 35, 60, 100]

Seguidamente creamos otra variable llamada “names” en donde colocamos los nombres que le vamos a poner a cada uno de los compartimientos o en este caso rango de edades, podríamos colocarle, bebe, niño, adolescente, adulto, etc, pero como te lo he comentado en varias ocasiones los algoritmos de Machine Learning por lo general solamente aceptan números entonces es preferible colocarles número a estos compartimientos para que posteriormente no se tenga que hacer un cambio en los nombres. Entonces simplemente le colocamos 1 al primer rango correspondiente de 0 a 5, le colocamos 2 al siguiente rango y así sucesivamente.

names = ["1", "2", "3", "4", "5", "6"]

Definido ya los bins o rangos y los nombres que van a llevar ya podemos implementar el método “cut”, para crear los grupos de datos. Lo único que debemos hacer es definir la columna a editar en este caso “Edad” y le decimos al método los rangos en que lo vamos a dividir, en este caso son los que definimos en la variable “bins” por tal razón solamente escribimos este nombre y seguidamente le colocamos los nombres de cada rango que lo definimos en la variable “names”.

Esto es todo con este método se hace la agrupación respectiva y ahora en vez de tener cada persona con su respectiva edad, ahora los tenemos agrupados en rangos de edades.

Agrupando los datos con Python

Esta función es muy útil en muchos ejercicios, por ejemplo, en este del Titanic, al finalizar del respectivo análisis podríamos ver a que grupo correspondía las personas que sobrevivieron el desastre, si corresponde a niños, adolescente o por el contrario son personas mayores.

 

Agrupando los datos 2

5 thoughts on “Agrupando los datos con Python”

  1. Hola a mi me sale el siguiente error,, que puede ser
    bins = [0, 5, 12, 18, 35, 60, 100]
    names = [“1”, “2”, “3”, “4”, “5”, “6”]
    df[“edad”] = pd.cut(df[“edad”], bins, labels = names)
    —————————————————————————
    TypeError Traceback (most recent call last)
    in
    6 bins = [0, 5, 12, 18, 35, 60, 100]
    7 names = [“1”, “2”, “3”, “4”, “5”, “6”]
    —-> 8 df[“edad”] = pd.cut(df[“edad”], bins, labels = names)

    ~/anaconda3/lib/python3.7/site-packages/pandas/core/reshape/tile.py in cut(x, bins, right, labels, retbins, precision, include_lowest, duplicates)
    239 include_lowest=include_lowest,
    240 dtype=dtype,
    –> 241 duplicates=duplicates)
    242
    243 return _postprocess_for_cut(fac, bins, retbins, x_is_series,

    ~/anaconda3/lib/python3.7/site-packages/pandas/core/reshape/tile.py in _bins_to_cuts(x, bins, right, labels, precision, include_lowest, dtype, duplicates)
    342
    343 side = ‘left’ if right else ‘right’
    –> 344 ids = ensure_int64(bins.searchsorted(x, side=side))
    345
    346 if include_lowest:

    TypeError: ‘<' not supported between instances of 'int' and 'str'

  2. cree la siguiente solucion
    bins = [0, 5, 12, 18, 35, 60, 100]
    names = [“1”, “2”, “3”, “4”, “5”, “6”]
    #Cambio el tipo de datos en la columna Edad
    df[“edad”] = df[“edad”].astype(float)
    #categoriza en rangos los datos
    df[“edad”] = pd.cut(df[“edad”], bins, labels = names)
    # Esto reemplaza los valores de donde no hay valores por el numero que yo quiera
    df[“edad”]= df[“edad”].replace(np.nan, 9, regex=True)

  3. Hola,no hay razón para que salga un error ,el código esta bien pero sale error si ejecutas más de una ves: “df[“Edad”]=pd.cut(df[“Edad”],bins,labels=names)” , ya que el Dataframe a cambiado y la segunda vez que ejecutas la misma línea ya no encuentra los mismos rangos(bins).
    Por cierto Ligdi felicidades haces muy buenos videos ,sigue así!

  4. Mi caso es diferente…. tengo un data frame con variables categoricas por ejemplo:

    factura – fecha – producto – linea

    Quiero agrupar lineas y productos al mismo tiempo, contar los elementos de cada producto y hacer un grafico de barras comparativo (tres grupos de barras uno por cada linea que muestre las cantidades de los 4 productos en cada linea.

    Linea 1 Linea 2 Linea 3
    Product A 4 2 6
    Product B 2 4 16
    Product C 3 2 28
    Product D 6 4 11

    Soy nuevo en Python, agradezco tu ayuda.
    maxriposati@gmail.com

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *