Python 数据清洗 & 预处理入门完整指南

Python数据清洗 & 预处理入门完整指南! 一种常见的方法是将数据集按 80/20 进行划分,其中 80% 的数据用作训练,20% 的数据用作测试。这表明,如果原始列的值为猫,那么就会在麋鹿一列得到 0,狗一列得到 0,猫一列得到 1。本文是一个初学者指南,将带你领略如何在任意的数据集上,针对任意一个机器学习模型,完成数据预处理工作。现在,我们有了需要学习的模型。数据预处理是建立机器学习模型的第一步(也很可能是最重要的一步),对最终结果有决定性的作用:如果你的数据集没有完成数据清洗和预处理,那么你的模型很可能也不会有效——就是这么简单。 阅读详情

原文链接:https://towardsdatascience.com/the-complete-beginners-guide-to-data-cleaning-and-preprocessing-2070b7d4c6d

作者:Anne Bonner 机器之心编译

凡事预则立,不预则废,训练机器学习模型也是如此。数据清洗和预处理是模型训练之前的必要过程,否则模型可能就「废」了。本文是一个初学者指南,将带你领略如何在任意的数据集上,针对任意一个机器学习模型,完成数据预处理工作。

数据预处理是建立机器学习模型的第一步(也很可能是最重要的一步),对最终结果有决定性的作用:如果你的数据集没有完成数据清洗和预处理,那么你的模型很可能也不会有效——就是这么简单。

人们通常认为,数据预处理是一个非常枯燥的部分。但它就是「做好准备」和「完全没有准备」之间的差别,也是表现专业和业余之间的差别。就像为度假做好事先准备一样,如果你提前将行程细节确定好,就能够预防旅途变成一场噩梦。

那么,应该怎么做呢?

本文将带你领略,如何在任意的数据集上,针对任意一个机器学习模型,完成数据预处理工作。

第一步,导入

让我们从导入数据预处理所需要的库开始吧。库是非常棒的使用工具:将输入传递给库,它则完成相应的工作。你可以接触到非常多的库,但在 PYTHON 中,有三个是最基础的库。任何时候,你都很可能最终还是使用到它们。这三个在使用 PYTHON 时最流行的库就是 Numpy、Matplotlib 和 Pandas。Numpy 是满足所有数学运算所需要的库,由于代码是基于数学公式运行的,因此就会使用到它。Maplotlib(具体而言,Matplotlib.pyplot)则是满足绘图所需要的库。Pandas 则是最好的导入并处理数据集的一个库。对于数据预处理而言,Pandas 和 Numpy 基本是必需的。

最适当的方式是,在导入这些库的时候,赋予其缩写的称呼形式,在之后的使用中,这可以节省一定的时间成本。这一步非常简单,可以用如下方式实现:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

现在,可以通过输入如下语句读入数据集

dataset = pd.read_csv('my_data.csv')

这个语句告诉 Pandas(pd) 来读入数据集。在本文中,我也附上数据集的前几行数据。

2235be73c7b77b6c2c29d48733512c05.png

我们有了数据集,但需要创建一个矩阵来保存自变量,以及一个向量来保存因变量。为了创建保存自变量的矩阵,输入语句:

X = dataset.iloc[:, :-1].values

第一个冒号表示提取数据集的全部行,「:-1」则表示提取除最后一列以外的所有列。最后的「.values」表示希望提取所有的值。接下来,我们希望创建保存因变量的向量,取数据的最后一列。输入语句:

y = dataset.iloc[:, 3].values

记住,在查看数据集的时候,索引(index)是从 0 开始的。所以,如果希望统计列数,从 0 开始计数而不是 1。「[:, :3]」会返回 animal、age 和 worth 三列。其中 0 表示 animal,1 表示 age,2 表示 worth。对于这种计数方法,即使你没见过,也会在很短的时间内适应。

如果有缺失数据会怎么样?

