Elasticsearch と kibanaで fitbitのデータを可視化する

はじめに {#はじめに}

今まで収集されたデータを分析して、よい精度を出すことに躍起になっていたのだけれども、世の中そんなに簡単にデータが集まっているわけではない。データを集めることは結構大変なのではと思った。なので、データ分析の前にデータ収集を自前でやってみようと思ったのだった。

何がデータ収集の対象がいいだろうと考えたのだけれども、自分のライフログを収集するのがまずは取っ掛かりとしては面白そうだ。これを英語ではQuantified Self というらしい。自分の行動履歴をマッシュアップで表示できると楽しいのではないか??

そんな空想を実現するOSSを調べていると、どうやらElasticsearch と kibanaというツールが使えそうだ。というわけで、このツールをいじってみることにした。

Elasticsearchとkibanaについて {#elasticsearchとkibanaについて}

まずは、2つのツールの関係と機能について。Elasticsearchとは、データの全文検索エンジン。そして、kibanaは そのフロントエンドツール。どちらも同じ会社 elastic が開発しているOSS。

Elasticsearchのインストールと実行 {#elasticsearchのインストールと実行}

ダウンロードは以下から。

Ubuntuなのでdebを選択してDownloadします。

$ sudo dpkg -i elasticsearch-6.1.2.deb
$ systemctl start elasticsearch.service

これで、https://localhost:9200 にアクセスして、以下のレスポンスを受ければOK.

{
  "name" : "6UGX_mB",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "Ih-924HvSr6AxH7CMfWlZg",
  "version" : {
    "number" : "6.1.2",
    "build_hash" : "5b1fea5",
    "build_date" : "2018-01-10T02:35:59.208Z",
    "build_snapshot" : false,
    "lucene_version" : "7.1.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

kibanaのインストールと実行 {#kibanaのインストールと実行}

kibanaのインストールは以下から。

Ubuntuなのでdebを選択してDownloadします。

$ sudo dpkg -i kibana-6.1.2-amd64.deb
$ systemctl start kibana.service

これで、https://localhost:5601 にアクセスして、welcome画面がでればOK.

CSV データを elasticsearchに投入する {#csv-データを-elasticsearchに投入する}

理想的にはリアルタイムでデータ収集したいが、まずは手元にある静的なデータを使う。まずはじめは、fitbitから得た心拍数をグラフ化してみよう。

Fitbit Apiとpythonで心拍数の取得をする | Futurismo

kibanaからCSVデータを投入する機能は、一時保留になっている。そこで、logstashを利用する。

設定ファイルを以下のように書く。

input {
  file {
    path => "/home/tsu-nera/repo/python-scripts/heartbeat.csv"
    type => "csv"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}

filter {
  csv {
    columns => ["time","value"]
    separator => ","
  }
  date{
    match => ["time" , "yyyy-MM-dd HH:mm:ss"]
    target => "time"
  }
  mutate {
    convert => { "value" => "integer" }
  }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "heartbeat"
  }
}

コマンドラインから実行。

$ logstash -f conf.conf 

これで、elasticsearchにcsvのデータが投入された。Webから確認してみよう。

kibanaでfitbitの心拍数をグラフ化 {#kibanaでfitbitの心拍数をグラフ化}

kibanaにアクセスして、index patterns を作成する。 作成が完了すると、Management > Index Patterns から作成した name を持つ データが並んでいるのが確認できる。

タブから Visualize を選択し、 Lineを選択。折れ線グラフを作成する。以下のようにY軸とX軸を設定。

すると、以下のような折れ線グラフができる。素晴らしい。

おわりに {#おわりに}

この記事を書いた背景は、以下の記事にとても影響を受けている。

この記事みたいに、自分もライフログを収集してみたい。心拍数はつまらないな。まずは、睡眠と体重からかなー。