箱线图boxplot——展示数据的分布



图表作用:

1.反映一组数据的分布特征,如:分布是否对称,是否存在离群点

2.对多组数据的分布特征进行比较

3.如果只有一个定量变量,很少用箱线图去看数据的分布,而是用直方图去观察。一般都要跟其余的定性变量做分组箱线图,可以起对比作用。(key)

适合数据类型:

针对连续型变量

用法:

只有一个变量、一组的数据(1个变量,0个定性变量),比如:学生的成绩情况

只有一个变量、多组数据(1个变量,1个定性变量[班级]),比如:1、2、3班学生的成绩情况

只有一个变量、多组数据(1个变量,多个定性变量[年级、班级]),比如:初一、初二、初三的1、2、3班学生的成绩情况

多个变量同理,看Y轴数据大小才相近才采用此用法

图表解读:

1.箱子的大小取决于数据的四分位距,即IQR = Q3 - Q1(Q3: 75%分位数 , Q1: 25%分位数 , Q3和Q1为四分位数)。50%的数据集中于箱体,若箱体太大即数据分布离散,数据波动较大,箱体小表示数据集中。

2.箱子的上边为上四分位数Q3,下边为下四分位数Q1,箱体中的横线为中位数Q2(50%分位数)

3.箱子的上触须为数据的最大值Max,下触须为数据的最小值Min(注意是非离群点的最大最小值,称为上下相邻值)

4.若数据值 > Q3+1.5 * IQR(上限值) 或 数据值 < Q1-1.5 * IQR(下限值) ,均视为异常值。数据值 > Q3+3 * IQR 或 数据值 < Q1-3 * IQR ,均视为极值。在实际应用中,不会显示异常值与极值的界限,而且一般统称为异常值。

  • 也表明上下触须不一定是数据的最大最小值,
  • (1)若数据的最大值比上限值小的,那么上触须顶点就是观察到的最大的;若数据的最大值比上限值大的,那么上触须顶点就是上限值,观察到的最大值就是异常点。
  • (2)若数据的最小值比下限值大的,那么下触须顶点就是观察到的最小值;若数据的最小值比下限值小的,那么下触须顶点就是下限值,观察到的最小值就是异常点。
  • 上述情况复杂,在线范围外的,直接理解成异常值即可

5.偏度:

  • 对称分布:中位线在箱子中间,上下相邻值到箱子的距离等长,离群点在上下限值外的分布也大致相同。
  • 右偏分布:中位数更靠近下四分位数,上相邻值到箱子的距离比下相邻值到箱子的距离长,离群点多数在上限值之外。
  • 左偏分布:中位数更靠近上四分位数,下相邻值到箱子的距离比上相邻值到箱子的距离长,离群点多数在下限值之外。

作图实操:

下面是plt.boxplot()的参数

plt.boxplot(x,

notch=None,

sym=None,

vert=None,

whis=None,

positions=None,

widths=None,

patch_artist=None,

bootstrap=None,

usermedians=None,

conf_intervals=None,

meanline=None,

showmeans=None,

showcaps=None,

showbox=None,

showfliers=None,

boxprops=None,

labels=None,

flierprops=None,

medianprops=None,

meanprops=None,

capprops=None,

whiskerprops=None,

manage_xticks=True,

autorange=False,

zorder=None,

hold=None,

data=None)

  • x:指定要绘制箱线图的数据;
  • notch:是否是凹口的形式展现箱线图,默认非凹口;
  • sym:指定异常点的形状,默认为+号显示;
  • vert:是否需要将箱线图垂直摆放,默认垂直摆放;
  • whis:指定上下须与上下四分位的距离,默认为1.5倍的四分位差;
  • positions:指定箱线图的位置,默认为[0,1,2…];
  • widths:指定箱线图的宽度,默认为0.5;
  • patch_artist:是否填充箱体的颜色;
  • meanline:是否用线的形式表示均值,默认用点来表示;
  • showmeans:是否显示均值,默认不显示;
  • showcaps:是否显示箱线图顶端和末端的两条线,默认显示;
  • showbox:是否显示箱线图的箱体,默认显示;
  • showfliers:是否显示异常值,默认显示;
  • boxprops:设置箱体的属性,如边框色,填充色等;
  • labels:为箱线图添加标签,类似于图例的作用;
  • filerprops:设置异常值的属性,如异常点的形状、大小、填充色等;
  • medianprops:设置中位数的属性,如线的类型、粗细等;
  • meanprops:设置均值的属性,如点的大小、颜色等;
  • capprops:设置箱线图顶端和末端线条的属性,如颜色、粗细等;
  • whiskerprops:设置须的属性,如颜色、粗细、线的类型等;

例1

import numpy as np
import matplotlib.pyplot as plt
plt.style.use("ggplot")
plt.rcParams["font.sans-serif"]=["SimHei"] #正常显示中文标签
plt.rcParams["axes.unicode_minus"]=False #正常显示负号
np.random.seed(800) #设置随机种子
data=np.random.randint(1,100,55)
plt.figure(figsize=(5,6)) #设置图形尺寸大小
plt.boxplot(data,
notch=False, #中位线处不设置凹陷
widths=0.2, #设置箱体宽度
medianprops={'color':'red'}, #中位线设置为红色
boxprops=dict(color="blue"), #箱体边框设置为蓝色
labels="A", #设置标签
whiskerprops = {'color': "black"}, #设置须的颜色,黑色
capprops = {'color': "green"}, #设置箱线图顶端和末端横线的属性,颜色为绿色
flierprops={'color':'purple','markeredgecolor':"purple"} #异常值属性,这里没有异常值,所以没表现出来
)
plt.title("55个1-100的随机整数的箱线图",fontsize="xx-large",color="#DE0052")
plt.show()

例2

拿Titanic数据,作乘客年龄的箱线图

import pandas as pd
import matplotlib.pyplot as plt
train = pd.read_csv(r"G:\Kaggle\Titanic\train.csv")
any(train.Age.isnull()) #检查年龄是否有缺失
train.dropna(subset=["Age"], inplace=True) #删除含有缺失年龄的观测,即行
plt.style.use("ggplot") #使用ggplot的图形style
plt.rcParams["font.sans-serif"] = "SimHei"
plt.rcParams["axes.unicode_minus"] = False # 设置中文、负号正常显示
plt.figure(figsize=(5,6))
plt.boxplot(x = train.Age, # 绘图数据
notch = True, #设置中位线处凹陷,(注意:下图看起来有点丑)
patch_artist=True, # 设置用自定义颜色填充盒形图,默认白色填充
showmeans=True, # 以点的形式显示均值
boxprops = {"color":"black","facecolor":"#F43D68"}, # 设置箱体属性,填充色and 边框色
flierprops = {"marker":"o","markerfacecolor":"#59EA3A","color":"#59EA3A"}, # 设置异常值属性,点的形状、填充色和边框色
meanprops = {"marker":"D","markerfacecolor":"white"}, # 设置均值点的属性,点的形状、填充色
medianprops = {"linestyle":"--","color":"#FBFE00"} # 设置中位数线的属性,线的类型和颜色
)
plt.ylim(0,85) # 设置y轴的取值范围
plt.title("乘客年龄箱线图",fontsize="xx-large",color="#DE0052")
plt.tick_params(top="off", right="off") # 去掉o箱线图的上方及右方边框的刻度标签
plt.show() # 显示图形,jupyter notebook有另一种写法,可以不用每一次画图都码这句

乘客的平均年龄为30岁,有50%的人,年龄落在20~38岁之间(看箱体);中位线偏下,上相邻值到箱子的距离比下相邻值到箱子的距离长,异常值多在上限值之外,说明年龄整体右偏;有偏大的异常值在64岁以上。

例3 针对箱线图箱体太扁、异常值突出情况

借用kaggle泰坦尼克号生存预测数据:Fare一项作为例子

import pandas as pd
import numpy as np
df = pd.read_csv(r"G:\Kaggle\Titanic\train.csv")
plt.figure(figsize=(5,6))
plt.boxplot("Fare",data=df)
plt.title("乘客船票价格箱线图",fontsize="xx-large",color="#DE0052")
plt.show()

