数据变换主要是对数据进行规范化处理,达到适用于挖掘的目的。
简单的函数变换包括平方、开方、取对数查分运算等,可以将不具有正态分布的数据变换成具有正态分布的数据,对于时间序列分析,有时简单的对数变换和差分运算就可以将非平稳序列转换成平稳序列。
数据规范化
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))