数据缺失值可视化利器-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库可视化,以了解有多少缺失数据存在、发生在哪里,以及不同数据列之间的缺失值是否存在相关性。


相关文章
|
SQL XML Java
mybatis Mapper的概念与实战
MyBatis 是一个流行的 Java 持久层框架,它提供了对象关系映射(ORM)的功能,使得Java对象和数据库中的表之间的映射变得简单。在MyBatis中,Mapper是一个核心的概念,它定义了映射到数据库操作的接口。简而言之,Mapper 是一个接口,MyBatis 通过这个接口与XML映射文件或者注解绑定,以实现对数据库的操作。
501 1
|
数据采集 人工智能 自然语言处理
表格增强生成TAG登场:解锁AI自然语言与数据库的完美结合
【10月更文挑战第4天】表格增强生成(TAG)范式解锁了AI自然语言处理与数据库的深度融合,旨在让用户通过自然语言便捷地查询和管理数据。TAG结合了语言模型的强大推理能力和数据库系统的高效计算能力,通过查询合成、执行及答案生成三步完成复杂查询。相较于传统Text2SQL和RAG方法,TAG在准确性上显著提升,但其应用仍面临技术门槛和数据质量等挑战。[论文地址:](https://arxiv.org/pdf/2408.14717)
288 4
|
存储 前端开发
Flutter Provider状态管理---MVVM架构实战
Flutter Provider状态管理—MVVM架构实战 在Flutter中,状态管理是一个非常重要的概念。Flutter Provider是一种状态管理的解决方案,它提供了一种简单,灵活和高效的方法来管理Flutter应用程序中的状态。本文将详细介绍Flutter Provider的使用,以及如何在MVVM架构中使用它。
777 0
|
数据挖掘 BI 定位技术
南大通用GBase 8s 高级分组查询 —— GROUP BY ROLLUP介绍
本文详细介绍了GBase 8s数据库中GROUP BY ROLLUP的高级分组查询功能,涵盖基本概念、语法结构、应用示例及使用场景。ROLLUP支持多维度数据汇总,适用于销售分析、财务报表和用户统计等领域,提升数据汇总的灵活性与便捷性。
|
机器学习/深度学习 数据可视化 算法
R语言贝叶斯广义线性混合(多层次/水平/嵌套)模型GLMM、逻辑回归分析教育留级影响因素数据
R语言贝叶斯广义线性混合(多层次/水平/嵌套)模型GLMM、逻辑回归分析教育留级影响因素数据
|
监控 Cloud Native 持续交付
实现容器集群轻松部署:Docker Swarm 集群管理解析
实现容器集群轻松部署:Docker Swarm 集群管理解析
1002 0
|
XML Java 数据格式
Spring IOC—基于XML配置和管理Bean 万字详解(通俗易懂)
Spring 第二节 IOC—基于XML配置和管理Bean 万字详解!。
1173 5
|
Java 开发者
别再写错代码了!Java抽象类与接口的正确使用姿势!
【6月更文挑战第17天】在Java中,抽象类与接口助力构建灵活代码结构,提升效率。抽象类用于定义公共行为和属性,适合有层次的对象集合;接口包含抽象方法,实现多态,适合不相关对象集合。通过示例展示了如何创建抽象类和实现接口,强调理解其核心价值和使用场景的重要性,以提升代码质量和设计。正确使用抽象类与接口,让代码从平凡走向专业。
232 0
|
开发工具 git
Git的安装与卸载
该内容是关于如何下载Git的指导。首先,访问Git的官方网站[https://git-scm.com/downloads](https://git-scm.com/downloads)来获取相应平台的下载选项。然后,选择适合的安装包进行下载。文中包含三个图片,分别展示了下载页面、选择安装包的步骤以及可能的安装程序界面。
303 0
|
移动开发
在使用钉钉H5微应用时,通过消息通知链接跳转到特定页面可能会出现一些问题
在使用钉钉H5微应用时,通过消息通知链接跳转到特定页面可能会出现一些问题
648 2