import streamlit as st import requests import json import pandas as pd # Define the backend API URL # Replace with the actual URL of your deployed backend API BACKEND_API_URL_SINGLE = "https://dpanchali-SuperKart-Backend.hf.space/predict_single" BACKEND_API_URL_BATCH = "https://dpanchali-SuperKart-Backend.hf.space/predict_batch" st.title("SuperKart Sales Forecasting") st.write("This application forecasts the sales revenue for product-store combinations.") # Option to choose between single prediction and batch prediction prediction_mode = st.radio("Select Prediction Mode:", ("Single Prediction", "Batch Prediction")) if prediction_mode == "Single Prediction": st.header("Predict Sales for a Single Item") # Input fields for product and store details product_id = st.text_input("Product ID") product_weight = st.number_input("Product Weight", min_value=0.0) product_sugar_content = st.selectbox("Product Sugar Content", ['Low Sugar', 'Regular', 'No Sugar']) product_allocated_area = st.number_input("Product Allocated Area", min_value=0.0) product_type = st.selectbox("Product Type", ['Frozen Foods', 'Dairy', 'Canned', 'Baking Goods', 'Health and Hygiene', 'Snack Foods', 'Meat', 'Hard Drinks', 'Fruits and Vegetables', 'Breads', 'Soft Drinks', 'Breakfast', 'Others', 'Starchy Foods', 'Seafood', 'Household']) product_mrp = st.number_input("Product MRP", min_value=0.0) store_id = st.selectbox("Store ID", ['OUT004', 'OUT003', 'OUT001', 'OUT002']) store_establishment_year = st.number_input("Store Establishment Year", min_value=1900, max_value=2024) store_size = st.selectbox("Store Size", ['Medium', 'High', 'Small']) store_location_city_type = st.selectbox("Store Location City Type", ['Tier 2', 'Tier 1', 'Tier 3']) store_type = st.selectbox("Store Type", ['Supermarket Type2', 'Departmental Store', 'Supermarket Type1', 'Food Mart']) if st.button("Predict Sales"): # Prepare data for the API request input_data = { "Product_Id": product_id, "Product_Weight": product_weight, "Product_Sugar_Content": product_sugar_content, "Product_Allocated_Area": product_allocated_area, "Product_Type": product_type, "Product_MRP": product_mrp, "Store_Id": store_id, "Store_Establishment_Year": store_establishment_year, "Store_Size": store_size, "Store_Location_City_Type": store_location_city_type, "Store_Type": store_type } # Send POST request to the backend API response = requests.post(BACKEND_API_URL_SINGLE, json=input_data) # Display the prediction result if response.status_code == 200: prediction = response.json()['predicted_sales'] st.success(f"Predicted Sales: {prediction:.2f}") else: st.error(f"Error: {response.status_code} - {response.text}") elif prediction_mode == "Batch Prediction": st.header("Predict Sales for a Batch of Items") st.write("Upload a CSV file with product and store details.") uploaded_file = st.file_uploader("Choose a CSV file", type="csv") if uploaded_file is not None: try: # Read the uploaded CSV file into a DataFrame input_df = pd.read_csv(uploaded_file) st.write("Uploaded Data:") st.dataframe(input_df) if st.button("Predict Sales (Batch)"): # Send POST request to the backend API with the CSV file files = {'file': uploaded_file.getvalue()} response = requests.post(BACKEND_API_URL_BATCH, files=files) # Display the prediction result if response.status_code == 200: predictions = response.json()['predicted_sales'] # Display predictions in a DataFrame predictions_df = pd.DataFrame({'Predicted_Sales': predictions}) st.write("Predicted Sales:") st.dataframe(predictions_df) else: st.error(f"Error: {response.status_code} - {response.text}") except Exception as e: st.error(f"Error processing file: {e}")