数据预处理技术与对应python代码实现

数据预处理技术与对应python代码实现

一、数据清洗

1.缺失值的处理:

1).忽略元组:若有多个属性值缺失或者该元祖剩余属性值使用价值较小时,应选择放弃

对应Python代码

df.dropna()#注df为pandas 的DataFrame数据类型

2).人工填写:该方法费时,数据庞大时行不通

3).全局常量填充:方法简单,但填充方法适用场景很少

df.fillna(volae=V)#V即为我们填充的常量

4).属性中心度量填充:对于正常的数据分布而言可以使用均值,而倾斜数据分布应使用中位数
对应python代码

values = dict([(col_name, col_mean) for col_name, col_mean in zip(group.columns.tolist(), group.mean().tolist())]) # 参看1,生成字典,key为列名,value为列对应的均值
group.fillna(value=values, inplace=True) # 参看2,填充空值,value这里选择为字典形式,字典的key指明列,字典的value指明填充该列所用的值

5)最可能的值填充:使用回归、基于推理的工具或者决策树归纳确定。

df.interpolate(method='linear')#该方法为线性插值,当然还有其他方法

6).高维映射

将属性映射到高维空间,采用独热码编码(one-hot)技术。将包含K个离散取值范围的属性值扩展为K+1个属性值,若该属性值缺失,则扩展后的第K+1个属性值置为1。

这种做法是最精确的做法,保留了所有的信息,也未添加任何额外信息,若预处理时把所有的变量都这样处理,会大大增加数据的维度。这样做的好处是完整保留了原始数据的全部信息、不用考虑缺失值;缺点是计算量大大提升,且只有在样本量非常大的时候效果才好。

2.噪声数据与离群点:

噪声:被测量的变量的随机误差或者方差(一般指错误的数据)

对于噪声数据我们一般有三种方法去平滑数据

分箱 (binning):通过考察数据的“近邻”周围的值来光滑有序的数据值。

回归 (regression):用一个函数(回归函数)拟合数据来平滑数据。

聚类 (clustering):将类似的值聚集为簇。

离群点:数据集中包含一些数据对象,他们与数据的一般行为或模型不一致。(正常值,但偏离大多数数据)

对于离群点检测我们有如下方法
参数方法
在这里插入图片描述

在这里插入图片描述

非参数方法
在离群点检测的非参数方法中,“正常数据”的模型从输入数据学习,而不是假定一个先验。通常,非参数方法对数据做较少假定,因而在更多情况下都可以使用。

使用直方图检测离群点
包括如下两步:

步骤1:构造直方图。尽管非参数方法并不假定任何先验统计模型,但是通常确实要求用户提供参数,以便由数据学习。如指定直方图的类型(等宽或等深的)和其他参数(如直方图中的箱数或每个箱的大小)。与参数方法不同,这些参数并不指定数据分布的类型(如高斯分布)。

步骤2:检测离群点。为了确定一个对象是否是离群点,可以对照直方图检验它。在最简单的方法中,如果该对象落入直方图的一个箱中,则该对象被看做是正常的,否则被认为是离群点。

对于更复杂的方法,可以使用直方图赋予每个对象一个离群点得分。一般可以令对象的离群点得分为该对象落入的箱的容积的倒数。得分越高,表明是离群点的概率越大。

使用直方图作为离群点检测的非参数模型的一个缺点是,很难选择一个合适的箱尺寸。一方面,如箱尺寸太小,则由很多正常对象都会落入空的或稀疏箱,因而被误识别为离群点。这将导致很高的假正例率或低精度。相反,如果箱尺寸太大,则离群点对象可能渗入某些频繁的箱中,这将导致很高的假负例率或召回率。为了解决这些问题,使用核密度估计来估计数据的概率密度分布。具体参考韩家炜的《数据挖掘:概念与技术》。

基于邻近性的方法
给定特征空间中的对象集,可以使用距离度量来量化对象间的相似性。基于邻近性的方法假定:离群点对象与它最近邻的邻近性显著偏离数据集中其他对象与它们近邻之间的邻近性。

     有两种类型的基于邻近性的离群点检测方法:基于距离的和基于密度的方法。基于距离的离群点检测方法考虑对象给定半径的邻域。一个对象被认为是离群点,如果它的邻域内没有足够多的其他点。基于密度的离群点检测方法考察对象和它近邻的密度。这里,一个对象被识别为离群点,如果它的密度相对于它的近邻低得多。

