import pandas as pd import plotly.express as px from prophet import Prophet class ForecastEngine: def forecast(self, df, date_col, val_col): if date_col not in df.columns or val_col not in df.columns: raise ValueError(f"Selected columns not found: {date_col}, {val_col}") df2 = df[[date_col, val_col]].copy() df2.rename(columns={date_col: "ds", val_col: "y"}, inplace=True) df2["ds"] = pd.to_datetime(df2["ds"], errors="coerce") df2.dropna(subset=["ds", "y"], inplace=True) if df2.empty: raise ValueError("Filtered DataFrame is empty. Check date/value columns.") model = Prophet() model.fit(df2) future = model.make_future_dataframe(periods=30) forecast = model.predict(future) fig = px.line(forecast, x="ds", y="yhat", title="Forecast") return forecast, fig