Python:将时间序列数据平均到给定持续时间的二进制数

时间:2016-02-09 23:48:35

标签: python

我认为问题的定义非常简单,但我正在寻找适合大型数据集(20多万)的解决方案。

我有两个列表:stamps包含N个时间戳,values包含N标量值。

我可以轻松地将这些数据绘制成时间序列图。

现在我想将values的平均值绘制成1分钟长的分档(我通常每分钟有50个值但是有些是空的)。导致空箱的空值应使该箱的平均值等于零。

我怎样才能用最少的代码有效地做到这一点?

2 个答案:

答案 0 :(得分:1)

minute_bins = {}
averages    = {}

for i in range(len(values)):

    # Integer division
    minute = stamps[i] // 60

    if minute in minute_bins:
        minute_bins[minute].append(values[i])
    else:
        minute_bins[minute] = [values[i]]

for key in minute_bins:
    minute_values = minute_bins[key]
    averages[key] = float(sum(minute_values)) / len(minute_values)

假设您的时间戳以数字的形式出现。我使用time.time()来测试我的代码,但任何两个1秒间隔的时间戳相差1.0的格式都应该这样做。

答案 1 :(得分:0)

塞德里克。因为您的数据集太大,我认为您需要一个解决方案,不需要将所有值读入列表,然后再对它们进行平均。我会使用一个简单的平均类来计算一个运行平均值,如下所示:

eventType

您的问题似乎也适用于并行处理 - 将数据集拆分为块,计算并行运行的每个块的平均值,然后将平均值一起平均。

希望这有帮助。