【机器学习】数据清洗之识别缺失点

news2024/11/15 4:29:11

🎈个人主页:甜美的江
🎉欢迎 👍点赞✍评论⭐收藏
🤗收录专栏:机器学习
🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步!

数据清洗之识别缺失点

  • 一 缺失值的概念及危害
    • 1.1 缺失值的概念
    • 1.2 缺失值的危害:
  • 二 识别缺失值:
    • 2.1 可视化检查:
    • 2. 2 统计描述:
    • 2.3 编程检查

在这里插入图片描述

引言:

在机器学习领域,数据的质量直接关系到模型的性能和可靠性。而在实际应用中,我们往往面临一个普遍存在的问题——缺失值。缺失值可能因为各种原因而产生,如传感器故障、数据采集错误或者主观选择性填写。因此,深入了解并识别缺失值成为数据清洗的重要步骤之一。

本文将探讨缺失值的概念及其危害,并介绍在数据清洗中如何通过可视化检查、统计描述以及编程检查等方法来有效地识别缺失值,从而为后续的数据处理和建模奠定基础。

一 缺失值的概念及危害

当涉及到数据清洗时,缺失值是一个非常重要的概念。缺失值指的是数据集中某些字段或变量中的数据项缺失或未填充的情况。

这些缺失值可能出现在数据收集、传输、存储或处理的任何阶段,其存在可能会带来许多危害。

以下是关于缺失值的概念以及其危害的详细介绍:

1.1 缺失值的概念

定义:

缺失值是指在数据集中某些字段或变量中缺少数据值或者未填充的值。这些缺失值通常用特殊的标识符(如NaN、NULL、NA等)来表示。

类型:
缺失值可以是完全随机的,也可以是有规律的(如某个特定的条件下出现缺失)。常见的缺失值类型包括单个值缺失、整行数据缺失、连续值序列缺失等。

1.2 缺失值的危害:

1 影响数据质量:

缺失值会降低数据集的质量和可用性,使数据分析和建模的结果变得不准确和不可靠。

2 偏倚分析结果:

当数据中存在缺失值时,可能会导致分析结果产生偏差,从而影响对数据的正确理解和决策制定。

3 减少数据样本量:

在数据清洗过程中,删除包含缺失值的数据项或者变量会导致数据样本量减少,进而降低模型的训练效果和泛化能力。

4 失去信息:

缺失值可能包含重要的信息,因此简单地删除缺失值可能会导致信息的丢失,从而影响数据分析的完整性和准确性。

5 影响统计分析:

缺失值会影响统计分析的结果,例如均值、方差等统计指标会因缺失值而产生偏差。

6 导致误解:
缺失值的存在可能导致对数据的误解,使得对现实世界情况的理解出现偏差或错误。

二 识别缺失值:

在处理缺失值之前,我们需要先找出缺失值,而找出缺失值主要有以下三种方法:

2.1 可视化检查:

在数据清洗中,通过可视化方法来识别缺失值是一种直观且有效的方式。

以下是一些常用的可视化检查方法:

1 热力图(Heatmap):

方法:
使用热力图可以直观地显示整个数据集中缺失值的分布情况。通常,热力图中缺失值的部分会以不同颜色或阴影表示。

工具:
可以使用Python中的Seaborn或Matplotlib库来创建热力图。

import seaborn as sns
import matplotlib.pyplot as plt

sns.heatmap(data.isnull(), cbar=False, cmap='viridis')
plt.show()

2 缺失值比例柱状图:

方法:
绘制柱状图,显示每个变量中缺失值的比例。这可以帮助识别哪些变量受到缺失值的影响较大。

工具:
使用Matplotlib或Seaborn库创建柱状图。

import matplotlib.pyplot as plt

missing_percentage = (data.isnull().sum() / len(data)) * 100
missing_percentage = missing_percentage[missing_percentage > 0]
missing_percentage.sort_values(inplace=True)

