IvanStudent commited on
Commit
b90f6cc
·
1 Parent(s): 5a3b63d

Guardar mis cambios locales

Browse files
Files changed (1) hide show
  1. app.py +12 -5
app.py CHANGED
@@ -10,7 +10,7 @@ def load_model():
10
  except Exception as e:
11
  return None, f"Failed to load model: {str(e)}"
12
 
13
- def forecast_sales(uploaded_file, forecast_period=30):
14
  if uploaded_file is None:
15
  return "No file uploaded.", None
16
 
@@ -24,21 +24,26 @@ def forecast_sales(uploaded_file, forecast_period=30):
24
  df['Date'] = pd.to_datetime(df['Date'])
25
  df = df.rename(columns={'Date': 'ds', 'Sale': 'y'})
26
 
 
 
 
27
  arima_model, error = load_model()
28
  if arima_model is None:
29
  return error, None
30
 
31
  try:
 
32
  forecast = arima_model.get_forecast(steps=forecast_period)
33
- forecast_index = pd.date_range(df['ds'].max(), periods=forecast_period + 1, freq='D')[1:]
34
  forecast_df = pd.DataFrame({'Date': forecast_index, 'Sales Forecast': forecast.predicted_mean})
35
  except Exception as e:
36
  return f"Failed during forecasting: {str(e)}", None
37
 
38
  try:
39
  fig, ax = plt.subplots(figsize=(10, 6))
40
- ax.plot(df['ds'], df['y'], label='Historical Sales', color='blue')
41
- ax.plot(forecast_df['Date'], forecast_df['Sales Forecast'], label='Sales Forecast', color='red', linestyle='--')
 
 
42
  ax.set_xlabel('Date')
43
  ax.set_ylabel('Sales')
44
  ax.set_title('Sales Forecasting with ARIMA')
@@ -51,12 +56,14 @@ def setup_interface():
51
  with gr.Blocks() as demo:
52
  gr.Markdown("## MLCast v1.1 - Intelligent Sales Forecasting System")
53
  file_input = gr.File(label="Upload your store data here (must contain Date and Sales)")
 
 
54
  forecast_button = gr.Button("Forecast Sales")
55
  output_text = gr.Textbox(visible=True)
56
  output_plot = gr.Plot()
57
  forecast_button.click(
58
  forecast_sales,
59
- inputs=[file_input, gr.Slider(1, 60, step=1, label="Forecast Period (days)", value=30)],
60
  outputs=[output_text, output_plot]
61
  )
62
  return demo
 
10
  except Exception as e:
11
  return None, f"Failed to load model: {str(e)}"
12
 
13
+ def forecast_sales(uploaded_file, start_date, end_date, forecast_period=30):
14
  if uploaded_file is None:
15
  return "No file uploaded.", None
16
 
 
24
  df['Date'] = pd.to_datetime(df['Date'])
25
  df = df.rename(columns={'Date': 'ds', 'Sale': 'y'})
26
 
27
+ # Filtrar los datos según el rango de fechas seleccionado por el usuario
28
+ df_filtered = df[(df['ds'] >= pd.to_datetime(start_date)) & (df['ds'] <= pd.to_datetime(end_date))]
29
+
30
  arima_model, error = load_model()
31
  if arima_model is None:
32
  return error, None
33
 
34
  try:
35
+ forecast_index = pd.date_range(start=pd.to_datetime(end_date), periods=forecast_period + 1, freq='D')[1:]
36
  forecast = arima_model.get_forecast(steps=forecast_period)
 
37
  forecast_df = pd.DataFrame({'Date': forecast_index, 'Sales Forecast': forecast.predicted_mean})
38
  except Exception as e:
39
  return f"Failed during forecasting: {str(e)}", None
40
 
41
  try:
42
  fig, ax = plt.subplots(figsize=(10, 6))
43
+ # Dibujar las ventas actuales en rojo
44
+ ax.plot(df_filtered['ds'], df_filtered['y'], label='Actual Sales', color='red')
45
+ # Dibujar la predicción en azul
46
+ ax.plot(forecast_df['Date'], forecast_df['Sales Forecast'], label='Sales Forecast', color='blue', linestyle='--')
47
  ax.set_xlabel('Date')
48
  ax.set_ylabel('Sales')
49
  ax.set_title('Sales Forecasting with ARIMA')
 
56
  with gr.Blocks() as demo:
57
  gr.Markdown("## MLCast v1.1 - Intelligent Sales Forecasting System")
58
  file_input = gr.File(label="Upload your store data here (must contain Date and Sales)")
59
+ start_date_input = gr.Date(label="Start Date")
60
+ end_date_input = gr.Date(label="End Date")
61
  forecast_button = gr.Button("Forecast Sales")
62
  output_text = gr.Textbox(visible=True)
63
  output_plot = gr.Plot()
64
  forecast_button.click(
65
  forecast_sales,
66
+ inputs=[file_input, start_date_input, end_date_input, gr.Slider(1, 60, step=1, label="Forecast Period (days)", value=30)],
67
  outputs=[output_text, output_plot]
68
  )
69
  return demo