【发布时间】:2019-04-02 15:11:17
【问题描述】:
我正在使用周期图捕获时间序列的季节性,我想使用前十个频率分量来创建季节性时间序列,到目前为止,我绘制了周期图:
data=elec_price[:48*365]
from scipy.signal import periodogram
f, Pxx_den = periodogram(data)
数据是价格的一年子集,间隔为 30 分钟 , 并在按幅值排序后从fourier_coefficients列表中捕获前十个频率分量
fourier_coefficients=Pxx_den.tolist()
fourier_coefficients=pd.DataFrame(fourier_coefficients,columns=['amplitude'])
最高振幅的最高频率是: 365,2,730,22,52,5,729,8 ,接下来我需要做的是使用这些最高频率分量来获得时间序列的季节性,我生成了每个频率分量的正弦波,并将它们加在一起绘制时间序列,我想我不确定这是不是正确的方法,因为我记得频率分量应该有一个虚部但我无法从周期图数据中找到它,其次我只是假设这些分量中的每一个都是正弦波。
sin_waves=fourier_coefficients.drop(columns=['frequency coneficient','amplitude']).copy()
sin_waves[' sin_wave_1']=0
sin_waves[' sin_wave_2']=0
sin_waves[' sin_wave_3']=0
sin_waves[' sin_wave_4']=0
sin_waves[' sin_wave_5']=0
sin_waves[' sin_wave_6']=0
sin_waves[' sin_wave_7']=0
sin_waves[' sin_wave_8']=0
for i in range(8761):
sin_waves[' sin_wave_1'][i]= fourier_coefficients['amplitude'][365]*math.sin(math.pi*i*365/8761)
sin_waves[' sin_wave_2'][i]= fourier_coefficients['amplitude'][2]*math.sin(math.pi*i*2/8761)
sin_waves[' sin_wave_3'][i]= fourier_coefficients['amplitude'][730]*math.sin(math.pi*i*730/8761)
sin_waves[' sin_wave_4'][i]= fourier_coefficients['amplitude'][22]*math.sin(math.pi*i*22/8761)
sin_waves[' sin_wave_5'][i]= fourier_coefficients['amplitude'][52]*math.sin(math.pi*i*52/8761)
sin_waves[' sin_wave_6'][i]= fourier_coefficients['amplitude'][5]*math.sin(math.pi*i*5/8761)
sin_waves[' sin_wave_7'][i]= fourier_coefficients['amplitude'][729]*math.sin(math.pi*i*729/8761)
sin_waves[' sin_wave_8'][i]= fourier_coefficients['amplitude'][8]*math.sin(math.pi*i*8/8761)
sin_waves['accumulated_sin_wave']=(sin_waves[' sin_wave_1']+sin_waves[' sin_wave_2']
+ sin_waves[' sin_wave_3']+sin_waves[' sin_wave_4']+sin_waves[' sin_wave_5']+
sin_waves[' sin_wave_6']+sin_waves[' sin_wave_7']+sin_waves[' sin_wave_8'])
8761 是数据中的样本数。
然后我绘制了sinaves['accumulated_sin_wave']
这是第一年的季节性成分图:
【问题讨论】:
标签: python fft data-mining forecasting ifft