【python数据分析】:数据预处理之数据标准化

数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间。

在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。

最典型的就是数据的归一化处理,即将数据统一映射到[0,1]区间上。

数据标准化:

0-1标准化 / Z-score标准化

0-1标准化:

# 将数据的最大最小值记录下来,并通过Max-Min作为基数(即Min=0,Max=1)进行数据的归一化处理。

# x = (x - Min) / (Max - Min)

df = pd.DataFrame({"value1":np.random.rand(10)*20,                  'value2':np.random.rand(10)*100})print(df.head())print('------')
# 创建函数,标准化数据def data_norm(df,*cols):    df_n = df.copy()    for col in cols:        ma = df_n[col].max()        mi = df_n[col].min()        df_n[col + '_n'] = (df_n[col] - mi) / (ma - mi)    return(df_n)

df_n = data_norm(df,'value1','value2')print(df_n.head())      value1     value2
0   9.013308  76.086655
1   8.998857   2.701648
2  15.934450  73.463908
3   0.673900  26.387318
4   6.073450  28.756130
------
      value1     value2  value1_n  value2_n
0   9.013308  76.086655  0.433025  0.865032
1   8.998857   2.701648  0.432275  0.000000
2  15.934450  73.463908  0.792407  0.834116
3   0.673900  26.387318  0.000000  0.279197

4 6.073450 28.756130 0.280373 0.307120

Z-score标准化

# Z分数(z-score),是一个分数与平均数的差再除以标准差的过程

# z=(x-μ)/σ,其中x为某一具体分数,μ为平均数,σ为标准差

df = pd.DataFrame({"value1":np.random.rand(10) * 20,                  'value2':np.random.rand(10) * 100})print(df.head())print('------')
# 创建函数,标准化数据def data_Znorm(df, *cols):    df_n = df.copy()    for col in cols:        u = df_n[col].mean()        std = df_n[col].std()        df_n[col + '_Zn'] = (df_n[col] - u) / std    return(df_n)
# 标准化数据# 经过处理的数据符合标准正态分布,即均值为0,标准差为1df_z = data_Znorm(df,'value1','value2')u_z = df_z['value1_Zn'].mean()std_z = df_z['value1_Zn'].std()print(df_z)print('标准化后value1的均值为:%.2f, 标准差为:%.2f' % (u_z, std_z))

  value1     value2
0   8.321070  35.947331
1   8.452941  97.890836
2   5.019369  60.298736
3  10.054911  85.862975
4  18.946354  34.923783
------
      value1     value2  value1_Zn  value2_Zn
0   8.321070  35.947331  -0.578846  -0.077938
1   8.452941  97.890836  -0.551582   1.778722
2   5.019369  60.298736  -1.261468   0.651958
3  10.054911  85.862975  -0.220376   1.418206
4  18.946354  34.923783   1.617918  -0.108617
5   9.737703   6.697269  -0.285959  -0.954662
6  17.078566  34.654210   1.231755  -0.116697
7  15.912836   5.941881   0.990742  -0.977304
8  12.394485  22.175238   0.263328  -0.490734
9   5.290011   1.083264  -1.205513  -1.122933
标准化后value1的均值为:0.00, 标准差为:1.00
 

实例:

# 八类产品的两个指标value1,value2,其中value1权重为0.6,value2权重为0.4

# 通过0-1标准化,判断哪个产品综合指标状况最好。

df = pd.DataFrame({"value1":np.random.rand(10) * 20,                  'value2':np.random.rand(10) * 100},                 index = list('ABCDEFGHIJ'))
# 进行标准化处理df_n1 = data_norm(df,'value1','value2')
df_n1['f'] = df_n1['value1_n'] * 0.6 + df_n1['value2_n'] * 0.4df_n1.sort_values(by = 'f',inplace=True,ascending=False)df_n1['f'].plot(kind = 'line', style = '--.b', alpha = 0.8, grid = True)df_n1
# 很明显,下图中产品G的表现最好

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

斑点鱼 SpotFish

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值