Python 数据竞赛常用 | 可视化数据集缺失情况
Posted 叶庭云
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 数据竞赛常用 | 可视化数据集缺失情况相关的知识,希望对你有一定的参考价值。
无论是打比赛还是在实际工程项目中,都会遇到数据缺失的情况,如果数据集较小,还能在 Excel 或者其他可视化软件大致看一下导致数据缺失的原因。但当数据集较大时,手工查看每个变量的缺失值是非常麻烦的一件事情。
数据探索和预处理也是任何数据科学或机器学习工作流中的重要步骤。缺失数据可能是处理真实数据集时最常见的问题之一,数据丢失的原因很多,包括传感器故障、数据过时、数据管理不当,甚至人为错误。丢失的数据可能以单个值、一个要素中的多个值或整个要素丢失的形式出现。
重要的是,在进行数据分析或机器学习之前,需要我们对缺失的数据进行适当的识别和处理。许多机器学习算法不能处理丢失的数据,需要删除整行数据,其中只有一个丢失的值,或者用一个新值替换(插补)。
混乱的数据集? m i s s i n g n o missingno missingno 提供了一个灵活易用的缺失数据可视化和实用程序的小型工具集(基于 m a t p l o t l i b matplotlib matplotlib 的,兼容 p a n d a s pandas pandas 数据源),使你能够快速获得你的数据集的完整性(或缺乏完整性)的可视化摘要。只要 p i p pip pip 安装上 m i s s i n g n o missingno missingno 就可以开始了。
pip install missingno -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
m i s s i n g n o missingno missingno 包含了 4 4 4 种类型图示:
- m a t r i x matrix matrix: m s n o . m a t r i x msno.matrix msno.matrix空白性矩阵是一种数据密集显示图,可以直观的看到各个特征缺失数据分布情况,这种可视化图示最多可以容纳 50 50 50 个 c o l u m n column column,超过此范围的标签开始重叠或变得不可读;
- h e a t m a p heatmap heatmap:数据列之前缺失相关性分析图,展示了一个变量的存在或不存在对另一个变量的存在有多强烈的影响
- d e n d r o g r a m dendrogram dendrogram:通过树状图,您可以更全面地关联变量完成,揭示比 h e a t m a p heatmap heatmap 中可见的成对趋势更深的趋势。与 m a t r i x matrix matrix 图一样,在这种配置下最多只能显示 50 50 50 个带标签的列。但是树状图只需翻转到水平配置即可更优雅地处理超大型数据集。
- b a r bar bar: m s n o . b a r msno.bar msno.bar是按列对无效性数据的简单可视化;
m s n o . m a t r i x msno.matrix msno.matrix是使用最多的方法(剩余的方法用得较少),能快速直观地看到数据集的完整性情况。以 2021 2021 2021 年 M a t h o r C u p MathorCup MathorCup 大数据挑战赛的二手车估价训练集为例,可视化结果如下:
# 读取训练集excel数据 查看首尾10行
df_t = pd.read_excel("train_data.xlsx")
df_t.head().append(df_t.tail())
plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文
plt.rcParams['axes.unicode_minus'] = False # 显示负号
plt.rcParams['figure.dpi'] = 500 # dpi
msno.matrix(df_t)
使用 m i s s i n g n o missingno missingno 库可视化,快速了解有多少缺失数据存在、发生在哪里。右边的 s p a r k l i n e sparkline sparkline 总结了数据完整性的一般形状,并标出了数据集中具有最大和最小空白性的行。
每列特征缺失数据数量条形图可视化和打印统计结果:
missing = df_t.isnull().sum()
missing = missing[missing > 0]
missing.sort_values(inplace=True)
missing_label = missing.index
missing_values = missing.values
per_value = [":.2%".format(i / 30000) for i in missing_values]
missing_dic = k: [v, z] for k, v, z in zip(list(missing_label), missing_values, per_value)
print(missing_dic)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文
# 可视化 水平柱形图
fig, ax = plt.subplots(figsize=(6, 4), dpi=500)
b = ax.barh(range(len(missing_label)),
missing_values, color='blue',
ec="r", lw=1.2,
)
# 为横向水平的柱图右侧添加数据标签
for rect in b:
w = rect.get_width()
ax.text(w + 180, rect.get_y() + rect.get_height() / 2, '%d' % int(w),
ha='left', va='center', fontdict=
"family": "Times New Roman", "fontsize": 8
)
ax.set_ylim(bottom=0, top=14)
# 设置Y轴纵坐标上的刻度线标签。
ax.set_yticks(range(len(missing_label)))
ax.set_yticklabels(missing_label)
ax.tick_params(axis='y', direction='in', labelsize=8, length=0)
for spine in ['top', 'right', "left", "bottom"]:
ax.spines[spine].set_color('none')
# 不需要X横坐标上的label标签
plt.xticks(())
# 保存图片 展示show
plt.savefig("./results/01 训练集缺失值情况.png", dpi=500)
plt.show()
结果如下:
补充学习:
- 51CTO | 数据缺失值可视化利器-missingno
- CSDN Mr数据杨 | 数据缺失值的可视化和处理8种常用方法
- 博客园 | Python可视化查看数据集完整性: missingno库(用于数据分析前的数据检查)
以上是关于Python 数据竞赛常用 | 可视化数据集缺失情况的主要内容,如果未能解决你的问题,请参考以下文章
Python数据分析(八):农粮组织数据集探索性分析(EDA)
Python-sklearn数据预处理(单/多个数据集数据标准化稳健标准化缺失值填补)