事实上,我们总会遇到数据缺失。对此,我们可以将存在缺失的行直接删除,但这不是一个好办法,还很容易引发问题。因此需要一个更好的解决方案。最常用的方法是,用其所在列的均值来填充缺失。为此,你可以利用 scikit-learn 预处理模型中的 inputer 类来很轻松地实现。(如果你还不知道,那么我强烈建议你搞明白它:scikit-learn 包含非常棒的机器学习模型)。在机器学习中,你可能并不适应诸如「方法」、「类」和「对象」这些术语。这不是什么大问题!

  • 类就是我们希望为某目的所建立的模型。如果我们希望搭建一个棚子,那么搭建规划就是一个类。

  • 对象是类的一个实例。在这个例子中,根据规划所搭建出来的一个棚子就是一个对象。同一个类可以有很多对象,就像可以根据规划搭建出很多个棚子一样。

  • 方法是我们可以在对象上使用的工具,或在对象上实现的函数:传递给它某些输入,它返回一个输出。这就像,当我们的棚子变得有点不通气的时候,可以使用「打开窗户」这个方法。

为了使用 imputer,输入类似如下语句。

from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values = np.nan, strategy = ‘mean’, axis = 0)

均值填充是默认的填充策略,所以其实不需要指定,加在此处是为了方便了解可以包含什么信息。missing_values 的默认值是 nan。如果你的数据集中存在「NaN」形式的缺失值,那么你应该关注 np.nan,可以在此查看官方文档:  
https://scikit-learn.org/stable/modules/generated/sklearn.impute.SimpleImputer.html

为了拟合这个 imputer,输入:

imputer = imputer.fit(X[:, 1:3])

我们只希望在数据存在缺失的列上拟合 imputer。这里的第一个冒号表示包含所有行,而「1:3」则表示我们取索引为 1 和 2 的列。不要担心,你很快就会习惯 PTYHON 的计数方法的。

现在,我们希望调用实际上可以替换填充缺失数据的方法。通过输入以下语句完成:

X[:, 1:3] = imputer.transform(X[:, 1:3])
a64d4fd48439dd66ca238a9ef87e8e97.jpeg

多尝试一些不同的填充策略。也许在某些项目中,你会发现,使用缺失值所在列的中位数或众数来填充缺失值会更加合理。填充策略之类的决策看似细微,但其实意义重大。因为流行通用的方法并不一定就是正确的选择,对于模型而言,均值也不一定是最优的缺失填充选择。

毕竟,几乎所有正阅读本文的人,都有高于平均水平的手臂数。

如果包含属性数据,会怎么样呢?

这是一个好问题。没有办法明确地计算诸如猫、狗、麋鹿的均值。那么可以怎么做呢?可以将属性数据编码为数值!你可能希望使用 sklearn.preprocessing 所提供的 LabelEncoder 类。从你希望进行编码的某列数据入手,调用 label encoder 并拟合在你的数据上。

from sklearn.preprocessing import LabelEncoder
labelencoder_X = LabelEncoder()
X[:, 0] = labelencoder_X.fit_transform(X[:, 0])

(还记得括号里的数字所表示的含义吗?「:」表示希望提取所有行的数据,0 表示希望提取第一列)

这就是将第一列中的属性变量替换为数值所需的全部工作了。例如,麋鹿将用 0 表示,狗将用 2 表示,猫将用 3 表示。

你发现什么潜在问题了吗?

标注体系暗含以下信息:所使用的数值层级关系可能会影响模型结果:3 比 0 的数值大,但猫并不一定比麋鹿大。

我们需要创建哑变量。

我们可以为猫创建一列数据,为麋鹿创建一列数据,……以此类推。然后,将每一列分别以 0/1 填充(认为 1=Yes,0 = No)。这表明,如果原始列的值为猫,那么就会在麋鹿一列得到 0,狗一列得到 0,猫一列得到 1。

看上去非常复杂。输入 OneHotEncoder 吧!

导入编码器,并制定对应列的索引。

from sklearn.preprocessing import OneHotEncoder
onehotencoder = OneHotEncoder(categorical_features = [0])

接着是一点拟合和转换。

X = onehotencoder.fit_transform(X).toarray()

现在,你的那一列数据已经被替换为了这种形式:数据组中的每一个属性数据对应一列,并以 1 和 0 取代属性变量。非常贴心,对吧?如果我们的 Y 列也是如「Y」和「N」的属性变量,那么我们也可以在其上使用这个编码器。

