Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import pandas as pd | |
| import plotly.express as px | |
| # 1. Page Configuration | |
| st.set_page_config(page_title="Store Sales Forecast", page_icon="🛒", layout="wide") | |
| # 2. Title and Description | |
| st.title("🛒 Store Sales Forecasting") | |
| st.markdown(""" | |
| This application visualizes the 16-day future sales predictions for retail stores in Ecuador. | |
| The forecasts are generated using an **XGBoost** machine learning model trained on historical data, | |
| incorporating features like seasonality, oil prices, and holidays. | |
| """) | |
| # 3. Load Data Function (Cached for performance) | |
| def load_data(): | |
| # Load the CSV file we prepared earlier | |
| df = pd.read_csv("src/dashboard_data.csv") | |
| # Ensure date column is in datetime format | |
| if 'date' in df.columns: | |
| df['date'] = pd.to_datetime(df['date']) | |
| return df | |
| try: | |
| df = load_data() | |
| # --- SIDEBAR (FILTERS) --- | |
| st.sidebar.header("Filter Options") | |
| # Store Selector | |
| if 'store_nbr' in df.columns: | |
| store_list = sorted(df['store_nbr'].unique()) | |
| selected_store = st.sidebar.selectbox("Select Store Number", store_list) | |
| else: | |
| st.error("Column 'store_nbr' not found in dataset.") | |
| st.stop() | |
| # Family Selector | |
| if 'family' in df.columns: | |
| family_list = sorted(df['family'].unique()) | |
| selected_family = st.sidebar.selectbox("Select Product Category (Family)", family_list) | |
| # --- MAIN CONTENT --- | |
| # Filter data based on user selection | |
| filtered_data = df[(df['store_nbr'] == selected_store) & (df['family'] == selected_family)] | |
| # Sort by date for proper plotting | |
| if 'date' in filtered_data.columns: | |
| filtered_data = filtered_data.sort_values('date') | |
| # Plot Chart using Plotly | |
| st.subheader(f"📅 Forecast for Store #{selected_store} - Category: {selected_family}") | |
| fig = px.line(filtered_data, x='date', y='Predicted_Sales', | |
| title='16-Day Sales Prediction Trend', | |
| labels={'Predicted_Sales': 'Predicted Sales Volume', 'date': 'Date'}, | |
| markers=True) | |
| # --- DÜZELTİLEN KISIM (FIXED PART) --- | |
| # Renk ayarını 'update_traces' içine aldık (Layout hatasını çözer) | |
| fig.update_traces(line_color='#00CC96') | |
| # Layout ayarları sadece hover (üzerine gelince çıkan bilgi) için kaldı | |
| fig.update_layout(hovermode="x unified") | |
| # ------------------------------------- | |
| st.plotly_chart(fig, use_container_width=True) | |
| # Show Data Table | |
| with st.expander("View Detailed Forecast Data"): | |
| st.dataframe(filtered_data[['id', 'date', 'store_nbr', 'family', 'Predicted_Sales']]) | |
| else: | |
| st.warning("Date column is missing. Cannot plot the graph.") | |
| except FileNotFoundError: | |
| st.error("Error: 'dashboard_data.csv' not found. Please upload the file to Hugging Face Files.") | |
| except Exception as e: | |
| st.error(f"An unexpected error occurred: {e}") |