Временная дезагрегация временных рядов в Python

Я пытаюсь найти пакет, который обеспечивает временную дезагрегацию временных рядов. В R есть пакет под названием tempdisagg.

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

Есть ли какой-нибудь аналогичный пакет в python, о котором кто-нибудь знает?

Если этот пакет не существует в python, есть ли доступный пример, в котором кто-то может вызывать такие функции в этом пакете из R в Python.


person rsc05    schedule 04.02.2020    source источник
comment
Общий подход, который я рекомендую, заключается в использовании магии R в блокнотах Jupyter с использованием rpy2. Вы просто импортируете входные фреймы данных из Python в R, а затем выводите из R в Python, в то время как код, специфичный для пакета, по-прежнему написан на R.   -  person krassowski    schedule 04.02.2020
comment
@krassowski У вас есть хороший учебник по этому пакету или аналогичному пакету, которым вы можете поделиться, как это сделать?   -  person rsc05    schedule 04.02.2020


Ответы (1)


Я создал пакет Python с открытым исходным кодом под названием timedisagg, основанный на пакете R tempdisagg. Пакет реализует основные методы Чоу-Лина и Литтермана. Он также позволяет выбрать базовое среднее значение, сумму, первое и последнее преобразование, такие как пакет 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 для пакета.

person jstephenj14    schedule 24.05.2020
comment
Пожалуйста, укажите, как ваша библиотека или любые упомянутые ссылки могут быть точно полезны для ответа на вопросы. - person Hack06; 24.05.2020
comment
Благодарю за разъяснение. Я добавил подробности о функциях моей библиотеки. Достаточно ли этого? - person jstephenj14; 24.05.2020
comment
Теперь выглядит намного лучше ;) - person Hack06; 24.05.2020