labelencoder_y = LabelEncoder()
y = labelencoder_y.fit_transform(y)

这会直接拟合并将 y 表示为编码变量:1 表示「Y」,0 表示「N」。

53f221a03d134c2b5459e308f5a20210.jpeg

训练集与测试集的划分

现在,你可以开始将数据集划分为训练集和测试集了。这已经在之前的图像分类教程一文中论述过了。不过记得,一定要将你的数据分为训练集和测试集,永远不要用测试集来训练!需要避免过拟合(可以认为,过拟合就像在一次测验前,记忆了许多细节,但没有理解其中的信息。如果只是记忆细节,那么当你自己在家复习知识卡片时,效果会很好,但在所有会考察新信息的真实测验中,都会不及格。)

现在,我们有了需要学习的模型。模型需要在数据上训练,并在另外的数据上完成测试。对训练集的记忆并不等于学习。模型在训练集上学习得越好,就应该在测试集给出更好的预测结果。过拟合永远都不是你想要的结果,学习才是!

首先,导入:

from sklearn.model_selection import train_test_split

现在,可以创建 X_train、X_test、y_train 和 y_test 集合了。

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)

一种常见的方法是将数据集按 80/20 进行划分,其中 80% 的数据用作训练,20% 的数据用作测试。这也是为何指定 test_size 为 0.2 的原因。你也可以根据自己的需求来任意划分。你并不需要设置 random_state,这里设置的原因是为了可以完全复现结果。

特征缩放

什么是特征缩放?为什么需要特征缩放?

看看我们的数据。我们有一列动物年龄,范围是 4~17,还有一列动物价值,范围是83,000。价值一栏的数值不仅远大于年龄一栏,而且它还包含更加广阔的数据范围。这表明,欧式距离将完全由价值这一特征所主导,而忽视年龄数据的主导效果。如果欧式距离在特定机器学习模型中并没有具体作用会怎么样?缩放特征将仍能够加速模型,因此,你可以在数据预处理中,加入特征缩放这一步。

特征缩放的方法有很多。但它们都意味着我们将所有的特征放在同一量纲上,进而没有一个会被另一个所主导。

导入相关库开始:

from sklearn.preprocessing import StandardScaler

创建一个需要缩放对象并调用 Standard Scaler 。

sc_X = StandardScaler()

直接在数据集上进行拟合以及变换。获取对象并应用方法。

X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)

不需要在测试集上进行拟合,只进行变换。

sc_y = StandardScaler()
y_train = sc_y.fit_transform(y_train)

对于哑变量而言,是否需要进行缩放?

对于这个问题,有些人认为需要,有些则认为不需要。这取决于你对模型可解释性的看重诚度。将所有数据缩放至同一量纲固然有好处,但缺点是,这丢失了解释每个观测样本归属于哪个变量的便捷性。

对于 Y 呢?如果因变量是 0 和 1,那么并不需要进行特征缩放。这是一个具有明确相关值的分类问题。但如果其取值范围非常大,那么答案是你需要做缩放。

恭喜你,你已经完成了数据预处理的工作!

通过少量的几行代码,你已经领略了数据清洗和预处理的基础。毫无疑问,在数据预处理这一步中,你可以加入很多自己的想法:你可能会想如何填充缺失值。思考是否缩放特征以及如何缩放特征?是否引入哑变量?是否要对数据做编码?是否编码哑变量……有非常多需要考虑的细节。现在,你已经完全了解了这些,可以亲自动手试试了,准备数据吧!


大时代来临,如果你不懂AI不要紧,但是一定要了解AI,使用AI,接触它。不要错过这个疯狂的风口,欢迎订阅我们的小册 👉:(玩转Chatgpt秘籍来了),43篇干货,700多个订阅小伙伴都已经上车了。2杯咖啡的钱而已,永久阅读。

推荐阅读:
入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径

干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影

趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!

AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影

小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|

Python数据清洗 & 预处理入门完整指南 凡事预则立,不预则废,训练机器学习模型也是如此。数据清洗和预处理是模型训练之前的必要过程,否则模型可能就「废」了。本文是一个初学者指南,将带你领略如何在任意的数据集上,针对任意一个机器学习模型,完成数据预处理工作。 阅读详情

