为什么 Pandas 和 Seaborn 为相同的数据生成不同的 KDE 图?
Why are Pandas and Seaborn producing different KDE Plot for same data?
我正在尝试查看具有以下值的变量的分布..
+-------+-------+
| Value | Count |
+-------+-------+
| 0.0 | 355 |
| 1.0 | 935 |
| 2.0 | 1 |
| 3.0 | 2 |
| 4.0 | 1 |
+-------+-------+
table 继续使用高达 1000 的值,但 非常稀疏(总观测值 = 1622,几乎所有观测值都落在 0 或 1 中)
所以在绘图时我做了:
sns.distplot(kde=True, a = df.loc[(df.class == 1)].variable_of_interest)
产生如下红色分布
Seaborn 不捕获初始集中的值,但显示更多 "sensibility" 到其余值
然后我想起了 pd.DataFrame.plot.kde()
,所以我试了一下,它产生了这个捕捉浓度的图
df.loc[(df.class== 1)].variable_of_interest.plot.kde()
重要说明:对于那些可能注意到 X 轴不同的人,我确实尝试了使用 xlims(-500, 1000) 的 seaborn,但情节仍然完全相同
你知道为什么他们会生成如此不同的情节吗?
与他们处理数据的方式有关,还是我做错了什么?
非常感谢您!
问题在于 kde 主要用于连续数据,而您似乎在处理离散数据。一个重要的参数是bandwidth
:它越小,曲线越接近数据,越宽越好表示一般形式。
似乎 seaborn 和 pandas 在这里使用不同的方法来估计 "good" 带宽。用seaborn you could set a fixed bandwidth sns.kdeplot(..., bw=0.5)
or so. Or seaborn.distplot(..., kde=True, kde_kws={'bw': 0.5})
. With pandasdf.plot.kde(bw_method=0.5, ...)
。请注意 "perfect" 带宽不存在,它取决于数据、样本数量以及您对基础分布的了解。默认的 seaborn 和 pandas 选择只是一个经验法则,它可能对您的数据有用或无用。未来的版本可能会使用不同的经验法则。
下图显示了不同的带宽如何影响 kdeplot:
我正在尝试查看具有以下值的变量的分布..
+-------+-------+
| Value | Count |
+-------+-------+
| 0.0 | 355 |
| 1.0 | 935 |
| 2.0 | 1 |
| 3.0 | 2 |
| 4.0 | 1 |
+-------+-------+
table 继续使用高达 1000 的值,但 非常稀疏(总观测值 = 1622,几乎所有观测值都落在 0 或 1 中)
所以在绘图时我做了:
sns.distplot(kde=True, a = df.loc[(df.class == 1)].variable_of_interest)
产生如下红色分布
Seaborn 不捕获初始集中的值,但显示更多 "sensibility" 到其余值
然后我想起了 pd.DataFrame.plot.kde()
,所以我试了一下,它产生了这个捕捉浓度的图
df.loc[(df.class== 1)].variable_of_interest.plot.kde()
重要说明:对于那些可能注意到 X 轴不同的人,我确实尝试了使用 xlims(-500, 1000) 的 seaborn,但情节仍然完全相同
你知道为什么他们会生成如此不同的情节吗? 与他们处理数据的方式有关,还是我做错了什么?
非常感谢您!
问题在于 kde 主要用于连续数据,而您似乎在处理离散数据。一个重要的参数是bandwidth
:它越小,曲线越接近数据,越宽越好表示一般形式。
似乎 seaborn 和 pandas 在这里使用不同的方法来估计 "good" 带宽。用seaborn you could set a fixed bandwidth sns.kdeplot(..., bw=0.5)
or so. Or seaborn.distplot(..., kde=True, kde_kws={'bw': 0.5})
. With pandasdf.plot.kde(bw_method=0.5, ...)
。请注意 "perfect" 带宽不存在,它取决于数据、样本数量以及您对基础分布的了解。默认的 seaborn 和 pandas 选择只是一个经验法则,它可能对您的数据有用或无用。未来的版本可能会使用不同的经验法则。
下图显示了不同的带宽如何影响 kdeplot: