我认为问题的定义非常简单,但我正在寻找适合大型数据集(20多万)的解决方案。
我有两个列表:stamps
包含N
个时间戳,values
包含N
标量值。
我可以轻松地将这些数据绘制成时间序列图。
现在我想将values
的平均值绘制成1分钟长的分档(我通常每分钟有50个值但是有些是空的)。导致空箱的空值应使该箱的平均值等于零。
我怎样才能用最少的代码有效地做到这一点?
答案 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
您的问题似乎也适用于并行处理 - 将数据集拆分为块,计算并行运行的每个块的平均值,然后将平均值一起平均。
希望这有帮助。