Spaces:
Runtime error
Runtime error
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)
|