python计算四分位及绘制箱型图

一、计算四分位

#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
@author:ZSW
@file:quantile_distance.py
@time:2021/02/05
"""

import pandas as pd
import numpy as np

# 读取excle文件
excel_data = pd.read_excel("1.xlsx")
# print(excel_data)

data1 = excel_data.to_dict(orient="list")
data_list = data1['time']
data_list = sorted(data_list)

# 法一:使用numpy工具包
res = np.percentile(data_list, (25, 50, 75), interpolation='midpoint')
print(res)


# 法二:直接计算
def median(x):
    x = sorted(x)
    length = len(x)
    mid, rem = divmod(length, 2)  # divmod函数返回商和余数
    if rem:
        return x[:mid], x[mid + 1:], x[mid]
    else:
        return x[:mid], x[mid:], (x[mid - 1] + x[mid]) / 2


lHalf, rHalf, q2 = median(data_list)
print('上四分位:{}'.format(median(lHalf)[2]))
print('中位数:{}'.format(q2))
print('下四分位:{}'.format(median(rHalf)[2]))
print('四分位距:{}'.format(median(rHalf)[2]-median(lHalf)[2]))
res = (median(rHalf)[2]-median(lHalf)[2])*1.5 + median(rHalf)[2]
print('异常阈值:{}'.format(res))

# 法三:使用pandas中describe()函数
print(pd.DataFrame(data_list).describe())

结果:

[0.12638889 0.59694444 2.32527778]
上四分位:0.126388888888889
中位数:0.596944444444444
下四分位:2.3252777777777798
四分位距:2.1988888888888907
异常阈值:5.623611111111115

                  0
count  37932.000000
mean       3.041283
std        5.612899
min        0.000000
25%        0.126389
50%        0.596944
75%        2.325139
max       25.071944

二、绘制箱型图

#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
@author:ZSW
@file:plot_quantile_distance.py
@time:2021/02/05
"""

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl

# 解决matplotlib无法显示中文问题
mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False


df = pd.read_excel("1.xlsx")

data = df['avg_time']
data.plot.box(title="箱型图")
plt.show()

                                                                                             

                                                                                                    

三、绘制多箱型图

import pandas as pd
from pylab import *

rcParams['axes.unicode_minus'] = False
rcParams['font.sans-serif'] = ['Simhei']


df = pd.read_excel("5.xlsx", sheet_name='Sheet1')
data1 = df.to_dict(orient="list")
df = pd.DataFrame(data1)
print(df.describe())  # 显示中位数、上下四分位数、标准偏差等内容
box_1 = data1['A类']
labels = '1'
plt.subplot(241)
plt.boxplot([box_1], notch=False, labels=labels, patch_artist = False, boxprops={'color':'black','linewidth':'2.0'},
            capprops={'color':'black','linewidth':'2.0'})
plt.xlabel("A类", fontsize=16)
plt.ylabel('时长(时)', fontsize=16)
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)


df = pd.read_excel("5.xlsx", sheet_name='Sheet2')
data1 = df.to_dict(orient="list")
df = pd.DataFrame(data1)
print(df.describe())  # 显示中位数、上下四分位数、标准偏差等内容
box_1 = data1['B类']
labels = '2'
plt.subplot(242)
plt.boxplot([box_1], notch=False, labels=labels, patch_artist=False, boxprops={'color':'black','linewidth':'2.0'},
            capprops={'color': 'black', 'linewidth':'2.0'})
plt.xlabel("B类",fontsize=16)
plt.ylabel('时长(时)',fontsize=16)
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)


df = pd.read_excel("5.xlsx", sheet_name='Sheet3')
data1 = df.to_dict(orient="list")
df = pd.DataFrame(data1)
print(df.describe())  # 显示中位数、上下四分位数、标准偏差等内容
box_1 = data1['C类']
labels = '3'
plt.subplot(243)
plt.boxplot([box_1], notch=False, labels=labels, patch_artist=False, boxprops={'color':'black','linewidth':'2.0'},
            capprops={'color':'black','linewidth':'2.0'})
plt.xlabel("C类",fontsize=16)
plt.ylabel('时长(时)',fontsize=16)
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)


