python空值用前值填充_在机器学习中,如何用Python进行数据预处理?

本文介绍了机器学习中的数据预处理,包括导入标准库、数据集读取、缺失值处理(使用平均值填充)、分类数据、训练集测试集划分和特征缩放。特别强调了在处理缺失值时不应直接删除,而应考虑用平均值等统计量填充。文章以Python的pandas、numpy和matplotlib库为例,提供了具体操作代码。
摘要由CSDN通过智能技术生成

44590d2e8b54f9ec6a24dc5673743c6b.png

数据分析之路持续学习中- - -

近期学习了机器学习中的数据预处理章节,在此进行分享,欢迎大家讨论指正。

顺便说一下,这里我使用的软件是Anacnoda 3中已经安装好的Spyder 3,这个软件用起来很爽,适合用来做数据分析,缺点就是不好进行调试以及管理大型项目。

如果是要用来做网页等大型工程的话,建议:Anacnoda + Pycharm。

数据预处理有哪些步骤?

机器学习中,数据预处理全流程一般包含以下6大步骤:
(1)导入标准库:如:pandas、numpy、matplotlib等;
(2)导入数据集:将需要分析的数据读入;
(3)缺失数据处理:对数据表中的空值进行处理;
(4)分类数据:将需要的维度数据(如:国家)转换为能带入公式中的可度量值;
(5)数据划分训练集、测试集:将数据集的数据按一定比例进行随机拆分,形成训练集与测试集;
(6)特征缩放:将不在同一数量级的数据进行处理,加快程序运行速度,以及尽快得到收敛结果。

一般情况下,我们得到的数据集都是经过处理的比较规整的数据,因此,常用的4个步骤是:

  • 导入标准库;
  • 导入数据集;
  • 数据划分训练集、测试集;
  • 特征缩放;
    下面将对6个步骤进行分步解读:

步骤1:导入标准库

在数据分析或机器学习中,常用的3个标准库如下:
(1)numpy
numpy是Python的一个高性能科学计算和数据分析的基础包,拥有强大的数组和矢量的计算方法可供直接调用。
(2)pandas
基于numpy创建的,含有DataFrame等高级数据结构和操作方法,能够让数据处理问题变得更简单更高效。
(3)matplotlib
是一个类似于Matlab的一个画图工具,是python的一个画图基础包,能够使用它其中的方法画出各种可视化图表;
下面将给出导入标准库的代码:

# Step1:导入标准库,Importing the Libraries  
import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt

步骤2:导入数据集

导入数据集,需要用到pandas标准库中的数据读入函数,我们常用其读入csv文件或者excel文件:

  • 读取csv或者text文件:read_csv();
  • 读取Excel文件:read_excel();

使用方法,以csv文件为例,就是:dataset = pd.read_csv(‘data.csv’)

我们以图中数据data.csv为例,进行导入:

f07be9cffa9739c43dd5c6fcd3005ab8.png


导入数据后,我们还需要将数据的自变量和因变量进行分离,以达到数据分析目的。

# Step2:导入数据集  
dataset = pd.read_csv('data.csv') 
# 自变量与因变量分离,自变量取前三列,因变量为最后一列,是否购买 
x = dataset.iloc[:,:-1].values 
y =  dataset.iloc[:,3].values

得到的结果如图所示:
(1)得到的DataFrame

c2695a61e66b909977ed63547d6480f3.png


(2)得到的自变量和因变量如图:

72f63b9a88e1e63b68e0b6448a143b71.png

步骤3:缺失数据处理

在我们要分析的数据中,有时候会因为数据采集不全等情况,而导致数据出现空值的情况。在数据分析的时候为了避免因为异常数据而带来的影响,我们可能需要想办法补齐这些数据。有人会说那删掉可以么?答案是:最好不要删除数据,因为有可能会删除重要数据,我们尽量保持数据样本的容量大一些,这样分析结果会更精准。

我们可以使用如下方法,填充空值:

  • 使用平均值填充;
  • 使用中位数填充;
  • 使用众数填充

