データセットが乱雑ですか?値が欠落していますか? missingno
データセットの完全性 (または完全性の欠如) の視覚的な概要をすばやく取得できる、柔軟で使いやすい欠損データの視覚化とユーティリティの小さなツールセットを提供します。 pip install missingno
だけで始められます。
このクイックスタートでは、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
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
現在メンテナンス状態にあるため、バグ修正は歓迎ですが、新しい主要なライブラリ機能をレビューしたり実装したりする可能性は低いことに留意してください。