数据分析之前首先要保证数据集的质量,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个变量,但是通过简单的转置操作即可处理更多更大的数据集