import joblib import pandas as pd from flask import Flask, request, jsonify import numpy as np # Initialize Flask app sales_forecast_api = Flask("SuperKart Sales Forecast Predictor") # Load the trained SuperKart sales model model = joblib.load("superkart_sales_model_v1_0.joblib") # Define a route for the home page @sales_forecast_api.get('/') def home(): return "Welcome to the SuperKart Sales Revenue Forecasting API!" # Define an endpoint to predict sales for a single product-store combination @sales_forecast_api.post('/v1/sales') def predict_sales(): # Get JSON data from the request sales_data = request.get_json() # Extract relevant features from the input data # Note: Store_Age will be calculated from Store_Establishment_Year current_year = 2024 store_age = current_year - sales_data['Store_Establishment_Year'] sample = { 'Product_Weight': sales_data['Product_Weight'], 'Product_Sugar_Content': sales_data['Product_Sugar_Content'], 'Product_Allocated_Area': sales_data['Product_Allocated_Area'], 'Product_Type': sales_data['Product_Type'], 'Product_MRP': sales_data['Product_MRP'], 'Store_Establishment_Year': sales_data['Store_Establishment_Year'], 'Store_Size': sales_data['Store_Size'], 'Store_Location_City_Type': sales_data['Store_Location_City_Type'], 'Store_Type': sales_data['Store_Type'], 'Store_Age': store_age } # Convert the extracted data into a DataFrame input_data = pd.DataFrame([sample]) # Make a prediction using the trained model prediction = model.predict(input_data).tolist()[0] # Return the prediction as a JSON response return jsonify({'Predicted_Sales_Total': prediction}) # Define an endpoint to predict sales for a batch of product-store combinations @sales_forecast_api.post('/v1/salesbatch') def predict_sales_batch(): # Get the uploaded CSV file from the request file = request.files['file'] # Read the file into a DataFrame input_data = pd.read_csv(file) # Calculate Store_Age if not present if 'Store_Age' not in input_data.columns: current_year = 2024 input_data['Store_Age'] = current_year - input_data['Store_Establishment_Year'] # Make predictions for the batch data predictions = model.predict(input_data).tolist() # Add predictions to the DataFrame input_data['Predicted_Sales_Total'] = predictions # Convert results to dictionary result = input_data.to_dict(orient="records") return jsonify(result) # Run the Flask app in debug mode if __name__ == '__main__': sales_forecast_api.run(debug=True)