python数据整理规范形式_python数据分析与挖掘 | 数据预处理

上一篇文章中讲述了数据探索的一些内容,包括缺失值、异常值、一致性等问题,这些问题会影响建模效果。本篇文章就来解决一下上述问题,也就是数据预处理,它在整个数据挖掘建模的过程中占很大比例,所以很重要。数据预处理既要提高数据质量,又要让数据更好的适应建模工具。其主要内容包括数据清洗、数据集成、数据变换、和数据规约。

数据清洗

数据清洗主要是删除原始数据集中的无关数据、重复数据,平滑噪声数据,筛选掉与挖掘主题无关的数据,处理缺失值、异常值。

缺失值处理

缺失值处理方法主要有三种,分别是删除数据、数据插补和不处理。如果删除部分数据可以达到目标,则可以使用该方法。但是,删除数据可能会影响到分析结果的客观性和正确性,删除的数据中可能隐藏着有用学习信息,所以要慎重使用。在不影响后续建模的情况下可以选择不处理。重点介绍一下数据插补的方法。

常用的插补方法均值\中位数\众数插补根据属性值的类型用该属性取值的平均数\中位数\众数进行插补

固定值插补将缺失的属性值用一个固定的常数来替换

最近邻插补在记录中找到与缺失样本最接近的样本的该属性值插补

回归方法对带有缺失值的变量,根据已有数据和与其相关的其他变量的数据建立拟合模型来预测缺失的属性值

插值法插值法是利用已知点建立合适的插值函数 f(x) ,未知值由对应点 x(i) 求出的函数值 f(x(i)) 近似代替

拉格朗日插值法

在数值分析中,拉格朗日插值法是一种多项式插值方法,拉格朗日插值法可以给出一个恰好穿过二维平面上若干已知点的多项式函数。对于平面上已知的 n 个点可以找到一个 n-1 次多项式,此多项式过这 n 个点。

将n个点的坐标(x,y)带入多项式函数求解,此时是一个关于系数a的方程组,利用其系数矩阵行列式(范德蒙行列式),它的值为(xi-xj)的求和,而又因为xi不等于xj,所以该行列式不为零,即有唯一解。

解出拉格朗日多项式为:

将缺失的函数值对应的点x带入插值多项式得到缺失值的近似值L(x)。

拉格朗日插值公式结构紧凑,在理论分析中很方便,但是当插值节点增减时,插值多项式会随之变化,这在实际中不很方便,因此可以考虑重心拉格朗日插值法或牛顿插值法。

scipy.interpolate

scipy.interpolate 是 scipy 库中的插值模块,拉格朗日插值就可以直接调用该模块下的函数。

from scipy.interpolate import lagrange # 导入插值函数

import numpy as np

x = range(10)

y = np.random.randint(1, 100, 10)

# 拉格朗日插值需要两个参数,分别为横轴和纵轴

lagrange(x, y) # 返回该多项式的系数

lagrange(x, y)(5) # 返回对应x=5的插值

异常值处理

数据预处理时,异常值的处理要视情况而定,分析数值多少,以及数值对结果的影响等因素,再确定是否删除,或者视为缺失值,利用上面的插值解决。异常值处理常用方法有以下几种:

异常值处理方法方法描述

删除含有异常值的记录直接将含有异常值的记录删除

视为缺失值将异常值视为缺失值,利用缺失值处理的方法进行处理

平均修正值可用前后两个观测值的平均值修正该异常值

不处理直接在具有异常值的数据集上进行挖掘建模

数据集成

数据挖掘需要的数据量很大,很可能出自不同的来源,因此需要将这多个数据集成到一份数据中,其中可能会有形式不同,或者其它方面不匹配的地方,这就需要有个数据集成的过程。

实体识别

实体识别是指从不同数据源识别出现实世界的实体,要统一不同源数据的矛盾之处。主要包括同名异义,两个数据源中同一个属性ID表示着不同的实体;异名同义;单位不统一等。

冗余属性识别

冗余属性需要仔细分析,包括相同属性多次出现,命名不同而重复出现等。检测到冗余属性需要将其删除,可以提高数据挖掘的速度和质量,。有些属性可以通过相关分析检测,用相关系数度量属性之间的相似度。

数据变换

数据变换主要是对数据进行规范化处理,将数据转化成适当的形式,以适应数据挖掘需要。

简单函数变换

简单函数变换是对原有数据进行某些数学函数变换,常用的变换包括平方、开方、取对数、差分运算等。简单函数变换常用来将不具有正态分布的函数编程具有正态分布的数据。在时间序列分析中,有时简单的对数变换或者查分运算就可以将非平稳序列转换成平稳序列

规范化

不同的评价指标往往具有不同的量纲,数值之间差距可能很大,不进行处理可能会影响数据分析的结果。为了消除指标之间的量纲和取值范围差异的影响,需要进行标准化处理,将数据按照比例进行缩放,使之落入一个特定的区域,便于进行综合分析。数据规范化对于基于距离的挖掘算法尤为重要。

最小-最大规范化

最小-最大规范化也称为离差规范化,是对原始数据的线性变换,将数值映射到 [0, 1] 之间。离差标准化保留了原来数据中存在的关系,是消除量纲和数据取值范围的最简单方法。

这种处理方法的缺点是若数值集中且某个数值很大,则规范化之后各值会接近于0,并且将会相差不大。除此之外,如果又添加进来(min,max)之外的数值,将需要重新划分。

# 最小-最大值规范化

