Conjuntos de dados bagunçados? Valores faltando? missingno
fornece um pequeno conjunto de ferramentas de visualizações e utilitários de dados ausentes flexíveis e fáceis de usar que permitem obter um rápido resumo visual da integridade (ou falta dela) de seu conjunto de dados. Basta pip install missingno
para começar.
Este início rápido usa uma amostra do conjunto de dados NYPD Motor Vehicle Collisions Dataset.
import pandas as pd
collisions = pd . read_csv ( "https://raw.githubusercontent.com/ResidentMario/missingno-data/master/nyc_collision_factors.csv" )
matrix
A matriz de nulidade msno.matrix
é uma exibição densa de dados que permite selecionar rapidamente padrões visuais na conclusão dos dados.
import missingno as msno
% matplotlib inline
msno . matrix ( collisions . sample ( 250 ))
À primeira vista, a data, a hora, a distribuição das lesões e o fator de contribuição do primeiro veículo parecem estar completamente preenchidos, enquanto a informação geográfica parece na sua maioria completa, mas mais pontual.
O minigráfico à direita resume a forma geral da integridade dos dados e aponta as linhas com a nulidade máxima e mínima no conjunto de dados.
Esta visualização acomodará confortavelmente até 50 variáveis rotuladas. Além desse intervalo, os rótulos começam a se sobrepor ou a se tornar ilegíveis e, por padrão, telas grandes os omitem.
Se estiver trabalhando com dados de série temporal, você poderá especificar uma periodicidade usando o parâmetro de palavra-chave 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
é uma visualização simples de nulidade por coluna:
msno . bar ( collisions . sample ( 1000 ))
Você pode mudar para uma escala logarítmica especificando log=True
. bar
fornece as mesmas informações que matrix
, mas em um formato mais simples.
heatmap
O mapa de calor de correlação missingno
mede a correlação de nulidade: quão fortemente a presença ou ausência de uma variável afeta a presença de outra:
msno . heatmap ( collisions )
Neste exemplo, parece que os relatórios preenchidos com uma variável OFF STREET NAME
têm menos probabilidade de conter dados geográficos completos.
A correlação de nulidade varia de -1
(se uma variável aparece, a outra definitivamente não aparece) a 0
(variáveis que aparecem ou não aparecem não têm efeito uma sobre a outra) a 1
(se uma variável aparece, a outra definitivamente também aparece).
O algoritmo exato usado é:
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 ()
Variáveis que estão sempre cheias ou sempre vazias não têm nenhuma correlação significativa e, portanto, são silenciosamente removidas da visualização – neste caso, por exemplo, as colunas de data e hora e número de lesão, que estão completamente preenchidas, não são incluídas.
As entradas marcadas como <1
ou >-1
têm uma correlação que está próxima de ser exatamente negativa ou positiva, mas ainda não é perfeita. Isso aponta para um pequeno número de registros no conjunto de dados que estão errados. Por exemplo, neste conjunto de dados a correlação entre VEHICLE CODE TYPE 3
e CONTRIBUTING FACTOR VEHICLE 3
é <1
, indicando que, ao contrário da nossa expectativa, existem alguns registros que possuem um ou outro, mas não ambos. Esses casos exigirão atenção especial.
O mapa de calor funciona muito bem para identificar relacionamentos de integridade de dados entre pares de variáveis, mas seu poder explicativo é limitado quando se trata de relacionamentos maiores e não tem suporte específico para conjuntos de dados extremamente grandes.
dendrogram
O dendograma permite correlacionar de forma mais completa a conclusão das variáveis, revelando tendências mais profundas do que as pares visíveis no mapa de calor de correlação:
msno . dendrogram ( collisions )
O dendograma usa um algoritmo de agrupamento hierárquico (cortesia de scipy
) para agrupar variáveis umas contra as outras por sua correlação de nulidade (medida em termos de distância binária). Em cada etapa da árvore as variáveis são divididas com base em qual combinação minimiza a distância dos clusters restantes. Quanto mais monótono for o conjunto de variáveis, mais próxima será a distância total de zero e mais próxima será a distância média (eixo y) de zero.
O algoritmo exato usado é:
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, leia-o de uma perspectiva de cima para baixo. As folhas do cluster ligadas entre si a uma distância zero predizem totalmente a presença uma da outra - uma variável pode estar sempre vazia quando outra é preenchida, ou ambas podem estar sempre preenchidas ou ambas vazias, e assim por diante. Neste exemplo específico, o dendograma une as variáveis que são necessárias e, portanto, presentes em cada registro.
As folhas do cluster que se dividem perto de zero, mas não nisso, predizem umas às outras muito bem, mas ainda de forma imperfeita. Se a sua própria interpretação do conjunto de dados é que essas colunas realmente são ou deveriam corresponder entre si em nulidade (por exemplo, como CONTRIBUTING FACTOR VEHICLE 2
e VEHICLE TYPE CODE 2
deveriam), então a altura da folha do cluster indica: em termos absolutos, com que frequência os registros são "incompatíveis" ou arquivados incorretamente - ou seja, quantos valores você teria que preencher ou eliminar, se desejar.
Tal como acontece com matrix
, apenas até 50 colunas rotuladas serão exibidas confortavelmente nesta configuração. No entanto, o dendrogram
lida com mais elegância com conjuntos de dados extremamente grandes, simplesmente mudando para uma configuração horizontal.
Para obter detalhes de configuração mais avançados para seus gráficos, consulte o arquivo CONFIGURATION.md
neste repositório.
Para ideias sobre recursos ou relatórios de bugs, consulte Problemas. Se você estiver interessado em contribuir para esta biblioteca, veja detalhes sobre como fazê-lo no arquivo CONTRIBUTING.md
neste repositório. Se fizer isso, lembre-se de que missingno
está atualmente em estado de manutenção; portanto, embora as correções de bugs sejam bem-vindas, é improvável que eu revise ou obtenha novos recursos importantes da biblioteca.