【Python数据科学快速入门系列 | 10】Matplotlib数据分布图表应用总结

news2024/11/20 0:39:09

这是机器未来的第59篇文章

原文首发地址:https://robotsfutures.blog.csdn.net/article/details/127484292

《Python数据科学快速入门系列》快速导航:

  • 【Python数据科学快速入门系列 | 01】Numpy初窥——基础概念
  • 【Python数据科学快速入门系列 | 02】创建ndarray对象的十多种方法
  • 【Python数据科学快速入门系列 | 03】玩转数据摘取:Numpy的索引与切片
  • 【Python数据科学快速入门系列 | 04】Numpy四则运算、矩阵运算和广播机制的爱恨情仇
  • 【Python数据科学快速入门系列 | 05】常用科学计算函数
  • 【Python数据科学快速入门系列 | 06】Matplotlib数据可视化基础入门(一)
  • 【Python数据科学快速入门系列 | 07】Matplotlib数据可视化基础入门(二)
  • 【Python数据科学快速入门系列 | 08】Matplotlib类别比较图表应用总结
  • 【Python数据科学快速入门系列 | 09】Matplotlib数据关系图表应用总结

文章目录

  • 《Python数据科学快速入门系列》快速导航:
  • 1. 概述
  • 2. 常用的数据分布图表应用
    • 2.1 统计直方图
    • 2.2 核密度估计曲线
    • 2.3 箱形图
      • 2.3.1 实例分析
      • 2.3.2 箱型图的价值
      • 2.3.3 箱型图和直方图的选择
      • 2.3.4 使用总结
    • 2.4 小提琴图
  • 3. 总结


写在开始:

  • 博客简介:专注AIoT领域,追逐未来时代的脉搏,记录路途中的技术成长!
  • 博主社区:AIoT机器智能, 欢迎加入!
  • 专栏简介:从0到1掌握数据科学常用库Numpy、Matploblib、Pandas。
  • 面向人群:AI初级学习者

1. 概述

本篇文章总结常用的数据分布图表。数据分布图表强调数据集中的数值及其频率或分布规律。常见的有统计直方图、核密度曲线图、箱形图、小提琴图等。

2. 常用的数据分布图表应用

2.1 统计直方图

直方图(Histogram),又称质量分布图,是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据范围,纵轴表示分布情况。其特点是绘制连续性的数据展示一组或者多组数据的分布状况(统计)

统计直方图涉及统计学概念,首先找到数据的最大、最小值,然后确定一个区间,使其包含全部测量数据。然后将数据区间分为若干个小区间,然后统计每个区间分组内测量数据的数量。在坐标系中,横轴标出每个组的端点,纵轴表示频数,每个矩形的高代表对应的频数,称这样的统计图为频数分布直方图。

直方图的主要作用有:

  • 能够显示数据分布情况或展示各组数据的频数;
  • 易于显示各组数据之间的频数或数量的差别,通过直方图还可以观察和估计哪些数据比较集中,异常或孤立的数据分布。

与柱状图对比:
柱状图是以矩形的长度表示每一组的频数或数量,其宽度(表示类别)则是固定的,利于较小的数据集分析。
直方图是以矩形的长度表示每一组的频数或数量,宽度则表示各组的组距,因此其高度与宽度均有意义,利于展示大量数据集的统计结果。
由于分组数据具有连续性,直方图的各矩形通常是连续排列,而柱状图则是分开排列。

import numpy as np
from matplotlib import pyplot as plt

"""
    加载鸢尾花数据集
"""
import numpy as np

data = []
column_name = []
with open(file='iris.txt',mode='r') as f:
    # 过滤标题行
    line = f.readline()
    if line:
        column_name = np.array(line.strip().split(','))
        
    while True:
        line = f.readline()
        if line:
            data.append(line.strip().split(','))
        else:
            break

data = np.array(data,dtype=float)

# 使用切片提取前4列数据作为特征数据
X_data = data[:, :4]  # 或者 X_data = data[:, :-1]

# 使用切片提取最后1列数据作为标签数据
y_data = data[:, -1]

data.shape, X_data.shape, y_data.shape
((150, 5), (150, 4), (150,))
"""
展示鸢尾花不同特征的数据分布情况
"""

