数学建模之数据分析【九】:数据清理概述

文章目录

  • 一、什么是数据清理
  • 二、为什么数据清理很重要
  • 三、执行数据清洁的步骤
  • 四、如何执行数据清理
  • 五、数据清理的Python库实现
    • 5.1 数据检查与探索
    • 5.2 使用df.info()检查数据信息
    • 5.3 检查分类和数字列
    • 5.4 检查分类列中唯一值的总数
    • 5.5 执行数据清理的步骤
      • 5.5.1 删除所有上述不需要的观察结果
      • 5.5.2 根据分析的主题决定哪个因素对讨论重要
      • 5.5.3 删除姓名和工单列
      • 5.5.4 处理缺失数据
      • 5.5.5 处理异常值
      • 5.5.6 数据转换
  • 六、机器学习数据清理优缺点
    • 6.1 优点
    • 6.2 缺点
  • 七、结论

数据清理是机器学习的重要组成部分之一。它在构建模型中起着重要作用。在本文中,我们将了解数据清理、其重要性以及 Python 实现。

公众号:快乐数模
小红书:学数模使我快乐

一、什么是数据清理

数据清理是机器学习 (ML)流程中的关键步骤,因为它涉及识别和删除任何缺失、重复或不相关的数据。数据清理的目标是确保数据准确、一致且无错误,因为不正确或不一致的数据会对 ML 模型的性能产生负面影响。专业数据科学家通常会将大量时间投入到这一步骤中,因为他们相信“更好的数据胜过更复杂的算法”。

数据清理,也称为数据清洗或数据预处理,是数据科学流程中的关键步骤,涉及识别和纠正或消除数据中的错误、不一致和不准确性,以提高其质量和可用性。数据清理至关重要,因为原始数据通常嘈杂、不完整且不一致,这会对从中得出的见解的准确性和可靠性产生负面影响。

二、为什么数据清理很重要

数据清理是数据准备过程中的关键步骤,对于确保数据集的准确性、可靠性和整体质量起着重要作用。

对于决策而言,所得出结论的完整性在很大程度上取决于基础数据的清洁度。如果没有适当的数据清理,不准确、异常值、缺失值和不一致可能会损害分析结果的有效性。此外,干净的数据有助于更有效地进行建模和模式识别,因为当输入高质量、无错误的输入时,算法的性能最佳。

此外,干净的数据集增强了研究结果的可解释性,有助于形成可操作的见解。

  • 据科学中的数据清理
    数据清理是数据科学不可或缺的一部分,在确保数据集的准确性和可靠性方面发挥着根本性作用。在数据科学领域,洞察力和预测来自庞大而复杂的数据集,输入数据的质量显著影响分析结果的有效性。数据清理涉及系统地识别和纠正数据集中的错误、不一致和不准确性,包括处理缺失值、删除重复项和处理异常值等任务。这一细致的过程对于增强分析的完整性、促进更准确的建模以及最终促进基于可信和高质量数据的明智决策至关重要。

三、执行数据清洁的步骤

执行数据清理涉及一个系统的过程,以识别和纠正数据集中的错误、不一致和不准确性。下面是执行数据清理的基本步骤。

  • 移除不需要的观察值
  • 处理缺失数据
  • 管理不需要的异常值
  • 修正结构性错误

删除不需要的观测值: 从数据集中识别并消除不相关或多余的观测值。此步骤涉及仔细检查数据条目,查找重复记录、不相关信息或对分析没有意义的数据点。删除不需要的观测值可简化数据集,减少噪音并提高整体质量。

修复结构错误: 解决数据集中的结构问题,例如 数据格式命名约定变量类型 的不一致。标准化格式、纠正命名差异并确保数据表示的一致性。修复结构错误可增强数据一致性并促进准确的分析和解释。

管理不需要的异常值: 识别和管理异常值,即明显偏离常态的数据点。根据具体情况,决定是否删除异常值或对其进行转换以尽量减少其对分析的影响。管理异常值对于从数据中获得更准确、更可靠的见解至关重要。

处理缺失数据: 制定有效处理缺失数据的策略。这可能涉及基于统计方法估算缺失值、删除有缺失值的记录或采用高级估算技术。处理缺失数据可确保数据集更完整,防止出现偏差并保持分析的完整性。

四、如何执行数据清理

