數據變換主要是對數據進行規范化處理,達到適用於挖掘的目的。
簡單的函數變換包括平方、開方、取對數查分運算等,可以將不具有正態分布的數據變換成具有正態分布的數據,對於時間序列分析,有時簡單的對數變換和差分運算就可以將非平穩序列轉換成平穩序列。
數據規范化
1、最大——最小規范化 :X *=(x-min)/(max-min)
映射到 [0,1] 之間,若數據集中且某個數值太大,則規范化后各值都接近0,且相差不大
2、零——均值規范化:X*=(x-mean)/ sigma
目前用的最多的數據標准化方法
3、小數定標規范化:X*=x /(10^k)
通過移動屬性值的小數位數,映射到 [-1,1] 之間,移動的小數位數取決於屬性值絕對值的最大值
1 #-*- coding: utf-8 -*- 2 #數據規范化 3 import pandas as pd 4 import numpy as np 5 6 datafile = '../data/normalization_data.xls' #參數初始化 7 data = pd.read_excel(datafile, header = None) #讀取數據 8 9 data1=(data - data.min())/(data.max() - data.min()) #最小-最大規范化 10 print(data1) 11 data2=(data - data.mean())/data.std() #零-均值規范化 12 print(data2) 13 data3=data/10**np.ceil(np.log10(data.abs().max())) #小數定標規范化 14 print(data3)

連續屬性離散化
一些數據挖掘算法要求數據是分類屬性形式,就需要將連續屬性轉變為分類屬性
1、等寬法:類似於制作頻率分布表,將屬性的值域划分為相等寬度的區間,區間的個數由數據本身特點決定
2、等頻法:將相同數量的記錄放到每個區間
3、聚類:一維聚類的兩個步驟,首先用聚類算法如(K-means算法)進行聚類,然后處理聚類得到的簇。
下面實現等寬法和等頻法離散化。
1 import pandas as pd 2 3 datafile='../big-data/data-anaysis/example/chapter4/chapter4/demo/data/discretization_data.xls' 4 data=pd.read_excel(datafile) 5 #取該列 6 data=data[u'肝氣郁結證型系數'].copy() 7 k=4 8 9 10 #等寬離散化 11 d1=pd.cut(data,k,labels=range(k)) 12 13 14 #等頻離散化 15 w=[1.0*i/k for i in range(k+1)] 16 #自動計算分數位 17 w=data.describe(percentiles=w)[4:4+k+1] 18 w[0]=w[0]*(1-1e-10) 19 20 d2=pd.cut(data,w,labels=range(k))


