Нахождение периодичности траектории временного ряда в python - PullRequest
0 голосов
/ 13 марта 2020

Я делаю анализ временных рядов и пытаюсь найти периодичность моих временных рядов. Я сделал следующий код и нашел графики (см. В приложении):

    # Periodicity of the two trajectories
from statsmodels import api as sm
# convert dataframe to array
np_df= np.asarray(df['Combined'], dtype=float)
# remove mean to create signal oscillating around 0
np_df= np_df- np.mean(np_df)
#get the autocorrelation coefficient
acf= sm.tsa.acf(np_df, nlags=len(np_df))

plt.figure(figsize = (10, 8))
lag = np.arange(len(np_df)) / 2. / 24.
plt.plot(lag, acf)
plt.xlim((0, 120))
plt.xlabel('Lags (days)')
plt.ylabel('Autocorrelation')

Photo from code above

plt.figure(figsize = (10, 8))
plt.plot(lag, acf)
plt.xlim((0, 22))
plt.xlabel('Lags (days)')
plt.ylabel('Autocorrelation')

Graph 2 of code above

Использование пакета fft для поиска периодичности

from scipy import fftpack
ft_df= fftpack.fft(np_df, axis=0)
freq= fftpack.fftfreq(np_df.shape[0], time[1]-time[0])
periods= 1/freq
plt.figure()
plt.plot(periods, abs(ft_df)*1e-3, 'o')
plt.xlim(0,22)
plt.xlabel('Period')
plt.ylabel('Power ($cdot10^3$)')
plt.show()

Graph 3

Мой вопрос, я думаю, периодичность, из чего я могу интерпретировать это 1 и, возможно, 2,5? Я прав в своем методе и интерпретации?

Заранее спасибо!

1 Ответ

0 голосов
/ 13 марта 2020

Я не профессионал в анализе сигналов, поэтому возьмите это с крошкой соли ...

Ваша автокорреляция показывает, что 15 лагов (i sh) - это ваша высокая корреляция. Так что это будет ваша лучшая оценка. Тем не менее, либо сигнал является или не является периодом c. Если это период c, я ожидаю увидеть автокорреляцию 1,0 с некоторым запаздыванием, а не 0,85 или около того. Возможно, есть какой-то шум или что-то в этом роде.

Я не совсем уверен, что вы делаете с fftfreq, возможно, кто-то другой мог бы помочь там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...