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

一、标准分数

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

Z=(x-μ)/σ

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

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

二、极差标准化

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

f(x)=(x-xmin)/(xmax-xmin)

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

f(x)=(x-σ)/(xmax-xmin)

三、log函数标准化

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

f(x)=log10x/log10xmax

四、Python实现标准化处理

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

未标准化前的原始值

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

标准化后的结果

源码如下:

01 import pandas as pd

02 import numpy as np

03

04 RANDOM_SEED = 100

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

06

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

08

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

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

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

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

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

14

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

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

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

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

注:文中所有公式均用mathtype进行编辑

End.

作者:简杨君(爱统计网特邀认证作者)

本文为中国统计网原创文章,未经允许禁止转载,需要转载请微信联系授权(微信号:ishujiang)

你可能感兴趣的:(dataframe数据标准化处理_数据标准化处理)