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)
|