df = pd.read_excel("5.xlsx", sheet_name='Sheet4')
data1 = df.to_dict(orient="list")
df = pd.DataFrame(data1)
print(df.describe())  # 显示中位数、上下四分位数、标准偏差等内容
box_1 = data1['D类']
labels = '4'
plt.subplot(244)
plt.boxplot([box_1], notch=False, labels=labels,patch_artist=False, boxprops={'color':'black','linewidth':'2.0'},
            capprops={'color':'black','linewidth':'2.0'})
plt.xlabel("D类",fontsize=16)
plt.ylabel('时长(时)',fontsize=16)
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)


df = pd.read_excel("5.xlsx", sheet_name='Sheet5')
data1 = df.to_dict(orient="list")
df = pd.DataFrame(data1)
print(df.describe())  # 显示中位数、上下四分位数、标准偏差等内容
box_1 = data1['E类']
labels = '5'
plt.subplot(245)
plt.boxplot([box_1], notch=False, labels=labels, patch_artist=False, boxprops={'color':'black','linewidth':'2.0'},
            capprops={'color':'black','linewidth':'2.0'})
plt.xlabel("E类",fontsize=16)
plt.ylabel('时长(时)',fontsize=16)
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)


df = pd.read_excel("5.xlsx", sheet_name='Sheet6')
data1 = df.to_dict(orient="list")
df = pd.DataFrame(data1)
print(df.describe())  # 显示中位数、上下四分位数、标准偏差等内容
box_1 = data1['F类']
labels = '6'
plt.subplot(246)
plt.boxplot([box_1], notch=False, labels=labels, patch_artist=False, boxprops={'color':'black','linewidth':'2.0'},
            capprops={'color':'black','linewidth':'2.0'})
plt.xlabel("F类",fontsize=16)
plt.ylabel('时长(时)',fontsize=16)
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)


df = pd.read_excel("5.xlsx", sheet_name='Sheet7')
data1 = df.to_dict(orient="list")
df = pd.DataFrame(data1)
print(df.describe())  # 显示中位数、上下四分位数、标准偏差等内容
box_1 = data1['G类']
labels = '8'
plt.subplot(247)
plt.boxplot([box_1], notch=False, labels=labels, patch_artist=False, boxprops={'color':'black','linewidth':'2.0'},
            capprops={'color':'black','linewidth':'2.0'})
plt.xlabel("G类",fontsize=16)
plt.ylabel('时长(时)',fontsize=16)
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)

plt.show()

结果:

                                   

    

参考:http://www.79tui.com/happy/605215.html

         https://blog.csdn.net/sinat_28252525/article/details/80671238

        https://blog.csdn.net/qq_27217709/article/details/89483025

  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Python中可以使用matplotlib库绘制箱型图箱型图也称为盒须图,是一种用于展示数据分布情况的图表。箱型图可以直观地显示数据的中位数、下四分位数、上四分位数以及异常值。 下面是一个简单的例子,展示如何使用matplotlib库绘制箱型图: ```python import matplotlib.pyplot as plt import numpy as np data = np.random.normal(size=1000) # 生成1000个正态分布的随机数 fig, ax = plt.subplots() ax.boxplot(data) plt.show() ``` 运行后会弹出一个窗口,显示生成的箱型图。在这个例子中,我们使用numpy库生成了1000个正态分布的随机数,并将它们作为数据源传入boxplot函数中,最终得到一个箱型图。 如果想要对箱型图进行更详细的设置,可以通过boxplot函数的参数进行修改,例如修改箱体的颜色、线条的粗细等等。 下面是一个带有设置参数的例子: ```python import matplotlib.pyplot as plt import numpy as np data = np.random.normal(size=100) # 生成100个正态分布的随机数 fig, ax = plt.subplots() ax.boxplot(data, vert=False, # 水平显示 showmeans=True, # 显示均值 meanline=True, # 显示均值线 patch_artist=True, # 填充颜色 boxprops=dict(facecolor='pink', color='blue', linewidth=2), # 箱体属性 whiskerprops=dict(color='red', linewidth=2), # 箱须属性 medianprops=dict(color='green', linewidth=2), # 中位数属性 meanprops=dict(marker='D', markeredgecolor='black', markersize=7, markerfacecolor='orange')) # 均值属性 plt.show() ``` 这个例子中,我们设置了一系列参数,包括将箱型图水平显示、显示均值、显示均值线、填充颜色等等。具体的设置可以根据需要进行调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Steven灬

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

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

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

打赏作者

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

抵扣说明:

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

余额充值