CodeZine(コードジン)

特集ページ一覧

IoTセンサーデータを使ったD3.jsによるグラフ化と機械学習モデルによる故障予測

Bluemixではじめてみよう! 「IoT→クラウド」データ活用アプリケーション開発 【第3回】

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
目次

「過去データを元に機械学習モデルを用いて故障予測を行う」アプリケーション(続き)

Predictive Analyticsサービスの登録

WebブラウザでBluemixのコンソールにログインし、ダッシュボードから本稿のサンプルアプリケーション(codezineIoTdemo)の画面を表示させて「+サービスまたはAPIの追加」を選択します(画面57)。

画面57:Bluemixのダッシュボードで本稿のアプリケーションを表示させ「+サービスまたはAPIの追加」を選択
画面57:Bluemixのダッシュボードで本稿のアプリケーションを表示させ「+サービスまたはAPIの追加」を選択

カタログ画面が表示されるので、「Predictive Analytics」を選択します(画面58)。

画面58:カタログ画面で「Predictive Analytics」を選択
画面58:カタログ画面で「Predictive Analytics」を選択

Predictive Analyticsの画面になるので、右側の「アプリ」に本稿のサンプルアプリケーション「CodeZine IoT demo Predict」が指定されていることを確認し、サービス名を任意で設定して「作成」ボタンをクリックします(画面59)。

画面59:本稿のサンプルアプリケーションが指定されていることを確認し「作成」ボタンをクリック
画面59:本稿のサンプルアプリケーションが指定されていることを確認し「作成」ボタンをクリック

再ステージングが必要といわれた場合は再ステージングしてください(画面60)。

画面60:再ステージングが必要であることを伝えるメッセージ
画面60:再ステージングが必要であることを伝えるメッセージ

しばらく待つと「アプリは稼働しています」と表示されるので、左のメニュー「サービス」に表示されている「Predictive Analytics」をクリックします(画面61)。

画面61:「Predictive Analytics」をクリック
画面61:「Predictive Analytics」をクリック

Predictive Analyticsモジュールの画面が表示されます。先ほど入力した名前になっていることと、画面下部に「No Models, Yet」と表示されていることを確認し、画面下部の「New Model Stream」の「Select File」をクリックし、SPSS Modelerで作成した予測モデルファイル(サンプルファイル「secom_predict_model.str」)をアップロードします(画面62)。

画面62:SPSS Modelerで作成した予測モデルファイルをアップロード
画面62:SPSS Modelerで作成した予測モデルファイルをアップロード

Context Idを聞かれるので、任意の名前を付けて「Deploy」をクリックします(画面63)。

画面63:Context Idに任意の名前を付ける
画面63:Context Idに任意の名前を付ける

すると、モデル登録されて「Manage Models」にて一覧表示に追加されます。「Deployed Model Usage」でPredictive Analyticsの利用状況(何回スコアリングが実施されたのか)がわかります。Freeプランでは毎月5000回までとなっています。

Predictive AnalyticsをAPIとして利用するための認証情報を確認します。画面左のメニューから「環境変数」を選択します(画面64)。

画面64:画面左のメニューから「環境変数」を選択
画面64:画面左のメニューから「環境変数」を選択

環境変数に、先ほど作成したPredictive Analyticsの認証情報が追加されています。アプリケーションからAPI利用をする際にaccess_keyurlを利用するのでコピーしておきます(画面65)。

画面65:先ほど作成したPredictive Analyticsの認証情報。`access_key`と`url`をコピーしておく
画面65:先ほど作成したPredictive Analyticsの認証情報。`access_key`と`url`をコピーしておく

Predictive Analyticsを呼び出して利用する

Node-REDのフローエディターを起動し、画面66のフローを作成してください。本記事のサンプルファイル「codezine_iotdemo_nodered_app3-a.json」をインポートすることもできます。

画面66:「Predictive Analyticsを呼び出して利用する」フロー
画面66:「Predictive Analyticsを呼び出して利用する」フロー

各ノードをダブルクリックして設定を確認・編集します。

① input >「Inject」ノード

デフォルトのままでOKです。

② function >「function」ノード
  • Name: 任意(画面66では「POST Parameter」)
  • Function: 後に示すコードを入力

Function欄に入力するコード

msg.payload = {
    "tablename":"SECOM_DEMO_DATA.csv", 
    "header":["seq_no","failure","temperature","humidity","objecttemperature"], 
    "data":[["test1","",25,50,40]]
};

return msg;

API呼び出しにあたって、headerのほうで"seq_no""failure"も含める必要があるようですが、この2つの項目は予測には用いないのでダミーのデータで構いません。"temperature"以下3つの項目はとりあえず動作確認したいので直データを指定します。値は任意です。

画面67:function >「function」ノードの設定
画面67:function >「function」ノードの設定
③ function >「http request」ノード

