Python 绘图进阶之核密度估计图:掌握数据分布的秘密
Python 绘图进阶之核密度估计图:掌握数据分布的秘密
引言
在数据分析中,了解数据的分布情况是至关重要的一步。除了常用的直方图和箱线图,核密度估计图(Kernel Density Estimation, KDE)提供了一种更为平滑、直观的方式来展示数据的分布。KDE 是一种非参数方法,用于估计数据的概率密度函数,帮助我们更细腻地理解数据的分布特征。本文将带你深入探索如何使用 Python 绘制核密度估计图,提升数据分析的精度和洞察力。
一、核密度估计图的基本概念
核密度估计是一种通过将核函数应用于每个数据点来估计总体分布的方法。核函数通常选择高斯核,它的作用类似于一个光滑的窗函数,使得生成的密度曲线更加平滑。
主要参数包括:
- 带宽(Bandwidth):控制核函数的宽度,即平滑程度。带宽越大,曲线越平滑;带宽越小,曲线越陡峭。
- 核函数(Kernel Function):决定如何平滑数据点。常见的核函数包括高斯核、三角核、均匀核等。
KDE 的优势在于它比直方图更能细腻地展示数据的分布,尤其适合分析连续数据。
二、使用 Python 绘制核密度估计图
Python 提供了多个绘图库来绘制 KDE 图,其中 Seaborn 是最常用的库之一。它内置了 kdeplot()
函数,可以方便地绘制 KDE 图,并且支持丰富的参数自定义。
1. 使用 Seaborn 绘制简单的 KDE 图
Seaborn 的 kdeplot()
函数可以快速绘制出数据的 KDE 图,下面是一个简单的示例。
示例代码:
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np# 生成一组示例数据
data = np.random.normal(0, 1, 1000)# 使用 Seaborn 绘制 KDE 图
sns.kdeplot(data)
plt.title('KDE Plot Example')
plt.xlabel('Value')
plt.ylabel('Density')
plt.show()
在这个示例中,我们生成了一组服从标准正态分布的随机数据,并使用 kdeplot()
函数绘制了其概率密度曲线。图中显示的数据分布曲线平滑地描绘了数据的密度变化,比传统的直方图更为直观。
2. 自定义带宽和核函数
通过调整带宽和选择不同的核函数,可以控制 KDE 图的平滑程度和形状。
示例代码:
# 调整带宽
sns.kdeplot(data, bw_adjust=0.5)
plt.title('KDE Plot with Adjusted Bandwidth')
plt.show()
在这个示例中,我们通过 bw_adjust
参数调整了带宽,将其设置为 0.5,从而使得密度曲线更加陡峭。这种调整对于数据分布特征明显但样本量较小的数据集特别有用。
三、KDE 图的高级用法
1. 分组对比
KDE 图可以用于比较不同组的数据分布,通过分组绘制多条密度曲线来展示不同组的差异。
示例代码:
import pandas as pd
# 加载数据集
tips = sns.load_dataset("tips")
# 将数据转换为DataFrame
data = pd.DataFrame(tips)
sns.kdeplot(data,x='total_bill', hue='smoker',fill=True)plt.title('KDE of Total Bill by Smoking Status')
plt.show()
在这个示例中,我们利用 tips
数据集,绘制了吸烟与否对账单金额分布的影响。通过 KDE 图的分组展示,可以直观地看到吸烟者和非吸烟者在账单金额上的分布差异。
2. 叠加 KDE 图与直方图
将 KDE 图与直方图结合,可以同时展示数据的分布细节和整体趋势。
示例代码:
# 叠加 KDE 图与直方图
sns.histplot(data, kde=True)
plt.title('Histogram with KDE')
plt.show()
在这个示例中,我们使用 histplot()
函数同时绘制了直方图和 KDE 图。这样既保留了直方图的直观性,又增强了对数据分布的理解。
四、实战案例:分析消费数据的分布
假设我们有一组消费者的购买金额数据,想要分析其分布情况,并且根据消费者是否为会员进行分组对比。通过 KDE 图,我们可以直观地观察到会员和非会员的消费行为差异。
案例代码:
# 生成示例数据
membership = np.random.choice(['member', 'non-member'], size=1000)
purchase = np.concatenate([np.random.normal(50, 10, 500), np.random.normal(60, 15, 500)])df = pd.DataFrame({'membership': membership, 'purchase': purchase})# 绘制 KDE 图
sns.kdeplot(x='purchase', hue='membership', data=df, fill=True)
plt.title('KDE of Purchase Amount by Membership Status')
plt.xlabel('Purchase Amount')
plt.ylabel('Density')
plt.show()
在这个案例中,我们通过 KDE 图分析了会员和非会员的消费金额分布情况。图中显示了两个不同组的分布曲线,从而揭示了会员更倾向于高额消费的趋势。
五、总结
核密度估计图是一种强大的工具,它为我们提供了比直方图更细腻的数据分布展示方式。在 Python 中,使用 Seaborn 绘制 KDE 图非常直观和便捷,并且可以通过自定义参数来满足不同的分析需求。
掌握 KDE 图的使用,将使你在数据分析中更好地洞察数据分布的细节,提升分析的准确性和深度。
如果你有感兴趣的数据集或分析场景,欢迎在评论区分享。我将帮助你探索如何使用 KDE 图来深入分析数据,揭示数据背后的分布特征。
示例代码和数据获取方式:
方式1:免费获取:转发此文章至朋友圈(所有人可见,获6个赞)或3个群,并附“推荐关注学习”,1小时后将截图发送后台留言:2024813_核密度图,本人会在24小时内回复您获取资料,莫着急哈。
方式2:关注本博客AIDD Learning,文末**“点赞”“收藏”**,后台留言:2024813_核密度图,本人会在24小时内回复您获取资料,莫着急哈。
相关文章:

Python 绘图进阶之核密度估计图:掌握数据分布的秘密
Python 绘图进阶之核密度估计图:掌握数据分布的秘密 引言 在数据分析中,了解数据的分布情况是至关重要的一步。除了常用的直方图和箱线图,核密度估计图(Kernel Density Estimation, KDE)提供了一种更为平滑、直观的方…...

设计模式(1)创建型模式和结构型模式
1、目标 本文的主要目标是学习创建型模式和结构型模式,并分别代码实现每种设计模式 2、创建型模式 2.1 单例模式(singleton) 单例模式是创建一个对象保证只有这个类的唯一实例,单例模式分为饿汉式和懒汉式,饿汉式是…...

RuoYi-Vue新建模块
一、环境准备 附:RuoYi-Vue下载与运行 二、新建模块 在RuoYi-Vue下新建模块ruoyi-test。 三、父pom文件添加子模块 在RuoYi-Vue的pom.xml中,引入子模块。 <dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-test</artifactId>&…...

Element-UI自学实践
概述 Element-UI 是由饿了么前端团队推出的一款基于 Vue.js 2.0 的桌面端 UI 组件库。它为开发者提供了一套完整、易用、美观的组件解决方案,极大地提升了前端开发的效率和质量。本文为自学实践记录,详细内容见 📚 ElementUI官网 1. 基础组…...
ChatGPT如何工作:创作一首诗的过程
疑问 怎样理解 Chat GPT 的工作原理?比如我让他作一首诗,他是如何创作的呢?每一行诗,每一个字都是怎么来的?随机拼凑的还是从哪里借鉴的? 回答 当你让 ChatGPT 创作一首诗时,它并不是简单地随…...

Linux_Shell变量及运算符-05
一、Shell基础 1.1 什么是shell Shell脚本语言是实现Linux/UNIX系统管理及自W动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应用软件的核心大都涉及Shell脚本的内容。Shell是一种编程语言, 它像其它编程语言如: C, Java, Python等一样也有变量/函数/运算…...

OpenCV图像滤波(13)均值迁移滤波函数pyrMeanShiftFiltering()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 函数执行均值迁移图像分割的初始步骤。 该函数实现了均值迁移分割的过滤阶段,即输出是经过滤波的“海报化”图像,其中颜色…...
用爬虫技术探索石墨文档:数据自动化处理与个性化应用的创新实践
用爬虫技术探索石墨文档:数据自动化处理与个性化应用的创新实践 在当今这个信息爆炸的时代,文档管理与协作成为了企业运营和个人工作中不可或缺的一部分。石墨文档,作为一款轻量级的云端Office套件,凭借其强大的在线协作、实时同…...