相关推荐

python数据清洗入门教程(完整版)

为了方便阅读和复习,本教程中的代码均采用图片形式,源代码和所需要的数据在下面的链接里 链接:https://pan.baidu.com/s/1-3PMsSs5XKjhszVXQIABpw 提取码:23uk数据清洗意义数据清洗常用工具数据库建立连接参数 conn =create_engine(‘mysql+pymysql://user:passward@IP:3306/test01’) root: 用户名 passward: 密码 IP : 服务器IP,本地电脑用localhost 3306: 端口号 tes

m0_54883970的博客 9314

Python实战:数据清洗与预处理

本文详细介绍了数据清洗与预处理在Python中的实现方法,包括数据清洗、数据转换、特征工程等。通过具体的代码示例,帮助我们掌握数据预处理的技术,为构建高效、准确的机器学习模型奠定基础。

oandy0的博客 9092

数据清洗和预处理详解

数据预处理是建立机器学习模型的第一步(也很可能是最重要的一步),对最终结果有决定性的作用:如果你的数据集没有完成数据清洗和预处理,那么你的模型很可能也不会有效——就是这么简单。 人们通常认为,数据预处理是一个非常枯燥的部分。但它就是「做好准备」和「完全没有准备」之间的差别,也是表现专业和业余之间的差别。就像为度假做好事先准备一样,如果你提前将行程细节确定好,就能够预防旅途变成一场噩梦。 那么,应...

鸿蒙开发知识记录 1万+

Python 数据清洗与预处理

它提供了高性能的多维数组对象(ndarray)以及对这些数组进行操作的各种函数和工具,使得在Python中进行大规模数据处理和数值计算变得更加简单和高效。通过这些例子,我们可以看到NumPy库在数组创建、数组运算、切片和索引、数学和统计函数、线性代数以及生成特殊数组等方面的强大功能。这使得数组运算更加灵活和高效。NumPy的数组切片和索引功能与Python内置的列表类似,但提供了更多的灵活性和高效性。NumPy提供了丰富的数组运算函数,包括元素级运算、数组与标量的运算、矩阵运算等。

Chujun123528的博客 2490

数据清洗&预处理入门完整指南

数据清洗&预处理入门完整指南 凡事预则立,不预则废,训练机器学习模型也是如此。数据清洗和预处理是模型训练之前的必要过程,否则模型可能就「废」了。本文是一个初学者指南,将带你领略如何在任意的数据集上,针对任意一个机器学习模型,完成数据预处理工作。 数据预处理是建立机器学习模型的第一步(也很可能是最重要的一步),对最终结果有决定性的作用:如果你的数据集没有完成数据清洗和预处理,那么你的模型...

jiawoxuexiqq30294961的博客 673

Xilinx System Generator多速率系统(Multi-Rate Systems)的使用

在本实验练习中,您将学习在System Generator中如何使用多个时钟域有效地实现具有多个数据速率的设计。

白码王子小张的博客 1093

使用 Python 进行数据清洗与预处理

数据清洗与预处理是数据科学中的关键步骤,确保数据质量以提高分析和建模的准确性。常见技术包括处理缺失值、删除重复数据、数据标准化与归一化、处理分类数据以及识别异常值。在Python中,可以使用Pandas和Scikit-learn等库实现这些操作。例如,通过dropna()删除缺失值,fillna()填充缺失值,drop_duplicates()删除重复数据,StandardScaler和MinMaxScaler进行标准化与归一化,LabelEncoder和OneHotEncoder处理分类数据,以及zsco

2501_91896133的博客 408

芯片设计中的setup和hold检查:为什么你的电路会跑飞?

本文深入解析了芯片设计中Setup与Hold检查的核心原理,它们是确保电路可靠运行的“黄金窗口”。通过剖析触发器物理本质、时序路径公式及检查方法,解释了Setup违例(数据太慢)和Hold违例(数据太快)如何导致电路“跑飞”,并提供了从RTL优化到物理实现的实战修复策略与协同优化技巧。