基于距离的离群点检测

1.对样本的离群程度进行量化,分数由它与K个最近邻的距离决定,分数的取值[0,+∞]:
2.计算每一个样本与其最近的K个近邻样本的距离,放到集合C中。
3.对C中的所有元素进行降序排列。
4.根据给定的距离阈值,选取C中大于给定阈值的距离所对应的样本作为离群值。

二、数据集成

数据集成:数据集成需要考虑许多问题,如实体识别问题,主要是匹配来自多个不同信息源的现实世界实体。冗余是另一个重要问题。如果一个属性能由另一个或另一组属性“导出”,则此属性可能是冗余的。属性或维命名的不一致也可能导致结果数据集中的冗余。有些冗余可通过相关分析检测到,如给定两个属性,根据可用的数据度量一个属性能在多大程度上蕴含另一个。常用的冗余相关分析方法有皮尔逊积距系数、卡方检验、数值属性的协方差等。
数据集成之表的连接python 代码

pandas.meger(A,B,on=key)


冗余和相关分析
在这里插入图片描述

三、数据转换

数据转换就是将数据进行转换或归并,从而构成一个适合数据处理的描述形式。数据转换包含以下处理内容。
1)平滑处理
帮助除去数据中的噪声,主要技术方法有 Bin 方法、聚类方法和回归方法。
2)合计处理
对数据进行总结或合计操作。例如,每天的数据经过合计操作可以获得每月或每年的总额。这一操作常用于构造数据立方或对数据进行多粒度的分析。
3)数据泛化处理
用更抽象(更高层次)的概念来取代低层次或数据层的数据对象。

例如,街道属性可以泛化到更高层次的概念,如城市、国家,数值型的属性,如年龄属性,可以映射到更高层次的概念,如年轻、中年和老年。
4)规格化处理
将有关属性数据按比例投射到特定的小范围之中。例如,将工资收入属性值映射到 0 到 1 范围内。
5)属性构造处理
根据已有属性集构造新的属性,以帮助数据处理过程。

下面将着重介绍规格化处理和属性构造处理。

  1. 简单函数变换
    简单函数变换是指对原始数据直接使用某些数学函数进行转换,主要用于将不具有正态分布的数据变换成具有正态分布,同时也可以用于对数据进行压缩,比如更关注的是相对差距而不是绝对差距,可以通过取对数变换实现。
    常用的函数包括:等。
    简单函数变换会改变的原始数据的分布特征,因此使用前必须深入了解数据特征变化是否会影响到后续的分析。
## 导入库
import pandas as pd
import numpy as np
## 读取数据
dataset = pd.read_excel("/labcenter/python/dataset2.xlsx")
 
## 简单函数变换
dataset['new_col2'] = np.log10(dataset['col2'])      #取10为底的对数
dataset['new_col2'] = np.exp(dataset['col2'],2)      #取平方
dataset['new_col2'] = np.exp(dataset['col2'])        #取e为的底的指数
dataset['new_col2'] = 1 / dataset['col2']            #取倒数
dataset['new_col2'] = np.sqrt(dataset['col2'])       #开方
dataset['new_col2'] = np.sin(dataset['col2'])        #取正弦
  1. 标准化
    标准化,是为了处理不同规模和量纲的数据,使其缩放到相同的数据区间和范围,以减少规模、量纲、分布差异等对分析建模的影响。常用的标准化方法有以下三种:

2.1 离差标准化
离差标准化,又称最大值最小值标准化(Max-Min),即基于原始数据的最大值、最小值对数据进行线性变换,变换后,数据完全落入[0,1]区间内。
其中,原始数据x,其最大值、最小值分别为max、min,转换后数据为x’。
优点:能够将数据归一化,同时能较好的保持原始数据的分布结构;
缺点:容易受极端值的影响,极端值会使大部分数据接近于0并且差距很小,同时在出现最值范围以外的数据时变换结果会产生错误;
适用场景:适合数据比较集中的情况。
2.2 标准差标准化
标准差标准化,即Z-Score标准化,即基于原始数据的均值和标准差对数据进行标准化,标准化后,数据呈正态分布。
其中,原始数据x,其均值、标准差分别为μ、σ,转换后数据为x’。
缺点:是一种中心化方法,会改变原始数据的分布结构。
适用场景:适合数据的最值未知,且可能出现离群点的情况。
2.3 绝对值最大标准化
绝对值最大标准化,即MaxAbs标准化,即基于原始数据绝对值的最大值对数据进行标准化,变换后,数据完全落入[-1,1]区间内。

