【问题标题】:How to take moving average of streaming data and take difference of consecutive moving average in python如何在python中获取流数据的移动平均值并获取连续移动平均值的差异
【发布时间】:2023-03-25 08:57:01
【问题描述】:

我想计算移动平均线并取当前平均线和之前平均​​线的差值,如果两个连续移动平均线之间的差值大于 4,则加一是计数计数器。

我的数据是流数据

使用此功能,我可以实现离线数据的移动平均。但我不确定如何对流数据执行此操作。

moving_avg= df['S1'].rolling(window=5).mean()
diff=df['moving_avg'].diff()

【问题讨论】:

  • 请分享数据样本

标签: python-3.x pandas numpy pandas-groupby


【解决方案1】:

这很容易用标准的 python 集合归档。

我们的想法是为您的值保留一个有限的queue,并计算该队列的简单平均值。 deque 在底层使用链表,所以追加性能是 O(1)。

这是一个简单的例子:

from collections import deque

class Stats:
    def __init__(self, window=5):
        self._queue = deque(maxlen=window)
        self._prev_ma = None
        
    def push(self, value):
        self._queue.append(value)
        ma = sum(self._queue) / len(self._queue)
        diff = ma - self._prev_ma if self._prev_ma is not None else None
        self._prev_ma = ma
        print(f"value: {value}, MA: {ma}, diff: {diff}")

# usage
s = Stats()
for i in range(10):
    s.push(i)

【讨论】:

  • 感谢您的出色解决方案。如果 5 行的 diff 连续大于 2 是否需要触发警报,是否可以在此处再添加一个条件?
  • 当然,你可以在push方法里面添加任何业务逻辑。
猜你喜欢
  • 1970-01-01
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-01
  • 2018-05-08
  • 2021-08-22
  • 1970-01-01
相关资源
最近更新 更多