在python中计算指数移动平均值

在python中计算指数移动平均值,第1张

在python中计算指数移动平均值

编辑:看来SciKits(补充SciPy的附加工具包)的scikits.timeseries.lib.movi​​ng_funcs子模块中的

mov_average_expw()
功能更适合您的问题的措辞。


要使用平滑因子来计算数据的指数平滑

alpha
(1- alpha)
用Wikipedia的术语):

>>> alpha = 0.5>>> assert 0 < alpha <= 1.0>>> av = sum(alpha**n.days * iq ...     for n, iq in map(lambda (day, iq), today=max(days): (today-day, iq), ...         sorted(zip(days, IQ), key=lambda p: p[0], reverse=True)))95.0

上面的代码并不漂亮,所以让我们对其进行重构:

from collections import namedtuplefrom operator    import itemgetterdef smooth(iq_data, alpha=1, today=None):    """Perform exponential smoothing with factor `alpha`.    Time period is a day.    Each time period the value of `iq` drops `alpha` times.    The most recent data is the most valuable one.    """    assert 0 < alpha <= 1    if alpha == 1: # no smoothing        return sum(map(itemgetter(1), iq_data))    if today is None:        today = max(map(itemgetter(0), iq_data))    return sum(alpha**((today - date).days) * iq for date, iq in iq_data)IQData = namedtuple("IQData", "date iq")if __name__ == "__main__":    from datetime import date    days = [date(2008,1,1), date(2008,1,2), date(2008,1,7)]    IQ = [110, 105, 90]    iqdata = list(map(IQData, days, IQ))    print("n".join(map(str, iqdata)))    print(smooth(iqdata, alpha=0.5))

例:

$ python26 smooth.pyIQData(date=datetime.date(2008, 1, 1), iq=110)IQData(date=datetime.date(2008, 1, 2), iq=105)IQData(date=datetime.date(2008, 1, 7), iq=90)95.0


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5008648.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存