执行数据清理涉及一种系统方法来提高数据集的质量和可靠性。该过程首先要彻底了解数据,检查其结构并识别缺失值、重复值和异常值等问题。解决缺失数据涉及对归纳或删除的战略决策,同时系统地消除重复值以减少冗余。管理异常值可确保极端值不会过度影响分析。纠正结构错误以标准化格式和变量类型,从而提高一致性。

在整个过程中,记录变更对于透明度和可重复性至关重要。迭代验证和测试可确认数据清理步骤的有效性,最终生成可供进行有意义的分析和洞察的精炼数据集。

五、数据清理的Python库实现

了解使用 Titanic 数据集进行数据库清理的每个步骤。以下是必要的步骤:

  • 导入必要的库
  • 加载数据集
  • 使用 df.info() 检查数据信息
import pandas as pd
import numpy as np# Load the dataset
df = pd.read_csv('titanic.csv')
df.head()

在这里插入图片描述

5.1 数据检查与探索

首先通过检查数据结构并识别缺失值、异常值和不一致性来了解数据,并使用以下 Python 代码检查重复的行:

df.duplicated()

在这里插入图片描述

5.2 使用df.info()检查数据信息

df.info()

在这里插入图片描述
从上面的数据信息中,我们可以看到 Age 和 Cabin 的计数数量不一致。并且一些列是分类的,具有数据类型对象,一些是整数和浮点值。

5.3 检查分类和数字列

# Categorical columns
cat_col = [col for col in df.columns if df[col].dtype == 'object']
print('Categorical columns :',cat_col)
# Numerical columns
num_col = [col for col in df.columns if df[col].dtype != 'object']
print('Numerical columns :',num_col)

在这里插入图片描述

5.4 检查分类列中唯一值的总数

df[cat_col].nunique()

在这里插入图片描述

5.5 执行数据清理的步骤

5.5.1 删除所有上述不需要的观察结果

这包括从数据集中删除重复/冗余或不相关的值。重复观察最常出现在数据收集过程中,而不相关的观察是那些实际上不适合您尝试解决的特定问题的观察。

  • 冗余观测会在很大程度上改变效率,因为数据重复可能会向正确的一侧增加,也可能向错误的一侧增加,从而产生不准确的结果。
  • 不相关的观察结果是任何类型的对我们没有用并且可以直接删除的数据。

5.5.2 根据分析的主题决定哪个因素对讨论重要

机器不理解文本数据。因此,我们必须删除分类列值或将其转换为数字类型。这里我们删除了名称列,因为名称始终是唯一的,并且对目标变量没有太大影响。对于票证,首先打印 50 张唯一的票证。

df['Ticket'].unique()[:50]

在这里插入图片描述

从上面的票证中,我们可以观察到它由两个值组成,例如第一个值“A/5 21171”是“A/5”和“21171”的联合值,这可能会影响我们的目标变量。这将是特征工程的情况。我们从一列或一组列中得出新特征。在当前情况下,我们删除了“名称”和“票证”列。

5.5.3 删除姓名和工单列

df1 = df.drop(columns=['Name','Ticket'])
df1.shape

在这里插入图片描述

5.5.4 处理缺失数据

数据缺失是现实数据集中常见的问题,可能由于人为错误、系统故障或数据收集问题等各种原因而发生。可以使用各种技术来处理缺失数据,例如归纳、删除或替换。

可使用 df.isnull() 检查每行逐列的缺失值百分比,检查值是否为空并返回布尔值。.sum() 将对空值行的总数求和,然后将其除以数据集中存在的总行数,然后我们将其相乘以获得百分比值,即每 100 个值中有多少值为空。

round((df1.isnull().sum()/df1.shape[0])*100,2)

在这里插入图片描述
我们不能忽略或删除缺失的观察结果。必须小心处理它们,因为它们可能预示着一些重要的事情。

处理缺失数据的两种最常见方法是:

  • 删除有缺失值的观察值。
    价值缺失这一事实本身可能就很有意义。
    另外,在现实世界中,即使缺少某些特征,您也经常需要对新数据进行预测!
    从上面的结果我们可以看出,Cabin 有 77% 的空值,Age 有 19.87%,Embarked 有 0.22% 的空值。
    因此,填充 77% 的空值并不是一个好主意。我们将删除 Cabin 列。Embarked 列只有 0.22% 的空值,因此,我们删除 Embarked 列的空值行。
df2 = df1.drop(columns='Cabin')
df2.dropna(subset=['Embarked'], axis=0, inplace=True)
df2.shape

