程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python3獲取四分位數【箱型圖過濾異常數據】

編輯:Python

1、箱型圖-四分位數

  • 箱型圖過濾異常數據,需要先計算上四分位數和下四分位數,然後再計算最小min、最大值max,獲得判斷異常值的阈值范圍[min, max]。
  • 四分位數是通過3個點(Q1,Q2,Q3)將全部數據等分為4部分,其中每部分包含25%的數據。
  • 很顯然,中間的四分位數Q2就是中位數。
  • 通常,稱Q1為下四分位數,即從小到大排列後第25%的數;稱Q3為上四分位數,即即從小到大排列後第75%的數。
  • 異常值阈值范圍的最小、最大值計算公式:min=Q1-1.5*(Q3-Q1)max=Q3+1.5*(Q3-Q1)

2、代碼實現

實現邏輯:

  • 先獲取總樣本的中位數Q2及其索引;
  • 然後用Q2的索引把總樣本等分稱兩部分;
  • 然後以相同的邏輯來獲取被等分後的兩部分的中位數,即Q1和Q3;
  • 最終返回 Q1,Q2,Q3;
  • 我們可以根據Q1,Q3計算獲得最小min、最大值max。
import numpy as np
import math
def do_cal_min_max(q1, q3):
"""計算最小、最大值"""
min = q1 - 1.5 * (q3 - q1)
max = q3 + 1.5 * (q3 - q1)
return min, max
def get_mid_idx(data):
"""獲取中位數的索引,如果是偶數個,則是最中間兩個數的索引的平均值"""
length = len(data)
if length % 2 == 0:
idx1 = length / 2 - 1
idx2 = idx1 + 1
idx = np.mean([idx1, idx2])
else:
idx = math.ceil(length / 2)
return idx
def do_cal_quarter(data):
"""計算四分位數:四分位數是通過3個點(Q1,Q2, Q3)將全部數據等分為4部分,其中每部分包含25%的數據。 Q1:下四分位數,等於該樣本中所有數值由小到大排列後第25%的數; Q2:中位數,等於該樣本中所有數值由小到大排列後第50%的數; Q3:上四分位數,等於該樣本中所有數值由小到大排列後第75%的數。 """
# 先從小到大排序
data.sort()
# 先獲取中位數索引和中位數
idx = get_mid_idx(data)
q2 = np.median(data)
# 被中位數索引等分的兩部分
part1 = [v for i, v in enumerate(data) if i < idx]
part2 = [v for i, v in enumerate(data) if i > idx]
# 獲取下四分位數
q1 = np.median(part1)
# 獲取上四分位數
q3 = np.median(part2)
return q1, q2, q3
def main():
"""主函數"""
data = [-1, -2, -3, -4, -5]
# 獲取Q1,Q2,Q3
q1, q2, q3 = do_cal_quarter(data)
print(q1, q2, q3)
# 獲取最小min、最大值max
min, max = do_cal_min_max(q1, q3)
print(min, max)
if __name__ == '__main__':
main()

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved