常用数据处理
这里主要介绍包括以下几种类型的数据处理:
–数据离散化
–数据数值化
–数据归一化
–相似度计算
1. 数据离散化
包括两种方法:
(1)等频装箱:将数据排序后,分为不同箱子,在每个箱子中数据的个数一样;
(2)等宽装箱:将数据排序后,分为不同箱子,在每个箱子中数据最大最小的差值是一样的,即箱子的宽度相同。
由于在数据分析[0]中有对装箱的介绍,这里不在介绍,代码结构大致相同,只是应用的场景不一样
2. 数据数值化
2.1 one-hot编码
1、传入数据列;
2、构造函数;
3、步骤为:(1)首先将数据列转为一个集合,集合的长度就是onehot编码的长度,初始为集合长度个‘0’;(2)构建一个字典存储onehot编码;(3)对于数据列对应的集合中的数值:1,2,3,4……,就是在对应的位置上,该处的值由‘0’变为‘1’,因此循环所有数据集合,给集合中的每个数值进行onehot编码,并记录对应的键值;(4)字典写入完成后,循环整个数据列表,为对应数值赋予onehot编码;(5)操作已经完成onehot编码,然后分离所有的编码,变成相应的属性。
4、调用函数,打印结果:
def GetOneHot(dataSet):
"oneHot编码"
i = 0 #做为标记
length = 0 #one-hot编码长度
dataSet = list(dataSet) #转化为list
dataset = set(dataSet) #赋值给dataset
dataDict = {} #字典来存储数字对应的one-hot编码
length = len(dataset) #记录集合长度
oneHotInitial = ['0']*length #存储onehot的初始值000000
#循环建立one-hot编码的字典
for key in dataset:
oneHotInitial[i] = '1'
i += 1
oneHotNow = oneHotInitial
oneHotNow = ''.join(oneHotNow) #将one-hot由列表转为字符串
dataDict[key] = oneHotNow #对应key值的编码存储到字典中
oneHotInitial = ['0']*length #再次初始化one-hot编码
#循环为对应的数值赋予one-hot编码
for i in range(len(dataSet)):
dataSet[i] = dataDict[dataSet[i]]
return dataSet
2.2 排序编码
1、排序编码通常是一些等级进行数值化,比如成绩的优良中差、ABCD转为排序:1234或者4321。
2、数据的传入,调用Python随机函数生成了一列ABCD的数据列,代表成绩的等级;
3、函数构造;
4、步骤为:(1)传入数据列;(2)循环整个数据长度,分别对 ABCD赋值为1234.:
def GetSort(dataSet):
for i in range(len(dataSet)):
if dataSet.loc[i] == 'A':
dataSet.loc[i] = 1
elif dataSet.loc[i] == 'B':
dataSet.loc[i] = 2
elif dataSet.loc[i] == 'C':
dataSet.loc[i] = 3
elif dataSet.loc[i] == 'D':
dataSet.loc[i] = 4
return dataSet
3. 数据规范化
3.1 最大最小归一化
1、传入数据列;
2、构造函数;
3、步骤为:(1)传入数据列参数;(2)分别计算最大最小值(循环整个数据列长度,通过比较大小找最值也可以);(3)利用公式对该列数据全部map上最大最小归一化结果。
4、调用函数
def GetMaxMin(dataSet):
"最大-最小归一化"
minNum = dataSet.min()
maxNum = dataSet.max()
dataSet.H3MeK4_N = dataSet.H3MeK4_N.map(lambda x : float((x-minNum)/(maxNum-minNum)))
return dataSet
3.2 Z-score归一化
1、传入数据列;
2、构造函数;
3、步骤为:(1)传入数据列参数;(2)获取均值和方差;(3)根据公式对每个值都map上对应的z-score规范化的值
4、调用函数
def GetZscore(dataSet):
"Z-score归一化"
average = GetMean(dataSet)
var = GetVar(dataSet)
dataSet.H3MeK4_N = dataSet.H3MeK4_N.map(lambda x : float((x-average)/var))
return dataSet
4. 相似度计算方法
4.1 相似度–距离度量
1、传入数据列;
2、构造函数;
3、步骤为:(1)传入数据列参数,以及属性有几个;(2)循环所有的数据列长度,对两列的值依次计算差的绝对值,再求该值的n次方,设置变量来求和;(3)对计算的和开n次根,即1/n次幂。
4、调用函数
def GetEuclidean(dataSet,n):
"距离相似度计算"
s = 0
for i in range(len(dataSet)):
s = s + pow(abs(dataSet['H3MeK4_N'].loc[i] - dataSet['CaNA_N'].loc[i]),n)
return pow(s,float(1)/n)
4.2 相似度–余弦相似度
1、传入数据列;
2、构造函数;
3、步骤为:(1)传入数据列参数;(2)循环所有的数据列长度,对两列的值依次计算平方和再开根号就是距离;(3)对两列值计算乘积的平方和;(4)代入余弦相似度公式,返回结果。
4、调用函数
def GetCosine(a,b):
"余弦相似度计算"
# s = 0
# s1 = 0
# s2 = 0
# for i in range(len(dataSet)):
# s = s + (dataSet['H3MeK4_N'].loc[i])*(dataSet['CaNA_N'].loc[i])
# s1 = s1 + pow(dataSet['H3MeK4_N'].loc[i],2)
# s2 = s2 + pow(dataSet['CaNA_N'].loc[i],2)
# return s/((s1**0.5)*(s2**0.5))
s = 0
s1 = 0
s2 = 0
for i in range(len(a)):
s = s + (a[i])*(b[i])
s1 = s1 + pow(a[i],2)
s2 = s2 + pow(b[i],2)
return s/((s1**0.5)*(s2**0.5))