我正在尝试用Python做R上的STL函数。
R命令包括
fit <- stl(elecequip, s.window=5)
plot(fit)我如何在Python中做到这一点?我调查过statmodels.tsa具有一些时间序列分析功能,但我可以在文档中特别找到“按黄土对时间序列进行季节分解”。类似的,在Python.org上也有一个叫做TimeSeries0.5.0的库,但是这个库没有文档,而且它的主页也是不可用的。我知道rpy2有一个使用包装器的选项,但我不知道如何使用包装器。
谢谢。
发布于 2015-02-03 08:10:42
我也遇到了类似的问题,我正在努力寻找最好的前进道路。
Here is a github repo for an STL decomposition based on the Loess procedure。它基于this paper提供的原始fortran代码。它实际上只是一个围绕原始Fortran代码的python包装器,所以您知道它可能工作得很好,并且不会有buggy。
如果您想要更多以Python为中心的东西,并且愿意使用稍微简单一点的分解例程,StatsModels有一个:
尝试将数据移动到Pandas DataFrame中,然后调用StatsModels tsa.seasonal_decompose。请参阅following example:
import statsmodels.api as sm
dta = sm.datasets.co2.load_pandas().data
# deal with missing values. see issue
dta.co2.interpolate(inplace=True)
res = sm.tsa.seasonal_decompose(dta.co2)
resplot = res.plot()

然后,您可以从以下位置恢复分解的各个组件:
res.resid
res.seasonal
res.trend我希望这能帮到你!
发布于 2017-11-20 12:52:24
您还可以使用rpy2从python中调用R
from rpy2.robjects import r
def decompose(series, frequency, s_window, **kwargs):
df = pd.DataFrame()
df['date'] = series.index
s = [x for x in series.values]
length = len(series)
s = r.ts(s, frequency=frequency)
decomposed = [x for x in r.stl(s, s_window, **kwargs).rx2('time.series')]
df['observed'] = series.values
df['trend'] = decomposed[length:2*length]
df['seasonal'] = decomposed[0:length]
df['residual'] = decomposed[2*length:3*length]
return df上面的函数假设您的系列有一个日期时间索引。它会返回一个包含各个组件的数据帧,然后您可以用自己喜欢的图形库绘制这些数据帧。
您可以传递stl seen here的参数,但可以将任何句号更改为下划线,例如,上面函数中的位置参数是s_window,但在上面的链接中它是s.window。此外,我在this存储库中找到了上面的一些代码。
https://stackoverflow.com/questions/26470570
复制相似问题