【问题标题】:How can I calculate the kurtosis of already binned data?如何计算已分箱数据的峰度?
【发布时间】:2019-06-22 04:36:04
【问题描述】:

有谁知道如何使用 Python 单独从分箱数据计算分布的峰度?

我有一个分布的直方图,但没有原始数据。有两列;一个带有 bin 编号,一个带有计数编号。 我需要计算分布的峰度。

如果我有原始数据,我可以使用 scipy 函数来计算峰度。我在本文档中看不到任何使用分箱数据进行计算的内容。 https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.kurtosis.html

scipy 的 binned statistics 选项允许您计算 bin 内的峰度,但仅使用原始数据且仅在 bin 内。 https://docs.scipy.org/doc/scipy-0.16.0/reference/generated/scipy.stats.binned_statistic.html

编辑:示例数据。 我可以尝试从中重新采样以创建我自己的虚拟原始数据,但我每天要运行大约 140k 的这些数据,并且希望有一些内置的东西。

Index,Bin,Count
 0, 730, 30
 1, 735, 45
 2, 740, 41
 3, 745, 62
 4, 750, 80
 5, 755, 96
 6, 760, 94
 7, 765, 90
 8, 770, 103
 9, 775, 96
10, 780, 95
11, 785, 109
12, 790, 102
13, 795, 99
14, 800, 93
15, 805, 101
16, 810, 109
17, 815, 98
18, 820, 89
19, 825, 62
20, 830, 71
21, 835, 69
22, 840, 58
23, 845, 50
24, 850, 42

【问题讨论】:

  • 请向我们展示您拥有的示例数据。
  • @Dark 搞定了,谢谢。
  • 一个“bin”通常有一个左端和一个右端。您的“箱号”是否对应于与每个计数相关的间隔的末端之一?
  • @WarrenWeckesser 示例数据中的 bin 对应于 bin 的中心值。所以 800 代表 797.5 到 802.5 的范围

标签: python pandas scipy histogram kurtosis


【解决方案1】:

您可以直接计算统计数据。如果 x 是您的 bin 编号,y 是每个 bin 的计数,则 f(x) 的预期值等于 np.sum(y*f(x))/np.sum(y)。我们可以用它把峰度公式翻译成下面的代码:

total = np.sum(y)
mean = np.sum(y * x) / total
variance = np.sum(y * (x - mean)**2) / total
kurtosis = np.sum(y * (x - mean)**4) / (variance**2 * total)

请注意,峰度和过度峰度不是一回事。

【讨论】:

  • 谢谢。这确实有道理。我会做一些研究,看看我是否可以使用 groupby 来实现它。
猜你喜欢
  • 2015-09-23
  • 2020-06-21
  • 1970-01-01
  • 2018-10-26
  • 2019-04-05
  • 2014-12-10
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
相关资源
最近更新 更多