27 Jan 2018, 10:42

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

はじめに

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

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

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

Elasticsearchとkibanaについて

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

Elasticsearchのインストールと実行

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

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

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

これで、http://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のインストールは以下から。

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

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

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

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

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

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

おわりに

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

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

27 Jan 2018, 07:41

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

はじめに

fitbit ionicを購入しました! fitbit Charge, altaに続いて、3台目の購入となります。ここまでくると私もfitbit マニア??

購入の動機は、睡眠の深度を測る機能が欲しかったから。てっきり、浅い睡眠で起こしてくれる機能がついたと思ったのだけれども、それはなかった(T_T)。

別の理由は、fitbit初のスマートウォッチということで、ディベロッパーとしてなにか応援できないかと思ったから。というわけで、このHackableなガジェットをハックします! Let’s Hack begin。

Fitbit APIをつかってみる

データの取得をするために、Fitbit APIを利用する。

まずは、API の IDを取得する。

https://dev.fitbit.com/login からログインして、 REGISTER AN APP を選択。情報を入力する。

  • Application Name 適当
  • Description 適当
  • Application Website 適当
  • Organization 適当
  • Organization Website 適当
  • OAuth 2.0 Application Type Personalを選択
  • Callback URL http://127.0.0.1:8080/ と入力
  • Default Access Type Read & Write を選択

次に、Access Tokenを取得する。取得するために、Pythonのツール、python-fitbitを利用する。

Access Tokenと Refresh Tokenをメモする。以下の4つはプログラムで必要になるのでメモする。

  • Client ID
  • Client Secret
  • Access Token
  • Refresh Token

スクリプトの作成

心拍数を取得するスクリプト。

import fitbit
import pandas as pd

CLIENT_ID =  "xxx"
CLIENT_SECRET  = "xxxx"
ACCESS_TOKEN =  "xxxx"
REFRESH_TOKEN =  "xxxx"

DATE = "2018-01-26"
client = fitbit.Fitbit(CLIENT_ID, CLIENT_SECRET,
                       access_token=ACCESS_TOKEN,
                       refresh_token=REFRESH_TOKEN)

stats = client.intraday_time_series('activities/heart', DATE, detail_level='1min')
heart_beat = stats["activities-heart-intraday"]["dataset"]

heart_df = pd.DataFrame.from_dict(heart_beat)
heart_df.index = pd.to_datetime([DATE + " " + t for t in heart_df.time])
heart_df.drop(["time"], axis=1, inplace=True)
heart_df.plot(y="value", figsize=(20,5))
import fitbit
import pandas as pd

CLIENT_ID = #
CLIENT_SECRET  = #
ACCESS_TOKEN =  #
REFRESH_TOKEN =  # 

DATE = "2018-01-26"
client = fitbit.Fitbit(CLIENT_ID, CLIENT_SECRET,
                       access_token=ACCESS_TOKEN,
                       refresh_token=REFRESH_TOKEN)

stats = client.intraday_time_series('activities/heart', DATE, detail_level='1min')
heart_beat = stats["activities-heart-intraday"]["dataset"]

heart_df = pd.DataFrame.from_dict(heart_beat)
heart_df.index = pd.to_datetime([DATE + " " + t for t in heart_df.time])
heart_df.drop(["time"], axis=1, inplace=True)

# plot
heart_df.plot(y="value", figsize=(20,5))

# export csv
heart_df.to_csv("heartbeat.csv")

以下のような時系列グラフが出力される。寝ている時間は心拍数が低い。

24 Jan 2018, 17:21

呼吸を計測するガジェッド spire stoneでポモドーロは加速する!

はじめに

プログラマーのライフハッカーなら誰もが一度はやったことがあること、それは時間管理のための管理術 ポモドーロテクニック。このfuturismoでも、なんども取り上げてきては紹介していた。

ポモドーロテクニックというのは 25分集中して、5分休むというものを繰り返していくこと。ポモドーロテクニックを用いることで、以下の気づ気を得られた。

  • 作業と休憩を明確に分けることができる
  • 作業に集中できる
  • 自分の作業見積ができる

今使っているポモドーロツール

今までいろんなツールを試してきたけれども、Webアプリであるtomato.esが一番いい。

Webペースなので、場所を選ばない。LinxuでもWindowsでも動く。シンプルな外観で、そこが気に入っている場所。ほかは、タスクを記録できるアカウント管理機能があったり、統計機能があったりする。そしてなんと、我らDeveoperのために、APIも公開されているのである。

しかし長続きしたりしなかったりする。長続きしない原因の一つが、忙しすぎて、5分休むことがもったいないと感じるからだ。本当に5分休むと効果があるの??その間仕事したほうがいいのではないのか?

ここで大事になってくるのは、休んだことによって集中力が増すかということ。腹式呼吸を深くすることによって、集中できるということをいろんなところで聞いたことがある。果たして、仕事中は複式呼吸をしているのだろうか?実は途中から 肺式呼吸となっているのではないか??

そんな疑問を解明するために生まれたのが、この spireというガジェット。

Spire

手のひらに収まってしまいそうな軽量さ。これをズボンのベルトの内側などに、設定しておく。

