harikbab02's picture
Upload folder using huggingface_hub
edb81cf verified
# 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
##from flask_cors import CORS
# Initialize the Flask application
rental_price_predictor_api = Flask("Airbnb Rental Price Predictor")
#CORS(rental_price_predictor_api) # Enable CORS globally
# Load the trained machine learning model
model = joblib.load("rental_price_prediction_model_v1_0.joblib")
# Define a route for the home page (GET request)
@rental_price_predictor_api.get('/')
def home():
return "Welcome to the Airbnb Rental Price Prediction API!"
# Endpoint for single property prediction
@rental_price_predictor_api.post('/v1/rental')
def predict_rental_price():
property_data = request.get_json()
sample = {
'room_type': property_data['room_type'],
'accommodates': property_data['accommodates'],
'bathrooms': property_data['bathrooms'],
'cancellation_policy': property_data['cancellation_policy'],
'cleaning_fee': property_data['cleaning_fee'],
'instant_bookable': property_data['instant_bookable'],
'review_scores_rating': property_data['review_scores_rating'],
'bedrooms': property_data['bedrooms'],
'beds': property_data['beds']
}
input_data = pd.DataFrame([sample])
predicted_log_price = model.predict(input_data)[0]
predicted_price = round(float(np.exp(predicted_log_price)), 2)
return jsonify({'Predicted Price (in dollars)': predicted_price})
# ✅ Fixed endpoint for batch prediction
@rental_price_predictor_api.post('/v1/rentalbatch')
def predict_rental_price_batch():
"""
Expects a CSV file with one property per row.
Returns JSON: a list of dicts with `id` and predicted price.
"""
if 'file' not in request.files:
return jsonify({"error": "No file uploaded"}), 400
file = request.files['file']
input_data = pd.read_csv(file)
if 'id' not in input_data.columns:
return jsonify({"error": "Missing 'id' column in uploaded CSV"}), 400
predicted_log_prices = model.predict(input_data)
predicted_prices = [round(float(np.exp(lp)), 2) for lp in predicted_log_prices]
results = [
{"id": pid, "Predicted Price (in dollars)": price}
for pid, price in zip(input_data['id'], predicted_prices)
]
return jsonify(results)
# Run the Flask application in debug mode if this script is executed directly
if __name__ == '__main__':
rental_price_predictor_api.run(debug=True)