forecast_tif / app.py
hellorahulk's picture
Update app.py
d1fc725
Raw
History Blame Contribute Delete
2.26 kB
import pandas as pd
from prophet import Prophet
import plotly.express as px
import gradio as gr
from prophet.plot import plot_plotly, plot_components_plotly
def forecast_timeseries(data_file, forecast_periods):
# Load the input data
df = pd.read_csv(data_file.name,encoding='utf-8')
df['WEIGHT_LBS'] = df['WEIGHT_LBS'].astype('int64')
df = df.rename(columns={'RECV_DATE': 'ds', 'WEIGHT_LBS': 'y'})
weekly_df = df[['ds','y']].sort_values('ds')
weekly_df = weekly_df.groupby('ds',as_index=False)['y'].sum()
weekly_df['ds'] = pd.to_datetime(weekly_df['ds'])
weekly_df.set_index('ds', inplace=True)
weekly_df = weekly_df.resample('w').sum()
weekly_df.reset_index(inplace=True)
train = weekly_df[:int(0.8*(weekly_df.shape[0]))]
test = weekly_df[int(0.8*(weekly_df.shape[0]))+1:]
m = Prophet()
m.fit(train[['ds','y']])
# Create a future dataframe for forecasting
future = m.make_future_dataframe(periods=int(forecast_periods),freq='W')
# Make predictions
forecast = m.predict(future)
# Extract relevant columns from the forecast
forecast_data = forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']]
# Plot the forecasted data with upper and lower bounds
# fig = px.line(forecast, x='ds', y='yhat', title='Forecasted Time Series')
# fig.add_scatter(x=df['ds'], y=df['y'], mode='markers', name='Actual Values')
# fig.add_scatter(x=forecast['ds'], y=forecast['yhat_upper'], mode='lines', name='Upper Bound')
# fig.add_scatter(x=forecast['ds'], y=forecast['yhat_lower'], mode='lines', name='Lower Bound')
fig = plot_plotly(m, forecast)
fig1 = plot_components_plotly(m, forecast)
return df.head(),fig,fig1 ,forecast_data
# Define input and output interfaces for the Gradio app
inputs = [
gr.inputs.File(label="Upload CSV File"),
gr.inputs.Number(label="Forecast Periods", default=7),
]
outputs = [
gr.Dataframe(label="Input Data"),
gr.Plot(label="Forecast Plot"),
gr.Plot(label="Trends"),
gr.Dataframe(label="Forecast Results"),
]
# Create the Gradio app
iface = gr.Interface(fn=forecast_timeseries, inputs=inputs, outputs=outputs, title="Time Series Forecasting with Prophet")
iface.launch(inline = False)