2017-10-27 8 views
0

私は、FlaskでPOST json要求を受信し、予測モデルで機能するという2つの論理部分からなるコードを持っています。だからここにはコード表現にどのように見えるか:予測モデルを持つPython関数をFlaskアプリケーションに適用する方法

from flask import Flask 
from flask import request 
import io 
import json 
import pandas as pd 
import numpy as np 
from fbprophet import Prophet 

app = Flask(__name__) 

@app.route('/postjson', methods = ['POST']) 

def postJsonHandler(): 

    print (request.is_json) 
    content = request.get_json() 
    df = pd.io.json.json_normalize(content, ['Days', 'Orders']) 
    print (df) 
    return 'JSON posted' 

app.run(host='0.0.0.0', port= 8090) 

そしてここでは、モデルと機能を備えた一部です:

def TimeSeries(): 

    df['Days'] = pd.to_datetime(df['Days']) 
    df = df.rename(columns={'Days': 'ds', 
        'Orders': 'y'}) 

    my_model = Prophet(interval_width=0.95, yearly_seasonality=False, daily_seasonality=False, weekly_seasonality=True) 

    df['y'] = np.log(df['y']) 

    my_model.fit(df) 

    future_dates = my_model.make_future_dataframe(periods=30) 

    forecast = my_model.predict(future_dates) 

    yhat=forecast.yhat 
    ser=np.exp(yhat) 
    df_upd=pd.DataFrame(ser[-30:]) 
    df_upd.reset_index(drop=True, inplace=True) 
    js=df_upd.to_dict(orient='split') 
    del js['index'] 
    res=json.dumps(js)  

    return res 

私の質問には、次のことをbуます:

  1. どのように転送することができます最初の部分関数postJsonHandler()の結果データフレームdfを第2の部分関数TimeSeries()の入力として使用しますか?
  2. 予測関数のTimeSeries()をFlask環境に統合して、すべてを一度に実行できるようにするにはどうすればいいですか?jsonリクエストを受け取り、それをpandasデータフレームに変換し、予測結果をjson形式で計算し、 。

Big Thanks!

+0

何のライブラリを使用していますか? –

+0

それは質問に関連していません。しかし、私はfbprophetライブラリで一般的なAdditive Model(GAM)を使って時系列の予測をしています。 – HalfPintBoy

+0

あなたがモデルを特定の値にフィットさせているのが分かりましたので、質問がありました。この値はjsonから渡されますか?そうでない場合、私は答えを –

答えて

1

あなたの機能を組み合わせる:あなたのモデルに

from flask import Flask 
from flask import request 
import io 
import json 
import pandas as pd 
import numpy as np 
from fbprophet import Prophet 

app = Flask(__name__) 

my_model = Prophet(interval_width=0.95, yearly_seasonality=False, daily_seasonality=False, weekly_seasonality=True) 

@app.route('/postjson', methods = ['POST']) 

def postJsonHandler(): 

    print (request.is_json) 
    content = request.get_json() 
    df = pd.io.json.json_normalize(content, ['Days', 'Orders']) 
    df['Days'] = pd.to_datetime(df['Days']) 
    df = df.rename(columns={'Days': 'ds', 
        'Orders': 'y'}) 

    df['y'] = np.log(df['y']) 

    my_model.fit(df) 

    future_dates = my_model.make_future_dataframe(periods=30) 

    forecast = my_model.predict(future_dates) 

    yhat=forecast.yhat 
    ser=np.exp(yhat) 
    df_upd=pd.DataFrame(ser[-30:]) 
    df_upd.reset_index(drop=True, inplace=True) 
    js=df_upd.to_dict(orient='split') 
    del js['index'] 
    res=json.dumps(js) 



app.run(host='0.0.0.0', port= 8090 
+0

ああ、それはシンプル - 素晴らしい編集する)私はあなたがFlaskのコンテキストではっきりした関数としてそれをする必要があると思った。理解してくれてありがとう! – HalfPintBoy

+0

予測モデルを使用している場合は、関数の外側に収まることをお勧めします。これは、要求に収束するまで待たなければならないからです。 :) –

関連する問題