数据缺失值可视化利器-missingno

简介: 景数据探索和预处理是任何数据科学或机器学习工作流中的重要步骤。在使用教程或训练数据集时,可能会出现这样的情况:这些数据集的设计方式使其易于使用,并使所涉及的算法能够成功运行。然而,在现实世界中,数据是混乱的!它可能有错误的值、不正确的标签,并且可能会丢失部分内容。丢失数据可能是处理真实数据集时最常见的问题之一。数据丢失的原因很多,包括传感器故障、数据过时、数据管理不当,甚至人为错误。丢失的数据可能以单个值、一个要素中的多个值或整个要素丢失的形式出现。重要的是,在进行数据分析或机器学习之前,需要我们对缺失的数据进行适当的识别和处理。许多机器学习算法不能处理丢失的数据,需要删除整行数据,其中

背景

数据探索和预处理是任何数据科学或机器学习工作流中的重要步骤。在使用教程或训练数据集时,可能会出现这样的情况:这些数据集的设计方式使其易于使用,并使所涉及的算法能够成功运行。然而,在现实世界中,数据是混乱的!它可能有错误的值、不正确的标签,并且可能会丢失部分内容。

丢失数据可能是处理真实数据集时最常见的问题之一。数据丢失的原因很多,包括传感器故障、数据过时、数据管理不当,甚至人为错误。丢失的数据可能以单个值、一个要素中的多个值或整个要素丢失的形式出现。

重要的是,在进行数据分析或机器学习之前,需要我们对缺失的数据进行适当的识别和处理。许多机器学习算法不能处理丢失的数据,需要删除整行数据,其中只有一个丢失的值,或者用一个新值替换(插补)。

根据数据的来源,缺失值可以用不同的方式表示。最常见的是NaN(不是数字),但是,其他变体可以包括“NA”、“None”、“999”、“0”、“ ”、“-”。如果丢失的数据是由数据帧中的非NaN表示的,那么应该使用np.NaN将其转换为NaN(df.replace('', np.NaN))。


简介

missingno 提供了一个小型工具集,其中包含灵活且易于使用的缺失数据可视化实用程序,可让您快速直观地了解数据集的完整性。missingno基于matplotlib可视化,接受pandas数据源。这可以是条形图、矩阵图、热图或树状图的形式。

从这些图中,我们可以确定缺失值发生的位置、缺失的程度以及是否有缺失值相互关联。通常,缺失的值可能被视为没有贡献任何信息,但如果仔细分析,可能有潜在的描述。


安装

pip install missingno
复制代码


加载样例数据集

这是一个纽约警察局机动车碰撞数据集的样本。本文的其余部分将从这个collisions数据集中提取。

import pandas as pd
collisions = pd.read_csv("https://raw.githubusercontent.com/ResidentMario/missingno-data/master/nyc_collision_factors.csv")
复制代码


矩阵-matrix

msno.matrix 空值矩阵是一种数据密集型显示,可让您快速直观地在所有数据中挑选出样例。

import missingno as msno
%matplotlib inline
msno.matrix(collisions.sample(250))
复制代码


网络异常,图片无法展示
|


乍一看,date, time、受伤的分布和第一影响因素似乎都是完整的,而地理信息似乎大多是完整的,但斑点更多。

右边的sparkline总结了数据完整性的一般形状,并指出了数据集中具有最大和最小零值的行。

这种可视化可以轻松地容纳多达50个带标签的变量。超过这个范围,标签开始重叠或变得不可读,默认情况下,大屏幕会省略它们。

如果您正在处理时间序列数据,则可以使用 freq 关键字参数指定周期性:

import numpy as np
null_pattern = (np.random.random(1000).reshape((50, 20)) > 0.5).astype(bool)
# 将所有的Flase转换为None
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

msno.bar是按列对空值进行简单可视化。

msno.bar(collisions.sample(1000))
复制代码


网络异常,图片无法展示
|


您可以通过指定 log=True 切换到对数刻度。 bar用矩阵提供相同的信息,但格式更简单。

msno.bar(collisions.head(1000), log=True)
复制代码


热力图-heatmap

missingno相关的热力图测量空值相关性,即以个变量的存在或不存在对另一个变量存在的影响程度。

msno.heatmap(collisions)
复制代码


网络异常,图片无法展示
|


在本例中,似乎使用OFF STREET NAME变量归档的报告不太可能具有完整的地理数据。

空值相关性范围从-1(如果一个变量出现,另一个肯定不会)到0(变量出现或不出现对彼此没有影响)到1(如果一个变量出现,另一个肯定也会)。

始终是没有空值或始终是空值的变量没有任何有意义的相关性,因此会从可视化中默默地删除。

例如,在本例中,日期时间和受伤数列完全没有空值,则不出现在图中。

标记为<1>-1的条目具有接近于完全负或正的相关性,但仍然不完全如此,这表明数据集中有少量的记录是错误的(脏数据)。

例如,在这个数据集中,VEHICLE CODE TYPE 3CONTRIBUTING FACTOR VEHICLE 3之间的相关性<1,这表明,与我们的期望相反,有一些记录具有其中一个或另一个,但不是两者都有。这些情况需要特别注意。

热力图非常适用于找出变量对之间的数据完整性关系,但是当涉及到更大的关系时,它的解释力是有限的,并且它对超大数据集没有特别的支持。

树状图-dendrogram

树状图可以让你更充分地变量之间的相关性,揭示比相关性热力图中可见的两两之间的关系更深入的关系。

msno.dendrogram(collisions)
复制代码


网络异常,图片无法展示
|


