File size: 3,270 Bytes
93b8188 282ead9 93b8188 f5519f5 93b8188 f5519f5 93b8188 9a6bcee 93b8188 282ead9 f5519f5 282ead9 93b8188 f5519f5 93b8188 f5519f5 93b8188 f5519f5 93b8188 f5519f5 282ead9 f5519f5 93b8188 f5519f5 93b8188 f5519f5 282ead9 f5519f5 93b8188 f5519f5 282ead9 f5519f5 | 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 |
# 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 flask app with a name
sales_prediction_api = Flask("Superkart Sales Predictor")
# Load the trained machine learning model
model = joblib.load("superkart_sales_prediction_model.joblib")
# Define a route for the home page
@sales_prediction_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 Superkart Sales Prediction API!"
# Define an endpoint for single property prediction (POST request)
@sales_prediction_api.post("/v1/predict")
def predict_sales():
"""
This function handles POST requests to the '/v1/predict' 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
business_data = request.get_json()
# Extract relevant features from the JSON data
sample = {
'Product_Weight': business_data['Product_Weight'] ,
'Product_Sugar_Content': business_data['Product_Sugar_Content'],
'Product_Allocated_Area': business_data['Product_Allocated_Area'],
'Product_Type': business_data['Product_Type'],
'Product_MRP': business_data['Product_MRP'],
'Store_Establishment_Year': business_data['Store_Establishment_Year'],
'Store_Size': business_data['Store_Size'],
'Store_Age': business_data['Store_Age'],
'Store_Location_City_Type': business_data['Store_Location_City_Type'],
'Store_Type': business_data['Store_Type']
}
# Convert the extracted data into a Pandas DataFrame
input_data = pd.DataFrame([sample])
# Make a sales prediction using the sales model
predicted_sales = model.predict(input_data)[0]
# Convert predicted_price to Python float
predicted_sales = float(predicted_sales)
# Return the actual sales
return jsonify({'Predicted sales': predicted_sales})
if __name__ == "__main__":
sales_prediction_api.run(debug=True)
# Define an endpoint for batch prediction (POST request)
@sales_prediction_api.post("/v1/predict/batch")
def predict_sales_batch():
"""
This function handles POST requests to the '/v1/predict/batch' 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_log_sales = model.predict(input_data).tolist()
# Create a dictionary of predictions with property IDs as keys
Store_Type = input_data['Store_Type'].tolist()
output_dict = dict(zip(Store_Type, predicted_sales)) # Use actual prices
# Return the predictions dictionary as a JSON response
return output_dict
if __name__ == '__main__':
sales_prediction_api.run(debug=False, host='0.0.0.0', port=7860)
|