数据预处理一方面是要提高数据质量,另一方面可以让数据更好的适应特定的挖掘技术。统计发现,数据建模过程中,数据预处理工作占了整个工作的60%。数据预处理的过程包括数据清洗,数据集成,数据变换和数据规约。码字不易,喜欢请点赞!!!
数据清洗的过程主要包括缺失值处理和异常值处理。
前面【数据探索篇】说过缺失值处理主要包括的方法有三种:删除记录、数据插补、不处理。这里主要分享常见的数据插补方法:
拉格朗日插值法
通过构造拉格朗日多项日,进行插值填补。如下代码展示了如何使用拉格朗日插值法对缺失值进行填补:
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)
使用拉格朗日插值法时,当插值节点增减时,插值多项式会变化。而牛顿插值法则不会有这个问题。
牛顿插值法
牛顿插值法通过构造牛顿插值逼近函数 P ( x ) P(x) P(x)和误差函数 R ( x ) R(x) R(x)来进行插值填补,目前Python中没有写好的函数,需要自己编写。不过牛顿插值法和拉格朗日插值法本质上是一样的,都是相同的次数,相同的系数多项式,只是表现形式不一样。
数据挖掘过程中,通常数据来自于多个不同的数据源,因此需要对多个数据源数据进行数据集成,最后放到同一个数据库中。
数据变换在数据建模过程中十分重要,将数据转换成适当的形式,可以让数据挖掘过程更美好。
简单的函数变换,可以是数据具有更好的特性。常见的函数变换有平方、开方、对数、差分等。函数变换常用来将不具有正态分布的数据变换成具有正太分布的数据;并且有时对数变换或者差分运算可以将非平稳时间序列转换成平稳时间序列。
数据规范化又称为数据归一化,常见的数据规范化,包括:
在一些算法中,数据需要离散化处理,比如说CART、Apriori算法等,这种情况下,通常需要将连续属性离散化。常见的离散方法包括:
在数据挖掘过程中,有时候需要结合业务情况,来构造一些属性,从而提高数据建模的准确性。比如说,进行防窃漏电诊断时,我们有供入电量和供出电量,可以构造属性 线 损 率 = 供 入 电 量 − 供 出 电 量 供 入 电 量 线损率=\frac{供入电量-供出电量}{供入电量} 线损率=供入电量供入电量−供出电量来进行窃漏电诊断。
小波变换是比较新的数据分析工具,近年来兴起的信号分析手段。小波变换主要包括以下几种:
在大数据上进行数据建模需要耗费比较大的资源,因此通过数据规约方法,可以降低数据存储空间,同时可以提高数据建模效率。
数据规约包括合并属性从而构造新的属性,以及删除不相关的属性。这里展示使用主成分分析(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)#恢复原始数据
数值规约包括无参数方法和有参数方法。有参数方法只需存储参数,无参数方法需要存放实际数据,例如直方图、聚类等。
码字不易,喜欢请点赞!!!
【参考文献】
《Python数据分析与挖掘实战》