En este tutorial veremos cómo usar la librería «missingno» de Python para de forma rápida visualizar el comportamiento de los datos faltantes en un set de datos.
Si estás suscrito a la Academia Online puedes acceder al enlace de descarga del set de datos y el código fuente de este proyecto.
Comencemos entendiendo por qué es importante determinar si hay o no datos faltantes en nuestros sets de datos.
La detección de datos faltantes
La detección de datos faltantes (así como su posterior manejo) es una etapa clave en cualquier proyecto de Ciencia de Datos y Machine Learning.
Y lo que ocurre es que nuestros datos no son ideales e inevitablemente cuando trabajamos cuando un set de datos real es muy probable que haya celdas con datos faltantes. Y esto puede ser debido a que existen errores durante el almacenamiento de los datos o porque el dispositivo usado para la adquisición dejó de funcionar repentinamente o incluso debido a errores humanos.
Así que antes de abordar cualquier fase de nuestro proyecto (bien sea el Análisis Exploratorio de los Datos o, por ejemplo, la construcción de un modelo de Machine Learning) debemos garantizar que nuestros datos están completos.
Y un primer paso para completar nuestros datos es precisamente la detección de estos valores faltantes.
Y para realizar esta detección podemos usar herramientas propias disponibles por ejemplo en librerías como Pandas o podemos usar herramientas gráficas que fácilmente, con muy pocas líneas de código, nos permitan determinar si nuestros datos están completos o no o incluso determinar el comportamiento que puedan llegar a tener nuestros datos faltantes en caso de que estos estén presentes en nuestro set de datos.
En este tutorial veremos cómo usar «missingno», una herramienta que nos permite precisamente visualizar los datos faltantes en un set de datos.
El set de datos
Para este tutorial usaremos el set de datos «fallos.csv» que contiene el registro histórico de los fallos que han presentado diferentes máquinas usadas en una industria y que están asociados a diferentes variables que miden su desempeño a lo largo del tiempo. Este set de datos, junto con el código fuente de este tutorial, se puede descargar en los enlaces que se encuentran al final de este tutorial.
La idea es usar la librería «missingno» para ver el comportamiento de los datos faltantes en este dataset.
Así que comencemos leyendo y entendiendo el contenido de este set de datos. Importemos la librería Pandas y realicemos la lectura usando el método «read_csv»:
import pandas as pd
df = pd.read_csv('fallos.csv')
df
Al ejecutar el código anterior obtenemos un resultado similar a este:

Veamos algunas características generales del set de datos:
- Tiene un total de 142193 registros (filas) y de 24 columnas (o variables)
- Las primeras 23 columnas (desde «Fecha» hasta «Riesgo») son lo que llamaríamos las variables predictoras, mientras que la columna «Fallara_manana» es lo que conocemos como la variable a predecir. Si quisiéramos construir un modelo de Machine Learning para predecir la probabilidad de fallo, las variables predictoras serían precisamente la entrada a dicho modelo y la predicción sería precisamente la columna «Fallara_manana»
- Las columnas predictoras contienen datos como la fecha en la que fue tomado el registro («Fecha»), así como variables propias de la máquina sobre la cual se realizaron las mediciones («Temp_min», «Temp_max», … «Param5_3pm», etc.). Los valores de dichas variables permitirían predecir la probabilidad de fallo de la máquina.
Así que ya tenemos una idea general de las características de este set de datos.
Ahora bien, cuando tenemos datos faltantes generalmente estos serán representados con el tipo de dato «NaN» (de Not a Number) en Pandas. Así que si queremos detectar estos datos faltantes podríamos simplemente usar herramientas ya disponibles en Pandas, como por ejemplo el uso de los métodos «isna()» y «sum()» para detectar estos valores «NaN» y realizar la suma (por columnas) de dichos valores:
df.isna().sum()
Al ejecutar el código anterior obtenemos este resultado:
Fecha 0
Ubicación 0
Temp_min 637
Temp_max 322
Fuga 1406
Evaporación 60843
Electricidad 67816
Param1_dir 9330
Param1_vel 9270
Param2_9am 10013
Param2_3pm 3778
Param3_9am 1348
Param_3pm 2630
Param4_9am 1774
Param4_3pm 3610
Param5_9am 14014
Param5_3pm 13981
Param6_9am 53657
Param6_3pm 57094
Param7_9am 904
Param7_3pm 2726
Fallo_hoy 1406
Riesgo 0
Fallara_manana 0
dtype: int64
Lo anterior nos indica que por ejemplo las columnas «Fecha», «Ubicación», «Riesgo» y «Fallara_manana» no contienen datos faltantes (pues la suma de los datos tipo «NaN» es exactamente igual a cero), mientras que las columnas restantes contienen un número variable de datos faltantes.
A pesar de que esta herramienta que acabamos de usar nos permite detectar fácilmente los valores faltantes no nos permite entender su comportamiento.
Por ejemplo, puede ser que los datos faltantes en una columna correspondan a las mismas celdas faltantes en otra columna (es decir puede ser que dos o más columnas presenten el mismo patrón de valores faltantes) o puede ser que al ver estos patrones encontremos que los datos faltantes entre una y otra columna no están relacionados.
Y determinar este comportamiento es clave porque nos permitirá posteriormente decidir qué estrategia de manejo de datos faltantes podríamos usar.
Así que acá es donde entra en juego la librería «missingno» que nos permite visualizar precisamente estos patrones en los datos faltantes de nuestro dataset. Veamos entonces cómo usar esta librería.
Contenido exclusivo para suscriptores
Si eres suscriptor accede en este enlace ó suscríbete a la Academia Online y accede a todo el contenido (lecciones en video, código fuente, sets de datos y descargas) de todos los cursos, proyectos y tutoriales.
Conclusión
Bien, como acabamos de ver la librería «missingno» es una herramienta muy útil en la detección y visualización de datos faltantes en nuestros sets de datos.
Con esta herramienta podemos visualizar el comportamiento de los datos faltantes de diferentes formas, bien sea analizando cada variable de manera individual (usando los métodos «matrix()» o «bar()) o por pares de variables (usando «heatmap()»). Y determnar estos patrones resulta clave para posteriormente decidir cuál técnica de manejo de datos faltantes podemos implementar en nuestro set de datos.
Por ejemplo, tras analizar estos patrones podríamos identificar posibles errores sistemáticos en la detección de datos y de esta forma implementar la técnica de manejo más adecuada, que como lo mencioné anteriormente es una fase clave en cualquier proyecto de Ciencia de Datos y Machine Learning.
Y recuerda que si eres suscriptor y tienes alguna duda sobre este tutorial me puedes contactar directamente a través del formulario que encontrarás en la Intranet.
