Limpieza y preprocesamiento de datos para principiantes con código en Python

La limpieza y preparación de datos es el primer paso más crítico en cualquier proyecto de Inteligencia Artificial y Machine Learning. Es normal que se dedique la mayor parte del tiempo, hasta un 70%, en la limpieza de los datos.

En esta publicación te guiaré a través de estos pasos iniciales de limpieza y preprocesamiento de datos en Python, comenzando por la importación de las librerías más populares hasta la codificación real de las funciones.

La limpieza de datos es el proceso de detectar y corregir o eliminar registros corruptos o inexactos de un conjunto de registros, tabla o base de datos y se refiere a la identificación de partes incompletas, incorrectas, inexactas o irrelevantes de los datos, para su posterior sustitución, modificación o eliminación de los datos sucios o poco precisos.

Paso 1. Cargar el conjunto de datos

Importación de las librerías

Lo primero que debes hacer es importar las librerías para el preprocesamiento de datos. Hay muchas librerías disponibles, pero las más populares e importantes para trabajar con datos son NumPy, Matplotlib y Pandas.

NumPy es la librería usada para todas las cosas de matemáticas. Pandas es la mejor herramienta disponible para importar y gestionar conjuntos de datos.  Matplotlib es la librería para hacer gráficos.

Para implementar las librerías puedes utilizar un alias, esta es la forma común de hacerlo. Para cumplir con este paso solamente tienes que escribir lo siguiente en tu código:

Limpieza de datos 1

Con este simple código dentro de tu programa ya puedes utilizar las librerías dentro de tu proyecto.

Cargar los datos en Pandas

Una vez que hayas descargado tu conjunto de datos y lo hayas nombrado como un archivo.csv, deberás cargarlo en un DataFrame de Pandas para explorarlo y realizar algunas tareas básicas de limpieza, eliminando la información que no necesitas y que hará que el procesamiento de datos sea más lento.

Por lo general, estas tareas incluyen:

Eliminar la primera línea, en ocasiones contiene texto extraño en lugar de los títulos de las columnas. Este texto evita que el conjunto de datos sea analizado correctamente por la librería de Pandas. Para eliminar esta información puedes implementar este código:

Limpieza de datos 2

Eliminar columnas con explicaciones de texto que no necesitaremos, columnas de url y otras columnas innecesarias. El código para cumplir con esto es el siguiente:

Limpieza de datos 3

En donde se encuentra “url” puedes colocar entre comillas la columna que quieres eliminar.

Eliminar todas las columnas con un solo valor, o con más de un 50% de valores faltantes, esto lo hacemos para trabajar más rápido. Toma en cuenta hacer esto, si el conjunto de datos es lo suficientemente grande como para que siga siendo significativo. El código que debes implementar es el siguiente:

Limpieza de datos 4

 También es una buena práctica nombrar el conjunto de datos procesado, de forma diferente para mantenerlo separado de los datos sin procesar. Esto asegura que todavía tienes los datos originales en caso de que necesites volver a ellos.

Paso 2. Exploración del conjunto de datos

Compresión de los datos

Ahora ya tienes los datos con los que vas a trabajar, aunque se ha hecho varias modificaciones básicas, aún así deberías dedicar algo de tiempo a explorarlos y comprender qué función representa cada columna. Esta revisión manual del conjunto de datos es importante para evitar errores en el análisis de los datos y en el proceso de modelado.

Para facilitar el proceso, puedes crear un DataFrame con los nombres de las columnas, los tipos de datos, los valores de la primera fila y la descripción del diccionario de datos. A medida que exploras las características, puedes prestar atención a cualquier columna que:

  • este mal formateada,
  • requiere más datos o mucho preprocesamiento para convertirse en una característica útil, o
  • contiene información redundante,

ya que estas cosas pueden dañar el análisis si se manejan incorrectamente.

También debes prestar atención a la fuga de datos, que puede hacer que el modelo se ajuste demasiado. Esto se debe a que el modelo también aprenderá de características que estarán disponibles cuando las utilizaremos para hacer predicciones. Necesitamos asegurarnos de que nuestro modelo esté capacitado utilizando solo los datos que tendría en el momento en el que realicemos una predicción.

Decidir sobre una columna objetivo

Con un conjunto de datos procesados y explorados, es necesario crear una matriz de variables independientes y un vector de variables dependientes. En primer lugar, debes decidir qué columna utilizar como columna de destino para el modelado en función de la pregunta que deseas responder.

Por ejemplo, si quieres predecir el desarrollo del cáncer, o la posibilidad de que el crédito sea aprobado, necesitas encontrar una columna con el estado de la enfermedad o si  préstamo se concede o no, estas serán las columnas destinos para cada problema.

Por ejemplo, si la columna de destino es la última, puedes crear la matriz de variables independientes escribiendo el siguiente código:

Limpieza de datos 5

Los primeros dos puntos significan que queremos tomar todas las filas de nuestro conjunto de dat, mientras que :-1 significa que queremos tomar todas las columnas de datos excepto la última. El método .values al final significa que queremos todos los valores.

Para tener el vector de variables dependientes con solo los datos de la última columna, puedes escribir:

Limpieza de datos 6

Paso 3. Preparación de las características para Machine Learning

Finalmente, es hora de hacer el trabajo preparatorio para limpiar las características de los algoritmos de Machine Learning. Para limpiar el conjunto de datos, es necesario manejar los valores que faltan y las características categóricas, porque la matemática subyacente en la mayoría de los modelos de Machine Learning asume que los datos son numéricos y no contienes valores que faltan. Además, la librería Scikit Learn devuelve un error si se intenta entrenar un modelo como la Regresión Lineal y la Regresión Logística utilizando datos que contienen valores perdidos o no numéricos.

