缺失值可视化Python工具库:missingno
↑↑↑点击上方蓝字,回复资料,10个G的惊喜
向大家推荐一款非常实用的缺失值可视化工具库:missingno
适用场景
无论是打比赛还是在实际工程项目中,都会遇到数据缺失的情况,如果数据集较小,还能在excel或者其他可视化软件大致看一下导致数据缺失的原因,那么数据集较大时,想要探索其中规律,无疑难度也是越来越大。
missingno提供了一个灵活且易于使用的缺少数据可视化工具和实用程序的小型工具集,使你可以快速直观地概述数据集的完整性。
安装及引用
pip install missingno
import missingno as msno
missingno一般配合numpy和pandas一起使用:
import numpy as np
import pandas as pd
案例中还会用到quilt,这是一个数据包管理器,可以让你像管理代码一样管理数据,anaconda没有内置,所以需要安装一下。
导入数据
from quilt.data.ResidentMario import missingno_data
collisions = missingno_data.nyc_collision_factors()
collisions = collisions.replace("nan", np.nan)
## 绘制缺失值矩阵图
msno.matrix无效矩阵是一个数据密集的显示,它可以快速直观地看出数据完整度。
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')
![](https://my-wechat.oss-cn-beijing.aliyuncs.com/image_20200403162803.png)
绘制缺失值条形图
条形图提供与矩阵图相同的信息,但格式更简单。msno.bar(collisions.sample(1000))
绘制缺失值热力图
missingno相关性热力图可以显示无效的相关性:一个变量的存在或不存在如何强烈影响的另一个的存在。
数值为1:两个变量一个缺失另一个必缺失;
数值为-1:一个变量缺失另一个变量必然不缺失。
数值为0:变量缺失值出现或不出现彼此没有影响。
热力图非常适合于选择变量对之间的数据完整性关系,但是当涉及到较大的关系时,其解释力有限,并且它不特别支持超大型数据集。
注:始终为满或始终为空的变量没有任何有意义的关联,因此会从可视化中删除。
msno.heatmap(collisions)
缺失值树状图
通过树状图,可以更全面地观察缺失变量的关联性,揭示比关联热力图更深刻的相关关系:
msno.dendrogram(collisions)
树状图使用层次聚类算法通过变量的无效相关性(以二进制距离来衡量)将变量彼此分类。在树的每个步骤中,根据哪个组合最小化其余群集的距离来对变量进行拆分。变量集越单调,它们的总距离越接近零,而它们的平均距离(y轴)越接近零。以零距离链接在一起的簇叶完全可以预测彼此的存在-一个变量在填充另一个变量时可能始终为空,或者它们可能始终都被填充或都为空,依此类推。
簇叶几乎分裂为零,但不分裂为零,彼此预测得很好,但仍不完美。如果你自己的数据集的解释是,这些列实际上是或者应该是在无效相互匹配(例如,作为CONTRIBUTING FACTOR VEHICLE 2和VEHICLE TYPE CODE 2应该),那么集群叶的高度告诉你,在绝对数量,记录多久是“不匹配”或提交错误的文件,也就是说,如果您愿意,则必须填写或删除多少个值。