
Python版本:3.5
數(shù)學(xué)公式編輯器:MathType
標(biāo)準(zhǔn)分?jǐn)?shù)
標(biāo)準(zhǔn)分?jǐn)?shù)(Standard Score,又稱z-score、z分?jǐn)?shù)或標(biāo)準(zhǔn)化值),是將集合中的單個(gè)數(shù)與集合的均值相減的結(jié)果除以集合的標(biāo)準(zhǔn)差得到標(biāo)準(zhǔn)化的結(jié)果,該方法類似于正態(tài)分布的標(biāo)準(zhǔn)化轉(zhuǎn)換,轉(zhuǎn)換函數(shù)為:
式中x為需要被標(biāo)準(zhǔn)化的原始值,μ為均值,σ為標(biāo)準(zhǔn)差,σ≠0。
z分?jǐn)?shù)標(biāo)準(zhǔn)化處理后的值代表原始值與集合均值之間的距離,以標(biāo)準(zhǔn)差為單位計(jì)算。該值存在正負(fù)值,低于均值則為負(fù)數(shù),反之則正數(shù),其范圍為[-∞,+∞],數(shù)據(jù)均值為0,方差為1。
極差標(biāo)準(zhǔn)化
又稱離差標(biāo)準(zhǔn)化,是將集合中的單個(gè)數(shù)與該集合最小值相減得到的距離再去除以集合最大值與最小值相減得到極差或全距,結(jié)果落在區(qū)間[0,1],轉(zhuǎn)換函數(shù)為:

另外還有以集合的均值作為基準(zhǔn)的極差標(biāo)準(zhǔn)化方法,將集合中的單個(gè)數(shù)與集合的均值相減再除以極差即得到標(biāo)準(zhǔn)化的結(jié)果,標(biāo)準(zhǔn)化后的數(shù)據(jù)落在區(qū)間[-1,1],且均值為0,極差為1,轉(zhuǎn)換函數(shù)為:

log函數(shù)標(biāo)準(zhǔn)化
通過以10為底數(shù)的log函數(shù)將原始值轉(zhuǎn)換為其對(duì)數(shù)值,轉(zhuǎn)換后的值區(qū)間并不在[0,1]之間,故還要除以最大值的對(duì)數(shù),轉(zhuǎn)換函數(shù)為:

Python實(shí)現(xiàn)標(biāo)準(zhǔn)化處理
使用pandas和numpy的庫(kù)先創(chuàng)建5個(gè)數(shù)的隨機(jī)數(shù)組,并存儲(chǔ)在pandas的DataFrame數(shù)據(jù)結(jié)構(gòu)里便于后期處理。

創(chuàng)建好數(shù)組后先逐一計(jì)算數(shù)組的均值、最大值、最小值、標(biāo)準(zhǔn)差和最大值的對(duì)數(shù),在這里先計(jì)算并放置于全局變量可以避免后面調(diào)用的時(shí)候重復(fù)計(jì)算,對(duì)大量數(shù)據(jù)而言能減少計(jì)算時(shí)間。編寫標(biāo)準(zhǔn)化函數(shù)后將標(biāo)準(zhǔn)化的結(jié)果存到新的列中,標(biāo)準(zhǔn)化后的結(jié)果如下:

源碼如下:
import pandas as pd
import numpy as np
RANDOM_SEED = 100
np.random.seed(RANDOM_SEED) # # 設(shè)置隨機(jī)種子,確保每次隨機(jī)數(shù)一致
df = pd.DataFrame(np.random.randint(1, 100, 5), columns=['value']) # 創(chuàng)建5個(gè)數(shù)的數(shù)組
v_mean = df['value'].mean() # 均值
v_max = df['value'].max() # 最大值
v_min = df['value'].min() # 最小值
v_std = df['value'].std() # 標(biāo)準(zhǔn)差
v_log_max = np.log10(v_max) # 最大值的對(duì)數(shù)
df['z_score'] = df['value'].map(lambda x: (x - v_mean) / v_std) # z分?jǐn)?shù)標(biāo)準(zhǔn)化
df['min_max'] = df['value'].map(lambda x: (x - v_min) / (v_max - v_min)) # 極差標(biāo)準(zhǔn)化,以最小值為基準(zhǔn)
df['min_max_mean'] = df['value'].map(lambda x: (x - v_mean) / (v_max - v_min)) # 極差標(biāo)準(zhǔn)化,以均值為基準(zhǔn)
df['log_max'] = df['value'].map(lambda x: np.log10(x) / v_log_max) # log函數(shù)標(biāo)準(zhǔn)化