Spaces:
				
			
			
	
			
			
		Sleeping
		
	
	
	
			
			
	
	
	
	
		
		
		Sleeping
		
	Upload folder using huggingface_hub
Browse files- app.py +66 -95
- requirements.txt +0 -9
    	
        app.py
    CHANGED
    
    | @@ -1,95 +1,66 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
            import  | 
| 3 | 
            -
            import  | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
                     | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
                 | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
            @super_kart_sales_predictor_api.post('/v1/salesbatch')
         | 
| 68 | 
            -
            def predict_rental_price_batch():
         | 
| 69 | 
            -
                """
         | 
| 70 | 
            -
                This function handles POST requests to the '/v1/rentalbatch' endpoint.
         | 
| 71 | 
            -
                It expects a CSV file containing property details for multiple properties
         | 
| 72 | 
            -
                and returns the predicted rental prices as a dictionary in the JSON response.
         | 
| 73 | 
            -
                """
         | 
| 74 | 
            -
                # Get the uploaded CSV file from the request
         | 
| 75 | 
            -
                file = request.files['file']
         | 
| 76 | 
            -
             | 
| 77 | 
            -
                # Read the CSV file into a Pandas DataFrame
         | 
| 78 | 
            -
                input_data = pd.read_csv(file)
         | 
| 79 | 
            -
             | 
| 80 | 
            -
                # Make predictions for all properties in the DataFrame (get log_prices)
         | 
| 81 | 
            -
                predicted_log_sales = model.predict(input_data).tolist()
         | 
| 82 | 
            -
             | 
| 83 | 
            -
                # Calculate actual prices
         | 
| 84 | 
            -
                predicted_sales = [round(float(np.exp(log_price)), 2) for log_price in predicted_log_sales]
         | 
| 85 | 
            -
             | 
| 86 | 
            -
                # Create a dictionary of predictions with property IDs as keys
         | 
| 87 | 
            -
                property_ids = input_data['id'].tolist()  # Assuming 'id' is the property ID column
         | 
| 88 | 
            -
                output_dict = dict(zip(property_ids, predicted_sales))  # Use actual prices
         | 
| 89 | 
            -
             | 
| 90 | 
            -
                # Return the predictions dictionary as a JSON response
         | 
| 91 | 
            -
                return output_dict
         | 
| 92 | 
            -
             | 
| 93 | 
            -
            # Run the Flask application in debug mode if this script is executed directly
         | 
| 94 | 
            -
            if __name__ == '__main__':
         | 
| 95 | 
            -
                rental_price_predictor_api.run(debug=True)
         | 
|  | |
| 1 | 
            +
            import streamlit as st
         | 
| 2 | 
            +
            import pandas as pd
         | 
| 3 | 
            +
            import requests
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            model_root_url = "https://bala-ai-KartSalesPredictionBackend.hf.space/v1/kart"  # Base URL of the deployed Flask API on Hugging Face Spaces
         | 
| 6 | 
            +
             | 
| 7 | 
            +
             | 
| 8 | 
            +
            # Set the title of the Streamlit app
         | 
| 9 | 
            +
            st.title("Super Kart Sales Prediction")
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            # Section for online prediction
         | 
| 12 | 
            +
            st.subheader("Online Prediction")
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            # Collect user input for property features
         | 
| 15 | 
            +
            Product_Sugar_Content = st.selectbox("Room Type", ["Entire home/apt", "Private room", "Shared room"])
         | 
| 16 | 
            +
            Product_Type = st.number_input("Accommodates (Number of guests)", min_value=1, value=2)
         | 
| 17 | 
            +
            Store_Establishment_Year = st.number_input("Bathrooms", min_value=1, step=1, value=2)
         | 
| 18 | 
            +
            Store_Location_City_Type = st.selectbox("Cancellation Policy (kind of cancellation policy)", ["strict", "flexible", "moderate"])
         | 
| 19 | 
            +
            Store_Id = st.selectbox("Cleaning Fee Charged?", ["True", "False"])
         | 
| 20 | 
            +
            Product_MRP = st.selectbox("Instantly Bookable?", ["False", "True"])
         | 
| 21 | 
            +
            Product_Weight = st.number_input("Review Score Rating", min_value=0.1, max_value=100.0, step=1.0, value=90.0)
         | 