# windows配置SimHei,Ubuntu配置WenQuanYi Micro Hei
plt.rcParams["font.sans-serif"]=["WenQuanYi Micro Hei"] #设置字体
plt.rcParams["axes.unicode_minus"]=False #该语句解决图像中的“-”负号的乱码问题

fig, ax = plt.subplots(figsize=(12,9))
ax.hist(X_data[:, 0], bins=16, alpha = 0.7, density=True, label="花萼长度")
ax.hist(X_data[:, 1], bins=16, alpha = 0.7, density=True, label="花萼宽度")
ax.hist(X_data[:, 2], bins=16, alpha = 0.7, density=True, label="花瓣长度")
ax.hist(X_data[:, 3], bins=16, alpha = 0.7, density=True, label="花瓣宽度")
ax.legend()

plt.show()


png

x - 数据集
bins - 分组数量,对应组距
alpha - 对应多个图例时,图例图表的透明度,可以同时展示多个图例
density - 将纵轴的频数转换为密度标识,所有的分组的的高度密度乘积之后为1
label - 图表的名称

2.2 核密度估计曲线

核密度估计图用于显示数据在X轴连续数据段内的分布状况,这种图表是直方图的变种,使用平滑曲线来绘制数值水平,从而得出更平滑的分布。其优于统计直方图的地方在于它们不受所使用分组数量的影响,所以能更好地界定分布形状。

import seaborn as sns

fig, ax = plt.subplots(figsize=(12, 9))

"""
展示鸢尾花不同特征的数据分布情况
"""
plt.rcParams["font.sans-serif"]=["WenQuanYi Micro Hei"] #设置字体
plt.rcParams["axes.unicode_minus"]=False #该语句解决图像中的“-”负号的乱码问题

ax.hist(X_data[:, 0], bins=16, alpha = 0.7, density=True, color='hotpink', label="花萼长度")
ax.hist(X_data[:, 1], bins=16, alpha = 0.7, density=True, color='m', label="花萼宽度")
ax.hist(X_data[:, 2], bins=16, alpha = 0.7, density=True, color='green', label="花瓣长度")
ax.hist(X_data[:, 3], bins=16, alpha = 0.7, density=True, color='b', label="花瓣宽度")

sns.kdeplot(X_data[:, 0], ax=ax, color='hotpink')
sns.kdeplot(X_data[:, 1], ax=ax, color='m')
sns.kdeplot(X_data[:, 2], ax=ax, color='green')
sns.kdeplot(X_data[:, 3], ax=ax, color='b')

ax.legend()
plt.show()


png

2.3 箱形图

箱形图最大的优点就是不受异常值的影响,能够准确稳定地描绘出数据的离散分布情况,同时也利于数据的清洗。

箱型图(也称为盒须图)于 1977 年由美国著名统计学家约翰·图基(John Tukey)发明。它能显示出一组数据的最大值、最小值、中位数、及上下四分位数。

在箱型图中,我们从上四分位数到下四分位数绘制一个盒子,然后用一条垂直触须(形象地称为“盒须”)穿过盒子的中间。上垂线延伸至上边缘(最大值),下垂线延伸至下边缘(最小值)。

箱型图结构如下所示:

在箱型图中,我们从上四分位数到下四分位数绘制一个盒子,这意味着箱子包含了50%的数据。因此,箱子的宽度在一定程度上反映了数据的波动程度。

箱线图和正态分布的关系

箱型图的应用场景:配合着定性变量画分组箱线图,作比较

2.3.1 实例分析

什么叫做定性,简单来说就是分类,举个简单的例子,鸢尾花数据集,以单个特征在数据集多个分类上的的数值分布、中位数、波动程度及异常值。

# 箱形图
# 进一步查看某种类下,各特征的值分布, 圆圈是离群点

print(X_data[y_data==0].shape, column_name.shape, y_data.shape)

# 山鸢尾(Setosa)、变色鸢尾(Versicolor)、维吉尼亚鸢尾(Virginical)
label_class_name = np.array(['Setosa', 'Versicolor', 'Virginical'])

fig, ax = plt.subplots(1, 4, figsize=(15, 6))

