{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "___\n", "\n", "\n", "___\n", "
Copyright by Pierian Data Inc.
\n", "
For more information, visit us at www.pieriandata.com
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Serving a Model as an API\n", "\n", "**NOTE: While we show this inside a Jupyter Notebook, you would probably never deploy something as a notebook in a real-world setting. Everything here is in one cell to reflect that this should be a .py file. We also included a duplicate .py file in this folder.**\n", "\n", "\n", "---\n", "\n", "**NOTE: You will need to install Flask to serve the API: https://flask.palletsprojects.com/en/2.0.x/installation/**\n", "\n", " pip install flask\n", " \n", " or\n", " \n", " conda install flask\n", "\n", "---\n", "\n", "\n", "## api.py (Run this as a script as shown in the video, NOT from within a Jupyter Cell)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "############################\n", "######## IMPORTS ##########\n", "##########################\n", "from flask import Flask, request, jsonify\n", "import joblib\n", "import pandas as pd\n", "\n", "# Create Flask App\n", "app = Flask(__name__)\n", "\n", "\n", "# Create API routing call\n", "@app.route('/predict', methods=['POST'])\n", "def predict():\n", " \n", " # Get JSON Request\n", " feat_data = request.json\n", " # Convert JSON request to Pandas DataFrame\n", " df = pd.DataFrame(feat_data)\n", " # Match Column Na,es\n", " df = df.reindex(columns=col_names)\n", " # Get prediction\n", " prediction = list(model.predict(df))\n", " # Return JSON version of Prediction\n", " return jsonify({'prediction': str(prediction)})\n", "\n", " \n", "\n", "if __name__ == '__main__':\n", "\n", " # LOADS MODEL AND FEATURE COLUMNS\n", " model = joblib.load(\"final_model.pkl\") \n", " col_names = joblib.load(\"column_names.pkl\") \n", "\n", " app.run(debug=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# JSON Post Request\n", "\n", "1. POST to: http://127.0.0.1:5000/predict\n", "2. Select Body\n", "3. Select Raw\n", "4. Select JSON(application/json)\n", "5. Supply JSON for Features:\n", " [{\"TV\":230.1,\"radio\":37.8,\"newspaper\":69.2}]\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }