Codifica datos categóricos nominales para Machine Learning y Ciencia de Datos con Python

แชร์
ฝัง
  • เผยแพร่เมื่อ 4 ต.ค. 2024

ความคิดเห็น • 74

  • @CodigoMaquina
    @CodigoMaquina  2 ปีที่แล้ว +1

    👉 Xiperia ofrece consultoría empresarial que transforma datos en conocimiento accionable para alcanzar los objetivos de tu negocio. Conoce más en www.xiperia.com

  • @arturoalonso7274
    @arturoalonso7274 ปีที่แล้ว +6

    Acabo de pagar un curso de $300 en una universidad (una estafa), cada clase que termina, no le entiendo y vengo a tu canal... es más ahora solo pido la curricula y veo tu clase primero para poder entenderla, solo lo tomé por el certificado. Muchas gracias.

    • @CodigoMaquina
      @CodigoMaquina  ปีที่แล้ว

      Arturo muchas gracias por tus comentarios. La mejor de las suertes en tu formación :)

  • @paulatortora4454
    @paulatortora4454 ปีที่แล้ว +4

    Pagar un curso y que te recomienden venir a ver tus videos. Ojalá fueras el profesor. Gracias por tan clara explicación, y gratis.. Creo que con esto podré resolver mi trabajo para que me aprueben en el curso que pago.!

    • @CodigoMaquina
      @CodigoMaquina  ปีที่แล้ว

      Paula muchas gracias por tus comentarios y unas grandes felicitaciones por la determinación que tienes para construir tu carrera con estos temas.

  • @FernandoCabreraBarranzuela
    @FernandoCabreraBarranzuela หลายเดือนก่อน +1

    Gracia Octavio, es información de valor

  • @jorgeenriquemenesesmendoza7268
    @jorgeenriquemenesesmendoza7268 11 หลายเดือนก่อน +1

    Felicitaciones por los videos, son de los mejores explicados, saludos desde Chile

    • @CodigoMaquina
      @CodigoMaquina  9 หลายเดือนก่อน

      @jorgeenriquemenesesmendoza7268 muchas gracias por tu comentario y un muy feliz año!!!

  • @nettogrowthpartners9567
    @nettogrowthpartners9567 ปีที่แล้ว +1

    Excelente explicación! muchas gracias Octavio!!!

    • @CodigoMaquina
      @CodigoMaquina  ปีที่แล้ว

      Es un placer. Gracias por seguir el contenido del canal :)

  • @rockophill3934
    @rockophill3934 2 ปีที่แล้ว +1

    Gracias Maestro Octavio!!!! Mas que excelente su explicación!!

    • @CodigoMaquina
      @CodigoMaquina  ปีที่แล้ว

      Te agradezco mucho tus comentarios :)

  • @demianpalumbo6874
    @demianpalumbo6874 3 ปีที่แล้ว +1

    Gracias por subir esta serie de videos. Excelente información.
    Saludos desde Argentina.

    • @CodigoMaquina
      @CodigoMaquina  3 ปีที่แล้ว

      ¡Muchas gracias por tus comentarios! Saludos desde México

  • @aspirezr
    @aspirezr 2 ปีที่แล้ว +1

    Muchas gracias por el video.!! Saludos..

    • @CodigoMaquina
      @CodigoMaquina  2 ปีที่แล้ว

      Gracias por escribirnos y por ver el canal :)

  • @megatronixx
    @megatronixx 5 หลายเดือนก่อน +1

    Hola, la duda que me quedo, es cual es la diferencia entre usar la columna como category y usarla como oneHot.

  • @raulrodriguez7875
    @raulrodriguez7875 9 หลายเดือนก่อน

    Excelente video y explicación como siempre, voy viendo sus videos uno por uno desde el inicio viendo lo comentarios también de la mayoría y al igual que todos tiene una forma de explicar las cosas fuera de lo ordinario, debería considerar hacer videos teóricos prácticos sobre probabilidad, inferencia y estadística aplicando datasets mas grandes aunque quizá esto ya implicaría algo como hacer un curso en alguna plataforma pero créame que seria un éxito, se lo digo yo que ya he tomado cursos en coursera, udemy y en otros lugares mas.
    saludos

  • @brunorobertoarganaraz3896
    @brunorobertoarganaraz3896 11 หลายเดือนก่อน +1

    muy buenos los videos, te felicito

    • @CodigoMaquina
      @CodigoMaquina  9 หลายเดือนก่อน

      @brunorobertoarganaraz3896 feliz año!!!

  • @mberrios1956
    @mberrios1956 2 ปีที่แล้ว +1

    buenísimo video, gracias!

    • @CodigoMaquina
      @CodigoMaquina  2 ปีที่แล้ว

      Gracias por interactuar en el canal :)

  • @lizethfiorelaquispe1827
    @lizethfiorelaquispe1827 2 ปีที่แล้ว +1

    muchas gracias!, bien explicado

    • @CodigoMaquina
      @CodigoMaquina  2 ปีที่แล้ว

      Muchas gracias por tu comentario y por ver el canal :)

  • @carlosvquiroz8484
    @carlosvquiroz8484 2 ปีที่แล้ว +1

    Excelente explicacion habia visto varios videos explicando one hot encoder y lo que hacian era confundirme

    • @CodigoMaquina
      @CodigoMaquina  2 ปีที่แล้ว

      Gracias por comentar y por seguir el contenido del canal :)

  • @gogomac
    @gogomac 2 ปีที่แล้ว +1

    gracias ingeniero

  • @naren-7
    @naren-7 ปีที่แล้ว +3

    Cogido para renombrar las columnas:
    # Renombrar columnas
    datos.columns = [str(col).strip("()").strip("',").title() for col in datos.columns]
    datos

    • @CodigoMaquina
      @CodigoMaquina  ปีที่แล้ว

      Naren gracias por complementar la información. Comentarios así añaden valor.

  • @javierlandarivera8673
    @javierlandarivera8673 5 หลายเดือนก่อน

    Hola gracias por el curso para codificar datos tengo una consulta en caso tenga una columna de fechas como mas codifico ?

  • @IngenieriaEstructural7
    @IngenieriaEstructural7 2 ปีที่แล้ว +1

    Genial

    • @CodigoMaquina
      @CodigoMaquina  2 ปีที่แล้ว

      Gracias por interactuar en el canal y seguir su contenido :)

  • @marlondavidarangoabella1942
    @marlondavidarangoabella1942 2 ปีที่แล้ว +4

    excelente explicación, muchas gracias, sin embargo tengo una inquietud, por ejemplo cuando se tienen muchas más opciones ( suponiendo sean 150 países) esto haría el dataframe mucho más grande, existe algún otro tipo de método que no generen esto en el dataframe

    • @CodigoMaquina
      @CodigoMaquina  2 ปีที่แล้ว +1

      Muchas gracias por tus comentarios y por tu pregunta. Lamentablemente para el caso general, el proceso de codificación de datos categóricos genera muchas columnas y provoca la maldición de la dimensionalidad (aquí un video th-cam.com/video/nhgCwWGNDiM/w-d-xo.html). Para casos particulares, por ejemplo valores categóricos ordinales, es decir, con cierto orden, por ejemplo grados de estudio, se puede utiliza OrdinalEnconder de sklearn, y así no generas columnas adicionales. Sin embargo, es muy importante tomar en cuenta el contexto para determinar qué tipo de codificación es adecuada evitar meter ruido. Hay otros codificadores, no obstante, esos son de los más comunes. Gracias por interactuar :)

    • @VictorHugoAngel
      @VictorHugoAngel 2 ปีที่แล้ว +2

      ​@@CodigoMaquina Que tal si haces primero un pareto sobre esa columna, eso reduciría las categorías.

    • @CodigoMaquina
      @CodigoMaquina  2 ปีที่แล้ว +1

      @@VictorHugoAngel Ciertamente, un análisis así podría ayudar. Gracias por compartir :)

  • @wachinrobcar
    @wachinrobcar ปีที่แล้ว +1

    Hola, gracias por tus videos. Espero puedas resolver mi consulta, en tu caso empiezas a trabajar desde los nombres de los países para luego obtener el arreglo colocando el nombre de los países como encabezados. En el supuesto caso qué en vez de los nombres, ya se encuentre asignado los números en el data, cómo lo empezaría a trabajar. Saludos desde Perú.

    • @CodigoMaquina
      @CodigoMaquina  ปีที่แล้ว +1

      Gracias por tu pregunta Roberto. Si entendí bien, en el caso que planteas, ya existiría una sola columna con un número en lugar del nombre del país. Si es así, se realiza el mismo procedimiento de la codificación one-hot que se muestra en el video. Los números también pueden ser considerados como categorías. Ahora, por cuestiones de interpretabilidad de los resultados y análisis, de cualquier manera te recomendaría realizar un "replace" de los números existentes a categorías descriptivas. Esto último no es enteramente necesario, pero es una buena práctica y facilita el trabajo. Gracias por seguir el contenido del canal :)

    • @wachinrobcar
      @wachinrobcar ปีที่แล้ว

      @@CodigoMaquina Muchas gracias, me quedó muy claro.

  • @danielsandovalsanchez3296
    @danielsandovalsanchez3296 5 หลายเดือนก่อน

    Una consulta, si tuviera "N" columnas categoricas y cada columna tenga "X" valores distintos, entonces tendre que adicionar "N * X " nuevas columnas al dataframe? eso no ocupara mas espacio?

  • @joseleonardosanchezvasquez1514
    @joseleonardosanchezvasquez1514 2 ปีที่แล้ว +2

    Gracias buen video y explicación, no hay manera para que a las columnas nuevas no le salga el paréntesis y la coma ??

    • @CodigoMaquina
      @CodigoMaquina  2 ปีที่แล้ว

      Gracias por tus comentarios y por la pregunta. Sí se puede, aquí va un extracto de código
      import pandas as pd
      from sklearn.preprocessing import OneHotEncoder, LabelEncoder
      codificador, etiquetador = OneHotEncoder(), LabelEncoder()
      datos = pd.DataFrame({"pais": ["Mexico", "Ecuador", "Mexico", "Chile"]})
      etiquetador.fit_transform(datos["pais"])
      print(pd.DataFrame(codificador.fit_transform(datos[["pais"]]).todense(), columns = etiquetador.classes_))

  • @natanaelmunoz5098
    @natanaelmunoz5098 5 หลายเดือนก่อน

    Muy buen video! Muchas gracias por la enseñanza. Tengo una duda, si tengo que pasar de categorico a numérico casi 30 columnas y son alrededor 2M de datos...
    ¿Esté metodo serviria? Trato de hacerlo que sale MemoryError :(

  • @tomasbinder6882
    @tomasbinder6882 2 ปีที่แล้ว +1

    Gracias por el excelente video. Me surgió una duda, ¿la codificación one-hot es igual get_dummies de pandas? ¿O tienen diferencias?

    • @CodigoMaquina
      @CodigoMaquina  2 ปีที่แล้ว +1

      Gracias por la pregunta. La diferencia principal en funcionalidad, es que el OneHotEncoder mantiene el contexto, es decir el número de categorías que se codificaron cuando se usó el método fit_transform(). Con ese contexto cuando desees transformar más datos te puede avisar si los nuevos datos tienen una nueva categoría. Si tienes oportunidad, ejecuta el siguiente código para que veas un ejemplo:
      import pandas as pd
      from sklearn.preprocessing import OneHotEncoder, LabelEncoder
      codificador, etiquetador = OneHotEncoder(handle_unknown="error"), LabelEncoder()
      datos = pd.DataFrame({"pais": ["Mexico", "Ecuador", "Mexico", "Chile"]})
      print(pd.get_dummies(datos))
      etiquetador.fit_transform(datos["pais"])
      print(pd.DataFrame(codificador.fit_transform(datos[["pais"]]).todense(), columns = etiquetador.classes_))
      datos = pd.DataFrame({"pais": ["Colombia", "Mexico"]})
      print(pd.get_dummies(datos))

      print(pd.DataFrame(codificador.transform(datos[["pais"]]).todense(), columns = etiquetador.classes_))

    • @tomasbinder6882
      @tomasbinder6882 2 ปีที่แล้ว

      @@CodigoMaquina Excelente, probaré el código. Muchas gracias por tu respuesta!

  • @raquelevelin6844
    @raquelevelin6844 ปีที่แล้ว +1

    Excelente explicación, en el caso de una vairiable categorica de dos valores posibles ( por ejemplo si sexo ) , seria correcto una sola columna con 0 ' s y 1 's , o deberia aplicar esta codificacion?

    • @CodigoMaquina
      @CodigoMaquina  ปีที่แล้ว +1

      Muchas gracias por tu comentario y por la pregunta. Al respecto, cuando se tienen solo dos categorías, tener una sola columna ya sea con un cero o con uno es lo correcto. Gracias por seguir el contenido del canal :)

  • @tomasscopelliti9362
    @tomasscopelliti9362 ปีที่แล้ว +1

    Buen video octavio! Como siempre. Una consulta, si tengo 13 variables de las cuales tienen valores de A,B y C, si lo reemplazo por 0, 1 y 2 generaría sesgo? Muchas gracias!

    • @CodigoMaquina
      @CodigoMaquina  ปีที่แล้ว

      Hola @tomasscopelliti9362 gracias por la pregunta. Al respecto, todo depende, si esos valores (A, B y C) no tienen orden y/o la distancia entre ellos no es equidistante, entonces, sí se estaría metiendo ruido. En el caso general, esas condiciones no se cumplen, sin embargo, cuando se cumplen, es muy conveniente aplicarlas. Por favor échale un ojo a un video que tenemos al respecto sobre cómo tratar datos categóricos ORDINALES (que de hecho complementa este video). Aquí va el vínculo: th-cam.com/video/KUEsLv8EaVY/w-d-xo.html

  • @nettogrowthpartners9567
    @nettogrowthpartners9567 ปีที่แล้ว +1

    Octavio, intento hacer dos columnas al mismo tiempo ['nombre', 'pais'] pero me dice que los arrays tienen que tener la misma longitud, se puede hacer varias features a la vez? (aclaración, me doy cuenta que es inservible codificar 'nombre', solo es para probar, por otro lado, lo hice por separado y por supuesto funciona). Gracias desde ya! Un abrazo desde Salta, Argentina.

    • @CodigoMaquina
      @CodigoMaquina  ปีที่แล้ว

      Gracias por seguir el contenido del canal y por la pregunta. Al respecto, te comento que OneHotEncoder está hecho para trabajar con una columna, sin embargo, se puede automatizar la transformación de múltiples columnas utilizando una clase llamada make_column_transformer. Espero que el tip ayude un poco. Saludos desde la Ciudad de México :)

  • @guidomarquez8973
    @guidomarquez8973 ปีที่แล้ว +1

    Excelente video!! Me surgió una duda. Si tenemos ese mismo banco en mas de 100 sedes alrededor del mundo, se agregarían 100 nuevas columnas. Esto es practico? que se pude hacer en ese caso?

    • @CodigoMaquina
      @CodigoMaquina  ปีที่แล้ว +1

      Guido gracias por tus comentarios y preguntas. Efectivamente, cuando hay muchas categorias explota la cantidad de variables/columnas. De hecho esto nos lleva a la maldición de la dimensionalidad (favor de ver nuestro video sobre ese tema th-cam.com/video/nhgCwWGNDiM/w-d-xo.html). Dependiendo del contexto y siguiendo tu ejemplo, hay formas de darle vuelta, por ejemplo, haciendo análisis por regiones de sedes o modelos por sede. También hay estrategias como PCA para la reducción de las dimensiones de los datos (favor de ver nuestro video sobre ese tema th-cam.com/video/x-7BHjMA15M/w-d-xo.html). Espero mis comentarios ayuden un poco.

  • @jtello1653
    @jtello1653 2 ปีที่แล้ว +1

    Excelente video, pero me queda la duda, si además de país, quisiéramos incluir otra categorica como "estado civil", como se haría?
    Si introduzco:
    codificacion=...(DF[["país","estado_civil"]]) me dice después que las columnas no tienen las mismas dimensiones! Saludos

    • @CodigoMaquina
      @CodigoMaquina  2 ปีที่แล้ว

      Gracias por tu comentario y por la pregunta. ¿Podrías compartir tu código y datos para echarle un ojo?

  • @CarlosMoreno-vw4ir
    @CarlosMoreno-vw4ir 2 ปีที่แล้ว +1

    Excelente video, muchas gracias por el aporte!!!
    Es lo mismo si utilizamos pandas.get_dummies(dataframe['columna']) para crear columnas de valores unicos con 1 donde corresponda?

    • @deathmental98
      @deathmental98 2 ปีที่แล้ว +1

      Hola Carlos, es lo mismo, pero a diferencia de onehotencoding se elimina una columna, esto para evitar redundancia en el dataset y por supuesto evitar multicolinealidad

    • @CodigoMaquina
      @CodigoMaquina  2 ปีที่แล้ว

      Kevin muchas gracias por interactuar y dar respuesta a preguntas que se realizan en los videos. Conviertes la sección de comentarios en un lugar de aprendizaje para todos :)

    • @CodigoMaquina
      @CodigoMaquina  2 ปีที่แล้ว

      Gracias por la pregunta. La diferencia principal en funcionalidad, es que el OneHotEncoder mantiene el contexto, es decir el número de categorías que se codificaron cuando se usó el método fit_transform(). Con ese contexto cuando desees transformar más datos te puede avisar si los nuevos datos tienen una nueva categoría. Si tienes oportunidad, ejecuta el siguiente código para que veas un ejemplo:
      import pandas as pd
      from sklearn.preprocessing import OneHotEncoder, LabelEncoder
      codificador, etiquetador = OneHotEncoder(handle_unknown="error"), LabelEncoder()
      datos = pd.DataFrame({"pais": ["Mexico", "Ecuador", "Mexico", "Chile"]})
      print(pd.get_dummies(datos))
      etiquetador.fit_transform(datos["pais"])
      print(pd.DataFrame(codificador.fit_transform(datos[["pais"]]).todense(), columns = etiquetador.classes_))
      datos = pd.DataFrame({"pais": ["Colombia", "Mexico"]})
      print(pd.get_dummies(datos))
      print(pd.DataFrame(codificador.transform(datos[["pais"]]).todense(), columns = etiquetador.classes_))

  • @santiagolopezcarmona4871
    @santiagolopezcarmona4871 2 ปีที่แล้ว +1

    Una pregunta, como hago para guardar esta codificación realizada al momento de recibir data nueva. Es decir, si tengo un df con un pais diferente, lo ideal seria que todas las columnas sean 0, pero como hago para garantizar eso.

    • @CodigoMaquina
      @CodigoMaquina  2 ปีที่แล้ว

      Gracias por la pregunta. Para esos casos particulares, el constructor de OneHotEncoder permite indicar las categorías (estén o no disponibles en los datos). Por ejemplo, asumamos que dentro de nuestros países (es decir, categorías) tenemos un país no presente dígase "Uruguay", pero aún así deseamos incluirlo junto con las otras categorías, entonces, el código quedaría de la siguiente manera:
      codificador = OneHotEncoder(categories = [['Argentina', 'Bolivia', 'Chile', 'Colombia', 'Costa Rica', 'Ecuador', 'México', 'Perú', 'Uruguay']]).
      Espero ayude la respuesta :)

  • @katheaylas7042
    @katheaylas7042 2 ปีที่แล้ว +1

    profesor super bueno la explicacion , solo me quedo la duda , que hacemos ante datos como nombres o por ej. meses , tambien serian categoricos ? como se trataria este tipo de data. Gracias!

    • @CodigoMaquina
      @CodigoMaquina  2 ปีที่แล้ว +1

      Muchas gracias por tus comentarios y por la pregunta. El caso particular de 'features' temporales (por ejemplo, meses) es muy complejo. Depende enteramente del contexto, en el caso general (si es que eso existe), características temporales se plantean como series de tiempo y ahí se aplica toda una familia de técnicas para realizar pronósticos (por ejemplo, simple exponential smoothing o hasta redes neuronales recurrentes). No obstante, también podrían manejarse como datos categóricos, si la temporalidad no es relevante. Gracias por ver el canal :)

  • @mariafonseca4340
    @mariafonseca4340 ปีที่แล้ว +1

    Hola gracias por estos videos muy bien explicados, una duda si tengo 40 variables aun asi puedo usar el oneHot? Gracias

    • @CodigoMaquina
      @CodigoMaquina  ปีที่แล้ว

      María gracias por tus comentarios y por la pregunta. Una respuesta muy breve es: sí se puede utilizar oneHot con 40 o más variables categóricas. Sin embargo, esto lamentablemente te podría llevar a la maldición de la dimensionalidad (favor de ver th-cam.com/video/nhgCwWGNDiM/w-d-xo.html). También, dependiendo del contexto y si los datos son categóricos ordinales, en algunos caso se puede utilizar otro tipo de codificación (favor de ver th-cam.com/video/KUEsLv8EaVY/w-d-xo.html). Gracias por seguir el contenido del canal :)

  • @miguelangelavila7247
    @miguelangelavila7247 ปีที่แล้ว +1

    Hola Maquina, tienes material para analisis de texto, cuando hay muchos valores categoricos en cada columna?

    • @CodigoMaquina
      @CodigoMaquina  ปีที่แล้ว

      Estimado Miguel gracias por interactuar en el canal. Análisis de texto y en particular procesamiento de lenguaje natural, es un área ultra interesante y al momento no he subido ningún video sobre esa temática aunque eventualmente lo haré. De hecho, esa área me encanta :)

  • @rodrigobusta9249
    @rodrigobusta9249 ปีที่แล้ว +1

    Hola Profesor, consulta. Estoy haciendo el mismo ejercicio pero la data la estoy extrayendo de un archivo CSV. al momento de crear el nuevo dataframe y asignarlo a la variable NUEVAS_COLS, en los títulos no me aparecen los nombres, me aparecen solo los números. ¿ existe la forma de corregir ese problema?. muy buenos tus videos.
    saludos desde Chile.

    • @CodigoMaquina
      @CodigoMaquina  ปีที่แล้ว

      Gracias por ver el contenido del canal. Te comento que justo tenemos un video que podrían dar respuesta a tu problemática sobre cargar datos de CSV a DataFrames y poner nombres a las columnas. Aquí va el vínculo: th-cam.com/video/uGx0PHD6o9M/w-d-xo.html

  • @sofiacamachoruiz4655
    @sofiacamachoruiz4655 2 ปีที่แล้ว +1

    Hola! Como puedo imprimir cada una columnas numericas generadas??

    • @CodigoMaquina
      @CodigoMaquina  2 ปีที่แล้ว

      Gracias por la pregunta. Utilizando el contexto del video, si deseas imprimir exclusivamente las columnas numéricas del DataFrame 'datos' , es cuestión de indicar el rango de columnas a visualizar, que este caso es a partir de la tercera columna. El código es datos[datos.columns[3:]].
      Este tipo de manejo de los datos se realiza comúnmente con la librería de pandas. En caso de que sea de tu interés, aquí te dejo el vínculo a una lista de reproducción sobre el manejo de datos que ya tenemos en el canal: th-cam.com/play/PLat2DtY8K7YUFy8OwcwzcoicZjk4sqVZX.html