数据预处理
1.数据清洗
数据预处理一方面是要提高数据质量,另一方面可以让数据更好的适应特定的挖掘技术。统计发现,数据建模过程中,数据预处理工作占了整个工作的60%。数据预处理的过程包括数据清洗,数据集成,数据变换和数据规约。码字不易,喜欢请点赞!!!
数据清洗的过程主要包括缺失值处理和异常值处理。
1.1缺失值处理
前面【数据探索篇】说过缺失值处理主要包括的方法有三种:删除记录、数据插补、不处理。这里主要分享常见的数据插补方法:
- 均值/中位数/众数插补
- 固定值插补
- 最近临插补:在记录中找到与缺失样本最接近的样本的属性值填补
- 回归方法:通过回归方程插补
- 插值法:拉格朗日插值法、牛顿插值法、分段插值法等
拉格朗日插值法
通过构造拉格朗日多项日,进行插值填补。如下代码展示了如何使用拉格朗日插值法对缺失值进行填补:
import pandas as pd
from scipy.interpolate import lagrange #拉格朗日插值函数
catering_sale = r"...\data\catering_sale.xls"
data = pd.read_excel(catering_sale)
#首先将异常值设置为空
#销量需要放在前面,否则值未更新
data['销量'][(data['销量']<400) | (data['销量']>5000)]=None
#s为列向量,n为插值位置,k为取前后数据个数,默认为5
#lagrange函数使用:f = lagrange(list_x,list_y),进行插值操作:a = f(i)
def ployinterp_columns(s,n,k=5):
y = s[list(range(n-k,n)) + list(range(n+1,n+1+k))]
y = y[y.notnull()]
return lagrange(y.index,list(y))(n)
for i in data.columns:
for j in range(len(data)):
if(data[i].isnull())[j]:
data[i][j] = ployinterp_columns(data[i],j)
使用拉格朗日插值法时,当插值节点增减时,插值多项式会变化。而牛顿插值法则不会有这个问题。
牛顿插值法
牛顿插值法通过构造牛顿插值逼近函数和误差函数来进行插值填补,目前Python中没有写好的函数,需要自己编写。不过牛顿插值法和拉格朗日插值法本质上是一样的,都是相同的次数,相同的系数多项式,只是表现形式不一样。
1.2异常值处理
- 删除异常值记录
- 视为缺失值
- 平均值修正
- 不处理
2.数据集成
数据挖掘过程中,通常数据来自于多个不同的数据源,因此需要对多个数据源数据进行数据集成,最后放到同一个数据库中。
2.1实体识别
- 同名异义:数据源A中的ID和数据源B中的ID,可能表示的不是同一个实体。
- 异名同义:数据源A中的sales_dt和数据源B中的sales_date可能表示的都是销售日期,即A.sales_dt=B.sales_date。
- 单位不统一
2.2冗余属性识别
- 同一属性出现多次
- 同一属性命名不一致导致重复
3.数据变换
数据变换在数据建模过程中十分重要,将数据转换成适当的形式,可以让数据挖掘过程更美好。
3.1简单函数变换
简单的函数变换,可以是数据具有更好的特性。常见的函数变换有平方、开方、对数、差分等。函数变换常用来将不具有正态分布的数据变换成具有正太分布的数据;并且有时对数变换或者差分运算可以将非平稳时间序列转换成平稳时间序列。
3.2规范化
数据规范化又称为数据归一化,常见的数据规范化,包括:
- 最小-最大规范化:亦称为离差标准化,将数据变换到区间[0,1]内。
- 零-均值规范化:亦称为标准差标准化,变换后的数据均值为0,方差为1.
- 小数定标规范化:将数据除以10的n次幂,使得数据都在区间[-1,1]内。
3.3连续属性离散化
在一些算法中,数据需要离散化处理,比如说CART、Apriori算法等,这种情况下,通常需要将连续属性离散化。常见的离散方法包括:
- 等宽法
- 等频法
- 基于聚类分析的方法
3.4属性构造
在数据挖掘过程中,有时候需要结合业务情况,来构造一些属性,从而提高数据建模的准确性。比如说,进行防窃漏电诊断时,我们有供入电量和供出电量,可以构造属性来进行窃漏电诊断。
3.5小波变换
小波变换是比较新的数据分析工具,近年来兴起的信号分析手段。小波变换主要包括以下几种:
- 基于小波变换的特征提取方法
- 小波基函数
- 小波变换
- 基于小波变换的多尺度空间能量分布特征提取方法
4.数据规约
在大数据上进行数据建模需要耗费比较大的资源,因此通过数据规约方法,可以降低数据存储空间,同时可以提高数据建模效率。
4.1属性规约
数据规约包括合并属性从而构造新的属性,以及删除不相关的属性。这里展示使用主成分分析(PCA)方法对数据进行降维的操作。
这里直接使用Python里面的PCA函数,其参数n_components表示降维之后的数据维度。默认为None,所有成分保留。
#首先保留所有成分,建立PCA模型,然后查看各个成分的方差百分比(即贡献率)
import pandas as pd
from sklearn.decomposition import PCA
datafile = r"C:\Users\vivalavida\Desktop\Asher--Other\学习\python数据分析与挖掘实战\chapter4\demo\data\principal_component.xls"
data = pd.read_excel(datafile,header=None)
pca = PCA()
pca.fit(data)
#查看各个成分的贡献率
>>>pca.explained_variance_ratio_
array([7.74011263e-01, 1.56949443e-01, 4.27594216e-02, 2.40659228e-02,
1.50278048e-03, 4.10990447e-04, 2.07718405e-04, 9.24594471e-05])
可以看出前3个主成分的累计贡献率就已经达到了97.37%,因此对数据进行降维时,可以降到3维。
pca = PCA(n_components=3)
pca.fit(data)
low_data = pca.transform(data)#降维后的数据
pca.inverse_transform(low_data)#恢复原始数据
4.2数值规约
数值规约包括无参数方法和有参数方法。有参数方法只需存储参数,无参数方法需要存放实际数据,例如直方图、聚类等。
码字不易,喜欢请点赞!!!
【参考文献】
《Python数据分析与挖掘实战》