Python 使用滚动窗口获取statsmodels acf函数的输出
我可以通过以下方法提取特定滞后时间的自相关值:Python 使用滚动窗口获取statsmodels acf函数的输出,python,pandas,advanced-custom-fields,statsmodels,Python,Pandas,Advanced Custom Fields,Statsmodels,我可以通过以下方法提取特定滞后时间的自相关值: df.rolling(window = 10).apply(lambda x: acf(x, nlags = 5)[5]).plot() 然而,由于acf实际上正在进行所有的计算,我希望得到所有的计算结果,而不仅仅是一个。这样我就可以将这个返回的数组/列表解包成一堆列,分别绘制每个列,但不必经过acf那么多不必要的时间。所以我试着: df.rolling(window = 10).apply(lambda x: list(acf(x, nlags
df.rolling(window = 10).apply(lambda x: acf(x, nlags = 5)[5]).plot()
然而,由于acf实际上正在进行所有的计算,我希望得到所有的计算结果,而不仅仅是一个。这样我就可以将这个返回的数组/列表解包成一堆列,分别绘制每个列,但不必经过acf
那么多不必要的时间。所以我试着:
df.rolling(window = 10).apply(lambda x: list(acf(x, nlags = 5)))
这会引发以下错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-63-e5f337100eb5> in <module>()
----> 1 df.rolling(window = 10).apply(lambda x: list(acf(x, nlags = 5)))
/Users/a/anaconda3/lib/python3.5/site-packages/pandas/core/window.py in apply(self, func, args, kwargs)
861 @Appender(_shared_docs['apply'])
862 def apply(self, func, args=(), kwargs={}):
--> 863 return super(Rolling, self).apply(func, args=args, kwargs=kwargs)
864
865 @Substitution(name='rolling')
/Users/a/anaconda3/lib/python3.5/site-packages/pandas/core/window.py in apply(self, func, args, kwargs)
619
620 return self._apply(f, func, args=args, kwargs=kwargs,
--> 621 center=False)
622
623 def sum(self, **kwargs):
/Users/a/anaconda3/lib/python3.5/site-packages/pandas/core/window.py in _apply(self, func, name, window, center, check_minp, how, **kwargs)
556
557 if values.ndim > 1:
--> 558 result = np.apply_along_axis(calc, self.axis, values)
559 else:
560 result = calc(values)
/Users/a/anaconda3/lib/python3.5/site-packages/numpy/lib/shape_base.py in apply_along_axis(func1d, axis, arr, *args, **kwargs)
89 outshape = asarray(arr.shape).take(indlist)
90 i.put(indlist, ind)
---> 91 res = func1d(arr[tuple(i.tolist())], *args, **kwargs)
92 # if res is a number, then we have a smaller output array
93 if isscalar(res):
/Users/a/anaconda3/lib/python3.5/site-packages/pandas/core/window.py in calc(x)
553
554 def calc(x):
--> 555 return func(x, window, min_periods=self.min_periods)
556
557 if values.ndim > 1:
/Users/a/anaconda3/lib/python3.5/site-packages/pandas/core/window.py in f(arg, window, min_periods)
616 minp = _use_window(min_periods, window)
617 return algos.roll_generic(arg, window, minp, offset, func, args,
--> 618 kwargs)
619
620 return self._apply(f, func, args=args, kwargs=kwargs,
pandas/algos.pyx in pandas.algos.roll_generic (pandas/algos.c:51581)()
TypeError: a float is required
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
---->1 df.滚动(窗口=10).应用(lambda x:list(acf(x,nlags=5)))
/应用中的Users/a/anaconda3/lib/python3.5/site-packages/pandas/core/window.py(self、func、args、kwargs)
861@Appender(_shared_docs['apply']))
862定义应用(self、func、args=()、kwargs={}):
-->863返回超级(滚动,自)。应用(func,args=args,kwargs=kwargs)
864
865@Substitution(name='rolling')
/应用中的Users/a/anaconda3/lib/python3.5/site-packages/pandas/core/window.py(self、func、args、kwargs)
619
620返回自应用(f,func,args=args,kwargs=kwargs,
-->621中心=错误)
622
623定义和(自身,**kwargs):
/用户/a/anaconda3/lib/python3.5/site-packages/pandas/core/window.py在应用中(self、func、name、window、center、check、minp、how、**kwargs)
556
557如果values.ndim>1:
-->558结果=np。沿_轴应用_(计算、自轴、值)
559其他:
560结果=计算值(数值)
/用户/a/anaconda3/lib/python3.5/site-packages/numpy/lib/shape_base.py沿_轴应用(func1d、axis、arr、*args、**kwargs)
89外形=阵列(阵列形状)。采用(indlist)
90 i.put(indlist,ind)
--->91 res=func1d(arr[tuple(i.tolist())],*args,**kwargs)
92#如果res是一个数字,那么我们有一个较小的输出数组
93如果是isscalar(res):
/计算中的Users/a/anaconda3/lib/python3.5/site-packages/pandas/core/window.py(x)
553
554 def calc(x):
-->555返回函数(x,窗口,最小周期=自最小周期)
556
557如果values.ndim>1:
/f中的Users/a/anaconda3/lib/python3.5/site-packages/pandas/core/window.py(参数、窗口、最小周期)
616最小值=_使用_窗口(最小周期,窗口)
617返回算法roll_generic(参数、窗口、最小值、偏移量、函数、参数、,
-->618克瓦格)
619
620返回自应用(f,func,args=args,kwargs=kwargs,
pandas.algos.roll_generic(pandas/algos.c:51581)()中的pandas/algos.pyx
TypeError:需要浮点
这是否意味着使用
rolling
的apply
样式操作只能处理浮动?至少对于groupby
我经常有机会返回列表或集合,但可能rolling
没有那么灵活?要绘制acf结果,您可能需要尝试:
从statsmodels.graphics导入
tsaplots.plot_acf(x,滞后=5,α=0.05)
要绘制acf结果,您可能需要尝试:
从statsmodels.graphics导入
tsaplots.plot_acf(x,滞后=5,α=0.05)