1 import pandas as pd 2 import numpy as np 3 4 5 # 標准化----去除量級的影響 6 7 # 3種方式 8 # (1)離差標准化 9 # 將數據做線性變化,將數據映射到【0,1】范圍內, 10 # x = (x - min) / (max - min) 11 # 過大或者過小的異常值都會對結果產生影響 12 # 容易受到異常值影響 13 def max_min_sca(data): 14 """ 15 借助離差標准化 來標准化數據 16 :param data: 原數據 17 :return: 標准化之后的數據 18 """ 19 data = (data - data.min()) / (data.max() - data.min()) 20 21 return data 22 23 24 # (2)標准差標准化 25 # 借助 均值與標准差 對數據進行轉換 26 # x = (x- mean) / std 27 def stand_sca(data): 28 """ 29 標准差標准化 30 :param data:原數據 31 :return: 標准差之后的數據 32 """ 33 data = (data - data.mean()) / data.std() 34 35 return data 36 37 38 # 10000個【10,20】 10000----均值影響不大,標准差影響不大 39 # 不容易受到異常值影響 40 41 42 # (3)小數定標標准化 43 # 通過移動小數位數來把數據轉化到【-1,1】之間---數據分布規律不變 44 # x = x /10^k 45 # k -----> 向上取整(log10(|x|.max())) 46 def desc_sca(data): 47 """ 48 小數定標標准化數據 49 :param data: 原數據 50 :return: 標准化之后的數據 51 """ 52 data = data / (10 ** int(np.ceil(np.log10(data.abs().max())))) 53 return data 54 55 56 57 # 驗證: 58 detail = pd.read_excel("./meal_order_detail.xlsx") 59 60 print("detail 的列索引:\n", detail.columns) 61 # print("detail 的形狀:\n", detail.shape) 62 print("未標准化之前:\n", detail.loc[:, "amounts"]) 63 print("最大值與最小值:\n", detail.loc[:, "amounts"].max(), detail.loc[:, "amounts"].min()) 64 print("標准化之后\n", max_min_sca(detail.loc[:, "amounts"])) 65 print("標准化之后\n", stand_sca(detail.loc[:, "amounts"])) 66 print("標准化之后\n", desc_sca(detail.loc[:, "amounts"]))