数据分析[1]_常用数据处理

常用数据处理

这里主要介绍包括以下几种类型的数据处理:
–数据离散化
–数据数值化
–数据归一化
–相似度计算

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))

猜你喜欢

转载自blog.csdn.net/yuxiao_v/article/details/79425914