Kumpulan data berantakan? Nilai-nilai yang hilang? missingno
menyediakan seperangkat alat kecil berisi visualisasi dan utilitas data hilang yang fleksibel dan mudah digunakan yang memungkinkan Anda mendapatkan ringkasan visual singkat tentang kelengkapan (atau kekurangannya) kumpulan data Anda. Cukup pip install missingno
untuk memulai.
Mulai cepat ini menggunakan sampel kumpulan data Tabrakan Kendaraan Bermotor NYPD.
import pandas as pd
collisions = pd . read_csv ( "https://raw.githubusercontent.com/ResidentMario/missingno-data/master/nyc_collision_factors.csv" )
matrix
Matriks nullity msno.matrix
adalah tampilan padat data yang memungkinkan Anda dengan cepat memilih pola penyelesaian data secara visual.
import missingno as msno
% matplotlib inline
msno . matrix ( collisions . sample ( 250 ))
Sekilas, tanggal, waktu, sebaran cedera, dan faktor kontribusi kendaraan pertama tampak terisi penuh, sedangkan informasi geografis sebagian besar tampak lengkap, namun lebih tidak jelas.
Grafik mini di sebelah kanan merangkum bentuk umum kelengkapan data dan menunjukkan baris dengan nullitas maksimum dan minimum dalam kumpulan data.
Visualisasi ini akan mengakomodasi hingga 50 variabel berlabel dengan nyaman. Setelah rentang tersebut, label mulai tumpang tindih atau tidak dapat dibaca, dan secara default, layar besar mengabaikannya.
Jika Anda bekerja dengan data deret waktu, Anda dapat menentukan periodisitas menggunakan parameter kata kunci 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
adalah visualisasi sederhana dari nullitas berdasarkan kolom:
msno . bar ( collisions . sample ( 1000 ))
Anda dapat beralih ke skala logaritmik dengan menentukan log=True
. bar
memberikan informasi yang sama seperti matrix
, tetapi dalam format yang lebih sederhana.
heatmap
Peta panas korelasi missingno
mengukur korelasi nullitas: seberapa kuat ada atau tidaknya suatu variabel mempengaruhi kehadiran variabel lain:
msno . heatmap ( collisions )
Dalam contoh ini, tampaknya laporan yang diajukan dengan variabel OFF STREET NAME
cenderung tidak memiliki data geografis yang lengkap.
Korelasi nullitas berkisar dari -1
(jika satu variabel muncul, variabel lainnya pasti tidak) hingga 0
(variabel yang muncul atau tidak muncul tidak berpengaruh satu sama lain) hingga 1
(jika satu variabel muncul, variabel lain pasti juga berpengaruh).
Algoritma tepat yang digunakan adalah:
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 ()
Variabel yang selalu penuh atau selalu kosong tidak memiliki korelasi yang berarti, sehingga dihilangkan secara diam-diam dari visualisasi—dalam hal ini misalnya kolom tanggalwaktu dan nomor cedera, yang terisi penuh, tidak disertakan.
Entri yang diberi tanda <1
atau >-1
memiliki korelasi yang mendekati negatif atau positif, namun masih belum sepenuhnya sempurna. Hal ini menunjukkan sejumlah kecil catatan dalam kumpulan data yang salah. Misalnya, dalam kumpulan data ini, korelasi antara VEHICLE CODE TYPE 3
dan CONTRIBUTING FACTOR VEHICLE 3
adalah <1
, yang menunjukkan bahwa, bertentangan dengan ekspektasi kami, ada beberapa catatan yang memiliki salah satu atau yang lain, namun tidak keduanya. Kasus-kasus seperti ini memerlukan perhatian khusus.
Peta panas berfungsi dengan baik untuk memilih hubungan kelengkapan data antara pasangan variabel, namun kekuatan penjelasnya terbatas ketika menyangkut hubungan yang lebih besar dan tidak memiliki dukungan khusus untuk kumpulan data yang sangat besar.
dendrogram
Dendrogram memungkinkan Anda mengkorelasikan penyelesaian variabel secara lebih lengkap, sehingga mengungkap tren lebih dalam daripada tren berpasangan yang terlihat dalam peta panas korelasi:
msno . dendrogram ( collisions )
Dendrogram menggunakan algoritma pengelompokan hierarki (milik scipy
) untuk menggabungkan variabel satu sama lain dengan korelasi nullitasnya (diukur dalam jarak biner). Pada setiap langkah pohon, variabel dipecah berdasarkan kombinasi mana yang meminimalkan jarak cluster yang tersisa. Semakin monoton suatu himpunan variabel, semakin dekat jarak totalnya ke nol, dan semakin dekat jarak rata-ratanya (sumbu y) ke nol.
Algoritma tepat yang digunakan adalah:
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 )
Untuk menafsirkan grafik ini, bacalah dari perspektif top-down. Daun cluster yang bertautan pada jarak nol sepenuhnya memprediksi keberadaan satu sama lain—satu variabel mungkin selalu kosong ketika variabel lain terisi, atau mungkin keduanya selalu terisi atau keduanya kosong, dan seterusnya. Dalam contoh spesifik ini, dendrogram merekatkan variabel-variabel yang diperlukan dan karenanya ada di setiap record.
Daun-daun cluster yang terbelah mendekati nol, namun tidak sampai pada titik tersebut, memprediksi satu sama lain dengan sangat baik, namun masih belum sempurna. Jika interpretasi Anda sendiri terhadap kumpulan data adalah bahwa kolom-kolom ini benar-benar cocok atau seharusnya cocok satu sama lain dalam nullitas (misalnya, seperti yang seharusnya dilakukan oleh CONTRIBUTING FACTOR VEHICLE 2
dan VEHICLE TYPE CODE 2
), maka tinggi daun kluster akan memberi tahu Anda, secara absolut, seberapa sering catatan "tidak cocok" atau salah diarsipkan—yaitu, berapa banyak nilai yang harus Anda isi atau hapus, jika Anda menginginkannya.
Seperti halnya matrix
, hanya maksimal 50 kolom berlabel yang akan ditampilkan dengan nyaman dalam konfigurasi ini. Namun dendrogram
lebih elegan menangani kumpulan data yang sangat besar hanya dengan membalik ke konfigurasi horizontal.
Untuk detail konfigurasi lebih lanjut untuk plot Anda, lihat file CONFIGURATION.md
di repositori ini.
Untuk pemikiran tentang fitur atau laporan bug, lihat Masalah. Jika Anda tertarik untuk berkontribusi pada perpustakaan ini, lihat detail tentang cara melakukannya di file CONTRIBUTING.md
di repositori ini. Jika melakukan hal tersebut, perlu diingat bahwa missingno
saat ini sedang dalam tahap pemeliharaan, jadi meskipun perbaikan bug diperbolehkan, kemungkinan besar saya tidak akan meninjau atau mendapatkan fitur perpustakaan utama yang baru.