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

3 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)

Deja un comentario

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