有人知道如何仅使用Python从合并的数据中计算分布的峰度吗?
我有分布的直方图,但没有原始数据。有两列;一个带有垃圾箱编号,另一个带有计数编号。 我需要计算分布的峰度。
如果我有原始数据,则可以使用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
答案 0 :(得分:1)
您可以直接计算统计信息。如果x
是您的箱号,并且y
是每个箱的计数,则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)
请注意,峰度和过量峰度不是同一回事。