learning / app.py
abhishek1504's picture
Upload folder using huggingface_hub
a29e745 verified
import joblib
import pandas as pd
from flask import Flask, request, jsonify
# Initialize Flask app
sales_api = Flask("Product Store Sales Predictor")
# Load the trained sales prediction model
model = joblib.load("sales_prediction_model_v1_0.joblib")
# ==============================
# Home route
# ==============================
@sales_api.get('/')
def home():
return "Welcome to the Product Store Sales Prediction API!"
# ==============================
# Single record prediction endpoint
# ==============================
@sales_api.post('/v1/sales')
def predict_sales():
try:
# Get JSON data from the request
data = request.get_json()
# Extract all required product/store features from the input data
sample = {
'Product_Code': data['Product_Code'],
'Product_Weight': data['Product_Weight'],
'Product_Sugar_Content': data['Product_Sugar_Content'],
'Product_Allocated_Area': data['Product_Allocated_Area'],
'Product_Type': data['Product_Type'],
'Product_MRP': data['Product_MRP'],
'Store_Id': data['Store_Id'],
'Store_Age': data['Store_Age'],
'Store_Size': data['Store_Size'],
'Store_Location_City_Type': data['Store_Location_City_Type'],
'Store_Type': data['Store_Type']
}
# Convert dictionary to DataFrame
input_df = pd.DataFrame([sample])
# Make prediction using the trained model
prediction = model.predict(input_df).tolist()[0]
# Return JSON response
return jsonify({'Predicted_Product_Store_Sales_Total': prediction})
except Exception as e:
return jsonify({'error': str(e)}), 400
# ==============================
# Batch prediction endpoint
# ==============================
@sales_api.post('/v1/salesbatch')
def predict_sales_batch():
try:
# Get uploaded CSV file from the request
file = request.files['file']
# Read CSV file into DataFrame
input_data = pd.read_csv(file)
# Make sure all required columns exist
required_cols = [
'Product_Code', 'Product_Weight',
'Product_Sugar_Content', 'Product_Allocated_Area', 'Product_Type',
'Product_MRP', 'Store_Id', 'Store_Age',
'Store_Size', 'Store_Location_City_Type', 'Store_Type'
]
missing_cols = set(required_cols) - set(input_data.columns)
if missing_cols:
return jsonify({'error': f"columns are missing: {missing_cols}"}), 400
# Make predictions on the batch
predictions = model.predict(input_data).tolist()
# Add predictions as new column
input_data['Predicted_Product_Store_Sales_Total'] = predictions
# Convert DataFrame to list of dicts for JSON output
result = input_data.to_dict(orient='records')
return jsonify(result)
except Exception as e:
return jsonify({'error': str(e)}), 400
# ==============================
# Run Flask app
# ==============================
if __name__ == '__main__':
sales_api.run(debug=True)