理论上,所有的波形数据,都可以通过不同频率和相位的正弦波或者余弦波叠加而成。所以,可以对时效数据进行FFT,找出其周期特点。
参考:https://www.kaggle.com/muonneutrino/wikipedia-traffic-data-exploration

如图所示,为各个不同语音国家访问给定的wiki页面的平均流量,可以看出,欧美国家访问量较多,且呈现出一定的周期规律(每第7天有明显的访问量增加)。
from scipy.fftpack import fft def plot_with_fft(key): fig = plt.figure(1,figsize=[15,5]) plt.ylabel('Views per Page') plt.xlabel('Day') plt.title(labels[key]) plt.plot(days,sums[key],label = labels[key] ) fig = plt.figure(2,figsize=[15,5]) fft_complex = fft(sums[key]) fft_mag = [np.sqrt(np.real(x)*np.real(x)+np.imag(x)*np.imag(x)) for x in fft_complex] fft_xvals = [day / days[-1] for day in days] npts = len(fft_xvals) // 2 + 1 fft_mag = fft_mag[:npts] fft_xvals = fft_xvals[:npts] plt.ylabel('FFT Magnitude') plt.xlabel(r"Frequency [days]$^{-1}$") plt.title('Fourier Transform') plt.plot(fft_xvals[1:],fft_mag[1:],label = labels[key] ) # Draw lines at 1, 1/2, and 1/3 week periods plt.axvline(x=1./7,color='red',alpha=0.3) plt.axvline(x=2./7,color='red',alpha=0.3) plt.axvline(x=3./7,color='red',alpha=0.3) plt.show() for key in sums: plot_with_fft(key)

上图是对图一中的英语国家进行FFT的结果,横坐标是频率/周期,红色实线是人为标注的结果(每隔7天画一条红线),纵坐标是FFT后结果的模(FFT的结果是一个复数,实部是频率、虚部是相位,它的模可以认为是FFT的能级、强度power)。
上图可以看出:该国家在7天为周期上表现得不是很强烈。



由上图可以看出,德国在以7天为周期上有明显的特征,其他国家并不明显。
浙公网安备 33010602011771号