| 22 | 
            +
            Store_Size = st.number_input("Bedrooms", min_value=0, step=1, value=1)
         | 
| 23 | 
            +
            Product_Allocated_Area = st.number_input("Area", min_value=0.1, step=1, value=1)
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            # Convert user input into a DataFrame
         | 
| 26 | 
            +
            input_data = pd.DataFrame([{
         | 
| 27 | 
            +
             | 
| 28 | 
            +
              "Product_Sugar_Content": Product_Sugar_Content,
         | 
| 29 | 
            +
              "Product_Type": Product_Type,
         | 
| 30 | 
            +
              "Store_Establishment_Year": Store_Establishment_Year,
         | 
| 31 | 
            +
              "Store_Location_City_Type": Store_Location_City_Type,
         | 
| 32 | 
            +
              "Store_Id": Store_Id,
         | 
| 33 | 
            +
              "Product_MRP": Product_MRP,
         | 
| 34 | 
            +
              "Product_Weight": Product_Weight,
         | 
| 35 | 
            +
              "Store_Size": Store_Size,
         | 
| 36 | 
            +
              "Store_Type" : Store_Type,
         | 
| 37 | 
            +
              "Product_Allocated_Area" : Product_Allocated_Area
         | 
| 38 | 
            +
             | 
| 39 | 
            +
             | 
| 40 | 
            +
            }])
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            # Make prediction when the "Predict" button is clicked
         | 
| 43 | 
            +
            if st.button("Predict"):
         | 
| 44 | 
            +
                response = requests.post(model_root_url, json=input_data.to_dict(orient='records')[0])  # Send data to Flask API
         | 
| 45 | 
            +
                if response.status_code == 200:
         | 
| 46 | 
            +
                    prediction = response.json()['Predicted Price (in dollars)']
         | 
| 47 | 
            +
                    st.success(f"Predicted Rental Price (in dollars): {prediction}")
         | 
| 48 | 
            +
                else:
         | 
| 49 | 
            +
                    st.error("Error making prediction.")
         | 
| 50 | 
            +
             | 
| 51 | 
            +
            # Section for batch prediction
         | 
| 52 | 
            +
            st.subheader("Batch Prediction")
         | 
| 53 | 
            +
             | 
| 54 | 
            +
            # Allow users to upload a CSV file for batch prediction
         | 
| 55 | 
            +
            uploaded_file = st.file_uploader("Upload CSV file for batch prediction", type=["csv"])
         | 
| 56 | 
            +
             | 
| 57 | 
            +
            # Make batch prediction when the "Predict Batch" button is clicked
         | 
| 58 | 
            +
            if uploaded_file is not None:
         | 
| 59 | 
            +
                if st.button("Predict Batch"):
         | 
| 60 | 
            +
                    response = requests.post("https://<username>-<repo_id>.hf.space/v1/rentalbatch", files={"file": uploaded_file})  # Send file to Flask API
         | 
| 61 | 
            +
                    if response.status_code == 200:
         | 
| 62 | 
            +
                        predictions = response.json()
         | 
| 63 | 
            +
                        st.success("Batch predictions completed!")
         | 
| 64 | 
            +
                        st.write(predictions)  # Display the predictions
         | 
| 65 | 
            +
                    else:
         | 
| 66 | 
            +
                        st.error("Error making batch prediction.")
         | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | 
    	
        requirements.txt
    CHANGED
    
    | @@ -1,11 +1,2 @@ | |
| 1 | 
             
            pandas==2.2.2
         | 
| 2 | 
            -
            numpy==2.0.2
         | 
| 3 | 
            -
            scikit-learn==1.6.1
         | 
| 4 | 
            -
            xgboost==2.1.4
         | 
| 5 | 
            -
            joblib==1.4.2
         | 
| 6 | 
            -
            Werkzeug==2.2.2
         | 
| 7 | 
            -
            flask==2.2.2
         | 
| 8 | 
            -
            gunicorn==20.1.0
         | 
| 9 | 
             
            requests==2.28.1
         | 
| 10 | 
            -
            uvicorn[standard]
         | 
| 11 | 
            -
            streamlit==1.43.2
         | 
|  | |
| 1 | 
             
            pandas==2.2.2
         | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 2 | 
             
            requests==2.28.1
         | 
|  | |
|  |