Academic Works

Building an API with Python Flask

import flask, json, csv
from flask import request, jsonify


try:
    # For Python 3.0 and later
    from urllib.request import urlopen
except ImportError:
    # Fall back to Python 2's urllib2
    from urllib2 import urlopen


if __name__ == "__main__":
    # Create API with Flask

    app = flask.Flask(__name__)
    app.config["DEBUG"] = True

    @app.route('/', methods=['GET'])
    def home():
        return(
            '''<h1>3A Machine Learning Prediction Service</h1>
                    <p>Specify MDR Type by</p>
                    <p>/ML?type=MRSA</p>
                    <p>or</p>
                    <p>/ML?type=VRE</p>'''
        )

    @app.route('/ML', methods=['GET'])
    def mainprocedure():
        if 'type' in request.args:
            whatuserwants = request.args['type']

            # whose model do you want to fit?
            mdr = "MDR_TYPE_" + str(whatuserwants)

            # numeric features except use_days
            num_list = ["AGE_YR", "PRIOR_LOS", "OP_VISIT_1YR"]

            # ditinguish data using date
            date = "20180917"

            # Get new data
            url = ("ftp://id:pass@192.168.1.234/")
            js = get_jsonparsed_data(url)

            # address
            pwd = "./" + mdr + "_" + date + "/"

            # Get new data and merge
            jsdf = pd.read_json(js)
            mdrdata = pd.read_csv('./MDR_data/'+date+'_'+whatuserwants+'.csv')
            jsdf = pd.concat([jsdf, mdrdata])
            jsdf.to_csv(pwd + 'newdata.csv', index=False)

            # import data, threshold : nearZeroVar()
            newD = preprocessing(pwd+'newdata.csv', num_list, mdr)
            x_new, y_new = newD.input_data(threshold=None)
            x_new = x_new.iloc[:1,]
            x_new = data.use_scale(x_new)

            # predict input data
            pwd = './' + str(mdr) + "_20180917/normal/lgb_RUS.sav"
            # Get new data from 3A
            temp = pickle.load(open(pwd, 'rb'))
            os.remove(pwd+'newdata.csv')
            return jsonify(list(temp.predict_proba(x_new.iloc[:1, :])[:, 1]))

        else:
            return "Error: No MDR type specified."
    app.run()