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"]))