import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA

# Load dataset
data = pd.read_csv("Electric_Production.csv")

# Auto-detect columns
date_col = data.columns[0]
value_col = data.columns[1]

# Convert date
data[date_col] = pd.to_datetime(data[date_col], errors='coerce')

# Clean data
data = data.dropna(subset=[date_col, value_col])
data = data.sort_values(date_col)
data.set_index(date_col, inplace=True)

# Ensure frequency (monthly)
ts = data[value_col].asfreq('MS')
ts = ts.fillna(method='ffill')   # fill missing values

# ARIMA model
model = ARIMA(ts, order=(1,1,1))
result = model.fit()

# Forecast
forecast = result.get_forecast(steps=20)
forecast_df = forecast.summary_frame()

print(forecast_df)

# Plot
plt.figure()
plt.plot(ts, label="Historical")
plt.plot(forecast_df['mean'], label="Forecast")
plt.fill_between(forecast_df.index,
                 forecast_df['mean_ci_lower'],
                 forecast_df['mean_ci_upper'],
                 alpha=0.3)
plt.legend()
plt.show()
#pip install pandas matplotlib statsmodels

#shortversion
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA

df = pd.read_csv("Electric_Production.csv", index_col=0, parse_dates=True).dropna()

ts = df.iloc[:,0].asfreq('MS').ffill()

fc = ARIMA(ts, order=(1,1,1)).fit().get_forecast(20).summary_frame()

print(fc)

plt.plot(ts)
plt.plot(fc['mean'])
plt.fill_between(fc.index, fc['mean_ci_lower'], fc['mean_ci_upper'], alpha=0.3)
plt.show()