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

时间:2014-04-09 19:00:45

标签: python arrays numpy fft

在时间戳系列中查找重复和循环

我有时间戳数据(大约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天之间的增长。所有这一切都来自时间戳,也许结果中有一些能指示模式显示的强弱程度。

2 个答案:

答案 0 :(得分: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()(功率谱密度)。请注意,如果您有足够数量的时间戳,则只能获得漂亮的图片。

答案 1 :(得分:1)

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

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

您可以在时间跨度中没有时间戳数据的位置构建一个包含0(零)的数组,并在您有时间戳数据的位置包含1(个)。 / p>

这将为您提供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 Hz和f = 0.0065 Hz。

您正在寻找的信息类型更适合进行统计分析。傅立叶分析无法提供有关数据的详细信息。

使用Sooeet FFT calculator

完成图形和FFT