箱体很扁,异常值特别突出,难以看出数据的分布情况。留意到票价均为正数,我们选择将票价做对数变换。否则就换另一种图形来呈现数据,箱线图不行。

换seaborn来画

import seaborn as sns
plt.figure(figsize=(5,6))
sns.boxplot(y="Fare",data=df) #不注明y轴的话,箱线图是横躺着的
plt.title("乘客船票价格箱线图2",fontsize="xx-large",color="#DE0052")
plt.show()#DE0052

下面做对数变换,然后再画箱线图:

x = df.Fare
df["new_Fare"] = np.log(x)
plt.figure(figsize=(5,6))
plt.boxplot(x="new_Fare",data=df)
plt.title("乘客船票价格箱线图(对数变换后)",fontsize="xx-large",color="#DE0052")
plt.show()
F:\Anaconda\lib\site-packages\ipykernel_launcher.py:2: RuntimeWarning: divide by zero encountered in log

这样就好看多了,看得出中位线、数据分布情况,异常值也没这么凸显了。

用seaborn来画

plt.figure(figsize=(5,6))
sns.boxplot(y="new_Fare",data=df,width=0.2) #不注明y轴的话,箱线图是横躺着的
plt.title("乘客船票价格箱线图2(对数变换后)",fontsize="xx-large",color="#DE0052")
plt.show()

看出船票票价整体右偏,存在偏高的异常值。

例4

在一个定量变量的基础上,加入Pclass定性变量进行分组

plt.figure(figsize=(5,6))
sns.boxplot(x="Pclass",y="new_Fare",data=df,width=0.35)
plt.title("不同船舱等级乘客船票价格箱线图(对数变换后)",fontsize="xx-large",color="#DE0052")
plt.show()

对数变换后,不同船舱等级乘客的票价都呈现右偏,票价中位数:一等舱 > 二等舱 > 三等舱,一等舱的票价普遍比二、三等舱的票价高。同时看到,一等舱存在个别票价偏低、偏高的乘客,三等舱存在部分乘客票价异常情况。

在一个定量变量、一个定性变量的基础上,再加入一个定性变量Survived进行分组

plt.figure(figsize=(6,6))
sns.boxplot(x="Pclass",y="new_Fare",hue="Survived",data=df,width=0.6)
plt.title("不同船舱等级乘客船票价格箱线图2(对数变换后)",fontsize="xx-large",color="#DE0052")
plt.show()

  • 随着船舱等级的升高,船票价格也是随之升高的;
  • 而且在同一船舱等级中,存活下来的乘客的票价中位数均比死亡乘客的票价中位数高;
  • 在一等舱中,死亡乘客中存在一个票价异常低的乘客,而存活下来的乘客中存在一个票价异常高的乘客;
  • 在三等舱中,死亡乘客中存在票价异常高的乘客,生存乘客中也存在一个票价异常高的乘客。与一等舱形成对比。

今天先作此笔记,plt.boxplot()的加入类别型变量、整块图形的背景色、坐标轴的字体大小还未解决。后期补上。

