Unordentliche Datensätze? Fehlende Werte? missingno
bietet ein kleines Toolset flexibler und benutzerfreundlicher Visualisierungen und Dienstprogramme für fehlende Daten, mit denen Sie schnell eine visuelle Zusammenfassung der Vollständigkeit (oder des Fehlens) Ihres Datensatzes erhalten können. Einfach pip install missingno
um loszulegen.
In dieser Schnellstartanleitung wird ein Beispiel des Datensatzes „NYPD Motor Vehicle Collisions Dataset“ verwendet.
import pandas as pd
collisions = pd . read_csv ( "https://raw.githubusercontent.com/ResidentMario/missingno-data/master/nyc_collision_factors.csv" )
matrix
Die msno.matrix
Nullitätsmatrix ist eine datendichte Anzeige, mit der Sie Muster bei der Datenvervollständigung schnell visuell erkennen können.
import missingno as msno
% matplotlib inline
msno . matrix ( collisions . sample ( 250 ))
Auf den ersten Blick scheinen Datum, Uhrzeit, die Verteilung der Verletzungen und der Beitragsfaktor des ersten Fahrzeugs vollständig ausgefüllt zu sein, während die geografischen Informationen größtenteils vollständig, aber lückenhafter zu sein scheinen.
Die Sparkline auf der rechten Seite fasst die allgemeine Form der Datenvollständigkeit zusammen und zeigt die Zeilen mit der maximalen und minimalen Nullheit im Datensatz an.
Diese Visualisierung bietet bequem Platz für bis zu 50 beschriftete Variablen. Jenseits dieses Bereichs beginnen sich die Beschriftungen zu überlappen oder werden unleserlich, und in großen Displays werden sie standardmäßig weggelassen.
Wenn Sie mit Zeitreihendaten arbeiten, können Sie mithilfe des Schlüsselwortparameters freq
eine Periodizität angeben:
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
ist eine einfache Visualisierung der Nichtigkeit nach Spalte:
msno . bar ( collisions . sample ( 1000 ))
Sie können zu einer logarithmischen Skala wechseln, indem Sie log=True
angeben. bar
bietet die gleichen Informationen wie matrix
, jedoch in einem einfacheren Format.
heatmap
Die missingno
Korrelations-Heatmap misst die Nullitätskorrelation: wie stark sich das Vorhandensein oder Fehlen einer Variablen auf das Vorhandensein einer anderen auswirkt:
msno . heatmap ( collisions )
In diesem Beispiel scheint es, dass Berichte, die mit einer OFF STREET NAME
Variablen eingereicht werden, mit geringerer Wahrscheinlichkeit vollständige geografische Daten enthalten.
Die Nullitätskorrelation reicht von -1
(wenn eine Variable erscheint, erscheint die andere definitiv nicht) über 0
(erscheinen oder nicht erscheinende Variablen haben keinen Einfluss aufeinander) bis 1
(wenn eine Variable erscheint, tut es die andere definitiv auch).
Der genaue verwendete Algorithmus ist:
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 ()
Variablen, die immer voll oder immer leer sind, weisen keine sinnvolle Korrelation auf und werden daher stillschweigend aus der Visualisierung entfernt. In diesem Fall werden beispielsweise die Spalten „Datum/Uhrzeit“ und „Verletzungsnummer“, die vollständig ausgefüllt sind, nicht berücksichtigt.
Mit <1
oder >-1
gekennzeichnete Einträge weisen eine Korrelation auf, die nahezu genau negativ oder positiv ist, aber immer noch nicht ganz perfekt ist. Dies deutet auf eine kleine Anzahl fehlerhafter Datensätze im Datensatz hin. Beispielsweise ist in diesem Datensatz die Korrelation zwischen VEHICLE CODE TYPE 3
und CONTRIBUTING FACTOR VEHICLE 3
<1
, was darauf hindeutet, dass es entgegen unserer Erwartung einige Datensätze gibt, die das eine oder andere, aber nicht beides haben. Diese Fälle erfordern besondere Aufmerksamkeit.
Die Heatmap eignet sich hervorragend zum Erkennen von Datenvollständigkeitsbeziehungen zwischen Variablenpaaren, ihre Erklärungskraft ist jedoch begrenzt, wenn es um größere Beziehungen geht, und sie bietet keine besondere Unterstützung für extrem große Datensätze.
dendrogram
Das Dendrogramm ermöglicht Ihnen eine vollständigere Korrelation der Variablenvervollständigung und deckt Trends auf, die tiefer liegen als die paarweisen, die in der Korrelations-Heatmap sichtbar sind:
msno . dendrogram ( collisions )
Das Dendrogramm verwendet einen hierarchischen Clustering-Algorithmus (mit freundlicher Genehmigung von scipy
), um Variablen anhand ihrer Nullitätskorrelation (gemessen als binäre Distanz) gegeneinander einzuteilen. Bei jedem Schritt des Baums werden die Variablen aufgeteilt, je nachdem, welche Kombination den Abstand der verbleibenden Cluster minimiert. Je monotoner die Menge der Variablen ist, desto näher liegt ihr Gesamtabstand bei Null und desto näher ist ihr durchschnittlicher Abstand (die y-Achse) bei Null.
Der genaue verwendete Algorithmus ist:
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 )
Um dieses Diagramm zu interpretieren, lesen Sie es von oben nach unten. Clusterblätter, die in einem Abstand von Null miteinander verbunden sind, sagen die gegenseitige Anwesenheit vollständig voraus – eine Variable könnte immer leer sein, wenn eine andere gefüllt ist, oder sie könnten immer beide gefüllt oder beide leer sein und so weiter. In diesem speziellen Beispiel klebt das Dendrogramm die Variablen zusammen, die erforderlich und daher in jedem Datensatz vorhanden sind.
Cluster-Blätter, die nahe bei Null, aber nicht bei Null spalten, prognostizieren einander sehr gut, aber immer noch unvollkommen. Wenn Ihre eigene Interpretation des Datensatzes besagt, dass diese Spalten tatsächlich null übereinstimmen oder übereinstimmen sollten (z. B. wie CONTRIBUTING FACTOR VEHICLE 2
und VEHICLE TYPE CODE 2
es sein sollten), dann sagt Ihnen die Höhe des Clusterblatts Folgendes: in absoluten Zahlen, wie oft die Datensätze „nicht übereinstimmen“ oder falsch abgelegt sind – das heißt, wie viele Werte Sie eintragen oder streichen müssten, wenn Sie dazu geneigt wären.
Wie bei matrix
werden in dieser Konfiguration nur bis zu 50 beschriftete Spalten problemlos angezeigt. Das dendrogram
verarbeitet extrem große Datensätze jedoch eleganter, indem es einfach in eine horizontale Konfiguration umgedreht wird.
Ausführlichere Konfigurationsdetails für Ihre Plots finden Sie in der Datei CONFIGURATION.md
in diesem Repository.
Gedanken zu Funktionen oder Fehlerberichte finden Sie unter Probleme. Wenn Sie daran interessiert sind, zu dieser Bibliothek beizutragen, finden Sie Einzelheiten dazu in der Datei CONTRIBUTING.md
in diesem Repository. Wenn Sie dies tun, denken Sie daran, dass sich missingno
derzeit in einem Wartungszustand befindet. Daher sind Fehlerbehebungen zwar willkommen, es ist jedoch unwahrscheinlich, dass ich neue wichtige Bibliotheksfunktionen überprüfen oder veröffentlichen werde.