Python 绘图进阶之箱线图:揭示数据的分布和异常值

news2024/11/25 0:38:28

Python 绘图进阶之箱线图:揭示数据的分布和异常值

引言

在数据分析中,理解数据的分布情况和识别异常值是非常重要的任务。箱线图(Box Plot)作为一种简洁有效的统计图表,能够直观地展示数据的中位数、四分位数、极值以及可能存在的异常值。本文将深入探讨如何使用 Python 绘制箱线图,帮助你在数据分析工作中更好地理解数据的内在结构。

一、箱线图的基本概念

箱线图由一个箱体(表示四分位范围)和延伸线(称为“胡须”)组成,主要元素包括:

  • 中位数(Median):箱体内部的一条水平线,表示数据的中位数。
  • 四分位数(Quartiles):箱体的上下边缘分别表示第一四分位数(Q1)和第三四分位数(Q3),即数据的 25% 和 75% 分位数。
  • 胡须(Whiskers):从箱体延伸的直线,通常表示 Q1 - 1.5 * IQR 和 Q3 + 1.5 * IQR 范围内的数据点,其中 IQR 是四分位距。
  • 异常值(Outliers):位于胡须范围之外的点,通常被认为是异常值。
二、使用 Python 绘制箱线图

Python 中的多个数据可视化库都支持绘制箱线图,如 Matplotlib 和 Seaborn。下面我们将介绍如何使用这两个库来绘制箱线图。

1. 使用 Matplotlib 绘制箱线图

Matplotlib 是 Python 中广泛使用的绘图库。我们可以使用 boxplot() 函数来绘制箱线图。

示例代码

import matplotlib.pyplot as plt
import numpy as np

# 示例数据
np.random.seed(10)
data = np.random.normal(100, 20, 200)

plt.boxplot(data)
plt.title('Box Plot Example')
plt.ylabel('Values')
plt.show()

在这里插入图片描述

在这个示例中,我们生成了一组服从正态分布的随机数据,并使用 Matplotlib 绘制了箱线图。箱体中间的线表示数据的中位数,箱体上下边缘表示第一和第三四分位数。胡须部分显示了数据的总体范围,而任何位于胡须之外的数据点都被视为异常值。

2. 使用 Seaborn 绘制箱线图

Seaborn 是基于 Matplotlib 的高级绘图库,提供了更加美观和易用的绘图功能。我们可以使用 Seaborn 的 boxplot() 函数来绘制箱线图,并且可以很方便地进行分组对比。

示例代码

import seaborn as sns
import matplotlib.pyplot as plt

# 示例数据
tips = sns.load_dataset("tips")

# 使用 Seaborn 绘制箱线图
sns.boxplot(x='day', y='total_bill', data=tips)
plt.title('Total Bill by Day')
plt.show()

在这里插入图片描述

在这个示例中,我们使用了 Seaborn 提供的 tips 数据集,该数据集包含了餐厅服务员的小费数据。通过箱线图,我们可以直观地看到在不同日期的账单金额的分布情况。图中显示了账单金额的中位数、四分位数和可能的异常值。

三、箱线图的高级用法

1. 分组对比

通过将数据按类别分组,可以在同一张图表中展示多个箱线图,方便对比不同组之间的数据分布情况。

示例代码

sns.boxplot(x='day', y='total_bill', hue='smoker', data=tips)
plt.title('Total Bill by Day and Smoking Status')
plt.show()

在这里插入图片描述

在这个例子中,我们进一步细分了数据,根据吸烟与否的不同情况展示了每一天的账单金额分布。不同颜色的箱线图分别表示吸烟者和非吸烟者的账单分布,这种分组对比有助于我们发现某些因素对消费行为的影响。

2. 调整图表元素

你可以通过调整箱线图的元素,如颜色、线条粗细等,来增强图表的视觉效果。

示例代码

sns.boxplot(x='day', y='total_bill', data=tips, linewidth=2.5, palette="Set2")
plt.title('Customized Box Plot')
plt.show()

在这里插入图片描述

Seaborn 的 palette 参数允许我们选择不同的颜色组合,linewidth 参数则控制线条的粗细。

3. 添加数据点

为了更好地理解每个箱线图中数据点的分布,可以在箱线图上叠加散点图,展示每个数据点的位置。

示例代码

sns.boxplot(x='day', y='total_bill', data=tips)
sns.stripplot(x='day', y='total_bill', data=tips, color='blue', jitter=True, alpha=0.6)
plt.title('Box Plot with Data Points')
plt.show()

