ウェアラブルデバイスのログで自己分析してみる
2ヶ月ほど前に自分自身の行動ログを収集したいなと思い、フランスのWithings社が出している腕時計型のウェアラブルデバイスWithings Pulse O2を購入しました。以来、ほぼ毎日、お風呂と仕事中以外は腕に付け、歩数、心拍数、睡眠時間などのログを取っています。
Withings Pulse O2 Wireless Activity and Heart Rate Tracker black [並行輸入品]
- 出版社/メーカー: Withings
- メディア: スポーツ用品
- この商品を含むブログを見る
今回はこのウェアラブルデバイスのデータをAPIで取得し、自分自身の行動を可視化してみました。
1. 準備
WithingsのAPIを使うためには、まずここでデベロッパー登録をする必要があります(Withingsのアカウントを持っていない場合はアカウントの作成から)。登録をすると、Consumer KeyとConsumer Secretが取得できるので、メモしておきましょう。
次に、Withings API developer documentationで書かれてある通りにStep1から順に実行していき、ユーザーIDとAccess Token, Access Token Secretを取得し、こちらもメモしておきましょう。
とりあえずこれで、データにアクセスする準備は出来ました。
2. データを取得・前処理
次に、実際にデータを取得し、Rで処理しやすいような形に整形します。 APIを叩く部分とデータの整形はRubyで実装します。Withings APIを使うための便利なgemがあるので、まずはsimplificator-withingsというgemをインストールしましょう。
> gem install simplificator-withings > gem install ruby-hmac
そして、以下が記録されたデータを取得するサンプルコードです。
実行すると、以下のようなcsvファイルが作成されます。
取得できるデータは、1日ごとの歩数(steps)、歩いた距離(distance)、消費カロリー(calories)、昇り降りの高低差(elevation)、軽めの運動をした時間(soft)、普通の運動をした時間(moderate)、激しい運動をした時間(intense)です。睡眠時間のデータも取得したかったのですが、まだできないようです。
ここまでで、必要なデータは揃ったので、後はExcelやRで見たいデータを可視化したり、統計量を求めたりしていきます。
3. Rで分析・可視化
前述のように、さまざまなデータが取得できますが、今回はその中でも最も特徴が出やすいであろう歩数(steps)について見てみます。 Rのsummary()関数を使って、基本統計量を求めると、
Min. 1st Qu. Median Mean 3rd Qu. Max. 88 3832 4800 5974 7170 14650
となりました。1日平均で約6,000歩しか歩いてません。目標にしている、1日平均1万歩にもっていくためには毎日今までの倍歩く必要があるようです。。 (最小値88は、ほぼ1日中つけ忘れていた日の値)
次に、日ごとの推移を見てみると、以下のようになりました。青の棒が土曜日、赤の棒が日曜日になっています。
この図から、平日に比べ、土日(特に日曜日)によく運動していることがわかります。曜日による差が明らかになるように、曜日別に箱ひげ図で可視化した結果が以下です。
明らかに平日に比べ土日の運動量が大きいです。原因は、スポーツクラブで運動しているからという単純な理由です。 そしてもうひとつ、月曜から金曜の部分も少しずつ違っていて、水曜、木曜の運動量が少なかったり、金曜が多かったりするので、なんとなく気分と相関してそうな気がしています。。
Rのコード
まとめ
実は、Withingsが提供しているダッシュボードを見れば日々の活動が可視化されているので、 今回のようなことをしなくてもおおまかなことはわかります。 しかし、当然ダッシュボードでは詳しい分析はされていないので、より詳しく知りたい場合に自分でデータをいじる必要があるという意味で今回のような分析は有用なのではないかと思います。
また、分析してみてわかったことは、運動量の大きい、つまりたくさん動いている日のほうが気分がいいし、それによって仕事の効率も良くなるのではないかということで、今後実践してみようと思いました。自分自身の気分と行動の関係などは自分自身でしかわからないので、分析してみるとおもしろいと思います。