ankitgoyal022 commited on
Commit
64697cb
·
verified ·
1 Parent(s): 71b29fe

Upload folder using huggingface_hub

Browse files
Files changed (3) hide show
  1. Dockerfile +1 -1
  2. app.py +17 -17
  3. requirements.txt +4 -0
Dockerfile CHANGED
@@ -13,4 +13,4 @@ RUN pip install --no-cache-dir --upgrade -r requirements.txt
13
  # - `-w 4`: Uses 4 worker processes for handling requests
14
  # - `-b 0.0.0.0:7860`: Binds the server to port 7860 on all network interfaces
15
  # - `app:app`: Runs the Flask app (assuming `app.py` contains the Flask instance named `app`)
16
- CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:7860", "app:super_kart_predictor_api"]
 
13
  # - `-w 4`: Uses 4 worker processes for handling requests
14
  # - `-b 0.0.0.0:7860`: Binds the server to port 7860 on all network interfaces
15
  # - `app:app`: Runs the Flask app (assuming `app.py` contains the Flask instance named `app`)
16
+ CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:7860", "app:superkart_sales_predictor_api"]
app.py CHANGED
@@ -5,23 +5,23 @@ 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
- rental_price_predictor_api = Flask("Super kart Predictor")
9
 
10
  # Load the trained machine learning model
11
  model = joblib.load("super_kart_prediction_model_v1_0.joblib")
12
 
13
  # Define a route for the home page (GET request)
14
- @rental_price_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 Airbnb Rental Price Prediction API!"
21
 
22
  # Define an endpoint for single property prediction (POST request)
23
- @rental_price_predictor_api.post('/v1/rental')
24
- def predict_rental_price():
25
  """
26
  This function handles POST requests to the '/v1/rental' endpoint.
27
  It expects a JSON payload containing property details and returns
@@ -32,8 +32,8 @@ def predict_rental_price():
32
 
33
  # Extract relevant features from the JSON data
34
  sample = {
 
35
  'Product_Weight': property_data['Product_Weight'],
36
- 'Product_Allocated_Area': property_data['Product_Allocated_Area'],
37
  'Product_MRP': property_data['Product_MRP'],
38
  'Product_Sugar_Content': property_data['Product_Sugar_Content'],
39
  'Product_Type': property_data['Product_Type'],
@@ -47,25 +47,25 @@ def predict_rental_price():
47
  input_data = pd.DataFrame([sample])
48
 
49
  # Make prediction (get log_price)
50
- predicted_log_price = model.predict(input_data)[0]
51
 
52
  # Calculate actual price
53
- predicted_price = np.exp(predicted_log_price)
54
 
55
  # Convert predicted_price to Python float
56
  predicted_price = round(float(predicted_price), 2)
57
- # The conversion above is needed as we convert the model prediction (log price) to actual price using np.exp, which returns predictions as NumPy float32 values.
58
  # When we send this value directly within a JSON response, Flask's jsonify function encounters a datatype error
59
 
60
  # Return the actual price
61
- return jsonify({'Predicted Price (in dollars)': predicted_price})
62
 
63
 
64
  # Define an endpoint for batch prediction (POST request)
65
- @rental_price_predictor_api.post('/v1/rentalbatch')
66
  def predict_rental_price_batch():
67
  """
68
- This function handles POST requests to the '/v1/rentalbatch' endpoint.
69
  It expects a CSV file containing property details for multiple properties
70
  and returns the predicted rental prices as a dictionary in the JSON response.