(data - data.min())/(data.max() - data.min())

零-均值规范化

零-均值规范化也称标准差标准化,经过处理的数据均值为0,标准差为1.

其中(x拔)为原始数据的均值,σ为原始数据的标准差,是当前用的最多的数据标准化方法。

# 零-均值规范化

(data - data.mean())/data.std()

小数定标规范化

通过移动属性值的小数位数,将属性值映射到 [-1, +1] 之间,移动的小数位数取决于属性值绝对值的最大值。

# 小数定标规范化

data/10**np.ceil(np.log10(data.abs().max()))

连续属性离散化

一些数据挖掘算法,特别是某些分类算法(如ID3算法、Apriori算法等),要求数据是分类属性形式。这样,常常需要将连续属性变换成分类属性,即连续属性离散化。

连续属性的离散化就是在数据的取值范围内设定若干个离散的划分点,将取值范围划分为一些离散化的区间,最后用不同的符号或整数值代表落在每个子区间中的数据值。所以离散化涉及两个子任务:确定分类数以及将连续属性值映射到这些分类值。

等宽法

将属性的值域分成具有相同宽度的区间,区间的个数由数据本身的特点决定,或者由用户指定,类似于制作频率分布表。缺点:对离群点敏感,倾向于不均匀地把属性值分布到各个区间。有些区间包含很多数据,另一些区间数据较少,这样会严重损坏建立的决策模型。

import numpy as np

import pandas as pd

data = np.random.random(100) # 生成100个0-1的随机数用来测试

k = 5  # 设置的划分区间的个数

# 利用pandas按数值大小切分区间,并且分别设置标记为range(k)

d = pd.cut(data, k, labels=range(k))

[out]:

[0, 1, 4, 0, 4, ..., 1, 0, 4, 4, 4]

Length: 100

Categories (5, int64): [0 

等频法

将相同数量的记录放进每个区。缺点:可能将相同的数据值分到不同的区间以满足每个区间中固定的函数个数。

import numpy as np

import pandas as pd

# 因为要利用pandas下的describe方法,所以将数据转化成Series类型

data = pd.Series(np.random.random(100))

k = 5  # 设置的划分区间的个数

w = [1.0*i/k for i in range(k+1)] # 计算要划分区间对应的频率

# [out]: [0.0, 0.2, 0.4, 0.6, 0.8, 1.0]

w = data.describe(percentiles=w)[4:4+k+1] #使用describe函数自动计算分位数

d = pd.cut(data, w, labels=range(k))

代码中的describe再解释一下,如下图,describe会展示出数据的集中属性,其中前四项为固定的count、mean、std、min,要按频率分,那么后面就是自己设定的分位数,所以从4开始取,到4+k+1。

基于聚类分析的方法

一维聚类的方法包括两个步骤,首先将连续属性的值用聚类算法(如K-Means算法)进行聚类,然后再将聚类得到的簇进行处理,合并到一个簇的连续属性值做同一标记。聚类分析的离散化方法也需要用户指定簇的个数,从而决定产生的区间数。

属性构造

在数据挖掘的过程中,为了提取更有用的信息,挖掘更深层次的模型,提高挖掘结果的精度,需要利用已有的属性构造出新的属性。例如添加个利润率,损失率等,这些一般统计数据时没有,但是可以根据已有数据经过简单运算获得的属性。

小波变换

小波变换是一种新型的数据分析工具,一种信号分析手段。小波分析的理论和方法在信号处理、图像处理、语音处理、模式识别、量子物理等领域越来越广泛应用。小波变换具有多分辨率的特点,在时域和频域都具有表征信号局部特征的能力,通过伸缩和平移等运算过程对信号进行多尺度聚焦分析,提供了一种非平稳信号的时域分析手段,可以由粗及细地逐步观察信号,从中提取有用信息。

数据规约

在大数据集上进行复杂的数据分析和挖掘需要很长时间,数据规约产生更小但保持原数据完整性的新数据集。数据规约的意义在于:降低无效、错误数据对建模的影响,提高建模准确性;少量且具有代表性的数据将大幅缩减数据挖掘的时间;降低存储数据的成本。

属性规约

属性规约方法方法描述

合并属性将一些旧属性合为新属性

逐步向前选择从空属性集开始,每次从原来属性集合中选取当前最优的一个属性添加到当前属性子集中

逐步向后删除从全属性集开始,每次从当前属性子集中选择当前最差的属性并将其消去

决策树归纳利用决策树的归纳方法对初始数据进行分类归纳学习,获得一个初始决策树,没有出现在这个决策树上的属性从集合中删除

主成分分析用较少的变量去解释原始数据中的大部分变量,即将许多相关性很高的变量转化成相互独立或不相关的变量数值规约

数值规约指通过选择代替的、较小的数据来减少数据量,包括有参数的方法和无参数的方法两类。有参数方法是使用一个模型来评估数据,只需存放参数,而不需要存放实际数据,例如回归(线性回归和多元回归)和对数线性模型(近似离散属性集中的多维概率分布)。无参数方法就需要存放实际数据,例如直方图、聚类、抽样(采样)。

python主要数据预处理函数

函数名函数功能所属扩展库

interpolate一维、高维数据插值scipy

unique去除数据中的重复数据,得到单值元素列表pandas\numpy

isnull判断是否空值pandas

notnull判断是否非空值pandas

PCA对指标变量矩阵进行主成分分析scikit-learn

random生成随机矩阵numpy

你可能感兴趣的:(python数据整理规范形式)