首页 > 其他分享 >【matplotlib 实战】--箱型图

【matplotlib 实战】--箱型图

时间:2023-10-30 09:03:21浏览次数:34  
标签:-- data 中位数 matplotlib 四分 箱型 数据 位数

箱型图(Box Plot),也称为盒须图或盒式图,1977年由美国著名统计学家约翰·图基(John Tukey)发明。
是一种用作显示一组数据分布情况的统计图,因型状如箱子而得名。

它能显示出一组数据的最大值、最小值、中位数及上下四分位数。
箱子的顶端和底端,分别代表上下四分位数。
箱子中间的是中位数线,它将箱子一分为二。从箱子延伸出去的线条展现出了上下四分位数以外的数据,由于这两根延伸出去的线像是胡须,因此箱形图也被称为盒须图。

箱形图最大的优势是,它以一种简单的方式,概括出一个或多个数值变量的分布,同时又不会占据太多空间。

1. 主要元素

它主要由以下五个元素组成:

  1. 最大值:表示数据的最大值,排除了异常值后的上限。
  2. 上四分位线:数据的上四分位数,将数据分为四等份,处于上边缘和中位数之间的数据。也称为第三四分位数。
  3. 中位数:数据的中位数,将数据分为两等份,处于上四分位数和下四分位数之间的数据。也称为第二四分位数。
  4. 下四分位线:数据的下四分位数,将数据分为四等份,处于中位数和下边缘之间的数据。也称为第一四分位数。
  5. 最小值:表示数据的最小值,排除了异常值后的下限。

图片来自 antv 官网

2. 适用的场景

箱型图适用于以下分析场景:

  • 数据分布比较:比较不同组数据的分布情况。通过将多个箱型图放在一起,可以直观地比较它们的中位数、四分位数和离群值等信息,从而了解它们之间的差异。
  • 离群值检测:检测数据中的离群值。离群值是与其他数据点相比明显偏离的数据点,它们可能是数据收集或记录过程中的异常或错误。箱型图中的离群点可以帮助识别这些异常值。
  • 数据中心趋势和离散程度:通过中位数和四分位距(上四分位数与下四分位数之差)展示了数据的中心趋势和离散程度。中位数提供了数据的中心位置,四分位距提供了数据的离散程度。
  • 数据分布形状:提供关于数据分布形状的一些信息。例如,如果箱型图的上下边缘和中位数都接近,箱型图可能显示出对称的分布。如果箱型图的上边缘比下边缘长,中位数偏向下边缘,可能显示出右偏分布。

3. 不适用的场景

箱型图不适用于以下分析场景:

  • 数据样本过小:当数据样本过小时,箱型图可能无法提供足够的信息来准确描述数据的分布情况。
  • 数据分布复杂:当数据分布非常复杂或包含多个峰值时,箱型图可能无法完全捕捉到数据的特征。
  • 数据缺失:如果数据中存在大量缺失值,箱型图可能无法提供准确的分布信息。

4. 分析实战

本次通过箱型图分析我国三大产业对GDP的贡献情况。

4.1. 数据来源

数据来自国家统计局公开的历年数据,整理好的文件从下面的地址下载:
https://databook.top/nation/A02

使用的是其中的 A0201.csv 文件(国内生产总值)

fp = "d:/share/data/A0201.csv"

df = pd.read_csv(fp)
df

image.png

4.2. 数据清理

过滤出三大产业在2013年~2022年的增加值数据。

data = df[df["zb"].isin(["A020103", 
                         "A020104",
                         "A020105"])].copy()
data = data[data["sj"] > 2012]
data

其中,A020103A020104A020105 分别是三大产业的指标编号。

4.3. 分析结果可视化

通过箱型图展示三大产业的增加值情况:

fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 1, 1])

graph = ax.boxplot(
    [
        data[data["zb"] == "A020103"].loc[:, "value"],
        data[data["zb"] == "A020104"].loc[:, "value"],
        data[data["zb"] == "A020105"].loc[:, "value"],
    ],
    vert=True,
    patch_artist=True,
    labels=["第一产业", "第二产业", "第三产业"]
)
ax.set_title("2013~2022 三大产业对GDP增加值(亿元)")

colors = ['pink', 'lightblue', 'lightgreen']
for patch, color in zip(graph['boxes'], colors):
    patch.set_facecolor(color)

plt.show()

