數據集混亂?缺少值? missingno
提供了一個靈活且易於使用的缺失資料視覺化和實用程式的小型工具集,可讓您快速直觀地了解資料集的完整性(或缺乏完整性)。只需pip install missingno
即可開始。
本快速入門使用 NYPD 機動車輛碰撞資料集資料集的範例。
import pandas as pd
collisions = pd . read_csv ( "https://raw.githubusercontent.com/ResidentMario/missingno-data/master/nyc_collision_factors.csv" )
matrix
msno.matrix
無效矩陣是資料密集顯示,可讓您快速直觀地找出資料補全中的模式。
import missingno as msno
% matplotlib inline
msno . matrix ( collisions . sample ( 250 ))
乍一看,日期、時間、受傷分佈以及第一輛車的貢獻因子似乎都已完整填充,而地理資訊似乎基本上完整,但參差不齊。
右側的迷你圖總結了資料完整性的一般形狀,並指出了資料集中具有最大和最小空值的行。
此視覺化可輕鬆容納多達 50 個標記變數。超過該範圍標籤開始重疊或變得不可讀,並且預設大顯示器會忽略它們。
如果您正在處理時間序列數據,則可以使用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
是按列顯示無效性的簡單視覺化:
msno . bar ( collisions . sample ( 1000 ))
您可以透過指定log=True
切換到對數刻度。 bar
提供與matrix
相同的訊息,但格式較簡單。
heatmap
missingno
相關性熱圖衡量無效相關性:一個變數的存在或不存在對另一個變數的存在的影響有多大:
msno . heatmap ( collisions )
在此範例中,似乎使用OFF STREET NAME
變數提交的報告不太可能具有完整的地理資料。
無效相關性的範圍為-1
(如果一個變數出現,則另一個變數肯定不出現)到0
(出現或不出現的變數相互之間沒有影響)到1
(如果一個變數出現,則另一個變數肯定也會出現)。
使用的確切演算法是:
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 ()
始終為滿或始終為空的變數沒有有意義的相關性,因此會默默地從視覺化中刪除 - 在這種情況下,例如完全填充的日期時間和受傷數字列不包括在內。
標記為<1
或>-1
的條目具有接近完全負或正的相關性,但仍不完全如此。這表明資料集中有少量記錄是錯誤的。例如,在此資料集中, VEHICLE CODE TYPE 3
和CONTRIBUTING FACTOR VEHICLE 3
之間的相關性<1
,這表明與我們的預期相反,有一些記錄具有其中之一,但不是兩者兼有。這些情況需要特別注意。
熱圖非常適合找出變數對之間的資料完整性關係,但當涉及到較大的關係時,其解釋能力有限,並且它對極大的資料集沒有特別的支持。
dendrogram
樹狀圖可讓您更全面地關聯變數完成,揭示比相關熱圖中可見的成對趨勢更深入的趨勢:
msno . dendrogram ( collisions )
樹狀圖使用分層聚類演算法(由scipy
提供)透過變數的無效相關性(以二元距離測量)將變數彼此分類。在樹的每一步,變數都會根據哪種組合最小化剩餘簇的距離而被分割。變數集越單調,它們的總距離越接近零,且它們的平均距離(y 軸)也越接近零。
使用的確切演算法是:
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 )
要解釋此圖,請從自上而下的角度閱讀它。以零距離連接在一起的簇葉完全可以預測彼此的存在——當另一個變數被填充時,一個變數可能總是為空,或者它們可能總是都被填充或都為空,等等。在這個具體範例中,樹狀圖將所需的變數黏合在一起,因此出現在每個記錄中。
簇葉的分裂接近零,但不是零,可以很好地相互預測,但仍然不完美。如果您自己對資料集的解釋是這些列實際上或應該彼此匹配(例如, CONTRIBUTING FACTOR VEHICLE 2
和VEHICLE TYPE CODE 2
應該匹配),那麼簇葉的高度會告訴您,從絕對意義上講,記錄“不符」或錯誤歸檔的頻率——也就是說,如果您願意的話,您需要填寫或刪除多少個值。
與matrix
一樣,在此配置中最多只能顯示 50 個標記列。然而,透過簡單地翻轉到水平配置, dendrogram
可以更優雅地處理極大的資料集。
有關繪圖的更多高級配置詳細信息,請參閱此存儲庫中的CONFIGURATION.md
文件。
有關功能或錯誤報告的想法,請參閱問題。如果您有興趣為此庫做出貢獻,請參閱此儲存庫中的CONTRIBUTING.md
檔案中的詳細資訊。如果這樣做,請記住, missingno
目前處於維護狀態,因此雖然歡迎修復錯誤,但我不太可能審查或登陸任何新的主要庫功能。