【数据分析师-数据分析项目案例】大数据预处理

网友投稿 225 2022-11-16

【数据分析师-数据分析项目案例】大数据预处理

大数据预处理

​​0 前言​​​​1 数据标准化​​

​​1.1 标准化定义​​​​1.2 为什么要进行数据标准化?​​​​1.3 实例操作​​

​​2 数据缩放化​​

​​2.1 0-1缩放​​​​2.2 实例操作​​

​​3 数据归一化​​

​​3.1 数据归一化定义​​​​3.2 实例操作​​

​​4 二值化​​

​​4.1 二值化定义​​​​4.2 实际操作​​

​​5 独热编码​​

​​5.1 独热编码定义​​​​5.2 实例操作​​

​​6、标签编码​​

​​6.1 标签编码定义​​​​6.2 实例操作​​

​​7 缺失值处理​​

​​7.1 处理方式​​​​7.2 实例操作​​

作者:Be_melting

0 前言

在进行数据分析项目案例之前,需要了解数据的情况,有时候拿到的数据并不是想象中的完美数据,那么就需要进行预处理后才能使用。为了系统的缕清预处理的一般的步骤,这里进行详细的梳理,采用sklearn工具包和手写代码验证的方式进行。

1 数据标准化

1.1 标准化定义

1.2 为什么要进行数据标准化?

1.3 实例操作

import numpy as npfrom sklearn import preprocessingdata = np.array([[3, -1.5, 2, -5.4], [0, 4, -0.3, 2.1], [1, 3.3, -1.9, -4.3]])

输出结果为:(数据随机设定的,方便后面进行手动验证)

按照标准化的公式,要先计算均值和方差,那么有个问题就来了:计算的数据是横向(一行数据,axis = 1),还是纵向(一列数据,axis = 0)的呢?每一列(纵向)都代表着一个字段的数据,而每一行却包含了所有字段中的一个数据,而在计算均值和方差时候应该选取的是某个字段进行,也就是需要计算纵向的数据

print('均值: ',data.mean(axis = 0))print('标准差: ', data.std(axis = 0))

输出结果为:

接下来就可以进行手动验证

import mathmath.sqrt(((3-1.33333333)**2+(0-1.33333333)**2+(1-1.33333333)**2)/3)

输出结果为:1.247219128924647(这里只进行第一列的标准差的验证,其余列也是一样的,均值可以口算)

最终标准化后的结果为:(以第一列第一行的数据进行展示)

以上的过程虽然原理很简单,操作起来也不是很难,但是要是每次进行数据处理之前都得一个数据一个数据的挨个处理,就显着很浪费时间,因此就可以使用​​preprocessing​​函数进行处理

核心代码:​​preprocessing.scale()​​

data_standarized = preprocessing.scale(data)print('均值: ',data_standarized.mean(axis = 0))print('标准差: ', data_standarized.std(axis = 0))

输出的结果为:(一行代码搞定标准化。由于python计算精度的问题,均值这里实际上是为0的,10的负17次方,相当于很微小的数值了)

2 数据缩放化

2.1 0-1缩放

2.2 实例操作

如果直接使用numpy进行操作,依据计算的公式求解如下

除了手动计算外,也可以直接调用sklearn中的模块,也是在​​preprocessing​​​函数中,使用​​MinMaxScaler​​方法

核心代码:​​preprocessing.MinMaxScaler()​​

data_scaler = preprocessing.MinMaxScaler(feature_range = (0,2))data_scaled = data_scaler.fit_transform(data)

输出结果为:(​​MinMaxScaler​​括号里可以进行参数的调整,根据自己的需求进行设置,比如将区间缩放至0-2,得到的结果就是刚刚利用numpy求解的2倍)

3 数据归一化

3.1 数据归一化定义

如果要调整特征向量中的值时,可以使用数据归一化,以便可以使用通用比例尺对其进行测量。机器学习中最常用的规范化形式之一是调整特征向量的值,使其总和为1(方便查找重要特征)。常见的处理方式有如下几种:L1模式, L2模式。

3.2 实例操作

核心代码:​​preprocessing.normalize()​​

L1 模式

data_normalized = preprocessing.normalize(data,'l1',axis = 0)print(data_normalized)data_norm_abs = np.abs(data_normalized)print(data_norm_abs.sum(axis=0))

输出的结果为:(可以看出每一列转化后的数据相加都为1)

L2模式

data_normalized = preprocessing.normalize(data,'l2',axis = 0)print(data_normalized)#0.31622777*3 = 0.9486833...(data_normalized*data_normalized).sum(axis = 0)

输出的结果为:(每一列转化后的数据按照公式计算也都为1,比例保持不变)

4 二值化

4.1 二值化定义

当我们要将数字特征向量转换为布尔向量时,可以使用二值化(就是根据自己指定的阈值,如果超过这个阈值就为1,小于这个阈值就为0)。在数字图像处理领域,图像二值化是将彩色或灰度图像转换为二进制图像(即仅具有两种颜色(通常是黑白)的图像)的过程。

此技术用于识别对象,形状,尤其是字符。通过二值化,可以将感兴趣的对象与发现对象的背景区分开,比如常见的人物黑白画像。

4.2 实际操作

核心代码:​​preprocessing.Binarizer()​​

data_binarized = preprocessing.Binarizer(threshold = 1.4).transform(data)print(data_binarized)print(data)

输出的结果为:(可以设置阈值,大于该值的数据都为1,不大于的都为0,最后的数据有0和1)

