Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| import numpy as np | |
| import pandas as pd | |
| import plotly.express as px | |
| import plotly.graph_objs as go | |
| from statsforecast import StatsForecast | |
| from statsforecast.models import seasonal_naive, auto_arima | |
| from utils import calc_seasonality | |
| st.title('Forecasting time series') | |
| uploaded_file = st.file_uploader("Choose a CSV file", accept_multiple_files=False) | |
| if uploaded_file is not None: | |
| dataframe = pd.read_csv(uploaded_file) | |
| st.write(dataframe) | |
| series = st.text_input("Write the name of the variable you want to forecast") | |
| date = st.text_input("Write the first date") | |
| freq = st.text_input("Write the frequency") | |
| horizons = int(st.text_input("Write the number of horizons")) | |
| seasonality = calc_seasonality(freq) | |
| st.write(f'Seasonality: {seasonality}') | |
| if series is not None: | |
| series_train = pd.DataFrame( | |
| { | |
| 'ds': pd.date_range(start=date, periods=dataframe.shape[0], freq=freq), | |
| 'y': dataframe[series].values | |
| }, | |
| index=pd.Index([0] * dataframe.shape[0], name='unique_id') | |
| ) | |
| fig = px.line(series_train, x='ds', y='y', title=f'{series}') | |
| st.plotly_chart(fig) | |
| fcst = StatsForecast( | |
| series_train, | |
| models=[(auto_arima, seasonality), (seasonal_naive, seasonality)], | |
| freq=freq, | |
| n_jobs=1 | |
| ) | |
| forecasts = fcst.forecast(horizons, level=(80, 95)) | |
| st.write(forecasts) | |
| fig_forecast = go.Figure([ | |
| go.Scatter( | |
| name=series, | |
| x=series_train['ds'], | |
| y=series_train['y'], | |
| mode='lines', | |
| marker=dict(color='blue'), | |
| line=dict(width=1), | |
| showlegend=True | |
| ), | |
| go.Scatter( | |
| name=f'auto_arima_season_length-{seasonality}_mean', | |
| x=forecasts['ds'], | |
| y=forecasts[f'auto_arima_season_length-{seasonality}_mean'], | |
| mode='lines', | |
| marker=dict(color='green'), | |
| line=dict(width=1), | |
| showlegend=True | |
| ), | |
| go.Scatter( | |
| name=f'seasonal_naive_season_length-{seasonality}', | |
| x=forecasts['ds'], | |
| y=forecasts[f'seasonal_naive_season_length-{seasonality}'], | |
| mode='lines', | |
| marker=dict(color='red'), | |
| line=dict(width=1), | |
| showlegend=True | |
| ) | |
| ]) | |
| fig_forecast.update_layout( | |
| yaxis_title=series, | |
| title=f'Forecasting {series}' | |
| ) | |
| st.plotly_chart(fig_forecast) | |
| # fig.add_scatter(x=forecasts['ds'], y=forecasts[f'auto_arima_season_length-{seasonality}_mean'], mode='lines') | |
| # fig.update_traces( | |
| # name=f'auto_arima_season_length-{seasonality}_mean', | |
| # line=dict(color='green', width=1), | |
| # showlegend=True | |
| # ) | |
| # fig.add_scatter(x=forecasts['ds'], y=forecasts[f'seasonal_naive_season_length-{seasonality}'], mode='lines') | |
| # fig.update_traces( | |
| # name=f'seasonal_naive_season_length-{seasonality}', | |
| # line=dict(color='red', width=1), | |
| # showlegend=True | |
| # ) | |
| # st.plotly_chart(fig) | |