import numpy as np import pandas as pd from statsmodels.tsa.statespace.sarimax import SARIMAX import matplotlib.pyplot as plt from statsmodels.graphics.tsaplots import plot_acf, plot_pacf import plotly.graph_objects as go from scipy import signal from datetime import datetime import plotly.express as px from tools.algo.humidity import absolute_humidity if __name__ == "__main__": df = pd.read_csv("/home/juni/PycharmProjects/failure_analysis/data/weather/202007010000_202308310000_f.csv") ah = absolute_humidity(df["상대습도"], df["기온"]) df['관측시각'] = df['관측시각'].apply(lambda x: datetime.strptime(f"{x}", '%Y%m%d%H%M')) df["절대습도"] = ah # fig = go.Figure() # # fig.add_trace( # go.Scatter(x=df["관측시각"], y=df["절대습도"]) # ) # fig.add_trace( # go.Scatter(x=df["관측시각"], y=signal.savgol_filter( # df["절대습도"],72,3) # )) # fig.show() # log_df = np.log(df["절대습도"]) diff_1 = (df["절대습도"].diff(periods=1).iloc[1:]) diff_2 = diff_1.diff(periods=1).iloc[1:] # plot_acf(diff_2) # plot_pacf(diff_2) plt.show() model = SARIMAX(df["절대습도"], order=(1,0,2), seasonal_order=(0,1,2,24)) model_fit = model.fit() # ARIMA_model = pm.auto_arima(df['절대습도'], # start_p=1, # start_q=1, # test='adf', # use adftest to find optimal 'd' # max_p=3, max_q=3, # maximum p and q # m=24, # frequency of series (if m==1, seasonal is set to FALSE automatically) # d=None, # let model determine 'd' # D=2, #order of the seasonal differencing # seasonal=True, # No Seasonality for standard ARIMA # trace=False, # logs # error_action='warn', # shows errors ('ignore' silences these) # suppress_warnings=False, # stepwise=True) print(model_fit.summary()) df['forecast'] = model_fit.predict(start=-100, end=-1, dynamic=True) # df[['절대습도', 'forecast']].plot(figsize=(12, 8)) fig = px.line(df[['절대습도', 'forecast']]) fig.show()