數據分析之前首先要保證數據集的質量,missingno庫提供了一個靈活易用的可視化工具來觀察數據缺失情況,是基於matplotlib的,接受pandas數據源
快速開始
樣例數據使用 NYPD Motor Vehicle Collisions Dataset 數據集. 運行下面命令獲得數據
pip install quilt quilt install ResidentMario/missingno_data
加載數據到內存
from quilt.data.ResidentMario import missingno_data collisions = missingno_data.nyc_collision_factors() collisions = collisions.replace("nan", np.nan)
有幾個主要函數來不同方式的可視化展示數據集數據缺失情況
Matrix
Matrix是使用最多的函數,能快速直觀地看到數據集的完整性情況,矩陣顯示
import missingno as msno %matplotlib inline msno.matrix(collisions.sample(250))
右邊的迷你圖總結了數據集的總的完整性分布,並標出了完整性最大和最小的點
最多支持50列
可以通過figsize指定圖像大小,例如這樣msno.matrix(collisions.sample(250),figsize=(12,5))
如果數據是時序的,那可以用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 Chart
msno.bar可以簡單的展示無效數據的條形圖
msno.bar(collisions.sample(1000))
Heatmap
熱圖
兩個變量的無效相關范圍從-1(如果一個變量出現,另一個肯定沒有)到0(出現或不出現的變量對彼此沒有影響)到1(如果一個變量出現,另一個肯定也是)
數據全缺失或全空對相關性是沒有意義的,所以就在圖中就沒有了,比如date列就沒有出現在圖中
大於-1和小於1表示有強烈的正相關和負相關,但是由於極少數的臟數據所以並不絕對,這些例外的少數情況需要在數據加工時候予以注意
熱圖方便觀察兩個變量間的相關性,但是當數據集變大,這種結論的解釋性會變差
Dendrogram
樹狀圖
樹狀圖采用由scipy提供的層次聚類算法通過它們之間的無效相關性(根據二進制距離測量)將變量彼此相加。在樹的每個步驟中,基於哪個組合最小化剩余簇的距離來分割變量。變量集越單調,它們的總距離越接近0,並且它們的平均距離越接近零
在0距離處的變量間能彼此預測對方,當一個變量填充時另一個總是空的或者總是填充的,或者都是空的
樹葉的高度顯示預測錯誤的頻率
和矩陣Matrix一樣,只能處理50個變量,但是通過簡單的轉置操作即可處理更多更大的數據集