plt.bar(missing_percentage.index, missing_percentage)
plt.xlabel('Variables')
plt.ylabel('Missing Percentage')
plt.xticks(rotation=45)
plt.show()

3 缺失值的分布直方图:

方法:
对于特定变量,绘制其缺失值的分布直方图,以了解缺失值在该变量上的分布情况。

工具:
使用Matplotlib或Seaborn库创建直方图。

import matplotlib.pyplot as plt

plt.hist(data['Variable_with_missing'], bins=20, color='skyblue', edgecolor='black')
plt.xlabel('Variable_with_missing')
plt.ylabel('Frequency')
plt.title('Distribution of Missing Values')
plt.show()

4 缺失值的模式图:

方法:
绘制缺失值的模式图,以显示数据集中缺失值的模式。
这有助于识别是否存在特定的缺失值模式。

工具:
可以使用Seaborn的clustermap方法。

import seaborn as sns

sns.clustermap(data.isnull(), cmap='viridis')
plt.show()

这些可视化方法能够帮助数据科学家和分析师更好地理解数据集中的缺失值分布情况,从而采取有针对性的数据清洗策略。

示例

代码:

import matplotlib.pyplot as plt
import pandas as pd

# 读取数据集
height_data = pd.read_csv(r"D:\jupter notebook\base\机器学习\数据预处理\数据清洗\data\height_data.csv")

# 打印缺失值的数量
missing_values = height_data['Height'].isnull().sum()
print(f"Total Missing Values: {missing_values}")

# 显示缺失的ID
missing_ids = height_data[height_data['Height'].isnull()]['ID'].tolist()
print(f"Missing IDs: {missing_ids}")

# 创建直方图
plt.hist(height_data['ID'], bins=10, color='skyblue', edgecolor='black', alpha=0.7, label='All IDs')
plt.hist(missing_ids, bins=10, color='red', edgecolor='black', alpha=0.7, label='Missing IDs')
plt.xlabel('ID')
plt.ylabel('Frequency')
plt.title('Distribution of IDs with Missing Values')
plt.legend()
plt.show()



数据集内容如下:

ID,Height
1,170
2,165
3,180
4,NaN
5,175
6,172
7,168
8,NaN
9,185
10,170

运行结果:
在这里插入图片描述

在这个示例中,使用plt.hist()函数分别绘制了所有ID和缺失ID的直方图,并在图例中添加了标签。在图表上,缺失ID的数据用红色表示。此外,代码还打印了缺失值的总数量以及缺失的具体ID,从直方图上可以明显地看出,一共有两个数据缺失,缺失数据的ID分别是4,8。

代码分析:(给小白看的)

import matplotlib.pyplot as plt

导入matplotlib库,用于绘制图表。

import pandas as pd

导入pandas库,用于数据处理。

height_data = pd.read_csv(
r"D:\jupter notebook\base\机器学习\数据预处理\数据清洗\data\height_data.csv")

使用pandas的read_csv()函数从指定路径读取名为height_data.csv的数据集文件,并将其存储在名为height_data的DataFrame中。

missing_values = height_data['Height'].isnull().sum()

使用isnull()函数检查Height列中的缺失值,并使用sum()函数计算缺失值的数量,将结果存储在变量missing_values中。

print(f"Total Missing Values: {missing_values}")

打印缺失值的总数量。

missing_ids = height_data[height_data['Height'].isnull()]['ID'].tolist()

使用布尔索引选择Height列中存在缺失值的行,并提取这些行中的ID列,然后将其转换为列表形式,存储在变量missing_ids中。

print(f"Missing IDs: {missing_ids}")

打印缺失的ID。

plt.hist(height_data['ID'], bins=10, color='skyblue',
 edgecolor='black', alpha=0.7, label='All IDs')

