【數據分析&數據挖掘】異常值的判斷與去除——3σ & 箱線圖分析


 1 import pandas as pd
 2 
 3 # 異常值 ——遠離正常值范圍的錯誤值
 4 # 異常值 ——刪掉
 5 
 6 # 異常值判斷 ——3σ 箱線圖分析
 7 
 8 # 3σ 接住標准正態部分得到的規律——99.73%都在(μ-3α,μ+3α)之間,超過這個范圍的數據認為是異常的
 9 
10 def three_sigma(data):
11     """
12     進行3sigma異常值剔除
13     :param data: 原數據——series
14     :return: bool數組
15     """
16 
17     # 上限
18     up = data.mean() + 3 * data.std()
19     # 下線
20     low = data.mean() - 3 * data.std()
21 
22     # 在上限與下限之間的數據是正常的
23     bool_index = (data < up) & (data > low)
24 
25     return bool_index
26 
27 
28 def box_analysis(data):
29     """
30     箱線圖分析去除異常值
31     :param data: 原數據——series
32     :return: bool數組
33     """
34     # 上四分位數
35     qu = data.quantile(q=0.75)
36     # 下四分位數
37     ql = data.quantile(q=0.25)
38     # 計算四分位間距
39     iqr = qu - ql
40 
41     # 上限
42     up = qu + 1.5 * iqr
43     # 下限
44     low = ql - 1.5 * iqr
45 
46     bool_index = (data < up) & (data > low)
47 
48     return bool_index
49 
50 
51 # 驗證——加載detail
52 detail = pd.read_excel("../day05/meal_order_detail.xlsx")
53 print("detail的列索引: \n", detail.columns)
54 print("detail的形狀: \n", detail.shape)
55 
56 # 對amounts列進行異常值處理
57 bool_index = three_sigma(detail.loc[:, "amounts"])
58 bool_index = box_analysis(detail.loc[:, "amounts"])
59 print("bool_index: \n", bool_index)
60 
61 # 獲取異常值處理之后的結果
62 detail = detail.loc[bool_index, :]
63 print("異常值處理之后的結果: \n", detail.shape)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM