Python数据清洗&预处理入门教程python

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

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

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

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

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

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

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

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

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

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

为了拟合这个imputer,输入:

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

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

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

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

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

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

fromsklearn.preprocessingimportLabelEncoderlabelencoder_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吧!

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

fromsklearn.preprocessingimportOneHotEncoderonehotencoder=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」。

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

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

首先,导入:

fromsklearn.model_selectionimporttrain_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,这里设置的原因是为了可以完全复现结果。

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

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

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

fromsklearn.preprocessingimportStandardScaler创建一个需要缩放对象并调用StandardScaler。

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)

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

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

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

THE END
1.数据清洗的重要性与技巧:提升大数据分析的准确性和效率节省时间和资源:在数据分析的早期阶段进行数据清洗可以避免在后续阶段进行昂贵的修正。自动化数据清洗流程可以进一步节省时间和资源,尤其是在处理大量数据时。 提高决策透明度:基于干净数据的决策更有可能产生预期的结果。数据清洗有助于去除偏见和噪声,从而提高决策的透明度和可解释性。 https://blog.csdn.net/Shaidou_Data/article/details/144110971
2.数据清洗涵盖了哪些方面?探索数据处理的全貌与重要步骤数据清洗是数据分析中的重要环节,为了提高效率和准确性,有许多工具和技术可供选择。 常见的数据清洗软件包括商业软件如IBM InfoSphere QualityStage和OpenRefine等,它们提供了用户友好的界面和丰富的功能,能够帮助用户快速进行数据清洗和转换。 此外,编程语言中的数据清洗库也是常用的工具,例如Python中的pandas库和R语言中的https://www.zhaocaifu.cn/article/99497.html
3.深度学习数据清洗的目的mob649e81673fa5的技术博客深度学习的成功依赖于高质量的数据。在深度学习之前,数据清洗是一个至关重要的步骤。本文将详细介绍数据清洗的目的,流程及实现步骤,帮助初学者更好地理解这一过程。 数据清洗目的 数据清洗的主要目的是去除噪声和不一致的数据,确保输入到深度学习模型中的数据是准确和高效的。具体包括: https://blog.51cto.com/u_16175512/12697067
4.数据清洗:让数据更干净更好用@慕课网原创慕课网数据清理是什么? 数据清洗是指一个过程,会移除数据集中的错误、不一致的数据和不完整数据。目标是提升数据的质量,使其更适合分析和进一步使用。 数据清洗的关键任务 1. 关于处理缺失数据: 用合适的替代值(比如平均值或中位数)来填补缺失值,或者直接删除含有缺失值的行或列。 https://m.imooc.com/mip/article/371415
5.数据清洗工具:基于规则引擎的数据预处理什么是数据清洗工具? 数据清洗工具是一种用于数据预处理的软件工具,它能够通过规则引擎对数据进行清洗、筛选、转换以及修复,以准备好数据用于分析和建模。数据清洗工具通常能够识别和处理数据中的错误、缺失、重复、不一致等问题,提高数据的质量和可靠性。 数据清洗工具的作用 https://www.jianshu.com/p/11574e1fa674
6.数据预处理在AI中的重要性及实操方法在人工智能新手入门教程中,数据预处理往往被忽视,但它是构建有效模型和提高系统性能的关键步骤。无论是机器学习还是深度学习,如果没有进行恰当的数据预处理,模型可能无法达到最佳效果。 什么是数据预处理? 简单来说,数据预处理就是对收集到的原始数据进行清洗、转换和特征工程,以便更好地适应后续算法使用。这个过程包括https://www.zuenw.cn/ke-ji/527288.html
7.数据清洗有哪些难点?为什么要做数据清洗?1. 数据过滤 当用户需要进行空值、重复值过滤,或是筛选出符合目标的值以进一步处理时,可以直接使用「数据转换」中的数据过滤功能进行数据处理。这是数据清洗中非常基础且常用的功能,有助于提高数据的质量和可用性。 2. 新增计算列 FDL提供了「新增计算列」功能,可以使用多种函数实现对数据的清洗计算。这个功能允许用https://www.fanruan.com/bw/article/178563
8.为什么要进行数据清洗呢?今天讲数据清洗,为什么要进行数据清洗呢?我们在书上看到的数据,譬如常见的iris数据集,房价数据,电影评分数据集等等,数据质量都很高,没有缺失值,没有异常点,也没有噪音,而在真实数据中,我们拿到的数据可能包含了大量的缺失值,可能包含大量的噪音,也可能因为人工录入错误导致有异常点存在,对我们挖据出有效信息造成了一https://m.elecfans.com/article/717997.html
9.劳顿管理信息系统习题集第6章商务智能基传选.pdf33.理清数据之间的关系,并最大限度减少冗余以及棘手的多对多关系的过程被 称之为 A)规范化 B)数据清理 C)数据清洗 D)数据定义 E)最优化 Answer: A Difficulty: Easy 34.用于描述整个数据库中的关系的视图被称之为 A)数据字典 B)交互关系图 C)实体关系图 D)数据定义图 E)数据分析表 Answer: C Difficulthttps://m.360docs.net/doc/3917096721.html
10.Python处理股票数据分析有哪些方法?量化交易Python为股票数据的处理和分析提供了丰富的工具和方法。无论是获取数据、清洗数据还是进行各种分析,都有相应的库和技术可以使用。掌握这些方法有助于投资者和分析师更好地挖掘股票数据中的价值。 相关问答 如何用tushare获取股票历史数据? tushare有专门的函数来获取历史数据,如ts.get_hist_data。只需输入股票代码等必https://www.caiair.com/post/python-gupiao-shuju-373218-18174.html
11.excel数据清洗(excel数据清洗的方法包括哪些)本篇文章给大家谈谈excel数据清洗,以及excel数据清洗的方法包括哪些对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 今天给各位分享excel数据清洗的知识,其中也会对excel数据清洗的方法包括哪些进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧! https://www.huoban.com/news/post/126556.html
12.国外客商数据清洗示例公司估计大约?有关客户和潜在客户的所有业务数据不准确, 55%的领导者不信任其组织拥有的数据, 只有50% 的人认为他们的 CRM/ERP 数据是干净的数据并且可以充分利用。 此外,多达95%的公司注意到与低数据质量相关的负面影响。 数据清理的好处 定期数据清洗的好处主要是解决脏数据在企业中产生的问题。低质量数据: https://36kr.com/p/2707385155614849
13.新澳全年免费资料大全,快速整合方案实施体现版LTD6.36首先,企业对现有销售、客服和市场调研的数据进行了需求分析,确定需要整合的信息类型。随后,相关部门联合收集了来自不同渠道的数据,包括内部系统与第三方市场报告。 在完成数据的清洗和整合后,企业应用了先进的数据分析软件,生成了不同用户群体的消费画像及趋势分析。这一过程帮助企业在产品设计上做出了有针对性的调整,同http://sddyzdbz.com/post/8974.html
14.内容数据范文12篇(全文)南方报业传媒集团是较早进行新媒体和全媒体发展探索的报业传媒集团之一, 通过这几年在平面媒体、互联网媒体、手机移动媒体、广播电视、户外LED、电子阅报栏等6种媒介形态上进行积极而富有特色的探索, 积累了海量的平面媒体和新媒体数据, 加上多年来, 集团一直重视历史数据整理聚合工作, 已叠加形成了庞大的内容数据资https://www.99xueshu.com/w/ikeye1u5qrlv.html
15.玩转逻辑回归之金融评分卡模型消费金融风控联盟数据预处理主要包括数据清洗,变量分箱和 WOE 编码三个步骤。 2.3.1 数据清洗 数据清洗主要是对原始数据中脏数据,缺失值,异常值进行处理。关于对缺失值和异常值的处理,我们采用的方法非常简单粗暴,即删除缺失率超过某一阈值(阈值自行设定,可以为30%,50%,90%等)的变量,将剩余变量中的缺失值和异常值作为一种状态https://www.shangyexinzhi.com/article/5177142.html