ansarkar commited on
Commit
e93b182
·
verified ·
1 Parent(s): d3c2151

Upload folder using huggingface_hub

Browse files
Files changed (3) hide show
  1. Dockerfile +10 -11
  2. app.py +37 -50
  3. requirements.txt +1 -12
Dockerfile CHANGED
@@ -1,16 +1,15 @@
1
  FROM python:3.9-slim
2
 
3
- # Set the working directory inside the container
4
- WORKDIR /app #Complete the code to mention the command in Docker to set the working directory
5
 
6
- # Copy all files from the current directory to the container's working directory
7
- COPY . .
8
 
9
- # Install dependencies from the requirements file without using cache to reduce image size
10
- RUN pip install --no-cache-dir --upgrade -r requirements.txt #Complete the code to mention the command in Docker to install dependencies
11
 
12
- # Define the command to start the application using Gunicorn with 4 worker processes
13
- # - `-w 4`: Uses 4 worker processes for handling requests
14
- # - `-b 0.0.0.0:7860`: Binds the server to port 7860 on all network interfaces
15
- # - `app:app`: Runs the Flask app (assuming `app.py` contains the Flask instance named `app`)
16
- CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:7860", "app:superkart_api"]
 
1
  FROM python:3.9-slim
2
 
3
+ # Set the working directory inside the container to /app
4
+ WORKDIR /app
5
 
6
+ # Copy all files from the current directory on the host to the container's /app directory
7
+ COPY . .
8
 
9
+ # Install Python dependencies listed in requirements.txt
10
+ RUN pip3 install -r requirements.txt
11
 
12
+ # Define the command to run the Streamlit app on port 8501 and make it accessible externally
13
+ CMD ["streamlit", "run", "app.py", "--server.port=8501", "--server.address=0.0.0.0", "--server.enableXsrfProtection=false"]
14
+
15
+ # NOTE: Disable XSRF protection for easier external access in order to make batch predictions
 
app.py CHANGED
@@ -1,51 +1,38 @@
1
 
2
- # Import necessary libraries
3
- import numpy as np
4
- import joblib # For loading the serialized model
5
- import pandas as pd # For data manipulation
6
- from flask import Flask, request, jsonify # For creating the Flask API
7
-
8
- # Initialize Flask app with a name
9
- superkart_api = Flask("Predict")
10
-
11
- # Load the trained sales prediction model
12
- model = joblib.load("superkart.joblib") #Complete the code to define the location of the serialized model
13
-
14
- # Define a route for the home page
15
- @superkart_api.get('/')
16
- def home():
17
- return "Welcome to SuperKart sales prediction!" #Complete the code to define a welcome message
18
-
19
- # Define an endpoint to predict churn for a single customer
20
- @superkart_api.post('/v1/predict')
21
- def predict_sales():
22
- # Get JSON data from the request
23
- data = request.get_json()
24
-
25
- # Extract relevant customer features from the input data. The order of the column names matters.
26
- sample = {
27
- 'Product_Weight': data['Product_Weight'],
28
- 'Product_Sugar_Content': data['Product_Sugar_Content'],
29
- 'Product_Allocated_Area': data['Product_Allocated_Area'],
30
- 'Product_MRP': data['Product_MRP'],
31
- 'Store_Size': data['Store_Size'],
32
- 'Store_Location_City_Type': data['Store_Location_City_Type'],
33
- 'Store_Type': data['Store_Type'],
34
- 'Product_Id_char': data['Product_Id_char'],
35
- 'Store_Age_Years': data['Store_Age_Years'],
36
- 'Product_Type_Category': data['Product_Type_Category']
37
- }
38
-
39
- # Convert the extracted data into a DataFrame
40
- input_data = pd.DataFrame([sample])
41
-
42
- # Make a sales prediction using the trained model
43
- prediction = model.predict(input_data).tolist()[0]
44
-
45
- # Return the prediction as a JSON response
46
- return jsonify({'Sales': prediction})
47
-
48
-
49
- # Run the Flask app in debug mode
50
- if __name__ == '__main__':
51
- superkart_api.run(debug=True)
 
1
 
2
+ import streamlit as st
3
+ import requests
4
+
5
+ st.title("Superkart Prediction")
6
+
7
+ # Input fields for product and store data
8
+ Product_Weight = st.number_input("Product Weight", min_value=0.0, value=12.66)
9
+ Product_Sugar_Content = st.selectbox("Product Sugar Content", ["Low Sugar", "Regular", "No Sugar", "reg"])
10
+ Product_Allocated_Area = st.number_input("Product Allocated Area", min_value=0.0, max_value=1.0, value=0.027)
11
+ Product_MRP = st.number_input("Product MRP", min_value=0.0, value=117.08)
12
+ Store_Establishment_Year = st.number_input("Store Establishment Year", min_value=1900, max_value=2026, value=2009)
13
+ Store_Size = st.selectbox("Store Size", ["Small", "Medium", "High"])
14
+ Store_Location_City_Type = st.selectbox("Store Location City Type", ["Tier 1", "Tier 2", "Tier 3"])
15
+ Store_Type = st.selectbox("Store Type", ["Departmental Store", "Supermarket Type1", "Supermarket Type2", "Food Mart"])
16
+ Product_Type = st.selectbox("Product Type", ['Frozen Foods', 'Dairy', 'Canned', 'Baking Goods', 'Health and Hygiene', 'Snack Foods', 'Soft Drinks', 'Household', 'Fruits and Vegetables', 'Meat', 'Hard Drinks', 'Breads', 'Breakfast', 'Starchy Foods', 'Seafood', 'Others'])
17
+
18
+ product_data = {
19
+ "Product_Weight": Product_Weight,
20
+ "Product_Sugar_Content": Product_Sugar_Content,
21
+ "Product_Allocated_Area": Product_Allocated_Area,
22
+ "Product_MRP": Product_MRP,
23
+ "Store_Establishment_Year": Store_Establishment_Year,
24
+ "Store_Size": Store_Size,
25
+ "Store_Location_City_Type": Store_Location_City_Type,
26
+ "Store_Type": Store_Type,
27
+ "Product_Type": Product_Type
28
+ }
29
+
30
+ if st.button("Predict", type='primary'):
31
+ # Replace 'ansarkar' with your Hugging Face username and 'superkart' with your backend space name
32
+ response = requests.post("https://ansarkar-superkart.hf.space/v1/predict", json=product_data)
33
+ if response.status_code == 200:
34
+ result = response.json()
35
+ predicted_sales = result["Sales"]
36
+ st.write(f"Predicted Product Store Sales Total: ₹{predicted_sales:.2f}")
37
+ else:
38
+ st.error(f"Error in API request: {response.status_code} - {response.text}")
 
 
 
 
 
 
 
 
 
 
 
 
 
requirements.txt CHANGED
@@ -1,13 +1,2 @@
1
- pandas==2.2.2
2
- numpy==2.0.2
3
- scikit-learn==1.6.1
4
- seaborn==0.13.2
5
- joblib==1.4.2
6
- xgboost==2.1.4
7
- joblib==1.4.2
8
- Werkzeug==2.2.2
9
- flask==2.2.2
10
- gunicorn==20.1.0
11
  requests==2.32.3
12
- uvicorn[standard]
13
- streamlit==1.43.2
 
 
 
 
 
 
 
 
 
 
 
1
  requests==2.32.3
2
+ streamlit==1.45.0