【问题标题】:Temporal Disaggregation of Time Series in PythonPython中时间序列的时间分解
【发布时间】:2020-05-20 07:44:52
【问题描述】:

我正在尝试找到一个能够对时间序列进行时间分解的包。 R 中有一个名为 tempdisagg 的包。

https://journal.r-project.org/archive/2013/RJ-2013-028/RJ-2013-028.pdf

有人知道python中有没有类似的包?

如果这个包在 python 中不存在,是否有一个可用的例子,有人可以在这个包中从 R 调用这些函数到 Python。

【问题讨论】:

  • 我推荐的一般方法是使用 rpy2 在 Jupyter 笔记本中使用 R 魔法。您只需将输入数据帧从 Python 导入到 R,然后从 R 输出到 Python,而特定于包的代码仍然是用 R 编写的。
  • @krassowski 你有关于这个包或类似包的很好的教程,你可以分享如何做到这一点?

标签: r python-3.x time-series rpy2 sklearn-pandas


【解决方案1】:

我创建了一个名为timedisagg 的开源Python 包,它基于R tempdisagg 包。该包实现了基本的 Chow-Lin 和 Litterman 方法。它还允许基本平均、求和、第一次和最后一次转换选择,如 R 包。

鉴于 R 中的以下函数调用将 sales.a 分解为 exports.q 的函数:

model <- td(sales.a ~ 0 + exports.q,method="chow-lin-maxlog",conversion="sum")

可以使用 timedisagg 进行类似的调用,如下所示:

from timedisagg.td import TempDisagg
td_obj = TempDisagg(conversion="sum", method="chow-lin-maxlog")
final_disaggregated_output = td_obj(expected_dataset)

expected_dataset 是 pandas 数据框,格式如下:

      index  grain            X            y
0     1972      1   1432.63900          NaN
1     1972      2   1456.89100          NaN
2     1972      3   1342.56200          NaN
3     1972      4   1539.39400          NaN
4     1973      1   1535.75400          NaN
5     1973      2   1578.45800          NaN
6     1973      3   1574.72400          NaN
7     1973      4   1652.17100          NaN
8     1974      1   2047.83400          NaN
9     1974      2   2117.97100          NaN
10    1974      3   1925.92600          NaN
11    1974      4   1798.19000          NaN
12    1975      1   1818.81700   136.702329
13    1975      2   1808.22500   136.702329
14    1975      3   1649.20600   136.702329
15    1975      4   1799.66500   136.702329
16    1976      1   1985.75300   151.056074
17    1976      2   2064.66300   151.056074
18    1976      3   1856.38700   151.056074
19    1976      4   1919.08700   151.056074
..     ...    ...          ...          ...
152   2010      1  19915.79514   988.309676
153   2010      2  19482.48000   988.309676
154   2010      3  18484.64900   988.309676
155   2010      4  18026.46869   988.309676
156   2011      1  19687.52100          NaN
157   2011      2  18913.06608          NaN

这里 X 是 exports.q,y 是 sales.a

输出final_disaggregated_output 将如下所示,其中y_hat 是分类销售额:

   index  grain         X   y      y_hat
0   1972      1  1432.639 NaN  21.656879
1   1972      2  1456.891 NaN  22.219737
2   1972      3  1342.562 NaN  20.855413
3   1972      4  1539.394 NaN  23.937916
4   1973      1  1535.754 NaN  24.229008

编辑 - 如果有人需要帮助将他们的数据放入我的包中,请随时在 git 上为该包提出问题。

【讨论】:

  • 请具体说明您的库或任何提及的链接对回答问题有何帮助。
  • 感谢您的澄清。我添加了关于我的库函数的详细信息。够了吗?
  • 现在看起来好多了;)
最近更新 更多