Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么熊猫和Seaborn为相同的数据生成不同的KDE图?_Python_Pandas_Seaborn_Kde - Fatal编程技术网

Python 为什么熊猫和Seaborn为相同的数据生成不同的KDE图?

Python 为什么熊猫和Seaborn为相同的数据生成不同的KDE图?,python,pandas,seaborn,kde,Python,Pandas,Seaborn,Kde,我想看看具有以下值的变量的分布 +-------+-------+ | Value | Count | +-------+-------+ | 0.0 | 355 | | 1.0 | 935 | | 2.0 | 1 | | 3.0 | 2 | | 4.0 | 1 | +-------+-------+ 该表继续显示最大为1000的值,但非常稀疏(总观察值=1622,几乎所有观察值均为0或1) 所以当我策划时: sns.distplot(kde

我想看看具有以下值的变量的分布

+-------+-------+
| Value | Count |
+-------+-------+
| 0.0   |   355 |
| 1.0   |   935 |
| 2.0   |     1 |
| 3.0   |     2 |
| 4.0   |     1 |
+-------+-------+
该表继续显示最大为1000的值,但非常稀疏(总观察值=1622,几乎所有观察值均为0或1)

所以当我策划时:

sns.distplot(kde=True,a=df.loc[(df.class==1)]。感兴趣的变量)

这将产生以下红色分布

Seaborn没有捕捉到价值的初始集中,但对其他价值表现出更多的“敏感性”

然后我想起了
pd.DataFrame.plot.kde()
,所以我尝试了一下,它生成了这个捕获浓度的图

df.loc[(df.class==1)].variable\u of\u interest.plot.kde()

重要提示:对于那些可能注意到X轴不同的人,我确实尝试了带有XLIM(-5001000)的seaborn,但情节仍然完全相同

你知道为什么它们会生成如此不同的图吗? 这与他们处理数据的方式有关,还是我做错了什么?


提前非常感谢

问题在于,主要用于连续数据,而您似乎在处理离散数据。一个重要的参数是
带宽
:它越小,曲线越接近数据,越宽越好表示一般形式

似乎seaborn和pandas在这里使用不同的方法来估计“良好”带宽。使用,您可以设置固定带宽
sns.kdeplot(…,bw=0.5)
左右。或使用
df.plot.kde(bw_方法=0.5,…)
。请注意,“完美”带宽并不存在,它取决于数据、样本数量以及您对底层分布的了解。默认的seaborn和pandas选项只是一个经验法则,可能对您的数据有用,也可能不有用。未来的版本可能会使用不同的经验法则

下图显示了不同带宽如何影响kdeplot:


谢谢@JohanC,你所指出的关于连续变量和离散变量的观点是正确的,但我希望以图形的方式获得分布的“感觉”,尽管不正确,但我认为这可以给我一个提示。我已经玩了一点这些参数,我确实得到了类似的形状,但我仍然找不到精确的参数化来获得相同的绘图(不是我需要它,只是出于好奇),再次感谢!通常,用于估计带宽。这将是
n**(-1./(d+4))
n
数据点的数量(1622?),以及
d
维度(1),因此大约
0.228
。Seaborn使用了一个轻微的
“scott”-1.059*a*nobs**(-1/5.)
,其中
a
min(std(X),IQR/1.34)
,在本例中效果不佳。