Rでrunkeeperから心拍数を取得する

経緯

心拍計を買った。24時間俺のドキドキを可視化したい。
心拍計」で検索した結果、amazonで一番上に出てきたのと3480円と非常に安かったのでこれにした。

で、これはあくまで心拍計センサでありセンサの値を取得するにはアプリが必要。
karadabeatというメーカー謹製のアプリがあるのだが、認識してくれなかったのでrunkeeperを使った。

runkeeperはwebAPIでデータを取得できる。
当然Rのパッケージも誰か作ってるだろとか思ったら、無い。
他の言語、たとえばRubyとかPythonとかはある。
http://runkeeper.com/developer/healthgraph/third-party-libraries
仕方ないのでRのパッケージを作った。
ドキュメントの理解に時間がかかったけど、httrパッケージ使ったら比較的楽にできた。
ということで以下に使い方を示す。

認証

developer登録をした後、keyとsecretが発行されるのでそれを用いて認証を行う。

devtools::install_github("dichika/runkeeper")
library("runkeeper")
token <- getToken(app_name = options()$HEALTH_GRAPH_APPNAME,
                  key = options()$HEALTH_GRAPH_KEY,
                  secret = options()$HEALTH_GRAPH_SECRET)

データの取得

getFitnessActivityFeedでこれまでのactivivtyの履歴が確認できる。
最も新しいデータのURIを確認してその心拍数をgetFitnessActivityで取得する。
心拍数データにはtimestampが格納されているが、開始時間からの差分で表現されているので、開始時間を変換した後それに加算することで心拍数の測定時間を得る。

getFitnessActivityFeed(token)$items$uri
recent <- getFitnessActivity(537215599, token)
Sys.setlocale("LC_TIME", "C")
time_start <- as.POSIXlt(gsub(".+, ", "", recent$start_time), "%d %b %Y %H:%M:%S", tz = "Asia/Tokyo")
heartrate <- recent$heart_rate
heartrate$time <- time_start + heartrate$timestamp

可視化

可視化した結果は以下。
途中フラットになっているのはiPhoneから離れていたため。
後半ぐんぐん心拍数が上がっているのはおそらく酒のせい。

library("ggplot2")
ggplot(heartrate, aes(x=time, y=heart_rate)) + geom_line()


enjoy!!!