Elasticsearch/kibana/x-packで気象データでMachine Learningしてみる

  • 5
    Like
  • 0
    Comment

先日これを見て、自分も何かデータを使ってMachine Learningを体験してみたいと思っていたところ、こちらの記事で日経の株価データを使ってやられていたので、違うネタで自分もやってみることにしました。

環境

  • Elasticsearch: 5.6.1
  • kibana: 5.6.1

使用したデータは、ここの気象データを適当に地域を選んでcsvデータをダウンロードしました。

Elasticsearch/kibanaの設定

dockerを使ってやりました。最初docker-hubのを使ってやろうと思ったのですが、データを入れて計算させるぞって時にElasticsearch側でエラーがおきて上手く出来なかったので、elasticが出しているimageを使って環境を作ることにしました。

docker-compose.ymlは以下のようにしました。

  1 version: '2'
  2 services:
  3   elasticsearch:
  4     image: docker.elastic.co/elasticsearch/elasticsearch:5.6.1
  5     container_name: elasticsearch
  6     hostname: elasticsearch
  7     environment:
  8       - "http.host=0.0.0.0"
  9       - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
 10       - "xpack.security.enabled=false"
 11     ports:
 12       - 9200:9200
 13   kibana:
 14     image: docker.elastic.co/kibana/kibana:5.6.1
 15     container_name: kibana
 16     links:
 17       - elasticsearch
 18     ports:
 19       - 5601:5601

10行目の「xpack.security.enabled=false」を追加しないとkibanaを起動した時にベーシック認証が掛かってしまうので、今回は明示的に外しました。

あとはElasticsearchにデータを入れたら準備は終わりです。

実際に動かしてみる

今回は「weather」というindexにてElasticsearchにデータを登録しました。

スクリーンショット 2017-09-25 0.09.45.png

indexを設定したら、Machine Learningに移動します。

スクリーンショット_2017-09-25_0_11_56.png

 「Create new job」を選択し、次の画面で「Single Metric Job」を選択します。
そしてindexとしてweatherを選択します。

スクリーンショット 2017-09-25 0.18.24.png

ここで計算方法(平均値、合計値など)、どのカラムを使用するか、そしてどのくらいの間隔でデータを見るかを設定します。今回3日おきの最高気温を見ることにしました(年々暑いですからね)。
すると以下のようなグラグがみれました。

スクリーンショット 2017-09-25 0.23.42.png

そして「Create Job」を押すと計算処理が走り次のように結果異常値と判断された箇所が色つけされます

スクリーンショット 2017-09-25 0.26.03.png

より詳細を見るために「View Results」ボタンを押すと細かい結果を見ることが出来ます。

スクリーンショット 2017-09-25 0.28.02.png

所感

自分の場合、最初elaticのdockerを使わずに試行錯誤していたので、なかなか上手く環境が作れなかったが、素直にelasticの方を使ったら割とすんなりと出来ました。こうなると色々とデータを入れてみたくなりました。