您的位置:首页 > 编程语言 > Python开发

python数据分析与挖掘实战-4

2017-05-01 18:32 966 查看
数据预处理

         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参数回归
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: