IvanStudent's picture
Guardar mis cambios locales
05f3172
raw
history blame
3.07 kB
import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA
import pickle
# T铆tulo de la interfaz
st.title("MLCast v1.1 - Intelligent Sales Forecasting System")
# Subir archivo CSV
uploaded_file = st.file_uploader("Upload your store data here (must contain Date and Sales)", type="csv")
# Verificar si se subi贸 un archivo
if uploaded_file is not None:
# Leer el archivo CSV
df = pd.read_csv(uploaded_file)
# Verificar si las columnas necesarias est谩n presentes
if 'Date' in df.columns and 'Sale' in df.columns:
st.success("File uploaded successfully!")
# Mostrar una vista previa de los primeros datos
st.write(df.head())
# Convertir la columna 'Date' en tipo datetime
df['Date'] = pd.to_datetime(df['Date'])
# Renombrar las columnas para ARIMA
df_arima = df.rename(columns={'Date': 'ds', 'Sale': 'y'})
# Cargar el modelo ARIMA desde el archivo
with open('arima_sales_model.pkl', 'rb') as f:
arima_model = pickle.load(f)
# Realizar la predicci贸n para los pr贸ximos 30 d铆as (ajustable)
forecast_period = 30
forecast = arima_model.get_forecast(steps=forecast_period)
forecast_index = pd.date_range(df['Date'].max(), periods=forecast_period + 1, freq='D')[1:]
# Crear un DataFrame con las predicciones
forecast_df = pd.DataFrame({
'Date': forecast_index,
'Sales Forecast': forecast.predicted_mean
})
# Graficar los resultados
fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(df['Date'], df['Sale'], label='Historical Sales', color='blue')
ax.plot(forecast_df['Date'], forecast_df['Sales Forecast'], label='Sales Forecast', color='red', linestyle='--')
ax.set_xlabel('Date')
ax.set_ylabel('Sales')
ax.set_title('Sales Forecasting with ARIMA')
ax.legend()
# Mostrar la gr谩fica
st.pyplot(fig)
# Opcional: Ajuste del rango de fechas para el pron贸stico
st.sidebar.title("Adjust Forecast Range")
start_date = st.sidebar.date_input('Start Date', df['Date'].min())
end_date = st.sidebar.date_input('End Date', df['Date'].max())
# Filtrar los datos seg煤n el rango seleccionado
filtered_df = df[(df['Date'] >= pd.to_datetime(start_date)) & (df['Date'] <= pd.to_datetime(end_date))]
# Graficar el rango ajustado
st.subheader(f"Sales Data from {start_date} to {end_date}")
fig_filtered, ax_filtered = plt.subplots(figsize=(10, 6))
ax_filtered.plot(filtered_df['Date'], filtered_df['Sale'], label=f'Sales from {start_date} to {end_date}')
ax_filtered.set_xlabel('Date')
ax_filtered.set_ylabel('Sale')
ax_filtered.set_title(f'Sales Forecasting from {start_date} to {end_date}')
ax_filtered.legend()
st.pyplot(fig_filtered)
else:
st.error("The uploaded file must contain at least 'Date' and 'Sales' columns.")