pragmat commited on
Commit
09020ce
·
verified ·
1 Parent(s): 636387e

Upload folder using huggingface_hub

Browse files
Files changed (1) hide show
  1. app.py +46 -74
app.py CHANGED
@@ -1,92 +1,64 @@
1
- # Import necessary libraries
2
- import numpy as np
3
- import joblib # For loading the serialized model
4
- import pandas as pd # For data manipulation
5
- from flask import Flask, request, jsonify # For creating the Flask API
6
-
7
- # Initialize the Flask application
8
  sales_revenue_predictor_api = Flask("Sales Revenue Predictor")
9
 
10
- # Load the trained machine learning model
11
  model = joblib.load("sales_revenue_prediction_model_v1_0.joblib")
12
 
13
- # Define a route for the home page (GET request)
14
  @sales_revenue_predictor_api.get('/')
15
  def home():
16
- """
17
- This function handles GET requests to the root URL ('/') of the API.
18
- It returns a simple welcome message.
19
- """
20
  return "Welcome to the Sales Revenue Prediction API!"
21
 
22
- # Define an endpoint for single property prediction (POST request)
23
  @sales_revenue_predictor_api.post('/v1/revenue')
24
- def predict_rental_price():
25
- """
26
- This function handles POST requests to the '/v1/revenue' endpoint.
27
- It expects a JSON payload containing property details and returns
28
- the predicted sales revenue as a JSON response.
29
- """
30
- # Get the JSON data from the request body
31
- product_store_data = request.get_json()
32
-
33
- # Extract relevant features from the JSON data
34
- sample = {
35
- 'Product_Id': product_store_data['Product_Id'],
36
- 'Product_Weight': product_store_data['Product_Weight'],
37
- 'Product_Sugar_Content': product_store_data['Product_Sugar_Content'],
38
- 'Product_Allocated_Area': product_store_data['Product_Allocated_Area'],
39
- 'Product_Type': product_store_data['Product_Type'],
40
- 'Product_MRP': product_store_data['Product_MRP'],
41
- 'Store_Id': product_store_data['Store_Id'],
42
- 'Store_Establishment_Year': product_store_data['Store_Establishment_Year'],
43
- 'Store_Location_City_Type': product_store_data['Store_Location_City_Type'],
44
- 'Store_Type': product_store_data['Store_Type']
45
- }
46
-
47
- # Convert the extracted data into a Pandas DataFrame
48
- input_data = pd.DataFrame([sample])
49
-
50
- # Make prediction (get product_store_sales_total )
51
- predicted_product_Store_Sales_Total = model.predict(input_data)[0]
52
-
53
- # Calculate actual revenue
54
- predicted_revenue = np.exp(predicted_product_Store_Sales_Total)
55
-
56
- # Convert predicted_revenue to Python float
57
- predicted_revenue = round(float(predicted_revenue), 2)
58
-
59
- # Return the actual revenue
60
- return jsonify({'Predicted Revenue (in dollars)': predicted_revenue})
61
-
62
-
63
- # Define an endpoint for batch prediction (POST request)
64
  @sales_revenue_predictor_api.post('/v1/revenuebatch')
65
  def predict_revenue_batch():
66
- """
67
- This function handles POST requests to the '/v1/revenuebatch' endpoint.
68
- It expects a CSV file containing property details for multiple properties
69
- and returns the predicted revenue as a dictionary in the JSON response.
70
- """
71
- # Get the uploaded CSV file from the request
72
- file = request.files['file']
73
 
74
- # Read the CSV file into a Pandas DataFrame
75
- input_data = pd.read_csv(file)
76
 
77
- # Make predictions for all properties in the DataFrame (get predicted_product_Store_Sales_Total)
78
- predicted_product_Store_Sales_Total = model.predict(input_data).tolist()
 
79
 
80
- # Calculate actual revenue
81
- predicted_revenue = [round(float(np.exp(log_price)), 2) for log_price in predicted_product_Store_Sales_Total]
82
 
83
- # Create a dictionary of predictions with product IDs as keys
84
- ids = str(input_data['Product_Id']+input_data['Store_Id']).tolist()
85
- output_dict = dict(zip(ids, predicted_revenue)) # Use actual revenue
86
 
87
- # Return the predictions dictionary as a JSON response
88
- return output_dict
89
 
90
- # Run the Flask application in debug mode if this script is executed directly
91
  if __name__ == '__main__':
92
- sales_revenue_predictor_api.run(debug=True)
 
1
+ # Initialize Flask app
 
 
 
 
 
 
2
  sales_revenue_predictor_api = Flask("Sales Revenue Predictor")
3
 
4
+ # Load trained model
5
  model = joblib.load("sales_revenue_prediction_model_v1_0.joblib")
6
 
 
7
  @sales_revenue_predictor_api.get('/')
8
  def home():
 
 
 
 
9
  return "Welcome to the Sales Revenue Prediction API!"
10
 
11
+ # -------- Single prediction ----------
12
  @sales_revenue_predictor_api.post('/v1/revenue')
13
+ def predict_revenue():
14
+ try:
15
+ product_store_data = request.get_json()
16
+
17
+ # Extract required features
18
+ sample = {
19
+ 'Product_Id': product_store_data['Product_Id'],
20
+ 'Product_Weight': product_store_data['Product_Weight'],
21
+ 'Product_Sugar_Content': product_store_data['Product_Sugar_Content'],
22
+ 'Product_Allocated_Area': product_store_data['Product_Allocated_Area'],
23
+ 'Product_Type': product_store_data['Product_Type'],
24
+ 'Product_MRP': product_store_data['Product_MRP'],
25
+ 'Store_Id': product_store_data['Store_Id'],
26
+ 'Store_Establishment_Year': product_store_data['Store_Establishment_Year'],
27
+ 'Store_Location_City_Type': product_store_data['Store_Location_City_Type'],
28
+ 'Store_Type': product_store_data['Store_Type']
29
+ }
30
+
31
+ input_data = pd.DataFrame([sample])
32
+
33
+ # Predict
34
+ predicted_log = model.predict(input_data)[0]
35
+ predicted_revenue = round(float(np.exp(predicted_log)), 2)
36
+
37
+ return jsonify({'Predicted Revenue (in dollars)': predicted_revenue})
38
+
39
+ except Exception as e:
40
+ return jsonify({"error": str(e)}), 500
41
+
42
+
43
+ # -------- Batch prediction ----------
 
 
 
 
 
 
 
 
 
44
  @sales_revenue_predictor_api.post('/v1/revenuebatch')
45
  def predict_revenue_batch():
46
+ try:
47
+ file = request.files['file']
48
+ input_data = pd.read_csv(file)
 
 
 
 
49
 
50
+ predicted_logs = model.predict(input_data).tolist()
51
+ predicted_revenues = [round(float(np.exp(log)), 2) for log in predicted_logs]
52
 
53
+ # Fix: create proper IDs
54
+ ids = (input_data['Product_Id'].astype(str) + "_" + input_data['Store_Id'].astype(str)).tolist()
55
+ output_dict = dict(zip(ids, predicted_revenues))
56
 
57
+ return jsonify(output_dict)
 
58
 
59
+ except Exception as e:
60
+ return jsonify({"error": str(e)}), 500
 
61
 
 
 
62
 
 
63
  if __name__ == '__main__':
64
+ sales_revenue_predictor_api.run(host="0.0.0.0", port=8000, debug=True)