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 鈥減d. cut鈥.

Veamos un ejemplo utilizando los datos del Titanic, vamos agrupar en compartimientos los datos de la columna de la 鈥淓dad鈥, 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.

aprende f谩cilmente inteligencia artificial - newsletter

Agrupando los datos 1

Una vez definido nuestros rangos vamos a crear una variable llamada 鈥渂ins鈥 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 鈥渘ames鈥 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 鈥渃ut鈥, para crear los grupos de datos. Lo 煤nico que debemos hacer es definir la columna a editar en este caso 鈥淓dad鈥 y le decimos al m茅todo los rangos en que lo vamos a dividir, en este caso son los que definimos en la variable 鈥渂ins鈥 por tal raz贸n solamente escribimos este nombre y seguidamente le colocamos los nombres de cada rango que lo definimos en la variable 鈥渘ames鈥.

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.

df[鈥淓dad鈥漖 = pd.cut(df[鈥淓dad鈥漖, bins, labels = names)

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

8 comentarios en “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

  5. Pingback: Dominando gr谩ficos en Python con Matplotlib y Seaborn – My Blog

Deja un comentario

Tu direcci贸n de correo electr贸nico no ser谩 publicada.