簡體   English   中英

時間序列分析,使用Python中的Fourier(......或其他方法)

[英]Time series analysis, with Fourier (…or maybe other method) in Python

在時間戳系列中查找重復和循環

我有時間戳數據(從大約5000個,高達50.000個時間戳),在一個月或幾個月內分布不均:

example1 = ['2013-01-01 12:01', '2013-01-01 12:26', '2013-01-01 12:58']

輸入可能是如圖所示的列表,或者我可以將它放在numpy數組中,可能會在幾分鍾內強制均勻分布:

exempel2 = np.array(['2013-01-01 12:01', '2013-01-01 12:02', '2013-01-01 12:03'])
dummyArr = np.array([1, 0, 0])

...並且如果另一個數組中的時間戳在同一位置(exempel2)是要考慮的日期/時間(1要考慮,0到0)

我的問題是,如果傅立葉變換是Python實現在時間戳系列中找到模式(重復,循環)的最佳選擇,並且如果傅立葉,那么最好的方法是什么呢?

正如我所說,我正在尋找重復和循環。 幾小時的分辨率聽起來不錯,但我有點不確定。 我只想得到答案說每天午餐時間11-13:00之間有一種模式。 17:00左右每隔7天就有另一種模式。 甚至有一種復雜的模式,即一年中,前7天,8天,而不是9天之間的增長。 所有這一切都來自時間戳,也許結果中有一些能指示模式顯示的強弱程度。

假設你的分辨率是一分鍾,你可以使用頻譜圖作為快速搜索來尋找模式:

import time
import numpy as np
import matplotlib.pyplot as plt

# convert time stamps to seconds (of UNIX time):
tt_sec = np.array([int(time.mktime(time.strptime(e,"%Y-%m-%d %H:%M"))) for e in example1])
tt = (tt_sec - tt_sec[0]) / 60  # convert to minutes starting at 0

xx = np.zeros(max(tt) + 1) # make sampled array with peaks at time stamps
xx[tt] = 1 

# make spectrogram:
fg = plt.figure(1)
fg.clf()
ax = fg.add_subplot(1, 1, 1)

ax.specgram(xx, Fs=1./60)  # spectogram => tune the parameters
fg.canvas.draw()  # do the drawing

plt.show()  # enter interactive loop

閱讀matplotlib的specgram()文檔並specgram()使用參數。 如果你懶得做一個np.fft.rfft()你可以嘗試plt.psd() (功率譜密度)。 請注意,如果您有足夠數量的時間戳,您只能獲得漂亮的圖片。

您可以將時間戳數據轉換為時間序列,其中時間序列的分辨率等於時間戳數據的分辨率。

您的時間戳示例顯示一分鍾的分辨率。 對於那種類型的數據,您的時間序列將具有一分鍾的分辨率。

您可以在時間跨度中沒有時間戳數據的位置構建一個包含0(零)的數組,並在您有時間戳數據的位置包含1(1)個數組。

這將為您提供FFT的輸入數據數組,類似於從隨機時間戳數據構建的此數組:

[0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0]

要查找時間戳數據的頻譜,請計算陣列的FFT。

此圖表代表上面的時間戳數組:

時間戳數據時間序列 -  Sooeet.com FFT計算器

該圖顯示了上述時間戳陣列的頻譜(FFT)。 大峰位於0.002 Hz(每秒周期數),這是輸入數據的基頻。 換句話說,時間序列的基本周期是1 / 0.002 = 480秒或8分鍾。

時間戳數據的頻譜 -  Sooeet.com FFT計算器

頻譜顯示兩個較低幅度的峰值,f = 0.004 Hz和f = 0.0065 Hz。

您正在尋找的信息類型更適合進行統計分析。 傅里葉分析無法提供有關數據的詳細信息。

使用Sooeet FFT計算器完成圖形和FFT

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM