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函数标准化