目錄
3σ 原則 | (u-3*σ ,u+3*σ ) |
離差標準化 | (x-min)/(max-min) |
標準差標準化 | (x-u)/σ |
小數定標標準化 |
x/10**k k=np.ceil(log10(max(|x|))) |
1.3σ原則
u 均值
σ 標準差
正太分佈的數據基本都分佈在(u-3σ,u+3σ)範圍內
其他的數據
import pandas as pd
import numpy as np
def three_sigma(se):
"""
自實現3σ原則,進行數據過濾
:param se:傳進來的series結構數據
:return:去除異常值之後的series數據
"""
bool_id=((se.mean()-3*se.std())<se) & (se<(se.mean()+3*se.std()))
print(bool_id)
return se[bool_id]
#加載數據
detail=pd.read_excel('./meal_order_detail.xlsx')
#進行異常值處理
res=three_sigma(detail['amounts'])
print(detail.shape)
print(res.shape)
2.離差標準化
(x-min)/(max-min)
import pandas as pd
import numpy as np
def minmax_sca(data):
"""
離差標準化
param data:傳入的數據
return:標準化之後的數據
"""
new_data=(data-data.min())/(data.max()-data.min())
return new_data
#加載數據
detail=pd.read_excel('./meal_order_detail.xlsx')
res=minmax_sca(detail[['amounts','counts']])
print(res)
data=res
bool_id=data.loc[:,'count']==1
print(data.loc[bool_id],'counts')
3.標準差標準化
(x-u)/σ
異常值對標準差標準化的影響不大
轉化之後的數據--->均值0 標準差1
import pandas as pd
import numpy as np
def stand_sca(data):
"""
標準差標準化
:param data:傳入的數據
:return:標準化之後的數據
"""
new_data=(data-data.mean())/data.std()
return new_data
#加載數據
detail=pd.read_excel('./meal_order_detail.xlsx')
res=stand_sca(detail[['amounts','counts']])
print(res)
print('res的均值:',res.mean())
print('res的標準差:',res.std())
4.小數定標標準化
x/(10^k)
k=math.ceil(log10(max(|x|)))
以10爲底,x的絕對值的最大值的對數 最後進行向上取整
import pandas as pd
import numpy as np
def deci_sca(data):
"""
自實現小數定標標準化
:param data: 傳入的數據
:return: 標準化之後的數據
"""
new_data=data/(10**(np.ceil(np.log10(data.abs().max()))))
return new_data
#加載數據
detail = pd.read_excel('./meal_order_detail.xlsx')
res = deci_sca(detail[['amounts', 'counts']])
print(res)