在这里插入图片描述

示例代码:

## 标准化处理
## 方法1:使用numpy和pandas
### 离差标准化
dataset['new_col2'] = (dataset['col2'] - dataset['col2'].min()) / (dataset['col2'].max() - dataset['col2'].min())
### 标准差标准化
dataset['new_col2'] = (dataset['col2'] - dataset['col2'].mean()) / dataset['col2'].std()
### 绝对值最大标准化
dataset['new_col2'] = dataset['col2'] / np.abs(dataset['col2']).max()
 
## 方法2:使用sklearn
from sklearn import preprocessing
### 离差标准化
minmax_scaler = preprocessing.MinMaxScaler()
dataset['new_col2'] = minmax_scaler.fit_transform(dataset['col2'])
### 标准差标准化
zsocre_scaler = preprocessing.StandardScaler()
dataset['new_col2'] = zsocre_scaler.fit_transform(dataset['col2'])
### 绝对值最大标准化
maxabs_scaler = preprocessing.MaxAbsScaler()
dataset['new_col2'] = maxabs_scaler.fit_transform(dataset['col2'])

属性构造方法可以利用已有属性集构造出新的属性,并将其加入到现有属性集合中以挖掘更深层次的模式知识,提高挖掘结果准确性。
例如,根据宽、高属性,可以构造一个新属性(面积)。构造合适的属性能够减少学习构造决策树时出现的碎块情况。此外,属性结合可以帮助发现所遗漏的属性间的相互联系,而这在数据挖掘过程中是十分重要的。

四、数据规约

随着大数据的出现,基于传统无监督学习的数据分析变得非常耗时和复杂,往往使得分析不可行。数据归约技术是用来得到数据集的规约表示,在接近或保持原始数据完整性的同时将数据集规模大大减小。对规约后的数据集分析将更有效,并可产生几乎相同的分析结果。常见的数据规约方法有:数据立方体聚集、数据属性子集选择、维规约、数值规约、离散化和概念分层产生。

数据立方体聚集:聚集操作用于数据立方体结构中的数据。数据立方体存储多维聚集信息。每个单元存放一个聚集值,对应于多维空间的一个数点,每个属性可能存在概念分层,允许在多个抽象层进行数据分析。

属性子集选择:当待分析数据集含有大量属性时,其中大部分属性与挖掘任务不相关或冗余,属性子集选择可以检测并删除不相关、冗余或弱相关的属性或维。其目标是找出最小属性集,使得数据类的概率分布尽可能地接近使用所有属性得到的原分布。其优点是减少了出现在发现模式的属性数目,使得模式更易于理解。对于属性子集选择,穷举搜索找出最佳属性子集可能是不现实的,因此,常使用压缩搜索空间的启发式算法。这些方法常为贪心算法,在搜索属性空间时总是做当下的最佳选择。策略是做局部最优选择,期望由此导致全局最优解。

维规约:维度规约使用数据编码或变换得到原数据规约或“压缩”表示。减少所考虑的随机变量或属性个数 。若规约后的数据只能重新构造原始数据的近似表示,则该数据规约是有损的,若可以构造出原始数据而不丢失任何信息,则是无损的。广泛应用的有损维规约方法有:小波变换和主成分分析等。

数值规约:数值规约通过选择替代的数据表示形式来减少数据量。即用较小的数据表示替换或估计数据。数值规约技术可以是有参的,也可以是无参的。如参数模型(只需要存放模型参数,而不是实际数据)或非参数方法,如聚类、抽样和直方图。

离散化和概念分层产生:数据离散化将属性值域划分为区间,来减少给定连续属性值的个数。区间的标记可以代替实际的数据值。用少数区间标记替换连续属性的数值,从而减少和简化原始数据,使得无监督学习的数据分析结果简洁,易用,且具有知识层面的表示。近年来,已经研发了多种离散化方法。根据如何进行离散化可将离散化技术进行分类,如,根据是否使用类信息或根据进行方向(即自顶向下或自底向上)分类。若离散化过程使用类信息,则称其为监督离散化;反之,则是非监督的离散化。若先找出一点或几个点(称为分裂点或割点)来划分整个属性区间,然后在结果区间上递归地重复这一过程,则为自顶向下离散化或分裂。自底向上的离散化或合并恰好与之相反。可以对一个属性递归地进行离散化,产生属性值的分层划分,称为概念分层。概念分层对多抽象层学习是有用的。概念分层定义了给定数值属性的离散化,也可以通过收集较高层的概念并用他们替换较低层的概念来规约数据。尽管通过这种数据泛化丢失了细节,但泛化后的数据更有意义,更易于展示。这有助于将多种无监督学习任务的学习结果进行一致表示。此外,与未进行泛化的大型数据集的无监督学习相比,规约后的数据进行无监督学习所需的I/O操作更少,更有效。因此,离散化技术和概念分层作为预处理步骤,在无监督学习之前而不是无监督学习过程中进行。

