¿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 en ocasiones no se explica es la limpieza de los datos.

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 común en los conjuntos de datos y es importante saber qué hacer cuando esto sucede y sus 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.

datos

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.

pandas sum

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

  1. Eliminar los valores faltantes
  2. Reemplazar los valores
    • Con un promedio
    • Por frecuencia
    • 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)

pandas dropna

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.

pandas fillna

Uno de los métodos más utilizados es reemplazando los datos faltantes con el promedio de la columna seleccionada. Para este ejemplo es down y el resultado es 2.0

pandas median

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.

1 Comment

  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 *