箱线图boxplot的更多相关文章

  1. 箱线图(boxplot)简介与举例

    简述:   盒图是在1977年由美国的统计学家约翰·图基(John Tukey)发明的.它由五个数值点组成:最小值(min),下四分位数(Q1),中位数(median),上四分位数(Q3),最大值(m ...

  2. 一起来玩echarts系列(一)------箱线图的分析与绘制

    一.箱线图 Box-plot 箱线图一般被用作显示数据分散情况.具体是计算一组数据的中位数.25%分位数.75%分位数.上边界.下边界,来将数据从大到小排列,直观展示数据整体的分布情况. 大部分正常数 ...

  3. Matlab boxplot for Multiple Groups(多组数据的箱线图)

    在画之前首先介绍一下Matlab boxplot,下面这段说明内容来自http://www.plob.org/2012/06/10/2153.html   由于matlab具有强大的计算功能,用其统计 ...

  4. Matplotlib学习---用matplotlib画箱线图(boxplot)

    箱线图通过数据的四分位数来展示数据的分布情况.例如:数据的中心位置,数据间的离散程度,是否有异常值等. 把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q3)分 ...

  5. matplotlib箱线图与柱状图比较

    代码: # -*- coding: utf-8 -*- """ Created on Thu Jul 12 16:37:47 2018 @author: zhen &qu ...

  6. python3绘图示例4(基于matplotlib:箱线图、散点图等)

    #!/usr/bin/env python# -*- coding:utf-8 -*- from matplotlib.pyplot import * x=[1,2,3,4]y=[5,4,3,2] # ...

  7. 扩增子图表解读1箱线图:Alpha多样性

    箱线图 箱形图(Box-plot)又称为盒须图.盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图.因形状如箱子而得名.在宏基因组领域,常用于展示样品组中各样品Alpha多样性的分布 第一种情 ...

  8. R_Studio(学生成绩)对数据缺失值md.pattern()、异常值分析(箱线图)

    我们发现这张Gary.csv表格存在学生成绩不完全的(五十三名学生,三名学生存在成绩不完整.共四个不完整成绩) 79号大学语文.高等数学 96号中国近代史纲要 65号大学体育 (1)NA表示数据集中的 ...

  9. pyhton中matplotlib箱线图的绘制(matplotlib双轴图、箱线图、散点图以及相关系数矩阵图))

    //2019.07.23 1.箱形图,又称为盒式图,一般可以很好地反映出数据分布的特征,也可以进行多项数据之间分布特征的比较,它主要包含五个基础数据:中位数,两个上下分位数以及上下边缘线数据 其中的一 ...

随机推荐

  1. 向后台提交数据:利用cookie加session提交更多数据,

    个人逻辑,可能考虑不全面,各位看到后留言,我修改啊 实现效果:浏览器第一次访问提交用户名,后台验证通过,生成随机字符串,和用户名组成字典,保存到服务器,把随机字符串设置成cookie发给浏览器,同一个 ...

  2. input file图片上传

    <div class="div-title"> <h5>图片上传</h5> <div class="photo-box" ...

  3. [转]Javascript实现图片的预加载详解

    下面的函数实现了一个我们想要的最基本的图片预加载效果 function preloadimages(arr){ var newimages=[] var arr=(typeof arr!=" ...

  4. 2018-08-13 Head First OO分析设计一书略读与例子中文化

    注: 此笔记仅为个人学习此教程的布局和材料组织之用. 如有兴趣请自行详阅. 第一章是以吉他商店的存货系统作例子. 第二章设计有狗洞的门. 第三章对第二章基础上, 更改需求后对应设计. 第四章继续改进此 ...

  5. Java之static作用的全方位总结

    1.深度总结 引用一位网友的话,说的非常好,如果别人问你static的作用:如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的:如果是说 可以构成 静态代码块,那别人认为你还可以: 如果你说 ...

  6. Java map 详解

    Map 提供了一个更通用的元素存储方法.Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值. 初始化一个集合:  Map<String, String> map = ...

  7. 【爬虫】使用xpath与lxml移除特定标签

    移除标签的两种方式 可以用xpath定位 for bad in html.xpath(".//table"): bad.getparent().remove(bad) 参考:htt ...

  8. html之css选择器学习

    相关内容: 什么是css选择器 标签选择器 类选择器 id选择器 并集选择器(分组选择器) 交集选择器 后代选择器 子标签选择器 属性选择器 相邻兄弟选择器 伪类选择器 伪元素选择器(伪对象选择器) ...

  9. SQL Server中授予用户查看对象定义的权限

    SQL Server中授予用户查看对象定义的权限   在SQL Server中,有时候需要给一些登录名(用户)授予查看所有或部分对象(存储过程.函数.视图.表)的定义权限存.如果是部分存储过程.函数. ...

  10. SQL Server 缓存清除与内存释放

    Sql Server系统内存管理在没有配置内存最大值,很多时候我们会发现运行SqlServer的系统内存往往居高不下.这是由于他对于内存使用的策略是有多少闲置的内存就占用多少,直到内存使用虑达到系统峰 ...