¿Conjuntos de datos desordenados? ¿Valores faltantes? missingno
proporciona un pequeño conjunto de herramientas de utilidades y visualizaciones de datos faltantes flexibles y fáciles de usar que le permiten obtener un resumen visual rápido de la integridad (o falta de integridad) de su conjunto de datos. Solo pip install missingno
para comenzar.
Este inicio rápido utiliza una muestra del conjunto de datos del conjunto de datos sobre colisiones de vehículos motorizados del Departamento de Policía de Nueva York.
import pandas as pd
collisions = pd . read_csv ( "https://raw.githubusercontent.com/ResidentMario/missingno-data/master/nyc_collision_factors.csv" )
matrix
La matriz de nulidad msno.matrix
es una visualización densa en datos que le permite seleccionar rápidamente patrones en la finalización de datos.
import missingno as msno
% matplotlib inline
msno . matrix ( collisions . sample ( 250 ))
A primera vista, la fecha, la hora, la distribución de las lesiones y el factor de contribución del primer vehículo parecen estar completamente detallados, mientras que la información geográfica parece mayormente completa, pero más irregular.
El minigráfico de la derecha resume la forma general de la integridad de los datos y señala las filas con la nulidad máxima y mínima en el conjunto de datos.
Esta visualización acomodará cómodamente hasta 50 variables etiquetadas. Más allá de ese rango, las etiquetas comienzan a superponerse o se vuelven ilegibles y, de forma predeterminada, las pantallas grandes las omiten.
Si está trabajando con datos de series temporales, puede especificar una periodicidad utilizando el parámetro de palabra clave freq
:
null_pattern = ( np . random . random ( 1000 ). reshape (( 50 , 20 )) > 0.5 ). astype ( bool )
null_pattern = pd . DataFrame ( null_pattern ). replace ({ False : None })
msno . matrix ( null_pattern . set_index ( pd . period_range ( '1/1/2011' , '2/1/2015' , freq = 'M' )) , freq = 'BQ' )
bar
msno.bar
es una visualización simple de nulidad por columna:
msno . bar ( collisions . sample ( 1000 ))
Puede cambiar a una escala logarítmica especificando log=True
. bar
proporciona la misma información que matrix
, pero en un formato más simple.
heatmap
El mapa de calor missingno
correlación mide la correlación de nulidad: con qué fuerza la presencia o ausencia de una variable afecta la presencia de otra:
msno . heatmap ( collisions )
En este ejemplo, parece que es menos probable que los informes que se presentan con una variable OFF STREET NAME
tengan datos geográficos completos.
La correlación de nulidad varía de -1
(si una variable aparece, la otra definitivamente no), a 0
(las variables que aparecen o no no tienen ningún efecto entre sí) y 1
(si una variable aparece, la otra definitivamente también lo hace).
El algoritmo exacto utilizado es:
import numpy as np
# df is a pandas.DataFrame instance
df = df . iloc [:, [ i for i , n in enumerate ( np . var ( df . isnull (), axis = 'rows' )) if n > 0 ]]
corr_mat = df . isnull (). corr ()
Las variables que siempre están llenas o siempre vacías no tienen una correlación significativa y, por lo tanto, se eliminan silenciosamente de la visualización; en este caso, por ejemplo, las columnas de fecha, hora y número de lesión, que están completamente llenas, no se incluyen.
Las entradas marcadas <1
o >-1
tienen una correlación que está cerca de ser exactamente negativa o positiva, pero aún no lo es del todo perfectamente. Esto indica que una pequeña cantidad de registros en el conjunto de datos son erróneos. Por ejemplo, en este conjunto de datos, la correlación entre VEHICLE CODE TYPE 3
y CONTRIBUTING FACTOR VEHICLE 3
es <1
, lo que indica que, contrariamente a nuestras expectativas, hay algunos registros que tienen uno u otro, pero no ambos. Estos casos requerirán una atención especial.
El mapa de calor funciona muy bien para detectar relaciones de integridad de datos entre pares de variables, pero su poder explicativo es limitado cuando se trata de relaciones más amplias y no tiene soporte particular para conjuntos de datos extremadamente grandes.
dendrogram
El dendrograma le permite correlacionar más completamente la finalización de variables, revelando tendencias más profundas que las visibles por pares en el mapa de calor de correlación:
msno . dendrogram ( collisions )
El dendrograma utiliza un algoritmo de agrupamiento jerárquico (cortesía de scipy
) para agrupar variables entre sí según su correlación de nulidad (medida en términos de distancia binaria). En cada paso del árbol, las variables se dividen según qué combinación minimiza la distancia de los grupos restantes. Cuanto más monótono es el conjunto de variables, más cerca está su distancia total de cero y más cerca está su distancia promedio (el eje y) de cero.
El algoritmo exacto utilizado es:
from scipy . cluster import hierarchy
import numpy as np
# df is a pandas.DataFrame instance
x = np . transpose ( df . isnull (). astype ( int ). values )
z = hierarchy . linkage ( x , method )
Para interpretar este gráfico, léalo desde una perspectiva de arriba hacia abajo. Las hojas de un racimo que se unen a una distancia de cero predicen completamente la presencia de otra: una variable siempre puede estar vacía cuando otra está llena, o ambas pueden estar siempre llenas o ambas vacías, y así sucesivamente. En este ejemplo específico, el dendrograma une las variables que son necesarias y, por lo tanto, están presentes en cada registro.
Las hojas de los racimos que se dividen cerca de cero, pero no en ese punto, se predicen entre sí muy bien, aunque aún de manera imperfecta. Si su propia interpretación del conjunto de datos es que estas columnas en realidad coinciden o deberían coincidir entre sí en nulidad (por ejemplo, como deberían hacerlo CONTRIBUTING FACTOR VEHICLE 2
y VEHICLE TYPE CODE 2
), entonces la altura de la hoja del racimo le indica: en términos absolutos, la frecuencia con la que los registros "no coinciden" o se archivan incorrectamente; es decir, cuántos valores tendría que completar o eliminar, si así lo desea.
Al igual que con matrix
, en esta configuración solo se mostrarán cómodamente hasta 50 columnas etiquetadas. Sin embargo, el dendrogram
maneja de manera más elegante conjuntos de datos extremadamente grandes simplemente cambiando a una configuración horizontal.
Para obtener detalles de configuración más avanzados para sus gráficos, consulte el archivo CONFIGURATION.md
en este repositorio.
Para ideas sobre características o informes de errores, consulte Problemas. Si está interesado en contribuir a esta biblioteca, consulte los detalles sobre cómo hacerlo en el archivo CONTRIBUTING.md
de este repositorio. Si lo hace, tenga en cuenta que missingno
se encuentra actualmente en estado de mantenimiento, por lo que, si bien las correcciones de errores son bienvenidas, es poco probable que revise o obtenga nuevas funciones importantes de la biblioteca.