【数据分析&数据挖掘】三种数据标准化方式——离差标准化、标准差标准化&小数定标标准化

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

猜你喜欢

转载自www.cnblogs.com/Tree0108/p/12116093.html