| import gradio as gr |
| import pandas as pd |
| import numpy as np |
| from datetime import datetime |
| import plotly.graph_objects as go |
| import torch |
| from transformers import pipeline, TapasTokenizer, TapasForQuestionAnswering |
| import pmdarima as pm |
| from pmdarima import auto_arima |
|
|
| |
| def merge(B, C, A): |
| |
| pass |
|
|
| def merge_sort(dataframe): |
| |
| pass |
|
|
| def drop(dataframe): |
| |
| pass |
|
|
| def date_format(dataframe): |
| |
| pass |
|
|
| def group_to_three(dataframe): |
| |
| pass |
|
|
| def series_to_df_exogenous(series): |
| |
| pass |
|
|
| def dates_df(dataframe): |
| |
| pass |
|
|
| def get_forecast_period(period): |
| |
| pass |
|
|
| def train_test(dataframe, n): |
| |
| pass |
|
|
| def test_fitting(dataframe, Exo, trainY): |
| |
| pass |
|
|
| def forecast_accuracy(forecast, actual): |
| |
| pass |
|
|
| def sales_growth(dataframe, fittedValues): |
| |
| pass |
|
|
| def merge_forecast_data(actual, predicted, future): |
| |
| pass |
|
|
| def interpret_mape(mape_score): |
| |
| pass |
|
|
| def load_tapas_model(): |
| model_name = "google/tapas-large-finetuned-wtq" |
| tokenizer = TapasTokenizer.from_pretrained(model_name) |
| model = TapasForQuestionAnswering.from_pretrained(model_name, local_files_only=False) |
| pipe = pipeline("table-question-answering", model=model, tokenizer=tokenizer) |
| return pipe |
|
|
| pipe = load_tapas_model() |
|
|
| def get_answer(table, query): |
| answers = pipe(table=table, query=query) |
| return answers |
|
|
| def convert_answer(answer): |
| |
| pass |
|
|
| def get_converted_answer(table, query): |
| |
| pass |
|
|
| |
| def upload_and_forecast(uploaded_file, period): |
| if uploaded_file is None: |
| return "Please upload a file to proceed." |
| |
| |
| df = pd.read_csv(uploaded_file) |
| df = drop(df) |
| df = date_format(df) |
| merge_sort(df) |
| series = group_to_three(df) |
| |
| forecast_period = get_forecast_period(period) |
| df = series_to_df_exogenous(series) |
| |
| |
| n_periods = round(len(df) * 0.2) |
| train = train_test(df, n_periods) |
| training_y, test_y, test_y_series, training_X, test_X, future_X = train |
| train_test_model = test_fitting(df, training_X, training_y) |
| |
| fitted, confint = train_test_model.predict(X=test_X, n_periods=n_periods, return_conf_int=True) |
| index_of_fc = test_y_series.index |
| fitted_series = pd.Series(fitted) |
| fitted_series.index = index_of_fc |
|
|
| future_n_periods = forecast_period |
| future_fitted, confint = train_test_model.predict(X=df.iloc[-future_n_periods:, 1:], n_periods=future_n_periods, return_conf_int=True, freq='3D') |
| future_index_of_fc = pd.date_range(df['Sales'].index[-1], periods=future_n_periods, freq='3D') |
| future_fitted_series = pd.Series(future_fitted) |
| future_fitted_series.index = future_index_of_fc |
|
|
| |
| future_sales_growth = sales_growth(df, future_fitted_series) |
| |
| |
| merged_data = merge_forecast_data(df['Sales'], fitted_series, future_fitted_series) |
| |
| |
| fig_compare = go.Figure() |
| fig_compare.add_trace(go.Scatter(x=merged_data[merged_data.columns[0]], y=merged_data['Actual Sales'], mode='lines', name='Actual Sales')) |
| fig_compare.add_trace(go.Scatter(x=merged_data[merged_data.columns[0]], y=merged_data['Predicted Sales'], mode='lines', name='Predicted Sales', line=dict(color='#006400'))) |
| fig_compare.update_layout(title='Historical Sales Data', xaxis_title='Date', yaxis_title='Sales') |
|
|
| fig_forecast = go.Figure() |
| fig_forecast.add_trace(go.Scatter(x=merged_data[merged_data.columns[0]], y=merged_data['Actual Sales'], mode='lines', name='Actual Sales')) |
| fig_forecast.add_trace(go.Scatter(x=merged_data[merged_data.columns[0]], y=merged_data['Forecasted Future Sales'], mode='lines', name='Future Forecasted Sales')) |
| fig_forecast.update_layout(title='Forecasted Sales Data', xaxis_title='Date', yaxis_title='Sales') |
|
|
| |
| return fig_compare, fig_forecast, future_sales_growth |
|
|
| |
| iface = gr.Interface( |
| fn=upload_and_forecast, |
| inputs=[ |
| gr.File(label="Upload your sales data (CSV)", elem_id="file-uploader"), |
| gr.Slider(minimum=30, maximum=90, step=1, label="Forecast Period (Days)", elem_id="forecast-period-slider") |
| ], |
| outputs=[ |
| gr.Plot(label="Historical vs Predicted Sales"), |
| gr.Plot(label="Forecasted Sales Data"), |
| gr.DataFrame(label="Sales Growth") |
| ], |
| live=True, |
| theme="compact", |
| title="Sales Forecasting System", |
| description="Upload your sales data to start forecasting." |
| ) |
|
|
| iface.launch() |
|
|