for i in range(4):
    # 添加y轴标签
    ax[i].set_ylabel(column_name[i])
    # 对标签对应的数据进行组合
    X_data_p = [X_data[y_data == 0][:, i], X_data[y_data == 1][:, i], X_data[y_data == 2][:, i]]
    # 绘制箱形图、横轴标签
    bplot = ax[i].boxplot(X_data_p, patch_artist=True, labels=label_class_name[0:3])

    ###遍历每个箱子对象
    colors = ['pink', 'lightblue', 'lightgreen']  ##定义柱子颜色、和柱子数目一致
    for patch,color in zip(bplot['boxes'],colors): ##zip快速取出两个长度相同的数组对应的索引值
        patch.set_facecolor(color)   ##每个箱子设置对应的颜色

# 调整子图上下间距
plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=0.3, hspace=0.0)
plt.show()
(50, 4) (5,) (150,)

png

从上面的图可以看到,以鸢尾花特征做定性分组,可以看到分组时不同的标签的箱型图位置错落有致,位置区别其实还是比较明显的,箱型其实代表的中位数附近累计50%的特征数据,箱型的上下边界代表上下四分位数,从上下四分位数的上下间距可以看到很直观的不同特征的数据波动的范围,还可以看到空心圆代表的异常值。

从最左侧的第一幅图花萼长度sepal_length与鸢尾花数据标签的数据关系分布来看:

  • 花萼长度sepal_length在Setosa分类中中位数较小,Versicolor鸢尾花中位数较大,Virginical鸢尾花中位数最大;
  • 箱子的长短代表了各组数据的集中程度,花萼长度sepal_length在Setosa鸢尾花中数据相对集中,Versicolor鸢尾花和Virginical鸢尾花相对分散;
  • 中位数与箱子的位置表现了各组数据的分布状态。花萼长度sepal_length在Setosa鸢尾花中呈正态分布,花萼长度sepal_length在Versicolor鸢尾花和Virginical鸢尾花中呈右偏分布;

2.3.2 箱型图的价值

  • 直观明了地识别数据批中的异常值。
  • 利用箱线图判断数据批的偏态和尾重。

对于标准正态分布的样本,只有极少值为异常值。异常值越多说明尾部越重,自由度越小(即自由变动的量的个数);而偏态表示偏离程序,异常值集中在较小值一侧,则分布呈左偏态,异常值集中在较大值一侧,则分布呈右偏态。

  • 利用箱型图比较几批数据的形状。

同一数轴上,几批数据的箱型图并行排列,几批数据的中位数、尾长、异常值、分布区间等形状信息便一目了然。

2.3.3 箱型图和直方图的选择

假设我现在要比较男女教师的教学评估得分,用什么工具最好。答案是箱线图。没有比较就没有伤害,大家看上图够明显感觉到箱线图是更有效的工具,能够从平均水平(中位数),波动程度(箱子宽度)以及异常值对男女教师的教学评估得分进行比较,而直方图却做不到。

2.3.4 使用总结

  • 箱线图是针对连续型变量的,解读时候重点关注平均水平、波动程度和异常值。

  • 当箱子被压得很扁,或者有很多异常的时候,试着做对数变换。当只有一个连续型变量时,并不适合画箱线图,直方图是更常见的选择。

  • 箱线图最有效的使用途径是作比较,配合一个或者多个定性数据,画分组箱线图。

箱型图的局限性:

  • 不能精确地衡量数据分布的偏态和尾重程序;
  • 对于批量比较大的数据,反映的信息更加模糊以及用中位数代表总体评价水平有一定的局限性。

2.4 小提琴图

小提琴图可以理解为箱型图+核密度估计曲线图。

小提琴图(Violin Plot)是用来展示数据分布状态以及概率密度的图表。这种图表结合了箱形图和密度图的特征。小提琴图跟箱形图类似,不同之处在于小提琴图还显示数据在不同数值下的概率密度。

小提琴图使用核密度估计(KDE)来计算样本的分布情况,图中要素包括了中位数、四分位间距以及置信区间。在数据量非常大且不方便一一展示的时候,小提琴图特别适用。

# 箱形图
# 进一步查看某种类下,各特征的值分布, 圆圈是离群点

print(X_data[y_data==0].shape, column_name.shape, y_data.shape)

# 山鸢尾(Setosa)、变色鸢尾(Versicolor)、维吉尼亚鸢尾(Virginical)
label_class_name = np.array(['Setosa', 'Versicolor', 'Virginical'])

fig, ax = plt.subplots(1, 4, figsize=(15, 6))

