python数据标准化处理_数据标准化处理

正态分布跟标准分数之间的关系

Python版本:3.5

数学公式编辑器:MathType

标准分数

标准分数(Standard Score,又称z-score、z分数或标准化值),是将集合中的单个数与集合的均值相减的结果除以集合的标准差得到标准化的结果,该方法类似于正态分布的标准化转换,转换函数为:

式中x为需要被标准化的原始值,μ为均值,σ为标准差,σ≠0。

z分数标准化处理后的值代表原始值与集合均值之间的距离,以标准差为单位计算。该值存在正负值,低于均值则为负数,反之则正数,其范围为[-∞,+∞],数据均值为0,方差为1。

极差标准化

又称离差标准化,是将集合中的单个数与该集合最小值相减得到的距离再去除以集合最大值与最小值相减得到极差或全距,结果落在区间[0,1],转换函数为:

另外还有以集合的均值作为基准的极差标准化方法,将集合中的单个数与集合的均值相减再除以极差即得到标准化的结果,标准化后的数据落在区间[-1,1],且均值为0,极差为1,转换函数为:

log函数标准化

通过以10为底数的log函数将原始值转换为其对数值,转换后的值区间并不在[0,1]之间,故还要除以最大值的对数,转换函数为:

Python实现标准化处理

使用pandas和numpy的库先创建5个数的随机数组,并存储在pandas的DataFrame数据结构里便于后期处理。

未标准化前的原始值

创建好数组后先逐一计算数组的均值、最大值、最小值、标准差和最大值的对数,在这里先计算并放置于全局变量可以避免后面调用的时候重复计算,对大量数据而言能减少计算时间。编写标准化函数后将标准化的结果存到新的列中,标准化后的结果如下:

标准化后的结果

源码如下:

import pandas as pd

import numpy as np

RANDOM_SEED = 100

np.random.seed(RANDOM_SEED) # # 设置随机种子,确保每次随机数一致

df = pd.DataFrame(np.random.randint(1, 100, 5), columns=['value']) # 创建5个数的数组

v_mean = df['value'].mean() # 均值

v_max = df['value'].max() # 最大值

v_min = df['value'].min() # 最小值

v_std = df['value'].std() # 标准差

v_log_max = np.log10(v_max) # 最大值的对数

df['z_score'] = df['value'].map(lambda x: (x - v_mean) / v_std) # z分数标准化

df['min_max'] = df['value'].map(lambda x: (x - v_min) / (v_max - v_min)) # 极差标准化,以最小值为基准

df['min_max_mean'] = df['value'].map(lambda x: (x - v_mean) / (v_max - v_min)) # 极差标准化,以均值为基准

df['log_max'] = df['value'].map(lambda x: np.log10(x) / v_log_max) # log函数标准化

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值