在这里插入图片描述

  • 根据过去的观察结果填补缺失值。
    再次强调,“缺失”本身几乎总是具有信息性的,如果某个值缺失,你应该告诉你的算法。
    即使你建立了一个模型来推断你的值,你也没有添加任何真实信息。你只是在强化其他特征已经提供的模式。
    对于这种情况,我们可以使用均值插补或中位数插补。

** 笔记** :

  • 当数据呈正态分布且没有极端异常值时,均值插补是合适的。
  • 当数据包含极端异常值或有偏差时,中位数插补是更好的选择。
# 均值填充
df3 = df2.fillna(df2.Age.mean())
# 再次检查空值
df3.isnull().sum()

在这里插入图片描述

5.5.5 处理异常值

离群值是与大多数数据有显著偏差的极端值。它们会对分析和模型性能产生负面影响。可以使用聚类、插值或变换等技术来处理离群值。

为了检查异常值,我们通常使用箱线图。箱线图,也称为箱须图,是数据集分布的图形表示。它显示变量的中位数、四分位数和潜在异常值。箱内的线表示中位数,而箱本身表示四分位距 (IQR)。须延伸到 IQR 1.5 倍以内的最极端非异常值。须以外的单个点被视为潜在异常值。箱线图提供了数据范围的易于理解的概览,并可以识别分布中的异常值或偏度。

import matplotlib.pyplot as pltplt.boxplot(df3['Age'], vert=False)
plt.ylabel('Variable')
plt.xlabel('Age')
plt.title('Box Plot')
plt.show()

在这里插入图片描述
从上面的箱线图中我们可以看出,我们的年龄数据集有异常值。小于 5 和大于 55 的值都是异常值。

# calculate summary statistics
mean = df3['Age'].mean()
std  = df3['Age'].std()# Calculate the lower and upper bounds
lower_bound = mean - std*2
upper_bound = mean + std*2print('Lower Bound :',lower_bound)
print('Upper Bound :',upper_bound)# Drop the outliers
df4 = df3[(df3['Age'] >= lower_bound) & (df3['Age'] <= upper_bound)]

在这里插入图片描述
类似地,我们可以删除剩余列的异常值。

5.5.6 数据转换

数据转换涉及将数据从一种形式转换为另一种形式,以使其更适合分析。可以使用规范化、缩放或编码等技术来转换数据。

数据验证和确认
数据验证和确认包括通过将数据与外部来源或专家知识进行比较来确保数据的准确性和一致性。

对于机器学习预测,首先,我们分离独立特征和目标特征。在这里,我们仅将“性别”、“年龄”、“兄弟姐妹”、“出发”、“票价”、“登船”视为独立特征,并将“幸存”视为目标变量。因为 PassengerId 不会影响存活率。

X = df3[['Pclass','Sex','Age', 'SibSp','Parch','Fare','Embarked']]
Y = df3['Survived']

数据格式化

数据格式化涉及将数据转换为标准格式或结构,以便用于分析的算法或模型可以轻松处理。在这里我们将讨论常用的数据格式化技术,即缩放和规范化。

  • 扩展

  • 缩放涉及将特征值转换为特定范围。它在改变比例的同时保持原始分布的形状。

  • 当特征具有不同的尺度,并且某些算法对特征的幅度敏感时特别有用。

  • 常见的缩放方法包括最小-最大缩放和标准化(Z 分数缩放)。

最小-最大缩放

最小-最大缩放将值重新缩放到指定范围,通常在 0 到 1 之间。它保留原始分布并确保最小值映射到 0,最大值映射到 1。

from sklearn.preprocessing import MinMaxScalerscaler = MinMaxScaler(feature_range=(0, 1))num_col_ = [col for col in X.columns if X[col].dtype != 'object']
x1 = Xx1[num_col_] = scaler.fit_transform(x1[num_col_])
x1.head()

在这里插入图片描述
标准化(Z 分数缩放):标准化将值转换为平均值为 0 且标准差为 1。它以平均值为中心,并根据标准差对其进行缩放。标准化使数据更适合假设高斯分布或要求特征具有零平均值和单位方差的算法。

Z = (X - μ) / σ

  • X = 数据
  • μ = X 的平均值
  • σ = X 的标准差

六、机器学习数据清理优缺点

6.1 优点

  • 提高模型性能 :删除错误、不一致和不相关的数据,有助于模型更好地从数据中学习。
  • 提高准确性 :有助于确保数据准确、一致且无错误。
  • 更好地表示数据 :数据清理允许将数据转换为更好地表示数据中底层关系和模式的格式。
  • 提高数据质量 :提高数据质量,使其更加可靠和准确。
  • 提高数据安全性 :帮助识别和删除可能危及数据安全的敏感或机密信息。