for i in range(4):
    # 添加y轴标签
    ax[i].set_ylabel(column_name[i])
    # 对标签对应的数据进行组合
    X_data_p = [X_data[y_data == 0][:, i], X_data[y_data == 1][:, i], X_data[y_data == 2][:, i]]
    # 绘制箱形图、横轴标签
    bplot = ax[i].violinplot(X_data_p, showmedians=True)

# 调整子图上下间距
plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=0.3, hspace=0.0)
plt.show()
(50, 4) (5,) (150,)

png

3. 总结

从上面的常用数据分布图表来看,他们都是适用于连续数据分布的应用场景。

直方图能够显示数据分布情况或展示各组数据的频数,易于显示各组数据之间的频数或数量的差别,通过直方图还可以观察和估计哪些数据比较集中,异常或孤立的数据分布。

核密度估计曲线其优于统计直方图的地方在于它们不受所使用分组数量的影响,所以能更好地界定分布形状。

箱型图能够准确稳定地描绘出数据的离散分布情况,直观明了地识别数据批中的异常值,数据波动及数据分布规律,典型应用于定性对比分析。

而小提琴图可以理解为箱型图+核密度估计曲线图的合体,除了箱型图的优点,还展示数据在不同数值下的概率密度,尤其适用于数据量大的应用场景。

参考文献:

  • https://baike.baidu.com/item/%E7%AE%B1%E5%BD%A2%E5%9B%BE/10671164
  • https://wenku.baidu.com/view/d1df672ef48a6529647d27284b73f242336c3118.html
  • https://www.sohu.com/a/134414348_455817
  • https://jingyan.baidu.com/article/456c463b73692d4b583144fc.html

— 博主热门专栏推荐 —

  • Python零基础快速入门系列
  • 深入浅出i.MX8企业级开发实战系列
  • MQTT从入门到提高系列
  • 物体检测快速入门系列
  • 自动驾驶模拟器AirSim快速入门
  • 安全利器SELinux入门系列
  • Python数据科学快速入门系列

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/480.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安卓讲课笔记3.3 相对布局