weixin_29268267的博客 477

python数据清洗与预处理指南

数据清洗是数据科学项目的关键环节,占据80%的工作时间。本文介绍了数据质量问题的三大类型:数据缺失、重复和异常,并提供了Python代码示例进行检测和处理。 摘要要点: 数据质量问题检测:通过Pandas和可视化工具识别缺失值、异常值和重复数据 缺失数据处理:展示删除(dropna)和填充(fillna)两种方法 实用代码示例:包含创建含质量问题样本数据、缺失值检测可视化和多种处理策略的完整代码实现 文中代码演示了如何创建含缺失值和异常值的数据集,并通过热力图和柱状图可视化缺失情况,最后展示了删除行/列和填

spinage的博客 1575

T分布和T检验的理解,Python代码实现T检验的计算

每天学习一点,每天进步一点。 声明:本人所有的原创,都是自己在学习过程中的记录点滴,不一定都是对的,肯定也会有一些错误的想法。所以大家看一看就好,不可尽信。当然也欢迎指出。 T分布 定义,有来自标准正态分布的样本X ~ N(0,1),和来自卡方n分布的Y ~ X2(n), 那么有 Z= X/√(Y/n) 成为符合自由度为n的T分布 我们用Python代码画一下他的图形 # 给一个自由度,返回这个自由度的卡方分布 X²(n) def product(n): n = np.ceil(n).astype

PY_smallH的博客 8485

全面分析总结解决Could not transfer artifact org.apache.maven.plugins等此类问题的方法

全面分析总结解决Could not transfer artifact org.apache.maven.plugins,Could not transfer artifact xxx from/to xxx等此类问题的方法

ccjjjjdff的博客 1万+

Python数据清洗 & 预处理入门完整指南【建议收藏】

本文是一个初学者指南,将带你领略如何在任意的数据集上,针对任意一个机器学习模型,完成数据预处理工作。

阿极的博客 6744

多智能体记忆架构设计:从分层模型到一致性实践

多智能体记忆架构本质上是一个有状态、分布式、支持遗忘的知识系统。从分层模型入手,结合RBAC隔离、版本向量一致性以及混合存储,可以构建出既灵活又健壮的生产级方案。可微分记忆:让记忆的读写操作嵌入端到端训练。基于大模型的记忆压缩:用LLM自动生成情景摘要,取代规则式遗忘。联邦记忆:不同组织之间的多智能体系统在不共享原始数据的情况下协同记忆。希望本文能为你的多智能体项目提供一块坚实的基石。欢迎在评论区分享你在实践中遇到的记忆架构难题。

Ven%的博客 171

python数据预处理的方法_数据清洗&预处理入门完整指南

数据预处理是建立机器学习模型的第一步(也很可能是最重要的一步),对最终结果有决定性的作用:如果你的数据集没有完成数据清洗和预处理,那么你的模型很可能也不会有效——就是这么简单。人们通常认为,数据预处理是一个非常枯燥的部分。但它就是「做好准备」和「完全没有准备」之间的差别,也是表现专业和业余之间的差别。就像为度假做好事先准备一样,如果你提前将行程细节确定好,就能够预防旅途变成一场噩梦。那么,应该怎么...

weixin_39605326的博客 260

基于STM32的太阳能充电宝设计_资料编号31

系统硬件包括主控 STM32F103C8T6、0.96 OLED 显示屏、蜂鸣器、电源自锁开关、温度传感器 DS18B20、继电器、5 V DC 升压模块 、TB4056、18650锂电池、9 V太阳能板、稳压降压 5 V三极管。电源供应:锂电池为系统供电,9 伏太阳能板经 5 伏降压稳压三极管降压为 5 伏后传送到 TP4056,TP4056 为锂电池供电,因锂电池电压 3.7 伏,通过 5 伏 DC 升压模块升压到 5 伏为整个系统提供 5 伏电压。

嵌入式阿齐Archie 1万+
上一篇: 突发 Chatgpt之父被开,GPT放开注册,注册难度大幅降低!
下一篇: 阿里今年少了1.5万人
菜鸟学Python
博客等级 码龄9年 8062粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值