image.png

从图中可以看出,近10年来,第一产业的增加值明显低于其他两个产业。
第二第三产业的上下限的值相差比较大,说明增长或者下降比较明显(看了数据,是增长明显)。
第一产业的中位数(红色的横线)偏下半部分,说明多数的年份增加值比较低
第二产业的中位数(红色的横线)偏上半部分,说明多数的年份增加值比较高

标签:--,data,中位数,matplotlib,四分,箱型,数据,位数
From: https://www.cnblogs.com/wang_yb/p/17797008.html

相关文章

  • axios请求实战
    Home主页请求数据一、概览1.request请求2.找到合适API并传相应参数3.需要请求的组件调用4.请求方接受数据并传至展示组件二、一起看下代码吧,这里采用vue的多文件形式1.request.js文件用于创建请求实体2.home.js文件用于封装request请求实现特定页面的请求发送3.......
  • 数据库 —— 图书管理系统设计
    问题:高版本数据库备份还原到低版本数据库不兼容问题?解决:高版本数据库生成低版本数据库对应SQL脚本,后者用SQL脚本创建数据库。 详见:http://www.360doc.com/content/21/0804/18/13237883_989521566.shtml ......
  • 计算机网络基础初涉
    网络,简而言之,就是一道道数据流组成的虚拟化的网。计算机网络由硬件上由基本的主机,数据信号转化器,光纤,路由设备,通讯线路,他方主机(服务器)组成,这就形成了基本的2机互通。他的实现基于OSI计算机模型。即物理层,链路层,网络层,传输层,会话层,表示层,应用层。而多机互通可通过一机分发多条线......
  • .NET中的数组在内存中如何布局?
    总的来说,.NET的值类型和引用类型都映射一段连续的内存片段。不过对于值类型对象来说,这段内存只需要存储其字段成员,而对应引用类型对象,还需要存储额外的内容。就内存布局来说,引用类型有两个独特的存在,一个是字符串,另一个就是数组。我在《你知道.NET的字符串在内存中是如何存储的吗?......
  • C++实验心得
    C++类文件写通讯录系统生成项目,创建类文件...调出工作区,manager属性类文件运用string型变量的找不到此数据类型问题,需要在对应.h文件定义上命名空间并引用<string>头文件类文件引用主函数全局变量main.cpp externinta; //导出 ...Class_one.cpp inta; //去ex......
  • 构造矩阵
    构造矩阵我们希望构造一个$n\timesm$的整数矩阵。构造出的矩阵需满足:每一行上的所有元素之积均等于$k$。每一列上的所有元素之积均等于$k$。保证$k$为$1$或$-1$。请你计算,一共可以构成出多少种不同的满足条件的矩阵。由于结果可能很大,你只需要输出对$10^9+7$......
  • Java基础 反射
     反射允许对封装类的字段(成员变量)、方法(成员方法)和构造函数(构造方法)的信息进行编程访问  获取字段(成员变量)、成员方法和构造方法的时候,我们不是从Java文件中获取的,而是从class字节码文件当中获取的所以我们首先要先学习如何获取class字节码文件的对象 ......
  • 创建CI/CD流水线中的IaC前,需要考虑哪些事项?
    许多软件工程团队通常会遵循相似的方法来交付基础设施以支持软件开发生命周期。为了缩小基础设施配置方式与应用程序环境部署方式之间的差距,许多DevOps团队将其基础设施即代码(IaC)模块直接连接到其CI/CD平台。其目的是创建一个直接融入软件开发和交付流程的连续基础设施流水线,......
  • 01背包问题的js解决方式
    如果你有兴趣看这个相信你已经对背包问题有所了解,所以关于背包问题的描述,我就不写了。只记录一下自己对这个问题的一些看法和思考,于我而言,这个东西现在困扰我的是如何确定最优解。实质上关于背包问题网上的东西我大体都有看过,对于这个问题,常见的就是使背包重量动态增长,然后遍历每......
  • command_block的 《分块相关杂谈》注
    目录0x00分块概论0x10基础数列分块原文链接0x00分块概论大概可以理解为将一段数组分成长度大约为\(\sqrt{n}\)长度的块,对于一段区间\(\left[l,r\right]\),我们可以将其拆分为三大部分:\(\left[l,bl\timeslen+len-1\right]\)的暴力区间,\(\left[bl\timeslen+len,br\time......