Science2018.12.5ツイートTopicsどんなモデルを作りたいのかAPI化Webサービス化まとめこんにちは。2018の5日目の記事です。データ分析をする際に、短時間でモデルを構築して動くモノを作りたい、ということがしばしばあります。テスト、レビュー、デプロイ、、、と本格的なシステム開発を行うのではなく、「とりあえず」的なアウトプットがしたい場合です。アウトプットとして要望されることが多いのがAPIWebアプリケーションですが、R言語ならいずれも簡単に提供できます。どんなモデルを作りたいのかまず、必要なパッケージを読み込みます。library(tidyverse)library(plumber)library(shiny)Rに組みこまれているcarsというデータセットがあります。1920年代に観測されたデータで、車の速度(speed)と停止する距離(dist)を示すものです。speedの単位はマイル/時、distの単位はフィートです。1)と散布図を作ると、そこそこ線形な関係がありそうです。datasets::cars)モデルをRda形式で保存します。"carsmodel.Rda")モデルに対してspeedを指定するとdistの推測値がかえる関数を定義します。21.74499のように推測値が返ってくるわけですが、これをWebアプリケーション化やAPI化するのが、今回やりたいことです。APIを作ることにします。以下のコードをlmpred.Rというファイル名で保存します。return(dist)}これは、GETメソッドに対応しているspeedのデフォルト値は1である都度carsmodel.Rdaに保存されているモデルをロードしているdistという変数を与えられたspeedの値から導出しているdistを関数の帰り値としているといったことを意味しています。次に以下のコードをコンソールから実行します。http://127.0.0.1:8000/swagger/とメッセージが表示されます。そこで、改めてブラウザからhttp://localhost:8000/lmpred?speed=10にアクセスすると、distの推測値である21.745が返っていることが確認できます。http://localhost:8000/lmpred?speed=10を実行すると、同じ結果が得られます。次に、shinyパッケージを使ってWebサービスを作ります。最近、RとShinyで作るWebアプリケーションという好著も出たことで、shinyは以前より使いやすくなりました。shinyの基本的な使い方は、ユーザーインタフェースを提供するui.Rと処理系を提供するserver.Rの二つを組み合わせてWebサービスを作ることです。以下のコードをui.Rとして保存します(文字コードはUTF-8にしてください。うまく動かない場合は日本語をやめてメッセージを半角文字にしてみてください)。))))次に、以下のコードをserver.Rとして保存します。})})以上2ファイルをlmpredというフォルダに保存した上で、以下のコードをコンソールから実行します。runApp("lmpred")すると、このような画面になり、speedを入力すると、distの予測結果が表示されます。まとめ線形回帰モデルというあまりにも単純な例ではありましたが、ひとつのRdaファイルを用いてAPIとWebサービスの二つを作ってみました。複雑なモデルであっても、本質的には同じアプローチでサービス化ができるので、簡単なデプロイをしてみたい方はぜひ参考にしてください。