使用plt.hist()函数创建一个直方图,绘制所有ID的分布情况
height_data[‘ID’]是要绘制直方图的数据列
bins=10指定直方图的柱子数量为10个
color='skyblue’设置直方图的颜色为天蓝色
edgecolor='black’设置直方图的边框颜色为黑色
alpha=0.7设置透明度为0.7
label='All IDs’设置图例标签为"All IDs"

plt.hist(missing_ids, bins=10, color='red',
 edgecolor='black', alpha=0.7, label='Missing IDs')

再次使用plt.hist()函数创建一个直方图,绘制缺失ID的分布情况
missing_ids是要绘制直方图的数据,其余参数设置与上一步类似
label='Missing IDs’设置图例标签为"Missing IDs"

plt.xlabel('ID')和plt.ylabel('Frequency')

分别设置X轴和Y轴的标签。

plt.title('Distribution of IDs with Missing Values')

设置图表的标题为"Distribution of IDs with Missing Values",表示具有缺失值的ID的分布情况。

plt.legend()

添加图例,用于区分不同的直方图。

plt.show()

显示创建的图表。

这段代码的主要功能是可视化身高数据集中ID的分布情况,并通过不同颜色的直方图区分具有缺失值的ID。同时,代码还打印了缺失值的总数量和缺失的ID。

2. 2 统计描述:

在数据清洗过程中,识别缺失值的统计描述方法有助于了解数据集中缺失值的分布、缺失模式和缺失值的数量。以下是一些常用的统计描述方法:

1 缺失值数量统计:

简单地计算每个变量中缺失值的数量,这可以通过使用isnull()和sum()函数实现。

示例代码:

missing_count = data.isnull().sum()
print(missing_count)

2 缺失值比例统计:

计算每个变量中缺失值的比例,通常以百分比的形式呈现。
示例代码:

missing_percentage = (data.isnull().sum() / len(data)) * 100
print(missing_percentage)

3 缺失值的汇总统计:

使用describe()函数生成有关数据集中缺失值的统计摘要,包括均值、标准差、最小值、25th、50th(中位数)、75th百分位数和最大值。
示例代码:

missing_summary = data.describe(include='all', datetime_is_numeric=True)
print(missing_summary)

4 缺失值的累积统计:

对数据集进行累积求和,生成一个累积缺失值的统计图,有助于识别哪些部分的数据更容易受到缺失值的影响。

示例代码:

cumulative_missing = data.isnull().cumsum()
print(cumulative_missing)

5 缺失模式统计:

通过统计不同缺失模式的出现频率,可以发现是否存在某些变量同时缺失的趋势。

示例代码:

missing_pattern_count = data.apply(tuple, axis=1).duplicated().sum()
print(f"Number of rows with the same missing pattern: {missing_pattern_count}")

这些统计描述方法为数据清洗提供了一个全面的视角,使数据科学家能够更好地理解数据集中缺失值的性质,为后续的处理和填充提供指导。

2.3 编程检查

识别缺失值是数据清洗中的一个关键步骤,它有助于我们理解数据集的完整性并采取适当的处理措施。以下是一些常用的编程检查方法:

1 使用isnull()函数:

在Python中,我们可以使用isnull()函数来检查数据集中的缺失值。

这个函数会返回一个布尔值的DataFrame,其中缺失值对应的位置为True,非缺失值为False。

示例代码:

import pandas as pd

# 创建一个示例DataFrame
data = pd.DataFrame({'A': [1, 2, None, 4],
                     'B': [None, 5, 6, 7]})

# 使用isnull()函数检查缺失值
missing_values = data.isnull()
print(missing_values)

运行结果:
在这里插入图片描述

2 使用any()函数:

any()函数用于检查DataFrame中每列是否存在至少一个True值,即是否存在缺失值。
示例代码:

# 检查是否存在缺失值
any_missing = missing_values.any()
print(any_missing)

3 使用sum()函数:

sum()函数可以对布尔值的DataFrame进行求和,统计每列中True值(缺失值)的数量。
示例代码:

# 统计每列缺失值的数量
missing_count = missing_values.sum()
print(missing_count)

4 使用info()函数:

info()函数可以提供关于DataFrame的简明摘要信息,其中包括每列的非空值数量。

通过比较非空值数量和数据集总行数,可以快速识别出缺失值的存在。

示例代码:

# 查看DataFrame的摘要信息
data.info()

三 总结

数据清洗中的缺失值处理是构建可靠机器学习模型的关键步骤。通过深入了解缺失值的概念及其危害,以及采用可视化检查、统计描述和编程检查等方法,我们能够全面地识别数据中的缺失点。这为后续的数据填充、插补或删除等操作奠定了基础,确保数据的完整性和可靠性,从而提高模型的准确性和鲁棒性。在实际应用中,仔细识别缺失点将为我们构建更加健壮和可信赖的机器学习模型提供重要支持。

这篇文章到这里就结束了

谢谢大家的阅读!

如果觉得这篇博客对你有用的话,别忘记三连哦。

我是甜美的江,让我们我们下次再见

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1440412.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

飞天使-linux操作的一些技巧与知识点8-zabbix6.0 容器搭建

文章目录 安装docker安装步骤mysql下载镜像安装zabbix 测试效果 安装docker 1. 配置官方 yum 源$ sudo yum install -y yum-utils $ sudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo2. 安装 Docker$ sudo yum install docker-c…

并发编程 java锁机制

1、什么是锁,为什么需要锁? 并发环境下,会存在多个线程对同一个资源进行争抢的情况,假设线程A对资源正在进行修改,此时线程B又对同一资源进行了修改,就会导致数据不一致的问题。为了解决这个问题&#xff…

不到1s生成mesh! 高效文生3D框架AToM

论文题目: AToM: Amortized Text-to-Mesh using 2D Diffusion 论文链接: https://arxiv.org/abs/2402.00867 项目主页: AToM: Amortized Text-to-Mesh using 2D Diffusion 随着AIGC的爆火,生成式人工智能在3D领域也实现了非常显著…

【人工智能】横扫市场的巨星大模型:探秘当今最热门的AI力量(14)

今年,ChatGPT成了大家的明星,简直是个神奇的助手!问什么问题,都秒回,写各种文字、甚至代码,简直是工作利器。而国内这半年AI领域热度不减,涌现了一批新公司和产品,大厂也在风头上。A…

【学习笔记】TypeScript编译选项

TS 中的编译选项 我们写了一个TS的文件,我们需要使用如下的命令将我们的TS文件转换为JS文件。 tsc xxx.ts 这样会产生一个对应的js文件 自动编译文件 编译文件时,使用 -W 指令后,TS编译器会自动监视文件的变化,并在文件发生变…

MySQL篇之定位与优化MySQL慢查询

一、如何定位慢查询 1.方案一:开源工具 调试工具:Arthas。 运维工具:Prometheus 、Skywalking。 2.方案二:MySQL自带慢日志 慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:…

Habitat环境学习四:Habitat-sim基础用于导航——使用导航网格NavMesh

如何使用导航网格NavMesh 官方教程1、NavMesh基础定义1.1 使用NavMesh的原因1.2 什么是NavMesh 2、NavMesh的使用方法2.1 获取自上而下Top down view视角地图2.2 在NavMesh中进行查询以及随机产生可导航点2.3 查找最短路径2.4 场景加载NavMesh2.5 重新计算并生成NavMesh2.6 什么…

python-分享篇-画樱花

文章目录 画樱花代码效果 画樱花 代码 from turtle import * from random import * from math import *def tree(n,l):pd()#下笔#阴影效果t cos(radians(heading()45))/80.25pencolor(t,t,t)pensize(n/3)forward(l)#画树枝if n>0:b random()*1510 #右分支偏转角度c ran…

openGauss学习笔记-216 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-CPU

文章目录 openGauss学习笔记-216 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-CPU216.1 CPU216.2 查看CPU状况216.3 性能参数分析 openGauss学习笔记-216 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-CPU 获取openGauss节点的CPU、内存、I/O和网络资源使用情况…

