【发布时间】:2020-05-13 09:21:37
【问题描述】:
我怀疑我对傅里叶变换的理解缺少一些东西,所以我正在寻找一些更正(如果是这样的话)。我应该如何从下面的第一个图中收集峰值信息?
该数据集是过去 17 年(特定城市)911 呼叫的每小时数据。
我已从数据中删除了趋势,现在正在删除季节性。当我运行傅里叶变换时,我得到以下图:
我相信数据集确实有一些季节性(查看每周数据,我有这种模式):
如何在第一个图中找出峰值的值?大概对于第一个图中 5000 下的所有“峰值”,我可能会忽略在我的最终模型中包含该季节性,但只会损失准确性,对吗?
这是我目前正在使用的代码:
from scipy import fftpack
fft = fftpack.fft(calls_grouped_hour.detrended_residuals - calls_grouped_hour.detrended_residuals.mean())
plt.plot(1./(17*365)*np.arange(len(fft)), np.abs(fft))
plt.xlim([-.1, 23/2]);
编辑: 在 Mark Snider 的初步回答之后,我有以下情节:
添加代码尝试从 fft 获取峰值:
我需要先使用 ifft 将值转换回来吗?
fft_x_y = np.stack((fft.real, fft.imag), -1)
peaks = []
for x, y in np.abs(fft_x_y):
if (y >= 0):
spipeakskes.append(x)
peaks = np.unique(peaks)
print('Length: ', len(peaks))
print('Peak values: ', '\n', np.sort(peaks))
【问题讨论】: