【问题标题】:Distribution-type graphs (histogram/kde) with weighted data带有加权数据的分布型图(直方图/kde)
【发布时间】:2015-04-27 02:59:01
【问题描述】:

简而言之,当我的数据被加权时,分布类型图(直方图或 kde)的最佳选择是什么?

df = pd.DataFrame({ 'x':[1,2,3,4], 'wt':[7,5,3,1] })

df.x.plot(kind='hist',weights=df.wt.values)

这很好,但 seaborn 不会接受 weights kwarg,即

sns.distplot( df.x, bins=4,              # doesn't work like this
              weights=df.wt.values )     # or with kde=False added

如果 kde 可以接受权重也很好,但 pandas 和 seaborn 似乎都不允许。

我意识到顺便说一句,可以扩展数据以伪造权重,这在这里很容易,但对于权重为数百或数千的真实数据并没有多大用处,所以我不想寻找这样的解决方法。

无论如何,仅此而已。我只是想找出除了基本的熊猫直方图之外我可以用加权数据做什么(如果有的话)。我还没有玩弄散景,但也欢迎提出散景建议。

【问题讨论】:

标签: python pandas matplotlib bokeh seaborn


【解决方案1】:

您必须了解 seaborn 使用了 pandas 也使用的 matplotlib 绘图函数。

正如documentation 所述,sns.distplot 不接受 weights 参数,但它接受 hist_kws 参数,该参数将被发送到对 plt.hist 的底层调用。因此,这应该做你想做的事:

sns.distplot(df.x, bins=4, hist_kws={'weights':df.wt.values}) 

【讨论】:

  • 是的,谢谢,这很有帮助。我不确定如何将 kwarg 传递给 matplotlib。我现在会投赞成票,但如果有人对 kde 等有任何想法,请让它保持开放时间。
  • Seaborns kde plots 使用 python 包 statmodels 进行计算。相关功能有权重争论,但似乎这不是seaborn转发的。相关源文件:github.com/mwaskom/seaborn/blob/master/seaborn/distributions.pygithub.com/statsmodels/statsmodels/blob/master/statsmodels/…
  • 好的,谢谢。看起来权重可能还没有实现(我不能从快速浏览中确定)。不管怎样,我现在就结束这个,也许以后会问一个更关注 kde 的问题。
  • 好的。顺便说一句:mwaskom 也在 SO 上,并且鉴于该问题带有 seaborn 标签,他可能会查看该问题。那我们就肯定知道了。
【解决方案2】:

我通过根据权重重新采样数据点解决了这个问题。

你可以这样做:

from random import random
from bisect import bisect

def weighted_choice(choices):
    values, weights = zip(*choices)
    total = 0
    cum_weights = []
    for w in weights:
        total += w
        cum_weights.append(total)
    x = random() * total
    i = bisect(cum_weights, x)
    return values[i]

samples = [([5, 0.5], 0.1), ([0, 10], 0.3), ([0, -4], 0.3)]
choices = np.array([weighted_choice(samples) for c in range(1000)])
sns.distributions.kdeplot(choices[:, 0], choices[:, 1], shade=True)

【讨论】:

    猜你喜欢
    • 2017-05-06
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 2020-08-02
    • 2020-08-17
    相关资源
    最近更新 更多