Я работаю над захватом сезонности временных рядов с использованием графика периодограммы, я хочу использовать десять верхних частотных компонентов для создания временного ряда сезонности, до сих пор я построил периодограмму:
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']
вот график для сезонных компонентов в первый год:
Итак, мне интересно, что мне делать вместо того, чтобы просто строить эти синусоидальные волны, чтобы захватить реальные компоненты вершины частоты.