箱线图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. K8S 部署 ingress-nginx (三) 启用 https

    部署 https 证书 cd ~/ingress # 生成私钥 tls.key, 密钥位数是 2048 openssl genrsa -out tls.key 2048 # 使用 tls.key 生成 ...

  2. 你不可不知的Java引用类型之——SoftReference源码详解

    定义 SoftReference是软引用,其引用的对象在内存不足的时候会被回收.只有软引用指向的对象称为软可达(softly-reachable)对象. 说明 垃圾回收器会在内存不足,经过一次垃圾回收 ...

  3. PhpStorm和WAMP配置调试参数,问题描述Error. Interpreter is not specified or invalid. Press “Fix” to edit your project configuration.

    PhpStorm和WAMP配置调试参数,解决实际问题. 问题描述: Error. Interpreter is not specified or invalid. Press "Fix&qu ...

  4. python与html5 websocket开发聊天对话窗

    1.下载必须的包 https://github.com/Pithikos/python-websocket-server,解压缩并把文件夹名‘python-websocket-server-maste ...

  5. 大约当你拿捏的准世事的分寸时,你便会成功了。(NULL)

    (网络盗图)

  6. 数据库之mysql篇(2)—— mysql常识引入/用户授权

    常识引入 1.概念: 数据库:本质上是一个文件夹 1)查看本机所有数据库:show databases; 结束符:分号[:],一切数据行的结尾都以分号作为结束 2)创建数据库:create  数据库名 ...

  7. python字符串处理以及字符串格式化

    一.python字符串处理 目录: 1.算长度(len),某个元素出现的次数(count) 2.切片   [ ],repr:把不可见字符显示出来 3.查找 #find,rfind从右边查找 4.字符串 ...

  8. March 04th, 2018 Week 10th Sunday

    Tomorrow never comes. 我生待明日,万事成蹉跎. Most of my past failures can be chalked up to the bad habit of pr ...

  9. Spring的AOP基于AspectJ的注解方式开发1

    参考自黑马培训机构 创建项目,引入jar包 编写目标类,切面类并完成配置 package spring.day2_aop2; /* * 编写目标类 */ public class OrderDao { ...

  10. 《Java大学教程》—第9章 软件质量

    软件质量:可维护性.可靠性.健壮性.可用性. 9.3 可维护性系统维护(maintaining)是指根据需求的变化更新现有系统的过程 9.3.1    封装的重要性连锁反应:对系统某一部分的改变可能会 ...