Apache Sparkによるデータ分析
それではいよいよ、Bluemix上のApache Sparkを使ってデータ分析を行う手順とそのプログラムの説明に入ります。その前に、仮説の検証方法を確認しておきます。
仮説の検証方法
センサーデータの中から異常値を見つける場合、センサーデータの取りうる値がある一定の範囲内であれば、その範囲をはずれたかどうかを見れば判断がつくので、単純な範囲判定で異常値かどうか識別することができます。
しかし、様々な環境が想定される場合、異常値の検出は単純な計算ではできなくなってきます。例えば、ある1機種の室内センサーで世界中をサポートしようとする場合、当然国や季節によって「通常」と思われる温度、湿度は異なります。それではどうすればよいでしょうか。
今回は、機械学習アルゴリズムの一つである「K平均法(K-Means法)」[2]を使って、IoTセンサーシミュレーターから取得したデータ14万個を、最も近い値同士4つのグループに分割します。K平均法は与えられた値の群をそれぞれ近似するグループに分割する統計アルゴリズムです。つまり、K平均法を使ってグループ化した後に、レコードの一部に通常の値と異なる一群がある場合、それは「故障が疑われる」センサーであるといえるはずです。
注
Apache Sparkの立ち上げ
それでは実際にApache Sparkのプログラムを作成していきます。まずはBluemixダッシュボードからApache Sparkをデプロイします。ダッシュボード右上にあるトップメニューから[カタログ]を選択し、カテゴリ「データおよび分析」の中から「Apache Spark」をクリックします。
Apache Sparkデプロイ画面で、バインドするBluemix IoTアプリケーションを選択し、[作成]ボタンを押すとデプロイが開始されます。
ただし、Bluemixの制約で、Bluemix IoTアプリケーションを再ステージする必要があり、その旨のダイアログボックスが表示されます。[再ステージ]ボタンを押して、デプロイを続行します。デプロイには3〜5分程度時間がかかります。
次のような画面が表示されたら、アプリケーションの再ステージとApache Sparkのデプロイが完了しています。
ダッシュボードに戻り、作成したApache Sparkアプリケーションを選択します。
分析プログラムを作成し実行する方法
次に示す画面が、Bluemix上のApache Sparkの初期画面です。今回の分析プログラムは、BluemixのApache Sparkがデフォルトで提供している「Jupyter Notebook」で作成します。Jupyter Notebookは対話的にPythonコードを実行できる(書き込んだコードを随時実行し、結果を出力してくれる)ツールです。
まず、初期画面で[NOTEBOOKS]ボタンをクリックし、Notebookの管理画面に遷移します。
管理画面に移ったら、[NEW NOTEBOOK]ボタンをクリックして新規作成画面に移ります。
新規作成画面ではノートのタイトルを「Name」欄に入力します。今回は「Codezine IoT」としました。タイトルを入力したら、[CREATE NOTEBOOK]ボタンをクリックして、ノートを作成します。
作成直後のノートは、次の画面のようになっています。「In []:」と表示されている右にある欄を「セル」といいます。Jupyter NotebookではこのセルにPythonコードを入力していきます。コードはセルごとに実行できます。
セルのコードを実行するには、対象のセルにフォーカスがある状態で、次のいずれかの操作を行います。
- メニューバーで[Cell]→[Run]を選択する
- ツールバーのボタンをクリックする
- [Shift]+[Enter]キーを押す
例えば、セルに「print “Hello Jupyter”」と入力して実行すると、次のように表示されます。
また、セルにフォーカスがある状態で、上部の「Format」から「Markdown」を選択することで、コメントをMarkdown形式で記述できます。例えば、セルに「## これは実行されない」と入力し、実行すると次のように表示されます。Formatを「Code」にしたまま、セルに「#」からコードを入力すると、Pythonコードのコメントとして認識されます。
Jupyter Notebookの詳細については多くの方が情報を発信していますので、インターネットを検索して勉強してみましょう。
IoT成功のカギを握る:データ管理・分析クラウドサービスのご紹介
現象をデータ化するセンサーやデバイスに注目が集まりがちなIoTですが、価値を生むのはデータ化したその後の処理です。
「多数のセンサー、デバイスからインターネット経由で送信されてくるJSONデータを効率よく保管する」
「保管した大量のデータから未知のパターンを割り出し、ビジネスを成長させる知見を提供する」
こうしたIoTが価値を生むためのサービス・製品がIBMにあります。ぜひ、下記の資料をご覧ください。(編集部)