|
|
|
|
|
import numpy as np
|
|
|
import joblib
|
|
|
import pandas as pd
|
|
|
from flask import Flask, request, jsonify
|
|
|
|
|
|
|
|
|
store_sales_predictor_api = Flask("Store_sales Price Predictor")
|
|
|
|
|
|
|
|
|
model = joblib.load("store_sales_prediction_model_v1_0.joblib")
|
|
|
print(model)
|
|
|
|
|
|
|
|
|
@store_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 Store Sales Prediction API!"
|
|
|
|
|
|
|
|
|
@store_sales_predictor_api.post('/v1/sales')
|
|
|
def predict_store_sales():
|
|
|
"""
|
|
|
This function handles POST requests to the '/v1/sales' endpoint.
|
|
|
It expects a JSON payload containing property details and returns
|
|
|
the predicted sales as a JSON response.
|
|
|
"""
|
|
|
|
|
|
property_data = request.get_json()
|
|
|
|
|
|
|
|
|
sample = {
|
|
|
'Product_Weight':property_data['Product_Weight'],
|
|
|
'Product_Sugar_Content':property_data['Product_Sugar_Content'],
|
|
|
'Product_Allocated_Area':property_data['Product_Allocated_Area'],
|
|
|
'Product_Type':property_data['Product_Type'],
|
|
|
'Product_MRP':property_data['Product_MRP'],
|
|
|
'Store_Establishment_Year':property_data['Store_Establishment_Year'],
|
|
|
'Store_Size':property_data['Store_Size'],
|
|
|
'Store_Location_City_Type':property_data['Store_Location_City_Type'],
|
|
|
'Store_Type':property_data['Store_Type']
|
|
|
}
|
|
|
|
|
|
|
|
|
input_data = pd.DataFrame([sample])
|
|
|
|
|
|
|
|
|
predicted_store_sales = model.predict(input_data)[0]
|
|
|
|
|
|
|
|
|
predicted_sales = predicted_store_sales
|
|
|
|
|
|
|
|
|
predicted_sales = round(float(predicted_sales), 2)
|
|
|
|
|
|
|
|
|
return jsonify({'Predicted Sales (in dollars)': predicted_sales})
|
|
|
|
|
|
|
|
|
|
|
|
@store_sales_predictor_api.post('/v1/salesbatch')
|
|
|
def predict_store_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 sales as a dictionary in the JSON response.
|
|
|
"""
|
|
|
|
|
|
file = request.files['file']
|
|
|
|
|
|
|
|
|
input_data = pd.read_csv(file)
|
|
|
|
|
|
|
|
|
predicted_sales = model.predict(input_data.drop("Product_Id",axis=1)).tolist()
|
|
|
|
|
|
|
|
|
property_ids = input_data['Product_Id'].tolist()
|
|
|
output_dict = dict(zip(property_ids, predicted_sales))
|
|
|
|
|
|
|
|
|
return output_dict
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
store_sales_predictor_api.run(debug=True)
|
|
|
|