¿Qué hacer cuando hay valores faltantes en los datos?

Una de las tareas más tediosas cuando empezamos a trabajar con Machine Learning y que regularmente se omiten en los tutoriales es la limpieza de los datos.

Relacionado a esto, IBM publicó un artículo donde mencionan que podemos pasar hasta el 80% de nuestro tiempo limpiando datos convirtiéndose en una tarea crucial para el aprendizaje.

Encontrarnos con datos faltantes es más común de lo que se menciona y es importante saber que hacer cuándo esto sucede y las diferentes maneras de solucionarlo, en este post te muestro algunos ejemplos utilizando Python y Pandas.

Primero es necesario definir qué es lo que se considera como dato faltante, y esto pueden ser representado en los datos como N/A, ?, 0 y celda vacía.

Para ejemplificar el proceso de limpieza en particular trabajar con datos faltantes he utilizado un conjunto de datos de la NFL del 2015. En rojo he marcado algunos de los campos vacíos que en este caso son representados con NaN.

Sin embargo hay una mejor manera de saber cuántos datos vacíos tenemos y en qué columnas, usando el método isnull() y posteriormente sumando cuántas veces es vacío. Count es la variable que guarda el resultado y posteriormente se muestran los primeros 20 resultados en dónde Date, GameID, Drive etc no tienen faltantes y FirstDown, posteam, down, etc si tienen datos faltantes.

Una vez que detectamos los valores faltantes podemos hacer lo siguiente:

  1. Eliminar los valores faltantes
  2. Reemplazar los valores
    • reemplazarlo con un promedio
    • reemplazarlo por frecuencia
    • reemplazarlo en función de otros criterios
  3. Dejarlos y trabajar con los datos faltantes

El punto 3 en lo personal no lo recomiendo a menos que el conjunto de datos sea reducido y no tengamos mucho con qué trabajar.

Si queremos aplicar el punto 1, es decir eliminar los datos faltantes tenemos el método dropna() que tiene dos maneras de aplicarlo, ya sea eliminar columnas completas (axis = 1) ó eliminar filas enteras (axis = 0)

En el código anterior me enfoco a eliminar las filas con datos faltantes de la columna time y posteriormente vuelvo a desplegar el resultado, pasando de 188 filas de datos faltantes a no tener.

Debemos tener cuidado al utilizar la primera técnica debido a que puede afectar el análisis final, esto dependerá del correcto análisis del problema y considerar si son mínimas las filas a eliminar. Siguiendo con el ejemplo en lo personal no eliminaría los faltantes de la columna down debido a que tiene 54,030 valores nulos.

En cuanto al punto 2 podemos llenar el valor de N/A con ceros de la siguiente manera.

Y en particular uno de los métodos más usados es reemplazando los faltantes con el promedio de la columna seleccionada, para este ejemplo es down y el resultado es 2.0

Cabe mencionar que este proceso es exclusivo de valores numéricos, no hay manera de obtener el promedio de un caracter como es el caso del nombre de los equipos. Sin embargo podrían reemplazarse por el número 0 o desconocido.

Es importante realizar un análisis minucioso de los datos y pensar si el eliminar, reemplazar con vacíos, promedios ó algún otro criterio es beneficioso o perjudicial para nuestros datos.

Si tienes algún comentario o mejora de esta publicación te agradezco me lo hagas saber.

2 Comments

  1. SEO Affiliate enero 30, 2020 at 1:24 am

    Awesome post! Keep up the great work! 🙂

    Reply
    1. Yesi Days - Site Author febrero 7, 2020 at 12:08 pm

      Thanks!

      Reply

Leave A Comment

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