지저분한 데이터 세트? 누락된 값이 있나요? 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
nullity 매트릭스는 데이터 완성의 패턴을 시각적으로 빠르게 선택할 수 있는 데이터 집약적 디스플레이입니다.
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
는 열별 nullity를 간단하게 시각화한 것입니다.
msno . bar ( collisions . sample ( 1000 ))
log=True
지정하여 로그 배율로 전환할 수 있습니다. bar
matrix
과 동일한 정보를 제공하지만 더 간단한 형식으로 제공됩니다.
heatmap
missingno
Correlation 히트맵은 무효 상관관계, 즉 한 변수의 존재 여부가 다른 변수의 존재에 얼마나 큰 영향을 미치는지 측정합니다.
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
제공)을 사용하여 nullity 상관 관계(이진 거리로 측정)를 통해 변수를 서로 비교합니다. 트리의 각 단계에서 변수는 나머지 클러스터의 거리를 최소화하는 조합에 따라 분할됩니다. 변수 집합이 단조로워질수록 전체 거리는 0에 가까워지고, 평균 거리(y축)는 0에 가까워집니다.
사용된 정확한 알고리즘은 다음과 같습니다.
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 )
이 그래프를 해석하려면 하향식 관점에서 읽어보세요. 0의 거리에서 함께 연결된 클러스터 잎은 서로의 존재를 완전히 예측합니다. 한 변수는 다른 변수가 채워질 때 항상 비어 있거나 둘 다 채워지거나 둘 다 비어 있을 수 있습니다. 이 특정 예에서 덴드로그램은 필요하고 따라서 모든 레코드에 존재하는 변수를 함께 붙입니다.
0에 가깝게 분할되지만 그렇지 않은 클러스터 잎은 서로를 매우 잘 예측하지만 여전히 불완전합니다. 데이터 세트에 대한 사용자의 해석에 따라 이러한 열이 실제로 서로 null로 일치 하거나 일치해야 하는 것인 경우(예: CONTRIBUTING FACTOR VEHICLE 2
및 VEHICLE TYPE CODE 2
일치해야 하는 것처럼) 클러스터 리프의 높이는 다음과 같습니다. 절대적으로 말하면, 기록이 "일치하지" 않거나 잘못 제출되는 빈도, 즉 원하는 경우 입력하거나 삭제해야 하는 값의 수입니다.
matrix
과 마찬가지로 이 구성에서는 최대 50개의 레이블이 지정된 열만 편안하게 표시됩니다. 그러나 dendrogram
단순히 수평 구성으로 전환하여 매우 큰 데이터 세트를 보다 우아하게 처리합니다.
플롯에 대한 고급 구성 세부 정보는 이 저장소의 CONFIGURATION.md
파일을 참조하세요.
기능이나 버그 보고서에 대한 생각은 문제를 참조하세요. 이 라이브러리에 기여하는 데 관심이 있다면 이 저장소의 CONTRIBUTING.md
파일에서 자세한 내용을 참조하세요. 그렇게 하는 경우 missingno
는 현재 유지 관리 상태이므로 버그 수정은 환영하지만 새로운 주요 라이브러리 기능을 검토하거나 출시할 가능성은 낮다는 점을 명심하세요.