文章目录零、学习目标一、导入新课二、新课讲解(一)相对布局概述1、布局特点2、继承关系图3、常用属性(1)相对于父容器居中(2)相对于父容器对齐(3)相对于其它控件位置(4&…

牛客网经典Java面试常见题

个人主页:熬夜磕代码丶 作品专栏: 数据结构与算法 我变秃了,也变强了 给大家介绍一款程序员必备刷题平台——牛客网 点击注册一起刷题收获大厂offer吧 文章目录一、二叉搜索树与双向链表二、从尾到头打印链表三、调整数组奇数位于偶数前面四、删除链表…

大数据毕业设计可视化大屏前后端项目分享

1、前言 很久没有分享过可视化大屏的项目了,距离上次分享基于Echarts的数据可视化大屏系统设计分享这篇可视化系统已经过去了整整一年有余。当时分享这篇博客没想到会收获这么多的阅读量,并且在刚发布的时候,还上了CSDN的博客热搜2&#xff…

gcc环境下演示C语言变长数组

前言 👻作者:龟龟不断向前 👻简介:宁愿做一只不停跑的慢乌龟,也不想当一只三分钟热度的兔子。 👻专栏:C初阶知识点 👻工具分享: 刷题: 牛客网 leetcode笔记软…

安全帽佩戴识别算法

安全帽佩戴识别算法采用SuiJi-AI人工智能深度学习技术计算机智能视觉识别算法,且通过规模化的安全帽数据识别训练。安全帽佩戴识别算法借助现场已有的监控摄像头对监控画面中人员着装行为进行实时分析识别。假如检测人员不戴安全帽,SuiJiAi将立即记录和警…

致敬第一个1024(第一次Java代码编程)

昨日,笔者刚刚下载好IDEA,今日,笔者将会实现第一次的Java代码!!信心满满!!下面请看笔者的代码吧!!骄傲的小心,已经澎湃! 因此,本篇文…

如何实现一个SQL解析器

作者:vivo 互联网搜索团队- Deng Jie 一、背景 随着技术的不断的发展,在大数据领域出现了越来越多的技术框架。而为了降低大数据的学习成本和难度,越来越多的大数据技术和应用开始支持SQL进行数据查询。SQL作为一个学习成本很低的语言&#…

【正点原子I.MX6U-MINI应用篇】5、嵌入式Linux在LCD上显示BMP、JPG、PNG图片

一、BMP图像介绍与显示 我们常用的图片格式有很多,一般最常用的有三种:JPEG(或 JPG)、PNG、BMP和GIF。其中 JPEG(或JPG)、PNG以及 BMP 都是静态图片,而 GIF 则可以实现动态图片。 BMP(全称 Bitmap)是Window操作系统中的标准图像文件格式&am…

计算机学院第五次ACM周赛题解

目录 HF的智能小车车 Do you like Van game&#xff1f; 好姐姐的三角形 帮帮小陈 卷点 签个到就下班 现在是摸鱼时间 现在是摸鱼时间 PLUS HF的智能小车车 签到题目&#xff0c; #include<iostream>using namespace std;int main() {string arr;cin>>ar…

学生会信息管理系统

1、项目介绍 学生会信息管理系统拥有两种角色&#xff1a;学生和管理员 学生&#xff1a;查看活动和新闻信息、发布活动、登录注册 管理员&#xff1a;公共新闻管理、用户管理、活动审核等 2、项目技术 后端框架&#xff1a; Servlet、mvc模式 前端技术&#xff1a;jsp、c…

Linux(centos)安装Jenkins

Jenkins 是一个开源的, 基于Java的自动服务器&#xff0c;提供了一种建立持续集成和持续交付(CI/CD)流水线的简单方法 。 持续集成 (CI)是DevOps实践中&#xff0c;团队成员定期将他们的代码更改提交到版本仓库, 然后运行自动化的构建和测试. 持续交付(CD)是自动构建、测试和部…

【附源码】计算机毕业设计SSM物业管理系统设计

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

第九章 Ambari二次开发之自定义Flink服务 -- 自定义quiklinks链接

1、自定义quiklink链接功能概述 主要功能&#xff1a;用来配置第三方服务界面链接&#xff0c;如Yarn的管理界面。 服务可以通过在metainfo中加入一串quicklink的引用&#xff08;一串预定义的JSON字符串&#xff09;即可。ambari server能解析json文件并将其提供给UI&#xff…

CSS 2 CSS 选择器 - 2 2.5 属性选择器

CSS 文章目录CSS2 CSS 选择器 - 22.5 属性选择器2.5.1 CSS [attribute] 选择器2.5.2 CSS [attribute"value"] 选择器2.5.3 CSS [attribute~"value"] 选择器2.5.4 CSS [attribute|"value"] 选择器2.5.5 CSS [attribute^"value"] 选择器…

渠道数字化有什么好处?如何实现渠道数字化营销?

数字化转型是企业如今谋求商业升维的一种主要方式&#xff0c;即利用数字化技术和能力来赋能企业经营思维数字化、商业模式创新化&#xff0c;达到业务重构升级、实现业务的转型、创新&#xff0c;增长的目的。对于企业而言&#xff0c;数字化其实正是升维企业业务、企业流程及…

【电子通识】为什么高速信号传输要用差分

早期很多设备要接到计算机上,需要通过一些线径粗连接器笨重的总线。如GPIB接口(通用接口总线)是曾经大多台式仪器与计算机相连接的方式。 在文章:【蓝牙专题】蓝牙测试工具及性能标准 中,电脑就是通过USB转GPIB接口与MT8852进行连接,对低功耗蓝牙模块进行测试。 …

稳压二极管有什么特性?稳压二极管的特点

笔者电子信息专业硕士毕业&#xff0c;获得过多次电子设计大赛、大学生智能车、数学建模国奖&#xff0c;现就职于南京某半导体芯片公司&#xff0c;从事硬件研发&#xff0c;电路设计研究。对于学电子的小伙伴&#xff0c;深知入门的不易&#xff0c;特开次博客交流分享经验&a…

Java泛型——帮助你更好的读懂源码<dog>

泛型 泛型就相当于集合的标签&#xff0c;我们在使用集合<>的时候&#xff0c;就是在使用泛型 要知道的是在jdk1.5以前我们只能把集合中的元素设计为Object&#xff0c;之后引入了泛型的概念来解决&#xff0c;我们把元素的类型设计成一个参数&#xff0c;这个类型参数…

【PyTorch深度学习项目实战100例】—— Pytorch时间序列电力数据多输出预测 | 第70例

前言 大家好,我是阿光。 本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmPy…

1024 你学算法了吗?

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…