すると、Bluetoothで通信して、アプリ上のソフトでデータを解析して、今の呼吸の状態を把握することができる。これは私が探していたガジェットだ!

ポモドーロテクニックを利用すると、果たして本当に集中力があがるのか?集中力を客観的に測る尺度は?と考えてきた。ポモドーロテクニックで25分の作業が終わった時、5分間の休憩をとるが、このときにやることは?(本にはここで心を休めると書いてあった気がする)

その客観的な指標が呼吸が乱れないことではないか?常に一定の深い複式呼吸をしていると、ゾーンに入ることができるのではないか?逆にゾーンにはいるには、呼吸を整えればいいいのではないか?

そんな思いから、作業中の呼吸を取得したいと前々から思っていた。fitbitの存在を知った時、脈拍は集中力の記録に使えるのではないかと思ったが、いろいろ調べて脈拍はさほど関係なさそうだ。呼吸と集中力は関係ある。

ポモドーロテクニックと組み合わせる

こんなことを考えてみた。

  1. ポモドーロをこなす
  2. 休憩する。ここで、25分間の作業のレビューをする。
    • 集中力はどうだろうか?
    • 次にやる作業は?
    • 無駄なことをしていないだろうか?

1と2 を繰り返す。

これによって、呼吸駆動のポモドーロテクニックができる、というわけだ。

ちなみにこのガジェットは プログラムから操作できるようなAPI が公開されている。

で、少し触ってみたのだけれども、リアルタイムにデータが取得できない。日毎?のデータが取得できるようになっている。これではやりたいことができない。今後に期待です。

06 May 2015, 12:51

その場の感情を ライフログ!! org-journal でひとりツイッターする

自分は、あまり twitter につぶやかない.

なぜなら、つぶやくとタイムラインが、ドロドロの鬱ったーにかわるので.

感情は、しかし、どこかに吐き出さないと、健康によくない.

そこで、その場の感情を即座に記録するための仕組みを org-journal で実現したので紹介.

org-journal でできること

org-journal は、Emacs から即座に、日記を書くための elisp.

できることは、

  1. ショートカット(C-c C-j)で journal.org を開く.
  2. 日付を挿入する.
  3. 感情を書き留める.
  4. org-journal を去る.

以下、自分の設定例.

(require 'org-journal)

(setq org-journal-date-format "%x")
(setq org-journal-time-format "<%Y-%m-%d %R> ")
(setq org-journal-file-format "journal.org")
(setq org-journal-dir "~/gtd/journal/")

上記設定では、journal.org ファイルにどんどん書き込んでいくが、 日付ごとに記録するファイルをわけることも可能だ.

実は org-capture でもできる

これだけならば、org-capture でもできないことはない. org-journal は、設定が org-capture に比べて特化している.

org-agenda で一日の振り返り

この機能の好きなところは、org-agenda との連携.

以下のようにタイムスタンプを挿入するように設定して、 journal.org を agenda ファイル対象にすることで、 org-agenda view につぶやきを載せることができる.

(setq org-journal-time-format "<%Y-%m-%d %R> ")

howm で過去ログを検索

howm テキストファイルを evernote のように管理するツール.

howm はデータをひとつのフォルダに保存するのだが、 このフォルダから、org-journal のフォルダにシンボリックリンク をはることで、howm から org-journal 結果が検索できる.

howm には、過去のいろいろな情報を溜め込んでいるので、 過去に相談したくなったら、howm から org-journal が引けるのはうれしい.

以上、Happy Hacking!!

21 Dec 2012, 11:02

Foursquareの履歴をGoogleMapに表示して、wordpressで表示する方法

Foursquareのチェックイン履歴をGoogleMapに表示して、それをwordpressで表示できたらステキなライフログになるだろうと思い、方法を調べてみたので、メモしまふ。

  • FoursquareのKMLフィードを取得する
  • GoogleMapでKMLフィードを表示する
  • GoogleMapをwordpressで表示する

では、順に解説。

FoursquareのKMLフィードを取得する

まずは、Foursquareにログインして、チェックイン履歴のページへ。

次に、右下にRSS/ICS/KMLと書いてあるリンクを選択。

skitch(12)

KMLとは

KMLとは、位置情報を管理するための情報です。http://ja.wikipedia.org/wiki/KML

ページの下からKMLのURLを取得します。

skitch(13)

GoogleMapでKMLフィードを表示する

次にKMLを利用して、GoogleMap上にfouresquareのチェックイン情報を表示します。

GoogleMapのページで、検索窓に先ほどコピーしたURLを貼り付けて、検索をします。

するとチェックイン履歴がGoogleMapに表示されました。

skitch(14)

GoogleMapをwordpressで表示する

最後です。GoogleMapからブロク貼り付け用のリンクを取得します。

左上のクサリのようなアイコンをクリックして、HTMLコードを生成します。

そして、それをコピーして、Wordpressの好きなところに貼り付ければ完了です。

skitch(15)

こんな感じ

大きな地図で見る

大きさを変更したい場合は、width=”200″ height=”200″ の数値で調整する。