Hatena::ブログ(Diary)

盆栽日記

2016-04-21

歩数データから行動パターンを抽出する話

この1年ほどfitbitで歩数データを取り続けている。

最近、歩数データは1日よりも小さい単位(1分、15分)で取得できることを知ったので、それを利用して日々の行動をパターン化したい。

同時に手持ちの睡眠データと組み合わせて、行動パターンとの関連も見たい。

睡眠データはSonyのSmartband2で取得している。

なお、コードも含めた結果はRPubsにアップしたので細かい話をそちらを確認してほしい。

http://rpubs.com/dichika/stepandsleep

可視化した結果

歩数データは1時間ごとの集計をLDAでもって5グループに分けた。

LDAを用いた理由はこの研究会でLDAを歩数パターンに適用している発表があったのでその追試の意味合いが大きい。

5グループへの分類が終わったら、各グループの特徴を時間別の分布、総歩数、睡眠の質(入眠後3時間以内の深い眠りの割合)で確認する。

f:id:dichika:20160421201716p:image

分類した5つのグループおよび総歩数がどのように分布しているかカレンダープロットで確認する。

こちらは5つのグループをカレンダープロット可視化したもの。

f:id:dichika:20160421215653p:image

こちらは総歩数をカレンダープロット可視化したもの。

f:id:dichika:20160421215654p:image


得られた知見

  • LDAの結果をカレンダープロットで確認すると、Group1は平日パターン、Group3,5は休日パターンのように見える。Group2,4は夜間の歩数が多いので飲み会パターンか(私の勤め先はホワイトなので深夜に帰宅することはまず無い)。
  • 総歩数はどのパターンも中央値はあまり変わらない。休日パターン(Group5)は左に裾をひいてるので概して歩数が少なくなっている印象。
  • 平日パターン(Group1)と休日パターン(Group5)の眠りの質(per_D_180)を比べると、前者の方が良さそう。とはいえ、ばらつきも大きい。総歩数のデータと併せて考えると、良い睡眠に一定の運動量は必要だが、それが十分条件ではなさそう。

知見をふまえて決定木でモデリング

もう少し知見を定量的に深めたい。

手持ちの睡眠データには「就寝前2時間以内に食事をしたか(shokuji)」「就寝前1時間以内にブルーライトを発するような装置を注視したか(BL)」「寝る1時間前に蛍光灯をつけたか(Keikou)」がそれぞれ0/1(いいえ/はい)で含まれている。

f:id:dichika:20160421201717p:image

結果をみるとブルーライトを注視しないと圧倒的に睡眠の質が良い。ここでいうブルーライトを発するような装置はスマホやPCである。寝る直前までtwitter眺めるのはやめよう。

またばらつきは大きいものの、歩数パターンのGroup1と3は他のグループに比べて睡眠の質が良い。

Group1は主に平日に現れる歩数パターンなので、平日の方が休日より睡眠の質が良いのか。

また悪い歩数パターンの中でも約8,000歩を超えると多少は睡眠の質が良くなっている。 当面の目標値は8000歩にしておこう。

まとめ

fitbitはカギにつけて持ち歩いているだけなのでそれで自分の行動パターンが見えてくるのは面白い。

みなさんもじぶんマイニング(beroberoさん命名)やってみましょう。

Enjoy!!

2016-04-08

テロップをつけた画像に落書きする

以前captionパッケージを使ってテロップを自動で画像につける話をした。

f:id:dichika:20160315095320p:image

しかしこういった画像を見ているとどうしても落書きしたくなる。

f:id:dichika:20160408221832p:image

ペイントソフトを開いて落書きしてもいいのだがここはシームレスにRからやりたい。

ということでrakugaki関数をcaptionパッケージに追加した。

以下のように実行するとRStudio上でviewerペインに画像が表示されて落書きできる。

library("caption")
rakugaki("http://cdn-ak.f.st-hatena.com/images/fotolife/d/dichika/20160315/20160315095320.png")

f:id:dichika:20160408223208p:image

保存したい場合は左上のshow in new windowを押してブラウザで改めて開いた後、右クリック等で画像を保存してほしい。

ただしこの時viewer上で書いていた落書きは消えるので、保存したい場合はブラウザで開いた後に落書きをすると良い。

学び

  • viewerに画像を表示する時はbase64でエンコードしないと表示されなかった。
  • 今回はこの記事に倣ってshinyを使ったが、htmlwidgetsパッケージを使えばDiagrammeRパッケージのようにviewerで完結させられそうな感触あり。

Enjoy!!!

2016-03-25

いい感じの時系列プロット

dygraphsパッケージのことである。

えっ、いまさらdygraphs?ナンデ?と思われる向きもあるだろうが、最近、私の記憶がやばい。

昔は記憶に雑なクエリ(例:Rでいい感じに時系列プロットかけるパッケージ)を投げても、最適な結果がスッとでてきたのが最近は無理。

もう「おじいちゃん、ここに通帳と印鑑はいれてますからね!」ってレベルで情報をひとまとめにしておかないと思い出せない。

ということで、自分のブログに情報を集約しておく。

今日はdygraphsパッケージの名前が思い出せなかったのでメモしておく。

データフレームで放り込むと怒られるので、xts形式に変換してから使うこと。

library("dygraphs")
df_xts <- xts::xts(df[,c("per_D_180", "per_D_total")], order.by=as.Date(df$date))
dygraph(df_xts)

これからも思い出せなかったパッケージをメモしていくことにする。

2016-03-17

ggplot2でgeom_lineする時にNAを無視して線をつなぐ

geom_lineするとき、NAが入っているとそこで線が途切れてしまう。

library("ggplot2")
smp <- data.frame(x = 1:5, y = c(1:3, NA, 5))
ggplot(smp, aes(x = x, y = y, group = 1)) + geom_line() + geom_point()

f:id:dichika:20160317074846p:image

あらかじめNAを除いておけば、線をつないでくれる。

ggplot(subset(smp, !is.na(y)), aes(x = x, y = y, group = 1)) + geom_line() + geom_point()

f:id:dichika:20160317074842p:image

なんだか毎回やり方を調べてる気がするのでメモ。

2016-03-15

Rで自動的に画像にテロップをつける

昨日の続き。

これを自動でやりたい。

http://togetter.com/li/931610

ということで関数を追加した。

ついでにフォントを変更できるようにした。

下記コードでoutputという名前で画像が出力できる。

ちなみにこの画像はGoogle様がこのように判定したのであり、きたるべき未来を予見する結果である。

devtools::install_github("dichika/caption")

f_ojisan <- system.file("data/ojisan.png", package = "caption")

library("caption")
autocaption(f_input = f_ojisan,
            font_family = "YuGothic Bold",
            CROWD_VISION_KEY = "あなたのCROWD_VISION_KEY",
            AZURE_CLIENT_ID = "あなたのAZURE_CLIENT_ID",
            AZURE_CLIENT_SECRET = "あなたのAZURE_CLIENT_SECRET"
            )

f:id:dichika:20160315095320p:image

どのように処理しているか

以下の手順を踏んでいる。

  1. Google Cloud Vision APIで物体認識し得られたラベル候補から1つをランダムに選ぶ
  2. Microsoft Translation APIで得られたラベルを日本語に翻訳
  3. kakasiでひらがなに直す

翻訳にはtranslateRパッケージ、kakasiはNipponパッケージを利用している。

各APIの利用については以下を参照されたし。

http://qiita.com/takaheraw@github/items/e2d8ac9edad4655596a2

http://qiita.com/kemayako/items/21fe36005e6e729aff77

もう少しやることがあるのであと1回続きます。

Enjoy!!!