6.2 缺点

  • 耗时 :耗时的任务,尤其是对于大型和复杂的数据集。
  • 容易出错 :数据清理容易出错,因为它涉及转换和清理数据,这可能导致重要信息的丢失或引入新的错误。
  • 成本和资源密集 :资源密集型流程需要大量时间、精力和专业知识。它还可能需要使用专门的软件工具,这会增加数据清理的成本和复杂性。
  • 过度拟合 :数据清理可能会无意中删除过多数据,从而导致过度拟合。

七、结论

本文讨论了数据清理的四个不同步骤,使数据更可靠并产生良好结果。正确完成数据清理步骤后,我们将拥有一个强大的数据集,可以避免许多常见的陷阱。总体上,数据清理是数据科学流程中的关键步骤,涉及识别和纠正数据中的错误、不一致和不准确性,以提高其质量和可用性。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 设计模式——观察者模式

观察者模式 观察者模式主要组成部分例一&#xff1a;工作流程第一步&#xff1a;定义观察者接口第二步&#xff1a;定义主题接口第三步&#xff1a;实现具体主题第四步&#xff1a;实现具体观察者第五步&#xff1a;主函数UML 图UML 图解析 例二&#xff1a;工作流程第一步&…

动态规划之买卖股票篇-代码随想录算法训练营第三十八天| 买卖股票的最佳时机ⅠⅡⅢⅣ,309.最佳买卖股票时机含冷冻期,714.买卖股票的最佳时机含手续费

121. 买卖股票的最佳时机 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 讲解视频&#xff1a; 动态规划之 LeetCode&#xff1a;121.买卖股票的最佳时机1 题目描述&#xff1a; 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定…

[数据集][目标检测]电力场景输电线异物检测数据集VOC+YOLO格式2060张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2060 标注数量(xml文件个数)&#xff1a;2060 标注数量(txt文件个数)&#xff1a;2060 标注…

K8s节点状态 NotReady排查

k8s节点由 Ready变成 NotReady izbp12ghzy6koox6fqt0suz NotReady slave 97d v1.23.3 izbp12ghzy6koox6fqt0svz Ready control-plane,master 98d v1.23.3节点进入 NotReady 状态可能是由于多种原因引起的&#xff0c;尤其是在资源过量分配&am…

环绕音效是什么意思,电脑环绕音效怎么开

Boom 3D是一款专业的音效增强软件&#xff0c;它拥有先进的音效处理技术和丰富的音效设置选项&#xff0c;可以为用户打造出高度定制化的音频体验&#xff0c;Boom 3D还拥有简洁直观的界面&#xff0c;操作简单易懂&#xff0c;即使是音频技术的新手也能轻松上手。本篇文章就将…

微信小程序引入全局环境变量

有时候一套代码要在多个小程序appId下使用,其中又有一些数据(文字)需要做区分.可以使用下面的方法 把要配置的数据以export default 形式导出 在app.js中,引入project.config.0.js文件,将导出的数据放在globalData中 在页面目录中,即可利用getApp()方法使用全局变量 也可以放数…

buuctf [HDCTF2019]Maze

前言&#xff1a;做题笔记。 常规 下载 解压 查壳 脱壳后用32IDA Pro打开。 得&#xff0c;迷宫类型的题目。(字符串有说。) 咳&#xff0c;此前思路对半分不行了。。。 合理猜测步数为&#xff1a;14。 那可以看看7 * 10的迷宫类型。(手动猜测的时候去取倍数如&#xff1a;0 2…

【三维深度补全模型】PENet

【版权声明】本文为博主原创文章&#xff0c;未经博主允许严禁转载&#xff0c;我们会定期进行侵权检索。 参考书籍&#xff1a;《人工智能点云处理及深度学习算法》 本文为专栏《Python三维点云实战宝典》系列文章&#xff0c;专栏介绍地址“【python三维深度学习】python…

shell脚本中$0 $1 $# $@ $* $? $$ 的各种符号意义详解

文章目录 一、概述1.1、普通字符1.2、元字符 二、转义字符$2.1、实例12.2、实例22.3、实例32.4、实例42.5、实例5 三、linux命令执行返回值$?说明 一、概述 shell中有两类字符&#xff1a;普通字符、元字符。 1.1、普通字符 在Shell中除了本身的字面意思外没有其他特殊意义…

