Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import pandas as pd | |
| import requests | |
| # ================================== | |
| # Streamlit UI | |
| # ================================== | |
| st.set_page_config(page_title="Product Store Sales Prediction", layout="centered") | |
| st.title("Product Store Sales Prediction App") | |
| st.write("Predict total sales for a product in a store using machine learning.") | |
| # ================================== | |
| # Input Fields — Single Record | |
| # ================================== | |
| st.header("Single Prediction") | |
| # --- Product Features --- | |
| st.subheader("Product Details") | |
| Product_Code = st.selectbox( | |
| "Product Code", | |
| ["NC", "FD", "RC"], | |
| index=0 | |
| ) | |
| Product_Weight = st.number_input("Product Weight (kg)", min_value=0.0, step=0.01, value=14.80) | |
| Product_Sugar_Content = st.selectbox( | |
| "Sugar Content", | |
| ["Low Sugar", "No Sugar", "Regular"] | |
| ) | |
| Product_Allocated_Area = st.number_input("Allocated Area (sq.m)", min_value=0.0, step=0.001, value=0.016) | |
| Product_Type = st.selectbox( | |
| "Product Type", | |
| ["Food", "Health and Hygiene", "Household", "Soft Drinks"] | |
| ) | |
| Product_MRP = st.number_input("Maximum Retail Price (MRP)", min_value=0.0, step=0.1, value=140.53) | |
| # --- Store Features --- | |
| st.subheader("Store Details") | |
| Store_Id = st.selectbox( | |
| "Store ID", | |
| ["OUT001", "OUT002", "OUT003", "OUT004", "OUT005"] | |
| ) | |
| Store_Age = st.number_input("Store Age (years)", min_value=0, step=1, value=20) | |
| Store_Size = st.selectbox("Store Size", ["Small", "Medium", "High"]) | |
| Store_Location_City_Type = st.selectbox("City Type", ["Tier 1", "Tier 2", "Tier 3"]) | |
| Store_Type = st.selectbox( | |
| "Store Type", | |
| ["Supermarket Type1", "Supermarket Type2", "Food Mart", "Departmental Store"] | |
| ) | |
| # ================================== | |
| # Predict Button — Single | |
| # ================================== | |
| if st.button("Predict Sales", type="primary"): | |
| input_data = { | |
| "Product_Code": Product_Code, | |
| "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_Age": Store_Age, | |
| "Store_Size": Store_Size, | |
| "Store_Location_City_Type": Store_Location_City_Type, | |
| "Store_Type": Store_Type | |
| } | |
| API_URL = "https://abhishek1504-learning.hf.space/v1/sales" | |
| with st.spinner("Fetching prediction..."): | |
| response = requests.post(API_URL, json=input_data) | |
| if response.status_code == 200: | |
| result = response.json() | |
| if "Predicted_Product_Store_Sales_Total" in result: | |
| predicted_sales = result["Predicted_Product_Store_Sales_Total"] | |
| st.success(f"Predicted Total Sales: **{predicted_sales:.2f} units**") | |
| else: | |
| st.error(f"Unexpected response format: {result}") | |
| else: | |
| st.error(f"API Error {response.status_code}: {response.text}") | |
| # ================================== | |
| # Batch Prediction Section | |
| # ================================== | |
| st.header("Batch Prediction") | |
| file = st.file_uploader("Upload CSV file (must include same column names as model)", type=["csv"]) | |
| if file is not None: | |
| if st.button("Predict for Batch", type="primary"): | |
| API_BATCH_URL = "https://abhishek1504-learning.hf.space/v1/salesbatch" | |
| with st.spinner("Processing batch predictions..."): | |
| response = requests.post(API_BATCH_URL, files={"file": file}) | |
| if response.status_code == 200: | |
| result = response.json() | |
| try: | |
| df_result = pd.DataFrame(result) | |
| st.dataframe(df_result, use_container_width=True) | |
| st.success("Batch predictions completed successfully.") | |
| except Exception: | |
| st.write(result) | |
| else: | |
| st.error(f"API Error {response.status_code}: {response.text}") | |