怎么计算四分位数
先理解四分位数怎么计算:可参考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()