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"]))
原文地址:https://www.cnblogs.com/Tree0108/p/12116093.html
时间: 2024-10-10 17:23:20