数学建模之数据分析【九】:数据清理总结

news2024/11/9 3:56:24

文章目录

  • 一、什么是数据清理
  • 二、为什么数据清理很重要
  • 三、执行数据清洁的步骤
  • 四、如何执行数据清理
  • 五、数据清理的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 plt

plt.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*2

print('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 MinMaxScaler

scaler = MinMaxScaler(feature_range=(0, 1))

num_col_ = [col for col in X.columns if X[col].dtype != 'object']
x1 = X

x1[num_col_] = scaler.fit_transform(x1[num_col_])
x1.head()

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

Z = (X - μ) / σ

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

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

6.1 优点

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

6.2 缺点

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

七、结论

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

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

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

相关文章

真的爽到了!Coze的黑神话 “循环“ 闪亮登场,啥都能循环,让你一次通关!

心心念念了很久&#xff0c;Coze工作流终于支持循环操作啦&#xff0c;泪奔~~ 看&#xff0c;就在工作流节点的“选择器”和“意图识别”当中偷偷摸摸地多了一个“循环” 这玩意可比批处理强太多了&#xff0c;批处理只能在当前节点循环&#xff0c;做一些简单的循环任务还不错…

【日记】狗尾巴草与暗恋(1519 字)

写在前面 消极内容注意 正文 好想吃火龙果。 下周会变得异常艰难。因为事情已经垒到天上去了&#xff0c;还要来检查。 上午&#xff0c;同事送了一点水果&#xff0c;我从来没见过。问了一下别人&#xff0c;有的说是灯笼果&#xff0c;有的说是菇凉果、姑娘果。搜了一下&am…

深入理解Elasticsearch:让搜索性能飞起来!

Elasticsearch 概述 Elasticsearch是一个基于lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。 ELK 技术栈是Elasticsearch、Logstash、Kibana三大开元框架首字母大写简称。 而Elasticsearch 是一个开源的高扩展的分布式全文搜索引擎&#xff0c; 是整个 ELK技术…

polarctf靶场[WEB]Don‘t touch me、机器人、uploader、扫扫看

目录 [web]Dont touch me 考点&#xff1a;查看源代码、前端 [web]机器人 考点&#xff1a;robot协议 工具&#xff1a;御剑&#xff0c;kali dirsearch [web]覆盖 考点&#xff1a;parse_str覆盖 [web]扫扫看 考点&#xff1a;目录扫描 工具&#xff1a;御剑、kali d…

【冒泡排序算法】输入n个数进行排序

要求&#xff1a;输入n个数进行排序 实现&#xff1a;使用冒泡排序算法&#xff0c;使用C语言实现 冒泡排序的基本原理&#xff1a; 比较相邻元素&#xff1a;从数组的开始位置&#xff0c;比较每对相邻的元素。如果前一个元素大于后一个元素&#xff0c;则交换它们。重复过…

数组基本知识2

目录 前言 二维数组 使用原因 定义二维数组 访问数组元素 实例 前言 上一篇&#xff0c;我简单的复习了一维数组&#xff0c;本篇讲述二维数组的基本知识&#xff0c;帮助大家预习和复习。 二维数组 使用原因 本质原因&#xff1a;一维数组&#xff0c;已经无法满足解决…

OSPF路由配置--单区域

目录 因为OSPF有很多重要的特殊区域和内容,所以划分为多篇博客来配置 一. 实验拓扑图 二. 实验配置 三. 实验验证: 因为OSPF有很多重要的特殊区域和内容,所以划分为多篇博客来配置 不理解OSPF路由动态协议的可以回顾一下OSPF详解&#xff0c;下这一系列的实验都不再做解…

SpringBoot集成kafka-消息转发@sendTo()注解

SpringBoot集成kafka-消息转发sendTo 1、消费者2、生产者3、实体类对象4、JSON工具类5、配置文件application.yml6、测试类7、测试 1、消费者 启动消费者进行消息监听&#xff0c;消费者A监听到生产者发送的消息使用sendTo()注解将消息转发给消费者B package com.power.consu…

在树莓派5上使用pytroch进行模型训练—全流程笔记

在树莓派上运行pytroch模型&#x1f680; 在完成了树莓派的一系列基础配置学习之后&#xff0c;按照规划&#xff0c;下一步要做的就是在树莓派上安装一个pytorch&#xff0c;尝试运行一下深度学习的模型&#xff0c;如果可以实现且准速度有一定保证的话&#xff0c;就可以作为…

代码随想录算法训练营第50天|卡码网 98. 所有可达路径

1.卡码网 98. 所有可达路径 题目链接&#xff1a;https://kamacoder.com/problempage.php?pid1170 文章链接&#xff1a;https://www.programmercarl.com/kamacoder/0098.所有可达路径.html#总结 1.图的存储 本题我们使用邻接表 或者 邻接矩阵都可以&#xff0c;因为后台数据…

掌握路演艺术:创新大赛路演稿撰写指南

如何在创新大赛中脱颖而出&#xff1f;一份精心准备的路演稿是关键 前言开场白&#xff1a;抓住注意力的第一步项目概述&#xff1a;清晰传达核心价值市场分析&#xff1a;展示项目的市场潜力商业模式与盈利计划&#xff1a;务实的策略团队介绍&#xff1a;展现团队的实力与文化…

vue3的nginx配置文件配置(nginx只配置前端vue3的nginx.conf文件)

1、本地的访问网址的链接 http://localhost:5173/official-website/ 2、程序的配置 3、nginx.conf配置 #user nobody; worker_processes 1;events {worker_connections 1024; }http {include mime.types;default_type application/octet-stream;log_format main…

全网最细springboot学习笔记—SpringBoot配置SSL(https)

文章主要内容大致为&#xff1a; SpringBoot配置SSL&#xff08;https&#xff09; SpringBoot全局异常处理 SpringBoot 404页面处理 接下来让我们一起探讨三大框架之一的springboot框架&#xff1a; SpringBoot配置SSL&#xff08;https&#xff09; SpringBoot可以通过在appl…

如何使用ssm实现基于java的电脑硬件库存管理系统

TOC ssm145基于java的电脑硬件库存管理系统jsp 第1章 绪论 1.1 课题背景 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。所…

第四十六篇,PID心法解读

猛回头&#xff0c;有近半年的时光没输出了&#xff0c;看着昨天加班调的PID数据&#xff0c;灵光闪现了一下&#xff0c;赶紧记录。 参数整定找最佳&#xff0c;从小到大顺序查   先是比例后积分&#xff0c;最后再把微分加 曲线振荡很频繁&#xff0c;比例度盘要放大   曲…

基于Open Cv的数字图像手势识别系统,Python编程实现,可以识别以下6种手势,含代码和报告

该项目的目标是设计并实现一个能够实时识别特定手势的系统。系统将使用OpenCV库来捕获视频流&#xff0c;并通过图像处理技术来识别特定的手势。具体来说&#xff0c;系统将识别以下六种手势&#xff1a; 挥手 - 手掌水平移动。握拳 - 手指全部弯曲成拳头。坐起 - 模拟做仰卧起…

sft是mean-seeking rl是mode-seeking

原文链接 KL散度是D(P||Q)&#xff0c;P和Q谁在前谁在后是有讲究的&#xff0c;P在前&#xff0c;就从P采样。 D K L ( P ∣ ∣ Q ) E x − p ( x ) ( l o g ( P ( x ) / Q ( x ) ) ) D_{KL}(P||Q)E_{x-p(x)}(log(P(x)/Q(x))) DKL​(P∣∣Q)Ex−p(x)​(log(P(x)/Q(x)))想象一…

关于Java中@Component的使用中出现@Autowired为NULL的问题

目录&#xff1a; 关于Java中Component的使用中出现Autowired为NULL的问题解决过程 关于Java中Component的使用中出现Autowired为NULL的问题 解决过程 我在写一个项目中使用Component配置了一个RedisCompent在这里插入代码片类我将在AccountController和 UserinfoController中…

如何使用ssm实现基于Vue框架的订餐系统+vue

TOC ssm157基于Vue框架的订餐系统vue 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管…

AI数字时代客户体验白皮书5G云算力网络云网终端AIGC人工智能宽带政企物联网专线 IDC智慧城市专家学者教授培训讲师分享

客户体验的时代已然来临 在过去的几十年里&#xff0c;中国企业逐步从产品驱动转向市场驱动&#xff0c;从规模竞争走向创新竞争。然而&#xff0c;随着市场竞争的白热化和产品、服务的高度同质化&#xff0c;企业之间的差异化逐渐被削弱&#xff0c;传统的价格战、渠道战已经…