python画箱线图boxplot目的是为了方面通过图的形式查看数据分散情况。用matplotlib画箱线图很简单,但是我们更重要的是怎么去看箱线图。
箱线图统计学知识
上限值:Q1-1.5×IQR
上相邻值:距离上限值最近的值
须线:上下分位数各自与上下相邻值的距离
上四分位数(Q1):一组数据按顺序排列,从小至大第25%位置的数值
中位数:一组数据按顺序排列,从小至大第50%位置的数值
中位线(IQR):Q3-Q1上四分位数至下四分位数的距离
下四分位数(Q3):一组数据按顺序排列,从小至大第75%位置的数值
下相邻值:距离下限值最近的值
下限值:Q3+1.5×IQR
离群值(异常值):一组数据中超过上下限的真实值
对照正态分布图来参考:
如果中位线往右偏移,那么数据呈左偏分布;
如果中位线往左偏移,那么数据呈右偏分布;
matplotlib画图箱线图
案例数据链接点击下载
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()
seaborn画图
import seaborn as sns
plt.figure(figsize=(15,7))
sns.boxplot('飞行里程','感兴趣程度',data=df,orient='h')
plt.ylabel('好感程度',fontsize=20.0)
plt.xlabel('飞行里程',fontsize=20.0)
plt.yticks(fontsize=15.0)
plt.show()