找出时间序列中的持续时间周期



我有一个很长的时间序列,想确定不同值发生了多少时间跳跃和下降:

34.5.1.03.4.6.7.2.3.06.7.4.3.2.1.02.3.5.4.5.6.5.7.08.2.1.4.0

我想找到每个循环对的频率,比如值从5到0到53到0到3

等等。。

我已经尝试过cydets库来查找循环,但无法得到我想要的。

from cydets.algorithm import detect_cycles
import pandas as pd
import dask.dataframe as dd
pct_change_series = pct_change_series.round()
cycles = detect_cycles(pct_change_series.compute())
print(cycles)

你能帮忙吗。

我写的这个小脚本应该可以完成任务。我确保不使用任何外部库:

if __name__ == '__main__':
data = [3,4,5,1,0,3,4,6,7,2,3,0,6,7,4,3,2,1,0,2,3,5,4,5,6,5,7,0,8,2,1,4,0]
G = {i:[0,0] for i in data} # {i:(status, n_cycles) ... }
for i in range(len(data)):
nid, S, C = data[i], *G[data[i]]
if nid == 0: G.update({i:[2,c] for i,(s,c) in G.items() if s==1}); continue
elif G[nid][0] == 0: G.update({nid:[1,C]})
elif G[nid][0] == 2: G.update({nid:[0,C+1]})
[print(f'[{i}] Number of Cycles: {c}') for i,(s,c) in sorted(list(G.items()),key=lambda x:x[0]) if i>0]

当我运行这个程序时,我得到以下输出:

[1] Number of Cycles: 2
[2] Number of Cycles: 3
[3] Number of Cycles: 3
[4] Number of Cycles: 4
[5] Number of Cycles: 1
[6] Number of Cycles: 2
[7] Number of Cycles: 2
[8] Number of Cycles: 0

对于列表中的每个数字,循环次数是数字x出现在i位置的次数,然后一些m数字后来出现0,然后另一个x(i+m+n(零位置后出现n的次数。在对每个周期进行计数后,该过程将重新启动x,这意味着现在下一个x周期可能从位置(i+m+n(开始。Lmk,如果你想让我更详细地解释一下!

最新更新