树状图使用分层聚类算法(由 scipy 提供)通过它们的空值相关性(根据二进制距离测量)将变量相互分类,将空值相关度很强的列分组在一起。

如果在零级将多个列组合在一起,则其中一列中是否存在空值与其他列中是否存在空值直接相关。树中的列越分离,列之间关联null值的可能性就越小。上图中最右侧的列(DATE、TIME、LOCATION、LATITUDE等)为一类,彼此的距离为 0(因为都没有缺失数据)。

在树的每个步骤中,根据哪个组合最小化其余群集的距离来对变量进行拆分。变量集越单调,它们的总距离越接近零,而它们的平均距离(y轴)越接近零。

要解释这个图表,请从自上而下的角度阅读。

以零距离连接在一起的簇叶可以完全预测另一个变量的存在。当另一个变量被填充时,一个变量可能总是空的。或者它们可能总是都不为空或者都是空的,依此类推。

在这个具体的例子中,树状图将所需的变量粘在一起,因此出现在每个记录中。

簇叶几乎分裂为零,但不分裂为零,彼此预测得很好,但仍不完美。

如果您自己对数据集的解释是,这些列实际上或应该在空值中相互匹配(例如,CONTRIBUTING FACTOR VEHICLE 2VEHICLE TYPE CODE 2应该匹配),则簇叶的高度以绝对值表示,记录“不匹配”或不正确归档的频率, 即如果你这么想的话,你需要填充或删除多少值。

与矩阵一样,在这种配置中最多只能显示50个带标签的列。然而,树状图通过简单地切换到水平配置,来更优雅地处理极大的数据集。


总结


在应用机器学习之前识别数据缺失值是数据质量工作的一个关键组成部分。本文通过使用missingno库可视化,以了解有多少缺失数据存在、发生在哪里,以及不同数据列之间的缺失值是否存在相关性。


相关文章
|
28天前
|
数据可视化 数据挖掘 Python
Pandas数据探索性可视化的最佳实践
【10月更文挑战第13天】数据可视化是数据分析中不可或缺的一环,它帮助我们更好地理解数据、发现趋势和模式,并有效地传达我们的发现。在Python领域,Pandas和Matplotlib是两个非常强大的库,它们提供了丰富的功能来进行数据分析和可视化。本文将介绍如何结合使用Pandas和Matplotlib进行数据探索性可视化的最佳实践。
55 9
|
4月前
|
数据可视化 数据挖掘 数据处理
深度挖掘!Python 数据分析中 Matplotlib 与 Seaborn 的隐藏功能,让数据可视化更出彩!
【7月更文挑战第23天】在Python数据分析中,Matplotlib与Seaborn是关键的可视化工具。Matplotlib提供深度自定义,如调整轴刻度和网格,支持多子图布局。Seaborn基于Matplotlib,简化美观图表生成,内置主题与调色板,适用于复杂统计图形如小提琴图和成对关系图,且无缝集成Pandas数据框。掌握这些库的高级功能,能显著提升数据可视化效果,助力数据分析决策。
47 4
|
6月前
|
数据采集 数据可视化 数据挖掘
SciPy在数据分析中的应用:从数据清洗到可视化
【4月更文挑战第17天】# SciPy在数据分析中的应用:从数据清洗到可视化。文章探讨了SciPy在数据清洗(使用NumPy处理缺失值和异常值)、数据分析(描述性统计和模型拟合)以及数据可视化(结合Matplotlib和Seaborn进行图表绘制)中的作用。SciPy与其他Python库结合,为完整的数据分析流程提供了强大支持。
|
6月前
|
数据采集 数据可视化 数据挖掘
Seaborn实战:从数据清洗到可视化全流程解析
【4月更文挑战第17天】在数据分析中,Seaborn是用于数据可视化的重要工具,同时也辅助数据清洗。本文通过实例展示了如何利用Seaborn从数据清洗(包括导入数据、处理缺失和异常值)到数据探索(描述性统计、分组统计和可视化探索)。接着,文章详细讲解了数据可视化,包括分类和数值数据的图表以及高级图表如小提琴图、箱形图和热力图。最后,介绍了Seaborn与其他工具(如Pandas和Matplotlib)的结合使用,强调了数据可视化的迭代优化过程。学习并掌握Seaborn能提升数据分析和展示的效率。
|
6月前
|
数据采集 数据可视化 数据挖掘
利用Python实现简单的数据分析与可视化
本文将介绍如何使用Python中的Pandas和Matplotlib库,通过一个简单的数据集示例,展示数据分析和可视化的基本流程及技巧。
|
6月前
|
数据采集 数据可视化 数据挖掘
使用Python实现简单的数据分析与可视化
【2月更文挑战第1天】 本文将介绍如何使用Python及其相关库来进行简单的数据分析和可视化。首先,我们将介绍Python中用于数据处理和分析的主要库,然后演示如何利用这些库对数据进行处理、分析和可视化操作。通过本文的学习,读者将能够初步掌握Python在数据分析领域的应用。
56 3
|
6月前
|
数据可视化 数据挖掘 Linux
【数据分析与可视化】Pandas可视化与数据透视表的讲解及实战(超详细 附源码)
【数据分析与可视化】Pandas可视化与数据透视表的讲解及实战(超详细 附源码)
160 0
|
数据采集 数据挖掘 开发工具
数据分析|R-缺失值处理
数据分析|R-缺失值处理
155 1
|
数据采集 数据可视化 数据处理
Python数据可视化:呈现世界大运会历史数据
Python数据可视化:呈现世界大运会历史数据
|
数据可视化 数据挖掘 数据处理
下一篇
无影云桌面