【说明】文章内容来自《机器学习入门——基于sklearn》,用于学习记录。若有争议联系删除。
数据处理中,缺失数据可视化。missingno提供了一个灵活且易于使用的缺少数据可视化工具和实用程序的小型工具集,可以快速直观地概述数据集的完整性。
1、安装
pip install missingno
2、创建数据可视化
import warnings
import numpy as np
import pandas as pd
from sklearn.datasets import make_classification
import missingno as msno
import matplotlib.pyplot as plt
from itertools import product
warnings.filterwarnings('ignore')
#自定义数据集,并随机产生2000个NaN值,分布在各个特征中
def getData():
x1, y1 = make_classification(n_samples = 1000, n_features = 10, n_classes = 2,
n_clusters_per_class = 1, random_state = 0)
for i, j in product(range(x1.shape[0]), range(x1.shape[1])):
if np.random.random()>= 0.8:
xloc = np.random.randint(0, 10)
x1[i, xloc] = np.nan
return x1,y1
x, y = getData()
#存入pandas中
df = pd.DataFrame(x, columns = ['x%s'% str(i) for i in range(x.shape[1])])
df['label'] = y
msno.matrix(df)
plt.show()
【运行结果】
3、利用data.csv数据实现。
文件资源链接:https://pan.baidu.com/s/1qiS3RJIZYbpbLuHGXQbkuA
提取码:yj47
import pandas as pd
import missingno as msno
df = pd.read_csv('./data.csv')
df.isna().sum()
【运行结果】
(1)bar——条形图
msno.bar(df)
# 在图的左侧,y 轴刻度范围从 0.0 到 1.0,其中 1.0 表示 100% 的数据完整性。
# 如果条形小于此值,则表明在该列中缺少值。
# 在图的右侧,标度以指数值衡量。右上角表示数据框中的最大行数。
# 沿着图的顶部,有一系列数字表示该列中非空值的总数。
# 在此示例中,可以看到许多列(DTS、DCAL 和 RSHA)具有大量缺失值。
# 其他列(例如 WELL、DEPTH_MD 和 GR)是完整的并且具有最大数量的值。
【运行结果】
(2)matrix——矩阵
msno.matrix(df)
# 矩阵图为每一列提供颜色填充。当数据存在时,绘图以灰色(或选择的颜色)着色,
# 当数据不存在时,绘图以白色显示。
# 从结果图中可以看出,DTS、DCAL 和 RSHA 列显示了大部分缺失数据。这在条形图中已确定,
# 但额外的好处是可以查看缺失数据在数据框中的分布情况。
# 图的右侧是一条迷你图,范围从左侧的 0 到右侧数据框中的总列数。
# 当一行在每一列中都有一个值时,该行将位于最右边的位置。随着该行中缺失值开始增加,
# 该行将向左移动。
【运行结果】
(3)heatmap——热力图
missingno相关的热力图测量空值相关性,即以个变量的存在或不存在对另一个变量存在的影响程度。
msno.heatmap(df)
# 热图用于识别每个不同列之间的无效相关性。换句话说,它可以用来识别每列之间
# 是否存在空值的关系。
# 接近正 1 的值表示一列中存在的空值与另一列中存在的空值相关。
# 接近负 1 的值表示一列中空值的存在与另一列中空值的存在反相关。换句话说,当一列中存在空值时,另一列中存在数据值,反之亦然。
# 接近 0 的值表示与另一列相比,一列中空值的存在几乎没有关系。
# 有许多值显示为 <-1。这表明相关性非常接近 -100% 。
# 可以看到,ROP 列与 RHOB、NPHI 和 PEF 列略有负相关,与 RSHA 略有正相关。
# 如果我们看一下 DRHO,它的缺失与 RHOB、NPHI 和 PEF 列中的缺失值高度相关。
# 热图方法更适合较小的数据集。
【运行结果】
(4)dendrogram——树状图
树状图可以让你更充分地变量之间的相关性,揭示比相关性热力图中可见的两两之间的关系更深入的关系。
msno.dendrogram(df)
# 树状图提供了通过层次聚类生成的树状图,并将具有强相关性的列组合在一起。
# 如果多个列在零级分组在一起,则其中一列中空值的存在与其他列中空值的存在或不存在直接相关。树中的列分离得越多,
# 空值在列之间关联的可能性就越小。
# 在上面的树状图中,可以看到有两个不同的组:
# 第一个位于右侧(DTS、RSHA 和 DCAL),它们都具有高度的空值。
# 第二个在左侧,其余列更完整。
# LITHOFACIES、GR、GROUP、WELL 和 DEPTH_MD 都在零处分组在一起,表示它们是完整的。
# RDEP、Z_LOC、X_LOC 和 Y_LOC组合在一起接近于零。
# RMED 位于同一个较大的分支中,这表明该列中存在的一些缺失值可以与这四列相关。
# 对于上述缺失值可以利用pandas直接填充或删除(行或列),也可利用模型进行推理。
【运行结果】