在这里插入图片描述

在这个例子中,我们在箱线图上叠加了散点图,每个数据点的具体位置得以展示。这种组合使我们不仅能看到数据的整体分布,还能了解每个数据点在数据中的具体位置。

四、实战案例:分析餐厅消费数据

假设我们有一组餐厅的消费数据,想要分析不同用餐日期和是否吸烟对消费金额的影响。通过使用箱线图,我们可以清晰地看到这些因素对消费金额的分布情况。

案例代码

sns.boxplot(x='day', y='total_bill', hue='smoker', data=tips, palette="coolwarm")
plt.title('Impact of Day and Smoking on Total Bill')
plt.show()

在这里插入图片描述

在这个案例中,我们利用箱线图分析了吸烟与否对不同日期的餐厅消费金额的影响。通过对比不同颜色的箱体,我们可以直观地观察到吸烟者和非吸烟者在不同日期的消费行为是否存在显著差异,这对于制定营销策略或进行客户分析非常有帮助。

五、总结

箱线图是数据分析中强大的工具,能够帮助我们快速理解数据的分布特征和识别异常值。在 Python 中,使用 Matplotlib 和 Seaborn 绘制箱线图非常简单,且可以通过多种方式进行定制。通过本文的介绍,你现在应该能够熟练地创建和定制箱线图,以更好地呈现和解释你的数据。

箱线图不仅仅是简单的图表,它为数据科学家提供了深入理解数据的重要工具。在数据分析项目中,掌握并应用箱线图,将使你的分析工作更加全面和准确。


如果你有数据集,并希望更深入地分析数据分布,欢迎在评论区分享你的数据和问题。我将帮助你一起探讨如何通过箱线图进行更细致的分析。


往期推荐:
1. 使用Matplotlib绘制柱状图
2. 使用 Matplotlib 绘制折线图
3. Python 绘图入门
4. Python绘图入门:使用Matplotlib绘制饼状图
5. Python绘图入门:使用Matplotlib绘制雷达图
6. Python绘图入门:使用Matplotlib绘制热力图
7. Python 绘制气泡图:可视化多维数据的利器

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

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

相关文章

除了画图,你还需要透视平面设计师的日常工作

平面设计师是市场上较为稀缺且需求旺盛的职业,许多企业都在争相聘请优秀的设计师。平面设计在日常生活中无处不在,应用领域广泛,如广告设计、logo设计和名片设计等。因此,本篇文章将为你详细介绍平面设计。 1、什么是平面设计&am…

YOLT论文精读

引言 很早之前,在本校老师的带领下接触到了目标检测领域。在卫星遥感图像方面有一篇经典的论文《You Only Look Twice: Rapid Multi-Scale Object Detection In Satellite Imagery》。科研小白一开始反复看了几遍也没弄懂,决定写博客来加深自己的理解。…

Vue 3+Vite+Eectron从入门到实战系列之(五)一后台管理登录页

前面已经讲了不少基础知识,这篇开始,我们进行实操,做个后台管理系统,打包成多端的,可安装的桌面app!!其中,登录,退出的提示信息用系统的提示,不使用elemengplus的弹窗提示!&#xff…

Java生成图形验证码

1、加依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency> 2、写接口&#xff0c;这块不需要登录成功才能操作的&#xff0c;所以写controller就行了…

基于Hadoop的网购笔记本电脑大数据分析与可视化系统

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍数据采集过程数据预处理Hadoop大数据分析可视化展示每文一语 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 项目介绍 本项目首先通过爬虫获取京东…

【C++】产生拷贝构造的三种形式

目录 用已存在的类对象去初始化同类另一个对象当函数类的形参是对象&#xff0c;调用函数形参和实参进行结合当函数的返回值是对象&#xff0c;函数执行完成返回调用者时 用已存在的类对象去初始化同类另一个对象 Date d1; Date d2(d1); Date d3 d2; //也会调用拷贝构造注意赋…

谷粒商城实战笔记-168-缓存-SpringCache-整合体验@Cacheable

文章目录 一&#xff0c;168-缓存-SpringCache-整合&体验Cacheable1&#xff0c;引入Spring Cache依赖2&#xff0c;配置3&#xff0c;启用cache4&#xff0c;在查询数据库的方法上加上注解Cacheable5&#xff0c;测试 二&#xff0c;169-缓存-SpringCache-Cacheable细节设…

