Des ensembles de données désordonnés ? Valeurs manquantes ? missingno
fournit un petit ensemble d'outils de visualisations et d'utilitaires de données manquantes flexibles et faciles à utiliser qui vous permettent d'obtenir un résumé visuel rapide de l'exhaustivité (ou de l'absence d'exhaustivité) de votre ensemble de données. Il suffit pip install missingno
pour commencer.
Ce démarrage rapide utilise un échantillon de l’ensemble de données 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
La matrice de nullité msno.matrix
est un affichage dense en données qui vous permet de sélectionner rapidement des modèles visuels dans la complétion des données.
import missingno as msno
% matplotlib inline
msno . matrix ( collisions . sample ( 250 ))
D'un simple coup d'œil, la date, l'heure, la répartition des blessures et le facteur de contribution du premier véhicule semblent être complètement renseignés, tandis que les informations géographiques semblent pour l'essentiel complètes, mais plus inégales.
La ligne sparkline à droite résume la forme générale de l'exhaustivité des données et indique les lignes avec la nullité maximale et minimale dans l'ensemble de données.
Cette visualisation pourra accueillir confortablement jusqu'à 50 variables étiquetées. Au-delà de cette plage, les étiquettes commencent à se chevaucher ou à devenir illisibles et, par défaut, les grands écrans les omettent.
Si vous travaillez avec des données de séries chronologiques, vous pouvez spécifier une périodicité à l'aide du paramètre de mot-clé 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
est une simple visualisation de la nullité par colonne :
msno . bar ( collisions . sample ( 1000 ))
Vous pouvez passer à une échelle logarithmique en spécifiant log=True
. bar
fournit les mêmes informations que matrix
, mais dans un format plus simple.
heatmap
La carte thermique de corrélation missingno
mesure la corrélation de nullité : dans quelle mesure la présence ou l'absence d'une variable affecte la présence d'une autre :
msno . heatmap ( collisions )
Dans cet exemple, il semble que les rapports déposés avec une variable OFF STREET NAME
sont moins susceptibles de contenir des données géographiques complètes.
La corrélation de nullité va de -1
(si une variable apparaît, l'autre ne l'est certainement pas) à 0
(les variables apparaissant ou n'apparaissant pas n'ont aucun effet les unes sur les autres) à 1
(si une variable apparaît, l'autre l'est certainement aussi).
L'algorithme exact utilisé est :
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 ()
Les variables qui sont toujours pleines ou toujours vides n'ont aucune corrélation significative et sont donc silencieusement supprimées de la visualisation. Dans ce cas, par exemple, les colonnes date/heure et numéro de blessure, qui sont entièrement remplies, ne sont pas incluses.
Les entrées marquées <1
ou >-1
ont une corrélation qui est proche d'être exactement négative ou positive, mais qui ne l'est toujours pas parfaitement. Cela indique qu'un petit nombre d'enregistrements dans l'ensemble de données sont erronés. Par exemple, dans cet ensemble de données, la corrélation entre VEHICLE CODE TYPE 3
et CONTRIBUTING FACTOR VEHICLE 3
est <1
, ce qui indique que, contrairement à nos attentes, il existe quelques enregistrements qui contiennent l'un ou l'autre, mais pas les deux. Ces cas nécessiteront une attention particulière.
La carte thermique fonctionne très bien pour identifier les relations d'exhaustivité des données entre des paires de variables, mais son pouvoir explicatif est limité lorsqu'il s'agit de relations plus larges et elle ne prend pas en charge particulièrement les ensembles de données extrêmement volumineux.
dendrogram
Le dendrogramme vous permet de corréler plus complètement l'achèvement des variables, révélant des tendances plus profondes que celles par paires visibles dans la carte thermique de corrélation :
msno . dendrogram ( collisions )
Le dendrogramme utilise un algorithme de clustering hiérarchique (avec l'aimable autorisation de scipy
) pour regrouper les variables les unes par rapport aux autres en fonction de leur corrélation de nullité (mesurée en termes de distance binaire). À chaque étape de l'arborescence, les variables sont divisées en fonction de la combinaison qui minimise la distance des clusters restants. Plus l'ensemble de variables est monotone, plus leur distance totale est proche de zéro et plus leur distance moyenne (l'axe y) est proche de zéro.
L'algorithme exact utilisé est :
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 )
Pour interpréter ce graphique, lisez-le dans une perspective descendante. Les feuilles de cluster reliées entre elles à une distance de zéro prédisent pleinement la présence l'une de l'autre : une variable peut toujours être vide lorsqu'une autre est remplie, ou elles peuvent toujours être toutes les deux remplies ou vides, et ainsi de suite. Dans cet exemple spécifique, le dendrogramme regroupe les variables requises et donc présentes dans chaque enregistrement.
Les feuilles d'amas qui se divisent près de zéro, mais pas à ce niveau, se prédisent très bien, mais encore imparfaitement. Si votre propre interprétation de l'ensemble de données est que ces colonnes sont ou devraient réellement correspondre les unes aux autres en termes de nullité (par exemple, comme le devraient CONTRIBUTING FACTOR VEHICLE 2
et VEHICLE TYPE CODE 2
), alors la hauteur de la feuille de cluster vous indique : en termes absolus, à quelle fréquence les enregistrements ne correspondent pas ou sont mal classés, c'est-à-dire combien de valeurs vous devrez remplir ou supprimer, si vous le souhaitez.
Comme avec matrix
, seules jusqu'à 50 colonnes étiquetées s'afficheront confortablement dans cette configuration. Cependant, le dendrogram
gère avec plus d'élégance des ensembles de données extrêmement volumineux en passant simplement à une configuration horizontale.
Pour des détails de configuration plus avancés pour vos tracés, reportez-vous au fichier CONFIGURATION.md
dans ce référentiel.
Pour des réflexions sur les fonctionnalités ou des rapports de bogues, consultez Problèmes. Si vous souhaitez contribuer à cette bibliothèque, consultez les détails à ce sujet dans le fichier CONTRIBUTING.md
de ce référentiel. Si vous le faites, gardez à l'esprit que missingno
est actuellement dans un état de maintenance, donc même si les corrections de bugs sont les bienvenues, il est peu probable que je révise ou propose de nouvelles fonctionnalités majeures de la bibliothèque.