在Python中逐步计算大数组的摘要统计信息

时间:2016-03-30 18:59:50

标签: python statistics bigdata

想象一下,你有一个非常大的数组,其中的元素集合无法融入计算机的内存中。您将如何计算Python中此数组的均值,中位数,标准差和其他汇总统计值?

我发现this post以递增方式解释计算均值的数学,并且还提供了一个Python函数,它接受一个列表或一个迭代器对象,但由于我可能无法总是访问迭代器对象,所以我将其实现为一个行为类似于std的类。但是,如何计算minmaxmedianskewnesskurtosismean等内容?

下面的代码是一个实现增量minmaxclass Inc_sumstats(object): def __init__(self): self.length = 0 self.mean = 0 #self.std = 0 self.min = np.inf self.max = 0 #self.median = 0 #self.skewness = 0 #self.kurtosis = 0 def update(self, num): self.length += 1 self.mean = (self.mean * (self.length - 1) + num) / self.length #self.std = ... self.min = num if num < self.min else self.min self.max = num if num > self.max else self.max #self.median = ... #self.skewness = ... #self.kurtosis = ... return self 的最小工作示例,并显示其他内容适合的位置:

{{1}}


更新

我知道网站上有similar questions,但到目前为止我找不到任何解决方案。如果我在背景研究中遗漏了某些内容,请链接问题或标记为重复。

1 个答案:

答案 0 :(得分:2)

您正在寻找的是用于订单统计的在线算法。在线算法有点像某些统计数据的生成器;它在从内存或磁盘读取数据时会累积数据,因此程序员可以处理内存管理问题并仍能获得正确的输出。

这些算法的实施背后有很多CS理论,但你可以在这里阅读更多相关信息:https://en.wikipedia.org/wiki/Selection_algorithm#Online_selection_algorithm

数学在某种程度上是直观的:你的班级应该更新元素的数量,并重新计算平均值,最小值,最大值,峰度,std-dev等作为前一个值的函数,并将这些值作为元组返回。我向您推荐这个问题,并详细解答如何构建在线统计算法:

"On-line" (iterator) algorithms for estimating statistical median, mode, skewness, kurtosis?