Це відео не доступне.
Перепрошуємо.

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

Поділитися
Вставка
  • Опубліковано 14 сер 2024
  • Para citar este recurso educativo utiliza la siguiente referencia:
    Gutiérrez-García, J.O. [Código Máquina]. (2021, 12 de Septiembre). Codifica datos categóricos nominales para Machine Learning y Ciencia de Datos con Python [Video]. UA-cam. [Incluye aquí la URL del video].
    ********************************************
    Para guiar tu aprendizaje, en este vínculo ( • Curso de Inteligencia ... ) se encuentra una guía secuencial para aprender:
    1. Programación Básica con Python;
    2. Manejo de Datos;
    3. Visualización de Datos;
    4. Análisis de Datos; y
    5. Aprendizaje de Máquina y Ciencia de Datos.
    ********************************************
    En este video se explica la problemática de los datos categóricos nominales dentro del contexto de técnicas de aprendizaje de máquina que sólo trabajan con datos numéricos. Además, se explica el error más común que se comete al preparar datos categóricos nominales, y a partir de ahí, se explica cómo codificarlos adecuadamente utilizando el método One-Hot de la librería Scikit-Learn de Python.
    Índice del Video:
    0:00 Problemática de las categorías
    0:57 Datos categóricos y Contexto
    1:48 Conversión de object a category
    4:00 Qué no hacer con datos categóricos
    7:10 Codificación One-Hot
    ⭐ Apoya a Código Máquina dando un Like, Comentando, Compartiendo o con un Super Gracias.
    ⭐ De la co-fundadora de Código Máquina, productos de cosmética natural SINHAKI:
    www.amazon.com...
    El código del video está disponible en GitHub github.com/Cod...
    #CienciaDeDatos #AprendizajeDeMaquina #DataScience #MachineLearning #ScikitLearn #python

КОМЕНТАРІ • 72

  • @CodigoMaquina
    @CodigoMaquina  2 роки тому +1

    ⭐ Apoya a Código Máquina dando un Like, Comentando, Compartiendo o con un Super Gracias.
    ⭐ De la co-fundadora de Código Máquina, productos de cosmética natural SINHAKI:
    www.amazon.com.mx/stores/sinHaki/page/1BD34FBC-C0F9-44F5-AC69-520634334C61?ref_=ast_bln

  • @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.

  • @jorgeenriquemenesesmendoza7268
    @jorgeenriquemenesesmendoza7268 9 місяців тому +1

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

    • @CodigoMaquina
      @CodigoMaquina  7 місяців тому

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

  • @raulrodriguez7875
    @raulrodriguez7875 7 місяців тому

    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

  • @demianpalumbo6874
    @demianpalumbo6874 2 роки тому +1

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

    • @CodigoMaquina
      @CodigoMaquina  2 роки тому

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

  • @nettogrowthpartners9567
    @nettogrowthpartners9567 Рік тому +1

    Excelente explicación! muchas gracias Octavio!!!

    • @CodigoMaquina
      @CodigoMaquina  Рік тому

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

  • @rockophill3934
    @rockophill3934 Рік тому +1

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

  • @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.

  • @lizethfiorelaquispe1827
    @lizethfiorelaquispe1827 2 роки тому +1

    muchas gracias!, bien explicado

    • @CodigoMaquina
      @CodigoMaquina  2 роки тому

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

  • @brunorobertoarganaraz3896
    @brunorobertoarganaraz3896 9 місяців тому +1

    muy buenos los videos, te felicito

    • @CodigoMaquina
      @CodigoMaquina  7 місяців тому

      @brunorobertoarganaraz3896 feliz año!!!

  • @aspirezr
    @aspirezr 2 роки тому +1

    Muchas gracias por el video.!! Saludos..

    • @CodigoMaquina
      @CodigoMaquina  2 роки тому

      Gracias por escribirnos y por ver el canal :)

  • @mberrios1956
    @mberrios1956 2 роки тому +1

    buenísimo video, gracias!

    • @CodigoMaquina
      @CodigoMaquina  2 роки тому

      Gracias por interactuar en 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 :)

  • @IngenieriaEstructural7
    @IngenieriaEstructural7 Рік тому +1

    Genial

    • @CodigoMaquina
      @CodigoMaquina  Рік тому

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

  • @javierlandarivera8673
    @javierlandarivera8673 3 місяці тому

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

  • @gogomac
    @gogomac 2 роки тому +1

    gracias ingeniero

  • @danielsandovalsanchez3296
    @danielsandovalsanchez3296 3 місяці тому

    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?

  • @megatronixx
    @megatronixx 4 місяці тому

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

  • @natanaelmunoz5098
    @natanaelmunoz5098 3 місяці тому

    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 :(

  • @joseleonardosanchezvasquez1514

    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  Рік тому

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

  • @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.

  • @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 :)

  • @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: ua-cam.com/video/KUEsLv8EaVY/v-deo.html

  • @tomasbinder6882
    @tomasbinder6882 Рік тому +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  Рік тому +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 Рік тому

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

  • @marlondavidarangoabella1942
    @marlondavidarangoabella1942 2 роки тому +3

    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 ua-cam.com/video/nhgCwWGNDiM/v-deo.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 :)

  • @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 :)

  • @CarlosMoreno-vw4ir
    @CarlosMoreno-vw4ir Рік тому +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 Рік тому +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  Рік тому

      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  Рік тому

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

  • @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 ua-cam.com/video/nhgCwWGNDiM/v-deo.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 ua-cam.com/video/KUEsLv8EaVY/v-deo.html). Gracias por seguir el contenido del canal :)

  • @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 :)

  • @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 :)

  • @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 ua-cam.com/video/nhgCwWGNDiM/v-deo.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 ua-cam.com/video/x-7BHjMA15M/v-deo.html). Espero mis comentarios ayuden un poco.

  • @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 :)

  • @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?

  • @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: ua-cam.com/video/uGx0PHD6o9M/v-deo.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: ua-cam.com/play/PLat2DtY8K7YUFy8OwcwzcoicZjk4sqVZX.html