2014-04-09 239 views
0

查找时间戳意甲repititions和循环时间序列分析,与傅立叶(...也许其他方式)在Python

我有时间戳数据(从5000左右,可达50000个时间戳),不均匀分布在一个月或几个月:

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),则另一个具有虚拟说法的同形阵列

我的问题是,如果傅立叶对于Python实现来说,在时间戳系列中查找模式(repitions,cycles)是一个最好的选择,如果使用Fourier,那么最好的方法是什么?

正如我所说,我正在寻找重复和循环。对小时的分辨率听起来不错,但我有点不确定。我只想回答说,在每天的午餐时间11:00:00有一个模式。在17:00左右的第7天,还有另一种模式。甚至有一种复杂的模式,即在一年的前7天,8天以上的增长,在9天之间。所有这些都来自时间戳,也许结果中有一些能指出模式显示的强弱。

+3

做取决于什么类型的您正在寻找的模式...傅立叶是良好的周期性重复图案,但也有许多其他类型的模式,傅立叶不会是特别好在突出显示... – twalberg

+0

是定期重复模式是我在找什么,任何建议如何解决它? – user3516613

回答

1

假设你的分辨率是一分钟,你可以使用频谱作为快速射击,寻找模式:

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()的文档,并与参数玩了一下。如果你懒得做np.fft.rfft()你可以尝试plt.psd()(功率谱密度)。请注意,如果您拥有足够数量的时间戳,您只能拍摄漂亮的照片。

+0

谢谢迪特里希!我试着用你的例子在specgram上输出它。不过,我需要的不仅仅是图形输出。我也尝试了numpy fft(快速傅立叶变换)在一个类似的数组(1)和零(2),但我没有得到如何解释结果浮点数。 – user3516613

1

您可以将时间戳数据转换为时间序列,其中时间序列的分辨率等于时间戳数据的分辨率。

您的时间戳示例显示一分钟的分辨率。对于这种类型的数据,您的时间序列将有一分钟的分辨率。

您可以在您没有时间戳数据的时间范围内构建一个包含0(零)的数组,并且在您有时间戳数据的地方包含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。

该曲线图表示上述时间戳数组:

Time-stamp data time-series - Sooeet.com FFT calculator

该曲线示出了上述时间戳阵列的频谱(FFT)。大峰值位于输入数据的基本频率0.002 Hz(周期/秒)。换句话说,时间序列的基本周期为1/0.002 = 480秒或8分钟。

Frequency spectrum of time-stamp data - Sooeet.com FFT calculator

频谱示出了两个较低幅度的峰,在f = 0.004赫兹和f = 0.0065赫兹。

您正在寻找的信息更适合于统计分析。傅立叶分析不能提供有关您的数据的这些类型的细节。

图和FFT与Sooeet FFT calculator