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)