python数据分析 - 数据预处理

总结一下近期了解到的数据分析预处理的方法。

1、均值移除

  统一样本矩阵中不同特征的基准值和分散度,将各个特征的平均值调整为0,标准差调整为1。

  例如某矩阵的一列值分别是a,b,c,m表示均值,s表示标准差,均值移除后的对应数据是 (a-m)/s,(b-m)/s,(c-m)/s。

  使用情况:某样本有些特征的数值比较大,而有的特征的数值比较小,在分析时大的数值可能会覆盖小的数值,就可以使用均值移除来解决。

   在python中方法:sklearn.preprocessing.scale(原始样本矩阵)  -> 均值移除后的样本矩阵

示例:

import numpy as np
import sklearn.preprocessing as sp

raw_samples = np.array([
    [3, 20, 200, -5400],
    [0, 40, -100, 2100],
    [1, 30, 190, -4300]
], dtype='float')

std_sample = sp.scale(raw_samples)
print(std_sample)

  输出结果为:

# [[ 1.33630621 -1.22474487  0.74274138 -0.86687558]
# [-1.06904497  1.22474487 -1.41360456  1.40111286]
# [-0.26726124  0.          0.67086318 -0.53423728]]

  2、范围缩放

  统一样本矩阵中不同特征的最大值和最小值的范围。

  请问考试成绩100分和90分哪个分高?那如果考100分的满分是200分,90分的满分是100分呢?如果两次回答的答案不一样,是因为我们没有把两个分数放在统一评分标准中比较。在对数据进行处理时,有可能也会遇到相同的情况,这就需要我们使用范围缩放和统一比较范围。

  python中方法:sklearn.preprocessing.MinMaxScaler(feature_range=(期望最小值,期望最大值))  ->  范围缩放器

                            缩放器函数.fit_transform(原始样本矩阵)  ->  范围缩放后的样本矩阵

  示例:

import numpy as np
import sklearn.preprocessing as sp

raw_samples = np.array([
    [3, -1.5, 2, -5.4],
    [0, 4, -0.3, 2.1],
    [1, 3.3, -1.9, -4.3]
])

mms = sp.MinMaxScaler(feature_range=(0, 1))
mms_samples = mms.fit_transform(raw_samples)
print(mms_samples)

  输出结果:

# [[ 1.          0.          1.          0.        ]
#  [ 0.          1.          0.41025641  1.        ]
# [ 0.33333333  0.87272727  0.          0.14666667]]

3、归一化处理

  为了用户占比表示特征,用每个样本的特征的值除以该样本的特征值绝对值之和,以使每个样本的特征值的绝对值之和为1.

  例如:

                         A           B            C              D

              1        30         35          20             40

              2        20         20          10             30

    1和2表示两个服装店,A,B,C,D代表某种衣服的不同颜色的购买数量,请问在1和2中,购买该产品的人中,喜欢A颜色比较多的是?这就需要考虑到A颜色在售出商品中的占比

  在python中的方法:sklearn.preprocessing.normalize(原始样本数据,norm='l1')  -> 归一化后的样本矩阵

                                  'l1'表示 1-范数

  示例:

import numpy as np
import sklearn.preprocessing as sp

raw_samples = np.array([
    [30, 35, 20, 40],
    [20, 20, 10, 30],
])

nor_samples = sp.normalize(raw_samples, 'l1')
print(nor_samples)

   输出结果:

# [[ 0.24   0.28   0.16   0.32 ]
# [ 0.25   0.25   0.125  0.375]]

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值