我有太字节的数据。因此,标准pandas
和numpy
程序(group-by
,mean
,histogram
等)在我无法加载所有内容时将无效数据同时。
我的数据将来自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
然而,目前尚不清楚一般方法是什么。我如何为高阶时刻做到这一点?
另外,我有兴趣绘制分布图。假设我决定选择直方图。在不知道开始时分布的限制的情况下,很难创建垃圾箱。我是否首先需要在整个分布中迭代一次以获得最小值和最大值,然后创建箱子并开始计数?或者有更好的方法吗?
答案 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