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小时内回复您获取资料,莫着急哈。

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AIDD Learning

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值