【JavaEE初阶】线程池
目录 📕 引言 🌳 概念 🍀ThreadPoolExecutor 类 🚩 int corePoolSize与int maximumPoolSize: 🚩 long keepAliveTime与TimeUnit nuit: 🚩 BlockingQueue workQueue:…...

zdpgo_cobra_req 新增解析请求体内容
zdpgo_cobra_req 使用Go语言开发的,类似于curl的HTTP客户端请求工具,用于便捷的测试各种HTTP地址 特性 1、帮助文档都是中文的2、支持常见的HTTP请求,比如GET、POST、PUT、DELETE等 下载 git clone https://github.com/zhangdapeng520/z…...

Java聚合快递对接云洋系统快递小程序源码
🌟【一键聚合,高效便捷】快递对接云洋系统小程序全攻略🚀 引言:告别繁琐,拥抱智能快递新时代🔍 在这个快节奏的时代,每一分每一秒都弥足珍贵。你是否还在为手动输入多个快递单号、频繁切换不同…...

陕西西安培华学院计算机软件工程毕业设计课题选题参考目录
陕西西安培华学院计算机软件工程毕业设计课题选题 博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专家博主,CSDN平台,✌️Java领域优质创作者,博客之星、掘金/华为云/阿里云等平台优质作者、专注于大学生项目实战开发…...
如何用sql在1分钟从1T数据中精准定位查询?Hive离线数仓 Spark分析
最近在一个群里,从群友哪里了解到这样一个业务需求:如何在 hdfs 1 T源数据库中,1分钟内从其中抓取自己想要的数据? 我的理解是 : 在hdfs数据库中为拥有 尽1T数据的表创建索引,并对其进行性能优化,以实现…...

acpi 主板布局需要 efi
今天在折腾 ESXI 的时候,启动虚拟机跳出了 acpi 主板布局需要 efi 然后我就将 ESXI 的启动方式改为了 EFI 但是虚拟机有莫名的启动不了,网上也没有找到办法,最后,我将虚拟机类型有原本的 ubuntu 换成了 debian 最后启动成功&…...

月之暗面对谈 Zilliz:长文本和 RAG 如何选择?
01 长文本与RAG通用对比 准确率:通常情况下长文本优于RAG 长文本:可更加综合的去分析所有相关的内容,提取相关数字,生成图表,效果尚可。RAG:更适合找到一段或者是几段可能相关的段落。如果希望大模型能够…...
高级java每日一道面试题-2024年8月12日-设计模式篇-请列举出在JDK中几个常用的设计模式?
如果有遗漏,评论区告诉我进行补充 面试官: 请列举出在JDK中几个常用的设计模式? 我回答: 在Java Development Kit (JDK) 中,许多设计模式被广泛使用,以帮助实现软件的结构、行为和复用。下面是一些在JDK中常见的设计模式及其简要说明: 工…...
mysql workbench8.0如何导出mysql5.7格式的sql定义
碰到的问题 mac上安装mysql workbech6.0后不能运行,但安装workbench8.0后,导出的数据库sql文件默认是msyql 8.0的语法和格式。比如生成索引的语句后面会有visible关键字,当把mysql8.0的sql文件导入到mysql5.7时就会报错。 如何解决 点击my…...

数据结构(学习)2024.8.6(顺序表)
今天开始学习数据结构的相关知识,大概分为了解数据结构、算法;学习线性表:顺序表、链表、栈、队列的相关知识和树:二叉树、遍历、创建,查询方法、排序方式等。 目录 一、数据结构 数据 逻辑结构 1.线性结构 2.树…...

MyBatis全解
目录 一, MyBatis 概述 1.1-介绍 MyBatis 的历史和发展 1.2-MyBatis 的特点和优势 1.3-MyBatis 与 JDBC 的对比 1.4-MyBatis 与其他 ORM 框架的对比 二, 快速入门 2.1-环境搭建 2.2-第一个 MyBatis 应用程序 2.3-配置文件详解 (mybatis-config.…...

【Redis进阶】Redis集群
目录 Redis集群的诞生 单节点Redis的局限性 1.存储容量限制 2.性能瓶颈 3.单点故障 4.扩展性能差 分布式系统发展的需要 1.海量数据处理 2.高性能要求 3.弹性扩展能力 Redis集群(cluster) 如图所示案例 Redis集群设计 什么是数据分片&…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...