71
  """
@@ -76,18 +76,18 @@ def predict_rental_price_batch():
76
  input_data = pd.read_csv(file)
77
 
78
  # Make predictions for all properties in the DataFrame (get log_prices)
79
- predicted_log_prices = model.predict(input_data).tolist()
80
 
81
  # Calculate actual prices
82
- predicted_prices = [round(float(np.exp(log_price)), 2) for log_price in predicted_log_prices]
83
 
84
  # Create a dictionary of predictions with property IDs as keys
85
- property_ids = input_data['id'].tolist() # Assuming 'id' is the property ID column
86
- output_dict = dict(zip(property_ids, predicted_prices)) # Use actual prices
87
 
88
  # Return the predictions dictionary as a JSON response
89
  return output_dict
90
 
91
  # Run the Flask application in debug mode if this script is executed directly
92
  if __name__ == '__main__':
93
- rental_price_predictor_api.run(debug=True)
 
5
  from flask import Flask, request, jsonify # For creating the Flask API
6
 
7
  # Initialize the Flask application
8
+ superkart_sales_predictor_api = Flask("Super kart Sales Predictor")
9
 
10
  # Load the trained machine learning model
11
  model = joblib.load("super_kart_prediction_model_v1_0.joblib")
12
 
13
  # Define a route for the home page (GET request)
14
+ @superkart_sales_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 Super Kart Sales Prediction API!"
21
 
22
  # Define an endpoint for single property prediction (POST request)
23
+ @superkart_sales_predictor_api.post('/v1/rental')
24
+ def predict_superkart_sales():
25
  """
26
  This function handles POST requests to the '/v1/rental' endpoint.
27
  It expects a JSON payload containing property details and returns
 
32
 
33
  # Extract relevant features from the JSON data
34
  sample = {
35
+ 'Product_Id': property_data['Product_Id'],
36
  'Product_Weight': property_data['Product_Weight'],
 
37
  'Product_MRP': property_data['Product_MRP'],
38
  'Product_Sugar_Content': property_data['Product_Sugar_Content'],
39
  'Product_Type': property_data['Product_Type'],
 
47
  input_data = pd.DataFrame([sample])
48
 
49
  # Make prediction (get log_price)
50
+ predicted_superkart_sales_price = model.predict(input_data)[0]
51
 
52
  # Calculate actual price
53
+ predicted_price = np.exp(predicted_superkart_sales_price)
54
 
55
  # Convert predicted_price to Python float
56
  predicted_price = round(float(predicted_price), 2)
57
+ # The conversion above is needed as we convert the model prediction (sale revenue) to actual price using np.exp, which returns predictions as NumPy float32 values.
58
  # When we send this value directly within a JSON response, Flask's jsonify function encounters a datatype error
59
 
60
  # Return the actual price
61
+ return jsonify({'Predicted Sale Revenue (in dollars)': predicted_price})
62
 
63
 
64
  # Define an endpoint for batch prediction (POST request)
65
+ @superkart_sales_predictor_api.post('/v1/superKartRevenuebatch')
66
  def predict_rental_price_batch():
67
  """
68
+ This function handles POST requests to the '/v1/superKartRevenuebatch' endpoint.
69
  It expects a CSV file containing property details for multiple properties
70
  and returns the predicted rental prices as a dictionary in the JSON response.
71
  """
 
76
  input_data = pd.read_csv(file)
77
 
78
  # Make predictions for all properties in the DataFrame (get log_prices)
79
+ predicted_superkart_sales_revenue = model.predict(input_data).tolist()
80
 
81
  # Calculate actual prices
82
+ predicted_prices = [round(float(np.exp(log_price)), 2) for log_price in predicted_superkart_sales_revenue]
83
 
84
  # Create a dictionary of predictions with property IDs as keys
85
+ product_ids = input_data['Product_Id'].tolist() # Assuming 'id' is the property ID column
86
+ output_dict = dict(zip(product_ids, predicted_prices)) # Use actual prices
87
 
88
  # Return the predictions dictionary as a JSON response
89
  return output_dict
90
 
91
  # Run the Flask application in debug mode if this script is executed directly
92
  if __name__ == '__main__':
93
+ superkart_sales_predictor_api.run(debug=True)
requirements.txt CHANGED
@@ -1,8 +1,12 @@
1
  pandas==2.2.2
2
  numpy==2.0.2
3
  scikit-learn==1.6.1
 
 
4
  xgboost==2.1.4
5
  joblib==1.4.2
 
 
6
  Werkzeug==2.2.2
7
  flask==2.2.2
8
  gunicorn==20.1.0
 
1
  pandas==2.2.2
2
  numpy==2.0.2
3
  scikit-learn==1.6.1
4
+ matplotlib==3.10.0
5
+ seaborn==0.13.2
6
  xgboost==2.1.4
7
  joblib==1.4.2
8
+ requests==2.32.3
9
+ huggingface_hub==0.30.1
10
  Werkzeug==2.2.2
11
  flask==2.2.2
12
  gunicorn==20.1.0