Це відео не доступне.
Перепрошуємо.
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
⭐ 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
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.
Arturo muchas gracias por tus comentarios. La mejor de las suertes en tu formación :)
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.!
Paula muchas gracias por tus comentarios y unas grandes felicitaciones por la determinación que tienes para construir tu carrera con estos temas.
Felicitaciones por los videos, son de los mejores explicados, saludos desde Chile
@jorgeenriquemenesesmendoza7268 muchas gracias por tu comentario y un muy feliz año!!!
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
Gracias por subir esta serie de videos. Excelente información.
Saludos desde Argentina.
¡Muchas gracias por tus comentarios! Saludos desde México
Excelente explicación! muchas gracias Octavio!!!
Es un placer. Gracias por seguir el contenido del canal :)
Gracias Maestro Octavio!!!! Mas que excelente su explicación!!
Te agradezco mucho tus comentarios :)
Cogido para renombrar las columnas:
# Renombrar columnas
datos.columns = [str(col).strip("()").strip("',").title() for col in datos.columns]
datos
Naren gracias por complementar la información. Comentarios así añaden valor.
muchas gracias!, bien explicado
Muchas gracias por tu comentario y por ver el canal :)
muy buenos los videos, te felicito
@brunorobertoarganaraz3896 feliz año!!!
Muchas gracias por el video.!! Saludos..
Gracias por escribirnos y por ver el canal :)
buenísimo video, gracias!
Gracias por interactuar en el canal :)
Excelente explicacion habia visto varios videos explicando one hot encoder y lo que hacian era confundirme
Gracias por comentar y por seguir el contenido del canal :)
Genial
Gracias por interactuar en el canal y seguir su contenido :)
Hola gracias por el curso para codificar datos tengo una consulta en caso tenga una columna de fechas como mas codifico ?
gracias ingeniero
Es un placer :)
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?
Hola, la duda que me quedo, es cual es la diferencia entre usar la columna como category y usarla como oneHot.
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 :(
Gracias buen video y explicación, no hay manera para que a las columnas nuevas no le salga el paréntesis y la coma ??
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_))
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ú.
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 :)
@@CodigoMaquina Muchas gracias, me quedó muy claro.
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.
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 :)
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!
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
Gracias por el excelente video. Me surgió una duda, ¿la codificación one-hot es igual get_dummies de pandas? ¿O tienen diferencias?
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_))
@@CodigoMaquina Excelente, probaré el código. Muchas gracias por tu respuesta!
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
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 :)
@@CodigoMaquina Que tal si haces primero un pareto sobre esa columna, eso reduciría las categorías.
@@VictorHugoAngel Ciertamente, un análisis así podría ayudar. Gracias por compartir :)
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?
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 :)
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?
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
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 :)
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_))
Hola gracias por estos videos muy bien explicados, una duda si tengo 40 variables aun asi puedo usar el oneHot? Gracias
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 :)
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.
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 :)
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!
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 :)
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?
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.
Hola Maquina, tienes material para analisis de texto, cuando hay muchos valores categoricos en cada columna?
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 :)
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
Gracias por tu comentario y por la pregunta. ¿Podrías compartir tu código y datos para echarle un ojo?
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.
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
Hola! Como puedo imprimir cada una columnas numericas generadas??
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