File size: 4,076 Bytes
1b9a2bc 10caf6a 376f47b 10caf6a 376f47b 10caf6a 376f47b 4d2a56e 376f47b 10caf6a 376f47b 1b9a2bc 10caf6a 376f47b 9f65c7c 10caf6a 376f47b b0b5df0 376f47b ddde3e7 376f47b b0b5df0 376f47b b0b5df0 376f47b b0b5df0 0ead373 b0b5df0 10caf6a 376f47b b0b5df0 376f47b 10caf6a 376f47b 10caf6a 376f47b 558f9a2 376f47b 558f9a2 376f47b 558f9a2 376f47b 558f9a2 376f47b 558f9a2 376f47b 558f9a2 376f47b 558f9a2 376f47b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
import gradio as gr
import pandas as pd
import numpy as np
import plotly.graph_objects as go
import joblib # Para cargar el modelo ARIMA guardado
from datetime import datetime
# Función para cargar el modelo ARIMA guardado
def load_arima_model():
model = joblib.load('arima_sales_model.pkl') # Cargar el modelo ARIMA desde un archivo guardado (.pkl)
return model
# Cargar el modelo ARIMA al inicio
arima_model = load_arima_model()
# Funciones de preprocesamiento y cálculo de crecimiento de ventas
def drop(dataframe):
pass # Implementar según sea necesario
def date_format(dataframe):
pass # Implementar según sea necesario
def group_to_three(dataframe):
pass # Implementar según sea necesario
def get_forecast_period(period):
return period # Retornar el periodo de pronóstico
def sales_growth(df, forecasted_series):
return forecasted_series.diff() # Calcular el crecimiento de ventas
def merge_forecast_data(actual, predicted, future):
return pd.DataFrame({
"Actual Sales": actual,
"Predicted Sales": predicted,
"Forecasted Future Sales": future
})
# Función principal para la carga de archivo y la predicción
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)
series = group_to_three(df)
# Realizar la predicción con el modelo ARIMA
forecast_period = get_forecast_period(period)
forecasted_values, confint = arima_model.predict(n_periods=forecast_period, return_conf_int=True)
# Crear serie con los valores pronosticados
forecasted_series = pd.Series(forecasted_values)
forecasted_series.index = pd.date_range(df['Date'].iloc[-1], periods=forecast_period, freq='3D')
# Calcular el crecimiento de las ventas
future_sales_growth = sales_growth(df, forecasted_series)
# Combinar los datos para graficar
merged_data = merge_forecast_data(df['Sales'], series, forecasted_series)
# Crear gráficos
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=forecasted_series, mode='lines', name='Forecasted Sales'))
fig_forecast.update_layout(title='🔮 Forecasted Sales Data', xaxis_title='Date', yaxis_title='Sales')
return fig_compare, fig_forecast, future_sales_growth
# Interfaz de Gradio
def create_sidebar():
with gr.Column():
gr.Markdown("### 📂 Upload your sales data (CSV)")
uploaded_file = gr.File(label="Choose your file", elem_id="file-uploader")
gr.Markdown("### ⏳ Forecast Period (Days)")
period = gr.Slider(minimum=30, maximum=90, step=1, label="Forecast period (in days)")
return uploaded_file, period
# Crear el sidebar y la interfaz principal
uploaded_file, period = create_sidebar()
output_plots = [
gr.Plot(label="📈 Historical vs Predicted Sales"),
gr.Plot(label="🔮 Forecasted Sales Data"),
gr.DataFrame(label="📊 Sales Growth")
]
iface = gr.Interface(
fn=upload_and_forecast,
inputs=[uploaded_file, period],
outputs=output_plots,
live=True,
title="Sales Forecasting System ✨",
description="Upload your sales data to start forecasting 🚀",
css=open("styles.css", "r").read() # Cargar el archivo CSS para los estilos personalizados
)
iface.launch() # Lanzar la interfaz
|