lte*_*e__ 5 python fft time-series
我正在学习 Tensorflow 教程,并且遇到了快速傅立叶变换:
fft = tf.signal.rfft(df['T (degC)'])
f_per_dataset = np.arange(0, len(fft))
n_samples_h = len(df['T (degC)'])
hours_per_year = 24*365.2524
years_per_dataset = n_samples_h/(hours_per_year)
f_per_year = f_per_dataset/years_per_dataset
plt.step(f_per_year, np.abs(fft))
plt.xscale('log')
plt.ylim(0, 400000)
plt.xlim([0.1, max(plt.xlim())])
plt.xticks([1, 365.2524], labels=['1/Year', '1/day'])
_ = plt.xlabel('Frequency (log scale)')
Run Code Online (Sandbox Code Playgroud)
该数据集包含每小时的温度测量值。代码对此执行 FFT,以查看哪些组件有很大影响,基本上是在数据中找到周期性。这产生了以下情节:
虽然我不太了解X轴。我确实看到它是一个对数刻度,但是,我看到“1”对应于一年,“365.2524”代表每日周期。这是否意味着比例尺是“一年的第 n”,所以一年的第 1 是一年,一年的 365.2524 是一天,同样的逻辑 4 是一个季度,2 是半年之类的?如果是这样,最左边的值 (0) 是什么意思?在一年的第 0 日也有一些周期性——这在直觉上意味着什么?
这里还有一个。有一些关键的区别。这次的数据集是亚马逊股票的每日交易量(因此数据集不再是每小时,而是每天)。此外,该数据集仅包含 WEEKDAY 数据,因此将一年中的天数标记为 252(此数据集一年中的平均天数)。
fft = tf.signal.rfft(df['Volume'])
f_per_dataset = np.arange(0, len(fft))
n_samples_d = len(df['Volume'])
days_per_year = 252
years_per_dataset = n_samples_d/(days_per_year)
f_per_year = f_per_dataset/years_per_dataset
plt.step(f_per_year, np.abs(fft))
plt.xscale('log')
plt.xticks([1, 4, 252], labels=['1/Year', '1/quarter(???)', '1/day'])
_ = plt.xlabel('Frequency (log scale)')
Run Code Online (Sandbox Code Playgroud)
这里的周期性没有那么明显,但是,我确实在“4”处找到了一个峰值。鉴于我更改了代码并且数据周期现在是每天而不是每小时,这仍然成立吗?4 点的峰值是否意味着存在季度周期?
最后,再次,零附近有一个大的“尖峰”是什么意思?数据集有12年的数据,这个主要周期是“每12年”吗?
谢谢!
归档时间: |
|
查看次数: |
389 次 |
最近记录: |