Python-四分位数计算

怎么计算四分位数

先理解四分位数怎么计算:可参考https://zhuanlan.zhihu.com/p/235345817

假设数列一共有n个数

1)当 (n+1)/4可以整除时,

Q1第在(n+1)/4位

Q2第 (n+1)/2位

Q3第(n+1)/4*3位

举例 1 2 2 5 6 9 9 这个数列

Q1在第 (7+1)/4 =2 位,即Q1=2

Q2在第(7+1)/2=4位,即Q2=5

Q3在第(7+1)/4*3=6位,即Q3=9

2)当 (n+1)/4不能整除时

举例 数列 1 2 3 4 5 6 7 8

Q1在 (8+1)/4=2.25位, 介于第二和第三位之间,但是更靠近第二位。所以第二位数权重占75%,第三位数权重占25%。Q1=(2*0.75+3*0.25)/(0.75+0.25)=2.25

Q2在 (8+1)/2=4.5位,即第4和第5位的平均数,Q2=4.5

同理Q3在(8+1)/4*3=6.75位,在第六位和第七位之间,更靠近第7位。所以第7位权重75%,第6位权重25%。

Q3=(7*0.75+6*0.25)/(0.75+0.25)=6.75

代码实现

import matplotlib.pyplot as plt

#s = [5,9,13,15,16,17,19,21,22,25,26,26,29,30,32,39,52]
s = [7, 15, 36, 39, 40, 41]
#判断能不能整除
if (len(s)+1)%4 ==0:
    #Q1/Q2/Q3的位置

    q1 = int((len(s)+1)/4-1)
    q2 = int(2*(len(s)+1)/4-1)
    q3 = int(3*(len(s)+1)/4-1)
    print('Q1是:{},Q2是{},Q3是{}'.format(s[q1],s[q2],s[q3]))
else:
    q1 = (len(s)+1)/4-1
    #判断是否超过.5
    int_q1 = int(q1)
    if q1<int_q1+0.5:
        q1_value = s[int_q1]*0.75+s[int_q1+1]*0.25
    elif q1>int_q1+0.5:
        q1_value = s[int_q1]*0.25+s[int_q1+1]*0.75
    else:
        q1_value = s[int_q1]*0.5+s[int_q1+1]*0.5
    #下面计算Q2
    if (len(s)+1)%2 ==0:
        q2 = int((len(s)+1)/2-1)  #位置
        q2_value = s[q2]
    else:
        q2 = int((len(s)+1)/2-1)
        q2_value = (s[q2]+s[q2+1])/2
        
    #下面计算Q3
    q3 = 3*(len(s)+1)/4-1
    #判断是否超过.5
    int_q3 = int(q3)
    if q3<int_q3+0.5:
        q3_value = s[int_q3]*0.75+s[int_q3+1]*0.25
    elif q3>int_q3+0.5:
        q3_value = s[int_q3]*0.25+s[int_q3+1]*0.75
    else:
        q3_value = s[int_q3]*0.5+s[int_q3+1]*0.5
    
    

    print('Q1是:{},Q2是{},Q3是{}'.format(q1_value,q2_value,q3_value))

plt.boxplot(s)
plt.show()

结果展示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值