大数据方法:数据矩的迭代(块式)计算

时间:2016-07-24 12:11:10

标签: python numpy pandas scipy hdf5

我有太字节的数据。因此,标准pandasnumpy程序(group-bymeanhistogram等)在我无法加载所有内容时将无效数据同时。

我的数据将来自pandas.HDFStore.select,它可以返回一个带有变量chunk-size块的迭代器。

现在我需要的是如何基于迭代方法计算数据时刻的方法。

预期值是直截了当的:

n, mean = 0, 0
for chunk in iterator:
    nCurrent = len(chunk)
    meanCurrent = chunk['variable'].mean()
    mean = (n * mean + nCurrent * meanCurrent)/(n + nCurrent)
    n += nCurrent

然而,目前尚不清楚一般方法是什么。我如何为高阶时刻做到这一点?

另外,我有兴趣绘制分布图。假设我决定选择直方图。在不知道开始时分布的限制的情况下,很难创建垃圾箱。我是否首先需要在整个分布中迭代一次以获得最小值和最大值,然后创建箱子并开始计数?或者有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

对于平均值(mean),可以这样做:

i, cumsum = 0
for chunk in store.select('key', chunksize=N):
    cumsum += chunk['variable'].sum()
    i += len(chunk)

my_mean = cumsum / i

作为一种通用方法,如果你必须处理数TB的数据,我会在Hadoop集群上使用Apache Spark