神经网络 | 常见的激活函数

Hi,大家好,我是半亩花海。本文主要介绍神经网络中必要的激活函数的定义、分类、作用以及常见的激活函数的功能。 目录 一、激活函数定义 二、激活函数分类 三、常见的几种激活函数 1. Sigmoid 函数 (1)公式 (2&a…

Open CASCADE学习|点和曲线的相互转化

目录 1、把曲线离散成点 1.1按数量离散 1.2按长度离散 1.3按弦高离散 2、由点合成曲线 2.1B样条插值 2.2B样条近似 1、把曲线离散成点 计算机图形学中绘制曲线,无论是绘制参数曲线还是非参数曲线,都需要先将参数曲线进行离散化,通过离…

JavaScript综合练习1

JavaScript 综合练习 1 1. 循环嵌套 两个以上的循环进行套娃。 1.1. 语法 for (外部声明记录循环次数的变量; 循环条件; 变化值) {for (内部声明记录循环次数的变量; 循环条件; 变化值) {循环体;} }2. 倒三角 2.1. 案例 2.2. 代码实现 // 外层打印几行 for (let i 1; i …

【高阶数据结构】位图布隆过滤器

文章目录 1. 位图1.1什么是位图1.2为什么会有位图1.3 实现位图1.4 位图的应用 2. 布隆过滤器2.1 什么是布隆过滤器2.2 为什么会有布隆过滤器2.3 布隆过滤器的插入2.4 布隆过滤器的查找2.5 布隆过滤器的模拟实现2.6 布隆过滤器的优点2.7 布隆过滤器缺陷 3. 海量数据面试题3.1 哈…

在windows的控制台实现贪吃蛇小游戏

欢迎来到博主的文章 博主id:代码小豪 前言:看懂这篇文章需要具有C语言基础,还要对单链表具有一定的理解。如果你只是想要试玩这个游戏,可以直接在文章末尾找到源码 由于实现贪吃蛇需要调用Win32 API函数,这些函数我会…

vue3项目中的404页面

vue3项目中的404页面 春节前的最后一篇技术博客了 写了不少vue项目,发现一直没有正确处理404页面。404页面的出现有这么几种可能: 错误输入了页面地址路由连接跳转时,某些路由已经不存在了,而程序员并没有正确处理 也就是说40…

jvm问题自查思路

本文聊一下最近处理了一些jvm的问题上,将这个排查和学习过程分享一下,看了很多资料,最终都会落地到几个工具的使用,本文主要是从文档学习、工具学习和第三方技术验证来打开认知和实践,希望有用。 一、文档 不仅知道了…

假期刷题打卡--Day26

1、MT1212乘法表 请编写一个简单程序,输出九九乘法表。输入n,就输出乘法表到n的地方。 格式 输入格式: 输入整型 输出格式: 输出整型。形式如:1*11 样例 1 输入: 5输出: 1*11 2*12 …

编曲入门软件哪个好 编曲入门教程 Studio One哪个版本好 Studio One6.5正版多少钱 FL Studio下载

新手编曲软件推荐?新手学编曲要先熟悉编曲逻辑,因此需要选择编曲逻辑简明易懂的宿主软件。编曲新手应该做哪些准备?准备好编曲设备、宿主软件、基础乐理学习资料。 一、编曲入门软件哪个好 新手入门阶段还没有形成系统的编曲思维&#xff0…

整合 Axios

大家好我是苏麟 , 今天聊一下Axios . Axios Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpReques…

七、Nacos源码系列:Nacos服务发现

目录 一、服务发现 二、getServices():获取服务列表 2.1、获取服务列表 2.2、总结图 三、getInstances(serviceId):获取服务实例列表 3.1、从缓存中获取服务信息 3.2、缓存为空,执行订阅服务 3.2.1、调度更新,往线程池中…