scikit-learnのテキトーに作ったモデルを読み込んで、Flaskを使ってWebでもアクセスできるようにしてみる。
前に作ったモデルを読み込んで使う。
バッチ処理だけではなんなので、Webアプリに組み込んでみた。
import json from flask import Flask from flask import request from flask import abort import pandas as pd from sklearn.preprocessing import StandardScaler from sklearn.externals import joblib scaler = joblib.load("foo.scaler") model = joblib.load("foo.learn") app = Flask(__name__) @app.route('/foo', methods=['POST']) def foo(): if not request.json: abort(400) data = pd.DataFrame(request.json) for col in data.loc[:, data.dtypes == 'int64']: data[col] = data[col].astype(float) X = data.loc[:, data.columns].as_matrix() X = scaler.transform(X) y_predict = model.predict(X) return json.dumps(str(y_predict[0])) if __name__ == "__main__": app.run(debug=True, port=5000)
こんなテキトーなものでも動いてるな。
$ curl http://localhost:5000/foo -s -X POST -H "Content-Type: application/json" -d '{"YYYY": ["2018"], "MM": ["08"], "DD": ["05"], "DY": ["0"]}'
試してないけど、jQueryだとこんな感じかな。
$('#btn').click(function() { var d = {"YYYY": ["2018"], "MM": ["08"], "DD": ["05"], "DY": ["0"]}; $.ajax({ url: 'http://localhost:5000/foo', type: 'POST', contentType: 'application/json', data: JSON.stringify(d), }).done(function (data) { console.log(JSON.parse(data)); }); });
バッチ処理だけでは利用用途が限られるのと、未来の予測に必要なデータを作り込むのが大変だけど、こうやってWebで使えるようになると、入力に反応してリアルタイムに使う道が増えるから一気に活用の場所が広がるな。
あと、初めてFlaskを使ったけど、小さいものを作る分にはものすごく楽。