LeetCode_sql_day16(601.体育馆的人流量)

描述&#xff1a;601. 体育馆的人流量 - 力扣&#xff08;LeetCode&#xff09; 编写解决方案找出每行的人数大于或等于 100 且 id 连续的三行或更多行记录。 返回按 visit_date 升序排列 的结果表。 输入Stadium表: ----------------------------- | id | visit_date | peop…

Linux系统移植——系统移植初步介绍(一)

一、嵌入式Linux系统软件组成及分布 1.1 内核&#xff08;Kernel&#xff09; 功能&#xff1a;负责管理硬件资源、进程调度、内存管理、文件系统、网络等。分布&#xff1a;通常是定制的Linux内核&#xff0c;以适应特定的硬件平台和应用需求。 1.2 根文件系统&#xff08;…

sql实验代码整理:创建表文件Student、Course、Sc完成下列问题

使用SQL语句创建数据库students. create database students; 创建表文件Student、Course、Sc&#xff0c;表结构如表3-7~表3-9所示。 代码及运行结果&#xff1a; 代码及运行结果&#xff1a; 代码及运行结果&#xff1a; 为表Student 添加地址列Address&#xff0c;数据类型为…

14.3 Matplotlib与Seaborn数据可视化

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

汽车保养系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;门店信息管理&#xff0c;员工信息管理&#xff0c;配件信息管理&#xff0c;保养信息管理&#xff0c;管理员管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页…

k8s部署ingress-nginx

一、拉取ingress-nginx的安装代码 地址&#xff1a;https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.11.1/deploy/static/provider/cloud/deploy.yaml 如果上面的地址访问不通的话&#xff0c;可以直接使用下面的内容&#xff1a; 由于官方镜像存放…

Keepalived详解

目录 1、高可用集群keepalived 高可用集群 VRRP 相关概念 keepalived 简介 2、基础实验环境搭建 3、keepalived的虚拟路由管理 全局配置 ​编辑 配置虚拟路由器 4、虚拟路由的通讯设置 5、keepalived的日志分离 6、实现独立子配置文件 7、keepalived的抢占模式和非抢占…

ubuntu 20 安装mysql workbench 过程

ubuntu 20 安装mysql workbench 过程_ubuntu 安装mysql workbench-CSDN博客 How To Install And Use MySQL Workbench On Ubuntu 18.04 or 20.04 MySQL :: Begin Your Download sudo apt install ./mysql-apt-config_0.8.32-1_all.deb snap install mysql-workbench-communi…

【鸿蒙学习】HarmonyOS应用开发者基础 - 从简单的页面开始

学完时间&#xff1a;2024年8月13日 我的纸飞机呀&#xff01;飞呀飞&#xff01;飞到了代码中&#xff01;&#xff01;&#xff01; 一、前言叨叨 今天是HarmonyOS学习教学课第一课的第五课内容了&#xff0c;课后练习的人数已经降到了4150人了&#xff0c;预测下到 ”Harmon…

Win10 去掉桌面右上角 了解有关此图片的信息

1. 进入注册表 Win R运行regedit 2. 找到以下路径 计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel 3. 新建 DWORD&#xff08;32位&#xff09;值&#xff08;D&#xff09; 右击 NewStartPanel新建 DWORD…

前端技术day01-HTML入门

一、前端介绍 技术描述HTML用于构建网站的基础结构的CSS用于美化页面的&#xff0c;作用和化妆或者整容作用一样JS实现网页和用户的交互Vue主要用于将数据填充到html页面上的Element主要提供了一些非常美观的组件 二、工具软件 VsCode 在前端领域&#xff0c;有一个公认好用…

C语言问答进阶--6、函数(1)

A&#xff1a;现在我们将研究函数这个概念。 其实这个概念很简单&#xff0c;和中学的时候学的yf(x)来对照着看&#xff0c;对于一个参数x&#xff0c;会得到一个值y&#xff0c;就会发现它和C中的函数是一个道理。 只是C函数中可以包含不传入任何参数的函数。 A&#xff1a;函…

自学嵌入式第十九天高级编程篇 文件2

标准IO的返回值判断 feof&#xff1a;判断文件流指针是否到达结尾。 feof(src) //如果文件流指针到达末尾&#xff0c;函数返回值为真 ferror&#xff1a;判断文件流指针是否出错。搭配clearerr使用可以跳过报错的地方&#xff0c;读取后面的数据 ferror(src) //如…