File size: 3,856 Bytes
71b29fe
 
 
 
 
 
 
64697cb
71b29fe
 
a200f76
71b29fe
 
64697cb
71b29fe
 
 
 
 
64697cb
71b29fe
 
64697cb
 
71b29fe
 
 
 
 
 
 
 
 
 
64697cb
71b29fe
 
 
 
 
 
 
 
 
 
 
 
 
 
64697cb
71b29fe
 
64697cb
71b29fe
 
 
64697cb
71b29fe
 
 
64697cb
71b29fe
 
 
64697cb
71b29fe
 
64697cb
71b29fe
 
 
 
 
 
 
 
 
 
64697cb
71b29fe
 
64697cb
71b29fe
 
64697cb
 
71b29fe
 
 
 
 
 
64697cb
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
# 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_sales_predictor_api = Flask("Super kart Sales Predictor")

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

# Define a route for the home page (GET request)
@superkart_sales_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 Super Kart Sales Prediction API!"

# Define an endpoint for single property prediction (POST request)
@superkart_sales_predictor_api.post('/v1/rental')
def predict_superkart_sales():
    """
    This function handles POST requests to the '/v1/rental' endpoint.
    It expects a JSON payload containing property details and returns
    the predicted rental price 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_Id': property_data['Product_Id'],
        'Product_Weight': property_data['Product_Weight'],
        'Product_MRP': property_data['Product_MRP'],
        'Product_Sugar_Content': property_data['Product_Sugar_Content'],
        'Product_Type': property_data['Product_Type'],
        'Store_Size': property_data['Store_Size'],
        'Store_Location_City_Type': property_data['Store_Location_City_Type'],
        'Store_Type': property_data['Store_Type']
    }

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

    # Make prediction (get log_price)
    predicted_superkart_sales_price = model.predict(input_data)[0]

    # Calculate actual price
    predicted_price = np.exp(predicted_superkart_sales_price)

    # Convert predicted_price to Python float
    predicted_price = round(float(predicted_price), 2)
    # The conversion above is needed as we convert the model prediction (sale revenue) to actual price using np.exp, which returns predictions as NumPy float32 values.
    # When we send this value directly within a JSON response, Flask's jsonify function encounters a datatype error

    # Return the actual price
    return jsonify({'Predicted Sale Revenue (in dollars)': predicted_price})


# Define an endpoint for batch prediction (POST request)
@superkart_sales_predictor_api.post('/v1/superKartRevenuebatch')
def predict_rental_price_batch():
    """
    This function handles POST requests to the '/v1/superKartRevenuebatch' 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_superkart_sales_revenue = model.predict(input_data).tolist()

    # Calculate actual prices
    predicted_prices = [round(float(np.exp(log_price)), 2) for log_price in predicted_superkart_sales_revenue]

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

    # Return the predictions dictionary as a JSON response
    return output_dict

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