1.小波变换:
离散小波变换(DWT)是一种现行信号处理技术,勇于数据向量X时,将他变换成不同的数值小波系数向量X{}’.两个向量具有相同的长度。每个元组被看作一个n维数据向量。

DWT与离散傅里叶变换(DFT)有密切关系,DFT是一种涉及正弦和余弦信号处理技术。一般地,DWT是一种更好的有损压缩,提供原始数据更准确的近似,切且需要的空间更小。

只有一种DFT但是有若干族DWT。离散小波变换的一般过程使用一种金字塔算法,在每一次迭代时将数据减半,故计算速度快:(1)输入数据向量长度L必须是2的整数幂。必要时,通在数据向量后添加0,这一条件即可满足(L大于等于n) (2)每个变换涉及应用两个函数。第一个使用某种数据光滑,如求和或加权平均。第二个进行加权差分,提取数据细节特征。 (3)两个函数作用于X中的数据点对,即作用于所有的测量对(x_{2i},x_{2i+1})这导致两个长度为L/2的数据集。一般而言,特们分别代表数据光滑后的版本或低频版本和它的高频内容。 (4)两个函数递归地作用于前面循环得到的数据集,直到得到的结果数据集的长度为2。 (5)由以上迭代得到的数据集中选择的值被指定为数据变换的小波系数。

** 2.主成分分析PCA:**
(又称Karhunen-Loeve或K-L方法)搜索k个最能代表数据的n维正交向量,其中k\leq n。这样原数据投影到一个小得多的空间上导致维归约。PCA常常能够揭示先前未曾察觉的联系,并因此允许解释不寻常的结果: (1)对输入数据规范化,使得每个属性都落入相同的区间。 (2)PCA计算k个标准正交向量,作为规范化输入数据的基。这些是单位向量,每一个都垂直于其他向量。这些向量称为主成分,输入数据是主成分的线性组合。(3)对主成分按照‘重要性’或强度降序排列。本质上充当数据的新坐标系,提供关于方差的重要信息。对于坐标轴进行排序,第一个坐标轴显示数据的最大方差,第二个显示数据的次大方差,如此次下去 (4)主成分可以根据“重要性”降序排列,因此可以通过去掉较弱的成分(方差较小的)来归约数据。

PCA可以用于有序和无序的属性,并且可以处理稀疏和倾斜的数据。与小波变换相比,PCA更好的处理稀疏数据,而小波变换更适合高维数据。

3.属性子集选择:
通过删除不相关或者冗余属性(或维)减少数据量。基本启发式方法包括以下技术:(1)逐步向前选择(2)逐步向后删除(3)逐步向前选择和逐步向后删除的组合(4)决策树归纳

4.回归和对数线性模型:参数化数据归约

(简单)线性回归,对数据建模使之拟合到一条直线。y=wx+b其中,假定y的方差是常量。在数据挖掘中,回归系数可以用最小二乘法求解。多元回归是线性回归的扩展。对数线性模型近似离散的多维概率分布。给定n维元组的集合,我们可以把每个元组看作n维空间的点。基于维组合的一个较小子集,估计多维空间中每个点的概率。

5.直方图:
使用分箱来近似数据分布,是一种流行的数据归约形式。对于存放具有高频率的离群点,单桶值是有用的。

5.直方图:
把数据元组看作对象。它将对象划分为群或簇,使得一个簇中的对象相互“相似”,而与其他簇中的对象“相异”。通常,相似性基于距离函数,形心距离是另一种度量。

7.抽样:
无放回简单随机抽样(SRSWOR)、有放回简单随机抽样(SRSWR)、簇抽样、分层抽样

8.数据立方体聚集:
在最低抽样层创建的立方体称为基本方体。基本方体应当对应于感兴趣的个体,最高层抽象立方体称为顶点立方体(例如汇总值)。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值