借助missingno
来可视化缺失值
missingno github项目主页:https://github.com/ResidentMario/missingno
缺失值可视化的方法也很简单:
missingno.matrix(dataframe)
会返回AxesSubplot
类型的图像,使用AxesSubplot.figure.show()
就可以展示出来了
示例代码
import missingno
import pandas as pd
import numpy as np
def get_dataset():
"""得到数据
:return data_x:有缺失值的数据
"""
from sklearn.datasets import make_classification
data_x, data_y = make_classification(n_samples=100, n_classes=4, n_features=6, n_informative=4,
random_state=0) # 6个特征
data_x = pd.DataFrame(data_x)
data_x.columns = ['x1', 'x2', 'x3', 'x4', 'x5', 'miss_line']
# 在miss_line这一列删除20%的数据
for col_name in data_x.columns:
drop_index = data_x.sample(frac=0.1).index
data_x.loc[drop_index, col_name] = np.nan # 为miss_line设置空值
return data_x
if __name__ == '__main__':
df = get_dataset()
axe_subplot = missingno.matrix(df, figsize=(16, 9))
axe_subplot.figure.show()
# 热力图:判断一列的缺失值对另一列的缺失值是否有影响
heat_axes = missingno.heatmap(df)
heat_axes.figure.show()
缺失值图像,这个图片可以看到每个维度缺失值的情况:
- 黑色的柱子有断层的地方就是存在缺失值的地方
- 右侧的曲线是统计这一行缺失值的情况,越向左凸起的厉害,便说明这一行缺失的数越多
热力图图像:这个图是统计两列的缺失值之间的相关系数,(将有值的地方设为0,缺失的地方设为1,计算两个序列的相关系数)
比如有两列的含义是:姓名、年龄,那么如果是匿名用户,那么这个人的姓名和年龄都不存在,因此相关系数较高