File size: 3,647 Bytes
24904e7
 
 
 
 
 
 
aeafa70
24904e7
 
929aab9
24904e7
 
 
 
 
 
 
 
 
 
 
 
b55fd1a
24904e7
 
 
 
 
 
 
 
 
 
ef881fd
 
 
 
 
24904e7
ef881fd
 
 
95d58bc
 
24904e7
 
 
 
 
 
af00d9b
 
24904e7
af00d9b
 
24904e7
 
11f4338
24904e7
6c1b50d
24904e7
 
b55fd1a
24904e7
 
 
 
 
 
 
 
 
 
 
 
af00d9b
8c22812
3c0ca38
24904e7
af00d9b
 
24904e7
 
635df8a
24904e7
 
 
8c22812
 
24904e7
 
 
 
1
2
3
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# Import necessary libraries
import numpy as np
import joblib  # For loading the serialized model
import pandas as pd  # For data manipulation
from flask import Flask, request, jsonify  # For creating the Flask API

# Initialize the Flask application
superkart_product_store_sales_total_predictor_api = Flask("SuperKart Product Store Sales Total Predictor")

# Load the trained machine learning model
model = joblib.load("superkart_sales_prediction_model_v1_0.joblib")

# Define a route for the home page (GET request)
@superkart_product_store_sales_total_predictor_api.get('/')
def home():
    """
    This function handles GET requests to the root URL ('/') of the API.
    It returns a simple welcome message.
    """
    return "Welcome to the SuperKart Product Store Sales Total Prediction API!"

# Define an endpoint for single property prediction (POST request)
@superkart_product_store_sales_total_predictor_api.post('/v1/salestotal')
def predict_sales():
    """
    This function handles POST requests to the '/v1/salestotal' endpoint.
    It expects a JSON payload containing property details and returns
    the predicted Totalsales as a JSON response.
    """
    # Get the JSON data from the request body
    property_data = request.get_json()

    # Extract relevant features from the JSON data
    sample = {
    'Product_Type': property_data['Product_Type'],
    'Product_Sugar_Content': property_data['Product_Sugar_Content'],
    'Product_Weight': property_data['Product_Weight'],
    'Product_MRP': property_data['Product_MRP'],
    'Product_Allocated_Area': property_data['Product_Allocated_Area'],
    
    'Store_Id': property_data['Store_Id'],  # included only if needed for grouping
    'Store_Type': property_data['Store_Type'],
    'Store_Size': property_data['Store_Size'],
    'Store_Location_City_Type': property_data['Store_Location_City_Type'],
    'Store_Establishment_Year': property_data['Store_Establishment_Year']
}


    # Convert the extracted data into a Pandas DataFrame
    input_data = pd.DataFrame([sample])

    # Make direct prediction
    predicted_price = model.predict(input_data)[0]

    # Round to two decimals
    predicted_price = round(float(predicted_price), 2)

    # Return the actual price
    return jsonify({'Predicted Sales (₹)': predicted_price})


# Define an endpoint for batch prediction (POST request)
@superkart_product_store_sales_total_predictor_api.post('/v1/salesbatch')
def predict_sales_batch():
    """
    This function handles POST requests to the '/v1/salesbatch' endpoint.
    It expects a CSV file containing property details for multiple properties
    and returns the predicted rental prices as a dictionary in the JSON response.
    """
    # Get the uploaded CSV file from the request
    file = request.files['file']

    # Read the CSV file into a Pandas DataFrame
    input_data = pd.read_csv(file)

    # Make predictions for all properties in the DataFrame (get log_prices)
    predicted_price = model.predict(input_data).tolist()

    
    # Calculate actual prices
    predicted_prices = [round(float(price), 2) for price in predicted_price]


    # Create a dictionary of predictions with property IDs as keys
    property_ids = input_data['Store_Id'].tolist()  # Assuming 'id' is the property ID column
    output_dict = dict(zip(property_ids, predicted_prices))  # Use actual prices

    # Return the predictions dictionary as a JSON response
    return jsonify(output_dict)


# Run the Flask application in debug mode if this script is executed directly
if __name__ == '__main__':
    superkart_product_store_sales_total_predictor_api.run(debug=True)