python还原excel画boxplot时的数据标签:最小值,Q1,Q2(中位数),Q3,最大值

接上一篇 excel画boxplot的q1和q3值和excel公式QUARTILE.INC(array,quart)拉出来的不一样,晚饭后来交作业了,还是以那10个语文成绩为例,计算boxplot的min,q1,q2(median),q3,max,python code如下:

import numpy as np
import math

score_list=[85,88,70,75,80,84,53,79,86,90]#没排序的语文成绩

#定义boxplot的q1, q2=median, q3
def q_index(list,order):
    list_new = sorted(list)#input list由小到大排序:[53, 70, 75, 79, 80, 84, 85, 86, 88, 90]
    if (order*(len(list_new)+1))%4==0:
        index=int(((order*(len(list_new)+1))/4)-1)
        return list_new[index]
    else:
        index=((order*(len(list_new)+1))/4)-1
        index1=math.floor(index)#8
        index2=index1+1#9
        ratio1=index-index1#0.25
        ratio2=index2-index#0.75
        return(list_new[index1]*ratio2+list_new[index2]*ratio1)
        
print(q_index(score_list,1))#q1=73.75
print(q_index(score_list,2))#q2=median=82.0
print(q_index(score_list,3))#q3=86.5

#定义boxplot的上下界,不包含outlier在内的max and min
def boxplot_fill(col):
    # 计算iqr:数据四分之三分位值与四分之一分位值的差
    iqr = q_index(col,3)-q_index(col,1)
    # 根据iqr计算异常值判断阈值
    u_th = q_index(col,3)+ 1.5*iqr # 上界 max
    l_th = q_index(col,1) - 1.5*iqr # 下界 min
    #print(u_th,l_th) #ok
    
#如果数字大于上界则舍去,用剩余的最大值作为max,小于下界则舍去,用剩余最小值作为min。
    def box_trans(x):
        if x > u_th:
            return np.nan#大于上界max的outlier赋值为nan
        elif x < l_th:
            return np.nan#小于下界min的outlier赋值为nan
        else:
            return x
    #print(list(map(box_trans,col)))
    return list(map(box_trans,col))
    
print(np.nanmin(boxplot_fill(score_list)))#min=70.0
print(np.nanmax(boxplot_fill(score_list)))#max=90.0

#最后把上面两个函数包装进来,用这一个函数就可以得到我们要的boxolot的5个值了
def box_5_canshu(col,number):
    if number == 4:
        return str(np.nanmax(boxplot_fill(col)))
    if number == 3:
        return str(q_index(col,3))
    if number == 2:
        return str(q_index(col,2))
    if number == 1:
        return str(q_index(col,1))
    if number == 0:
        return str(np.nanmin(boxplot_fill(col)))

print(box_5_canshu(score_list,0))#min=70.0
print(box_5_canshu(score_list,1))#q1=73.75
print(box_5_canshu(score_list,2))#q2=median=82.0
print(box_5_canshu(score_list,3))#q3=86.5
print(box_5_canshu(score_list,4))#max=90.0

下面是对答案环节:
在这里插入图片描述
看上去和excel自动生成的boxplot*(这是上一篇的图,有兴趣的小伙伴可以翻上一篇文章看笔记哦)那5个数字一样,ok!
在这里插入图片描述
下篇计划: 我刚刚突然想到,python写出这些值以后就可以直接把生成的txt导入excel手动生成带趋势线的boxplot,5个数字不变,只是换成另一种画法,生命不息,笔记不停,我应该不是刚刚吃太饱了觉得写笔记好像很好玩。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

没意思不好玩我不玩了

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

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

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

打赏作者

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

抵扣说明:

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

余额充值