5 独热编码

5.1 独热编码定义

在很多的计算模型中都是只能进行数值的处理,但是数据中经常会遇到各种 分类数据 的情况,因此就需要将分类数据进行数值编码。独热编码就是将分类数据转化为0-1编码的,独热编码器可以将一键编码视为一种可以强化特征向量的工具。基于该方案对特征向量中的每个特征进行编码。这有助于我们提高空间效率。编码过程如下

关于独热的理解:经过编码后,一行数据中,只有一个数据是1,其余的都是0,对比红路灯,在一个时刻,该指示灯只能显示一种颜色

5.2 实例操作

核心代码:​​preprocessing.OneHotEncoder()​​

给出举例数据

data = np.array([[1, 1, 2], [0, 2, 3], [1, 0, 1], [0, 1, 0]])print(data)

输出的结果为:(数据共四行三列,假设这三列的名称分别为ABC,可以发现A中共有两个特征0和1,B中有三个特征,C中有四个特征)

那么接下来进行独热编码,根据上面的设定,经过独热编码后的结果应该有9个特征,前两个对应A字段,中间三个对应B字段,最后四个对应C字段

encoder = preprocessing.OneHotEncoder()encoder.fit(data)encoder_vector = encoder.transform([[0,0,0]]).toarray()print(encoder_vector)encoder_vector = encoder.transform([[1,0,3]]).toarray()print(encoder_vector)

输出结果为:(这里以[[0,0,0]]举例,A中两个特征,0在前面第一个位置,B中三个特征,0在第一个位置,C中三个特征,0也在第一个位置。对比这种位置关系[[1,0,3]]独热编码后就不难理解了)

如果数字觉得不好理解的话,那这里进行张三李四带入

data = np.array([['张三', '张三', '李四'], ['王五', '李四', '赵六'], ['张三', '王五', '张三'], ['王五','张三', '王五']])print(data)encoder = preprocessing.OneHotEncoder()encoder.fit(data)encoder_vector = encoder.transform([['张三','张三','张三']]).toarray()print(encoder_vector)

输出结果为:(这里就和上面是一个原理,只不过采用中文文本数据进行展示,方便理解)

6、标签编码

6.1 标签编码定义

除了进行独热编码外,分类变量可以进行标签编码,就是不光只有0和1,还可以有其它的数值。标签编码常见的称呼就是给数据“贴标签”和找标签对应的数据,也可以手动操作

6.2 实例操作

核心代码:​​preprocessing.LabelEncoder()​​

input_classes = ['audi', 'ford', 'audi', 'toyota', 'ford', 'bmw']label_encoder = preprocessing.LabelEncoder()label_encoder.fit(input_classes)for i, item in enumerate(label_encoder.classes_): print(item, "-->", i)

输出结果为:(回顾基础部分讲解​​for​​​循环时讲到的​​for-enumerate​​的配合使用,可以直接输出对应的标签信息和标签值)

经过​​fit​​训练之后的标签信息,就可以对部分数据甚至全部的数据的标签信息甚至逆标签信息查询,比如指定原列表中的部分数据,就可以直接获得对应数据的编码

同时也可以逆标签信息查询,指定经过编码后的数值,输出对应的标签信息

7 缺失值处理

7.1 处理方式

最常见的数据情况就是缺失部分数据,那么怎么处理缺失值?有没有固定的公式呢?处理方式如下:

删除:缺失样本量非常大,删除整个字段;如果缺失量较少,且 难以填充 则删除缺失样本填充:缺失量小于10%,根据缺失变量的数据分布采取 均值(正态分布) 或 中位数(偏态分布) 进行填充模拟或预测缺失样本:根据样本的数据分布,生成随机值填充(插值);使用与缺失相比相关性非常高的特征,建立模型,预测缺失值

在第二章已经详细介绍了使用pandas对缺失值进行处理,接下来介绍sklearn中如何对大数据样本进行缺失值处理

7.2 实例操作

采用sklearn模块中的​​SimpleImputer​​函数进行处理,使用的步骤共四步

(1)从模块中导入函数(2)设定填充的对象和填充的方式(3)选取数据(4)处理数据

读取测试数据,其中​​Age​​​和​​Salary​​字段有缺失值

提取对应字段,可以使用列的方式进行提取,也可以使用坐标的方式进行提取

#采用坐标的方式进行提取X = dataset.iloc[:, :-1].valuesY = dataset.iloc[:, -1].values

输出结果如下:(一般会把所有的特征字段提取后赋值为​​X​​​,标签字段提取后赋值为​​Y​​)

严格按照sklearn处理缺失值的步骤进行,代码如下

#导入处理模块from sklearn.impute import SimpleImputer #设定要处理的对象和处理规则imputer=SimpleImputer(missing_values=np.nan,strategy='mean')#选取数据fit训练imputer= imputer.fit(X[:,1:3])#处理数据X[:,1:3]=imputer.transform(X[:,1:3])

输出结果如下:

最后补充关于可以设定的规则,通过调用说明文档,可以发现能够使用的类型如下:(平均值,中位数,众数和常量)

至此关于大数据预处理的部分就介绍完毕,撒花✿✿ヽ(°▽°)ノ✿

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java将Word文件转为OFD文件
下一篇:【大数据实战项目八】使用机器学习算法进行预测分析并进行网上部署
相关文章

 发表评论

暂时没有评论,来抢沙发吧~