python:matplotlib 箱线图(boxplot)参数及分析详解

python画箱线图boxplot目的是为了方面通过图的形式查看数据分散情况。用matplotlib画箱线图很简单,但是我们更重要的是怎么去看箱线图。

箱线图统计学知识

上限值:Q1-1.5×IQR
上相邻值:距离上限值最近的值
须线:上下分位数各自与上下相邻值的距离
上四分位数(Q1):一组数据按顺序排列,从小至大第25%位置的数值
中位数:一组数据按顺序排列,从小至大第50%位置的数值
中位线(IQR):Q3-Q1上四分位数至下四分位数的距离
下四分位数(Q3):一组数据按顺序排列,从小至大第75%位置的数值
下相邻值:距离下限值最近的值
下限值:Q3+1.5×IQR
离群值(异常值):一组数据中超过上下限的真实值
python:matplotlib 箱线图(boxplot)参数及分析详解
对照正态分布图来参考:
python:matplotlib 箱线图(boxplot)参数及分析详解
如果中位线往右偏移,那么数据呈左偏分布;
如果中位线往左偏移,那么数据呈右偏分布;

matplotlib画图箱线图

案例数据链接点击下载
python:matplotlib 箱线图(boxplot)参数及分析详解

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']

data=pd.read_csv('datingTestSet2.txt',sep='\t')
print(data.shape)
data.head()
>>>
飞行里程	视频游戏消耗时间	消费冰淇淋公斤数	感兴趣程度
0	40920	8.326976	0.953952	3
1	14488	7.153469	1.673904	2
2	26052	1.441871	0.805124	1
3	75136	13.147394	0.428964	1
4	38344	1.669788	0.134296	1
---------------------------------------------------
group=data.感兴趣程度.unique()
def group():
    df=[]
    group=data.感兴趣程度.unique()
    for x in group:
        a=data.飞行里程[data.感兴趣程度==x]
        df.append(a)
    return df
box1,box2,box3=group()[0],group()[1],group()[2]

#给各箱线图添加数据标签
def xticks():
    for x in range(len(group())):
        mx=int(group()[x].describe()['max'])
        mi=int(group()[x].describe()['min'])
        a=int(group()[x].describe()['25%'])
        b=int(group()[x].describe()['50%'])
        c=int(group()[x].describe()['75%'])
        up=int(a-1.5*(c-a))
        down=int(c+1.5*(c-a))
        xtext=[mi,up,a,b,c,mx,down]
        for y in xtext:
            plt.text(y-500,x+1.25,y,fontsize=11.1)

#绘制箱线图并设置需要的参数
plt.figure(figsize=(15,7))
plt.boxplot([box1,box2,box3],vert=False,showmeans=False)
plt.xticks(np.arange(0,100000,step=8000))
plt.ylabel('好感程度',fontsize=20.0)
plt.title('飞行里程',fontsize=20.0)
plt.yticks(fontsize=15.0)
xticks()
plt.show()