校友林小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;树木管理管理&#xff0c;所属科管理&#xff0c;树木领取管理&#xff0c;树跟踪状态管理&#xff0c;用户信息统计管理&#xff0c;树木捐款管理&#xff0c;留言板管理 微信端…

基于vue框架的毕业设计管理系统5n36i(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;学生,教师,课题信息,题目分类,选题信息,任务书,中期检查,提交论文,论文成绩,答辩成绩,校园公告,教研主任,申报课题 开题报告内容 基于Vue框架的毕业设计管理系统开题报告 一、引言 随着高等教育的不断发展&#xff0c;毕业设计作为培…

AITDK SEO扩展:为网站优化提供一站式解决方案

AITDK SEO扩展&#xff1a;为网站优化提供一站式解决方案 想提升你的网站在搜索引擎中的排名&#xff1f;让我们来看看AITDK SEO扩展&#xff0c;它是你网站优化的得力助手&#xff01;在这篇文章中&#xff0c;我将为你介绍AITDK SEO扩展的功能特点&#xff0c;以及它如何帮助…

警惕!低血糖来袭,这些“隐形信号”你中招了吗?

在这个快节奏的时代&#xff0c;我们往往忙于工作、学习与生活&#xff0c;却容易忽视身体发出的微妙警告。其中&#xff0c;低血糖作为一种常见但易被忽视的健康问题&#xff0c;正悄悄影响着许多人的生活质量。今天&#xff0c;就让我们一起揭开低血糖的神秘面纱&#xff0c;…

Java:包装类

文章目录 引入原因包装类代码演示包装类的其他常见操作 使用到的有关ArrayList的方法 引入原因 泛型和集合不支持基本数据类型&#xff0c;只能支持引用数据类型 包装类 包装类就是把基本类型的数据包装成对象 就是说不再是一个int类型的数&#xff0c;而是一个Integer类型的…

Stable Diffusion 使用详解(8)--- layer diffsuion

背景 layer diffusion 重点在 layer&#xff0c;顾名思义&#xff0c;就是分图层的概念&#xff0c;用过ps 的朋友再熟悉不过了。没使用过的&#xff0c;也没关系&#xff0c;其实很简单&#xff0c;本质就是各图层自身的编辑不会影响其他图层&#xff0c;这好比OS中运行了很多…

文件树控件开发

文件树控件和获取驱动信息功能 然后添加上查看文件信息的按钮 双击这个按钮添加上如下代码 void CRemoteClientDlg::OnBnClickedBtnFileinfo() {int ret SendCommandPacket(1);if (ret -1) {AfxMessageBox(_T("命令处理失败!!!"));return;}ClientSocket* pClient…

AI大模型独角兽 MiniMax 基于 Apache Doris 升级日志系统,PB 数据秒级查询响应

作者&#xff1a;MiniMax 基础架构研发工程师 Koyomi、香克斯、Tinker 导读&#xff1a;早期 MiniMax 基于 Grafana Loki 构建了日志系统&#xff0c;在资源消耗、写入性能及系统稳定性上都面临巨大的挑战。为此 MiniMax 开始寻找全新的日志系统方案&#xff0c;并基于 Apache …

Ubuntu 22安装和配置PyCharm详细教程(图文详解)

摘要&#xff1a;本文提供了在 Ubuntu 22 上通过官方 .tar.gz 文件安装 PyCharm 的详细教程。包括从 JetBrains 官方网站下载适合的 PyCharm 版本&#xff08;Community 或 Professional&#xff09;&#xff0c;在终端中解压并将其移动到 /opt 目录&#xff0c;配置适当的权限…

【C++题解】1147. 求1/1+1/2+2/3+3/5+5/8+8/13+13/21……的前n项的和

欢迎关注本专栏《C从零基础到信奥赛入门级&#xff08;CSP-J&#xff09;》 问题&#xff1a;1147. 求1/11/22/33/55/88/1313/21……的前n项的和 类型&#xff1a;函数 题目描述&#xff1a; 求1/11/22/33/55/88/1313/2121/34…的前 n 项的和。 输入&#xff1a; 输入一个…

Unity读取Android本地图片

unity读取Android本地图片 一、安卓读取路径 安卓路径&#xff1a;“file:///storage/emulated/0/”自己图片的路径 例&#xff1a;“file:///storage/emulated/0/small.jpg” 二、unity搭建 使用UI简单搭个界面 三、新建一个脚本 代码内容如下 using System.Collectio…