python3获取四分位数【箱型图过滤异常数据】

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()

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WaiSaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值