数据预处理
1数据清洗
1.1缺失值处理
1.2异常值处理
删除
视为缺失值
平均值修正
不处理
2数据集成
2.1实体识别
同名异义
异名同义
单位不统一
2.2冗余属性识别
同一属性多次出现
同一属性命名不一致导致重复
(多维属性约减)
3数据变换
3.1函数变换
非正太分布—正态分布
非平稳序列—平稳序列(对数变换)
3.2规范化
3.2.1最大最小归一化
3.2.2零-均值规范化
3.2.3小数定标规范化
#-*-coding:utf-8-*- import pandas as pd import numpy as np datafile='normalization_data.xls' data=pd.read_excel(datafile,header=None) #max-min normalization print data.min(),data.max(),data.std(),data.mean()#对列求 print (data-data.min())/(data.max()-data.min()) print (data-data.mean())/(data.std()) print data/10**np.ceil(np.log10(data.abs().max())) ''' 0 69 1 -600 2 -521 3 -1283 dtype: int64 0 190 1 596 2 695 3 2863 dtype: int64 0 43.706815 1 504.151385 2 422.546137 3 1441.371090 dtype: float64 0 117.571429 1 200.428571 2 405.714286 3 1712.571429 dtype: float64 0 1 2 3 0 0.074380 0.937291 0.923520 1.000000 1 0.619835 0.000000 0.000000 0.850941 2 0.214876 0.119565 0.813322 0.000000 3 0.000000 1.000000 1.000000 0.563676 4 1.000000 0.942308 0.996711 0.804149 5 0.264463 0.838629 0.814967 0.909310 6 0.636364 0.846990 0.786184 0.929571 0 1 2 3 0 -0.905383 0.635863 0.464531 0.798149 1 0.604678 -1.587675 -2.193167 0.369390 2 -0.516428 -1.304030 0.147406 -2.078279 3 -1.111301 0.784628 0.684625 -0.456906 4 1.657146 0.647765 0.675159 0.234796 5 -0.379150 0.401807 0.152139 0.537286 6 0.650438 0.421642 0.069308 0.595564 0 1 2 3 0 0.078 0.521 0.602 0.2863 1 0.144 -0.600 -0.521 0.2245 2 0.095 -0.457 0.468 -0.1283 3 0.069 0.596 0.695 0.1054 4 0.190 0.527 0.691 0.2051 5 0.101 0.403 0.470 0.2487 6 0.146 0.413 0.435 0.2571 '''
3.3连续属性离散化
3.3.1等宽法
3.3.2等频法
3.3.3聚类法
#-*-coding:utf-8-*- import numpy as np import pandas as pd datafile='discretization_data.xls' data=pd.read_excel(datafile) data=data[u'肝气郁结证型系数'].copy() k=4 d1=pd.cut(data,k,labels=range(k))#处理的机制是先排序再等分 w=[1.0*i/k for i in range(k+1)] w=data.describe(percentiles =w)[4:4+k+1] w[0]=w[0]*(1-1e-10) d2=pd.cut(data,w,labels=range(k)) #print w,d2 from sklearn.cluster import KMeans #引入KMeans kmodel = KMeans(n_clusters = k) #建立模型,n_jobs是并行数,一般等于CPU数较好 kmodel.fit(data.reshape(len(data),1)) #训练模型 c = pd.DataFrame(kmodel.cluster_centers_).sort(0) #输出聚类中心,并且排序(默认是随机序的) w = pd.rolling_mean(c, 2).iloc[1:] #相邻两项求中点,作为边界点 w = [0] + list(w[0]) + [data.max()] #把首末边界点加上 d3 = pd.cut(data, w, labels = range(k)) print d3 def cluster_plot(d,k):#结果展示 import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus']=False plt.figure(figsize=(8,3)) for j in range(0,k): plt.plot(data[d==j],[j for i in d[d==j]],'o') plt.ylim(-0.5,k-0.5) return plt cluster_plot(d1,k).show() cluster_plot(d2,k).show() cluster_plot(d3,k).show()
3.4属性构造
利用已有属性构造新属性,提高挖掘结果精度
例如,已知供入电量、供出电量,可以构造线损率=(供入-供出)/供入
来判断窃电行为
#-*-coding:utf-8-*- import pandas as pd inputfile='electricity_data.xls' outputfile='electricity_data_out.xls' data=pd.read_excel(inputfile) data[u'线损率']=(data[u'供入电量']-data[u'供出电量'])/data[u'供入电量'] data.to_excel(outputfile,index=False)
3.5小波变换
非平稳信号的时频分析手段,可以由粗及细地逐步观察信号
4数据规约
4.1属性规约-纵向
4.1.1决策树归纳、逐步前向、逐步后向(删除不相关属性方法)
4.1.2主成分分析
#-*-coding:utf-8-*- import pandas as pd input_file="principal_component.xls" output_file="principal_component_out.xls" data=pd.read_excel(input_file,header=None) from sklearn.decomposition import PCA pca = PCA() pca.fit(data) print pca.components_,len(pca.components_)#返回特征向量 print pca.explained_variance_ratio_#返回各个成分的方差百分比 pca=PCA(3) pca.fit(data) low_d = pca.transform(data)#降低纬度 pd.DataFrame(low_d).to_excel(output_file)#保存文件 print "================",pca.inverse_transform(low_d)#复原数据
4.2数值规约-横向
4.2.1直方图
4.2.2聚类
4.2.3抽样
4.2.4参数回归