但我们一般用平均数来填充,因为平均数在解释的意义上,比中位数是更具有优势,更具有解释性。这可以理解为大家喜欢用平均数说话,也更具有代表性,比如一般都说人均工资,而不会说人中位数工资是多少…

使用平均数对缺失值进行补充,代码如下:

# 导入数据预处理包  
from sklearn.preprocessing import Imputer  
# 对于Imputer的使用,这里不做详细解读 
# 第一个参数为处理何值,第二个参数为如何处理(mean为平均数),第三个参数0意思是取列的平均值,后面为默认值,感兴趣的可查询官方文档进行研读。 
imputer = Imputer(missing_values = 'NaN', strategy = 'mean', axis = 0, verbose = 0, copy = True) 
# 对X进行拟合 
imputer = imputer.fit(x[:,1:3]) 
# 将拟合结果返回到x中 
x[:,1:3] = imputer.transform(x[:,1:3])

处理后结果如下:

9b52d82c3c54b5f4bd210e239a438bc7.png


我们可以看到原来的nan值已经替换为了平均值,缺失数据的处理就结束了

步骤4:分类数据

我们可以看到在数据中,因变量x中,有一列为Country,这一列是无法带入公式中计算的,因此我们需要将其进行分类,处理为可带入公式计算的矢量。
这里我们需要用到sklearn中的两个方法:

  • LabelEncoder:将数据进行标准化处理;
  • OneHotEncoder:将标准化数据,进行虚拟化处理。

处理代码如下:

# Step4:分类数据 Encoding Categorical data 
from sklearn.preprocessing import LabelEncoder,OneHotEncoder  
# 创建一个对象 
labelencoder_x = LabelEncoder()  
# 告诉程序处理哪一列数据 
x[:,0] = labelencoder_x.fit_transform(x[:,0]) 
# 通过处理,使得无意义的维度代码,变成有意义的数据,以便带入公式中计算 
onehotencoder = OneHotEncoder(categorical_features = [0]) 
x = onehotencoder.fit_transform(x).toarray() 
# 同上处理,不同的是:因变量不用转换,因为python会自动识别其为分类数据,因此只要将其进行LabelEncoder处理即可 
labelencoder_y = LabelEncoder() y = labelencoder_y.fit_transform(y)

处理结果如图:

cf59cde8889fd47437cfb4563210cbef.png

步骤5:将数据划分为训练集和测试集

所谓机器学习,即让机器“自己学”,因此需要提供一定量的训练集供我们的模型进行训练,训练完成后我们还需要将一部分数据进行检验,查看效果如何。

一般的训练集与测试集的比例如下:

  • 训练集:0.5 - 0.8(最少最少0.5)
  • 测试集:0.2-0.8(一般选择0.2或者0.25或者1/3)

用Python实现训练集与测试集的划分如下:

# Step5:将数据划分为训练集与测试集 
from sklearn.preprocessing import train_test_split 
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.2, random_state = 0)

所得训练集与测试集如图所示:

be36c1aa1fcfa9eda8db2b85fdca5b5b.png

步骤6:特征缩放

在计算过程中,由于数据之间不在一个数量级,那么有可能所得的结果会比较难看,收敛情况比较难得到,计算性能也会相对较慢,因此会进行特征缩放操作。

python中进行特征缩放会用到Sklearn中的StandardScaler,因此需要进行导入

python的特征缩放代码如下:

# Step6:特征缩放  
from sklearn.preprocessing import StandardScaler 
sc_x = StandardScaler() 
x_train = sc_x.fit_transform(x_train) 
x_test = sc_x.fit_transform(x_test)

进行特征缩放后,所得结果如下图所示:

b239de77961e9fa51fb72ddc4e6f22f9.png


以上就是机器学习的Python数据预处理代码。经过预处理后,就可以进行后续的数据挖掘操作了。

欢迎大家关注我的知乎专栏《数据分析学习之路》,我将持续更新我数据分析学习之路的点点滴滴,与大家共同进步。谢谢大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值