両側に端子がついているノードです。

  • Method: POST
  • URL:「認証情報URL/score/コンテキストID?accesskey=認証情報アクセスキー」という形式で入力
    【例】
    https://palbyp.pmservice.ibmcloud.com/pm/v1/score/codezinepredict1?accesskey=tsiabababZ1TxWvabbabtstabbxogqabbimc/BuB1U284a+WZII4a8o25pvJYhSGzcpmqjabbmlwVtsabbPiHxGxQ3pIogjgEOjN0TGtsTcL0h32gVzPabwMbmHXNpi+HL4aabtst4aPabGZUtstXsOpV+04Mu/ngj4ajy8qabbab4WCLtst4ITE1+S/abb4LjOWjtsZg8ZPabs6B3E=)
  • 「Use basic authentication?」にチェックなし
  • Return: a parsed JSON object
  • Name: 任意(画面66では「[post] Predict API」)
画面68:function >「http request」ノードの設定
画面68:function >「http request」ノードの設定
④ output >「debug」ノード

デフォルトのままでOKです。

ここまで確認・編集できたら動作確認を行います。Deploy後、debugノードの出力をONにしてInjectノードをクリックすると処理が実施されます。Predictive Analytics APIの呼び出しに成功すると、Debugタブに以下のようなAPI結果が表示されます。

msg.payload : array [1]
[ { "header": [ "temperature", "humidity", "objecttemperature", "$XF-failure", "$XFC-failure" ], "data": [ [ 25, 50, 40, "yes", 0.4914826378710285 ] ] } ]

入力した値("temperature", "humidity", "objecttemperature")に基づいて予測した結果("$XF-failure", "$XFC-failure")が出力されます。$XF-failureは予測した故障の有無(yes/no)、$XFC-failureは予測に対する確信度(0~1)です。

予測結果が取得できることが確認できたので、あとはセンサーデータの値をパラメーターとしてAPIを呼び出すように変更してあげればOKです。

Predictive Analyticsの詳しい説明については、ドキュメント「Predictive Analytics入門」を参照してください。

WebアプリケーションからのPredictive Analytics呼び出し

いよいよラストです。ブラウザにてNode-REDフローエディターを開いて、画面69に示すフローを作成してください。本記事の添付ファイル(codezine_iotdemo_nodered_all.json)をインポートすることもできます。

画面69:「WebアプリケーションからのPredictive Analytics呼び出し」フロー
画面69:「WebアプリケーションからのPredictive Analytics呼び出し」フロー

各ノードをダブルクリックして設定を確認・編集していきます。

① input >「http」ノード

Injectノード(Timestamp)と差し替えます。

  • Method: GET
  • URL: /predict
  • Name: 任意(画面69では「[get]/predict」)
画面70:caption
画面70:input >「http」ノードの設定
② function >「function」ノード
  • Name: 任意(画面69では「POST Parameter」)
  • Function: 後に示すコードを入力。これにより、HTTPリクエストのパラメーターで気温・湿度・機器温度を指定できるようにします。

Function欄に入力するコード

msg.payload = {
  "tablename":"SECOM_DEMO_DATA.csv", 
  "header":["seq_no","failure","temperature","humidity","objecttemperature"], 
  "data":[["test1","",
      msg.payload.param_temp,
      msg.payload.param_hum,
      msg.payload.param_objt
  ]]

return msg;
画面71:caption
画面71:function >「function」ノードの設定
③ output >「http response」ノード

Predicitive Analyticsを呼び出しているpostノード(Predict API)からつなげます。設定はデフォルトのままでOKです。

また、「Webアプリケーション」フローも次のように修正します。

④ 「Template」ノード(「index.html」)
  • Template: 後に示すコードを入力(サンプルファイル「index_app3-b.html」)

Template欄に入力するコード(▼クリックするとプルダウンしてコードが表示されます)

以下、コードの追加部分の説明です。

96~98行目:故障予測の結果を表示する領域です。

323~339行目:Predictive Analyticsを呼び出す処理です。WebSocketで受け取った最新のデータをHTTPリクエストのパラメーターとしてセットして呼び出しています。

では、確認が終わったらDeployして動作確認します。Webブラウザで、本プリケーションのルートURL(例 http://codezineiotdemo.mybluemix.net/)にアクセスします。画面72のようなグラフが表示された後に「WebSocket接続」ボタンを押して、しばらく待ってグラフが更新され、故障予測結果が表示されれば成功です。

画面72:このような故障予測結果が表示されれば成功
画面72:このような故障予測結果が表示されれば成功

これで今回のアプリケーション構築は完了です。いかがでしたでしょうか? 比較的簡単にクラウド上に保存したIoTセンサーデータを可視化したり、分析したりすることができたと思います。それでは皆さんも、Let's enjoy IoT!!

IoT成功のカギを握る:データ管理・分析クラウドサービスのご紹介

現象をデータ化するセンサーやデバイスに注目が集まりがちなIoTですが、価値を生むのはデータ化したその後の処理です。

「多数のセンサー、デバイスからインターネット経由で送信されてくるJSONデータを効率よく保管する」
「保管した大量のデータから未知のパターンを割り出し、ビジネスを成長させる知見を提供する」

こうしたIoTが価値を生むためのサービス・製品がIBMにあります。ぜひ、下記の資料をご覧ください。(編集部)



  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

バックナンバー

連載:Bluemixではじめてみよう! 「IoT→クラウド」データ活用アプリケーション開発
All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5