File size: 887 Bytes
a3a39f2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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