Manejar valores faltantes

La falta de datos es quizás el rasgo más común de los datos impuros. Estos valores suelen tomar la forma de NaN o None.

Hay varias causas de que falten valores, a veces faltan valores porque no existen, o porque la recopilación de datos es inadecuada o porque la entrada de datos es deficiente. Por ejemplo, si alguien es menor de edad, y la pregunta se aplica a personas mayores de 18 año, entonces la pregunta tendrá un valor que falta. En tales casos, sería un error rellenar un valor para esa pregunta.

Hay varias maneras de rellenar los valores que faltan:

  • Puedes eliminar las líneas con los datos si el conjunto de datos es lo suficientemente grande y el porcentaje de valores perdidos es alto, más del 50%, por ejemplo.
  • Puedes rellenar todas las variables nulas con 0, si se trata de valor numéricos.
  • Puedes rellenar los valores perdidos con la media, media o el valor más frecuente de la columna.
  • También puedes decidir rellenar los valores que faltan con cualquier valor que venga directamente después en la misma columna.

Estas decisiones dependen del tipo de datos, de lo que se quiera hacer con ellos y de la causa de la falta de valores. En realidad, el hecho de que algo sea popular no significa necesariamente que sea la elección correcta. La estrategia más común es utilizar el valor medio, pero dependiendo de los datos, se puede llegar a un enfoque totalmente diferente.

Manejo de datos categóricos

Machine Learning solo utiliza valores numéricos, tipo de datos flotantes o enteros. Sin embargo, los conjuntos de datos a menudo contienen el objeto como tipo de datos, por lo tanto se hace necesario transformarlo en numérico. En la mayoría de los casos, los valores categóricos son discretos y puedes ser codificados como variables ficticias, asignando un número para cada categoría. La forma más sencilla es usar One Hot Encoder, especificando el índice de la columna en la que quieres trabajar. El código sería como sigue:

Limpieza de datos 7

Tratamiento de fechas y horas

Un tipo específico de inconsistencia de datos es el formato de fechas, dd/mm/aa y mm/dd/aa en las mismas columnas. Es posible que sus valores de fecha no estén en el tipo de datos correcto, y esto no te permitirá realizar manipulaciones de manera efectiva y obtener información de las mismas. Esta vez puedes utilizar el paquete datetime para fija el tipo de fecha.

Escala y normalización

La escala es importante si necesitas especificar que una modificación en una cantidad no es igual a otra modificación en otra. Con la ayuda del escalado, te aseguras de que aunque algunas características son grandes no se usarán como predictor principal. Por ejemplo, si se utiliza la edad y el salario de una persona en la predicción, algunos algoritmos prestarán más atención al salario porque es más grande, lo que no tiene ningún sentido.

La normalización implica transformar o convertir el conjunto de datos en una distribución normal. Algunos algoritmos como Máquinas Vectores de Soporte convergen mucho más rápido en los datos normalizados, por lo que tiene sentido normalizar los datos para obtener mejores resultados.

Hay muchas maneras de realizar el escalado de características. En pocas palabras, ponemos todas nuestras características en la misma escala para que ninguna esté dominada por otra. Por ejemplo, puedes utilizar la clase StandardScaler del paquete sklearn.preprocessing para ajustar y transformar el conjunto de datos:

Limpieza de datos 8

No es necesario utilizar fit a los datos de prueba solamente necesitas aplicar la transformación.

Guardar en CSV

Para estar Seguro de que todavía tienes los datos en bruto, es una buena práctica almacenar la salida final de cada sección o etapa del flujo de trabajo en un archive csv separado. De esta manera, podrás realizar cambios en el flujo de procesamiento de datos sin tener que volver a calcularlo todo.

Como hicimos anteriormente, puedes almacenar el DataFrame como un .csv usando las función de Pandas to_csv(), como se muestra a continuación:

Limpieza de datos 9

Estos son solo los pasos básicos necesarios para trabajar con un gran conjunto de datos, limpiando y preparando los datos para cualquier proyectos de Machine Learning. Existen otras formas de limpieza de datos que te pueden resultar útiles. Pero con esto quiero que entiendas que es importante organizar y ordenar adecuadamente los datos antes de la formulación de cualquier modelo de Machine Learning. Unos datos mejores y más limpios superan a los mejores algoritmos. Si utilizas un algoritmo muy simple junto con datos limpios los resultados son impresionantes.

Recuerda que si aún te cuesta todo lo explicado acá tengo a tu disposición una plantilla desarrollada en Python que puedes utilizar para la limpieza y preprocesamiento de los datos y de esta forma poder comenzar con tus proyectos de Machine Learning. La forma de cómo utilizarla y como se realiza cada uno de los códigos esta explicado en video, por lo que te será muy fácil implementarla, para obtener más información sobre la plantilla  puedes ingresar a este llink.

Con esto finalizamos la explicación. Ya una base para realizar la limpieza y preprocesamiento de los datos, por lo tanto te dejo la siguiente pregunta, ¿Cuáles de las siguientes afirmaciones crees tú que sea cierta?

Opción 1: La limpieza y preprocesamiento de los datos se realiza después que ya se tenga el modelo de Machine Learning construido

Respuesta Incorrecta. La limpieza y preprocesamiento de los datos es el primer paso en cualquier proyecto de Machine Learning

Opción 2: Los algoritmos de Machine Learning aceptan cualquier tipo de datos, desde número hasta del tipo objeto.

Respuesta Incorrecta. Los algoritmos de Machine Learning solamente aceptan datos numéricos, del tipo entero y flotante.

Opción 3: En caso de que se tengan datos perdidos se puede rellenar esta información con la media de los datos

Respuesta Correcta.

Deja una respuesta

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