この方、 twitter を見てたら 今日は 食べ歩きをしているようだが、その分ちゃんと運動しているのか 余計なお世話ながら気になったので データから確認したい。

何のモチベーションかこういったデータ が公開されているので、運動状況として歩数データをみればよさそうだ。が、直近数日は更新がないため、過去のデータをモデル化して直近のトレンド / 休日の歩数の傾向を推測したい。

必要パッケージのインストール

library(devtools)
install_github('hoxo_m/pforeach')
install_github('sinhrks/ggfortify')

パッケージのロード

library(rstan)
library(Nippon)
library(pforeach)
library(ggfortify)

前処理

天下り的ではあるが、以下のデータを追加する

# ore.csv は 以下 URL から入手
# https://github.com/dichika/mydata
ore <- read.csv('ore.csv')
ore$time <- as.Date(ore$time)

is.holiday <- function(date) {
  # 祝日以外に休日として扱う日
  calendar <- as.Date(c('2015-01-02'))
  (weekdays(date) %in% c("土曜日", "日曜日")) | Nippon::is.jholiday(date) | (date %in% calendar)
}
ore$holiday <- is.holiday(ore$time)

get_weeknum <- function(date) {
  as.numeric(format(date, "%U"))
}
ore$weeknum <- get_weeknum(ore$time) 

データの確認

モデル作成のため、周期性などをざっと確認。

walk <- as.ts(ore$data)
# 時系列プロット
autoplot(walk, geom = 'bar', fill = 'blue4')

# 自己相関はなさげ
gglagplot(walk, lag = 6, ncol = 3)

autoplot(acf(walk, plot = FALSE))

# 周期性 7 ごとでプロットして曜日の周期性を確認。同じ曜日でも結構ばらつく
ggfreqplot(walk, freq = 7, geom = 'point', ncol = 7)

# 曜日よりは休日かどうかでまとめたほうが傾向ありそう
ggplot(ore) + geom_point(aes(x = time, y = data)) + facet_wrap(~holiday) 

# (日時だとばらつきすぎるので) 週ごとにトレンドとればよさそう
ggplot(ore) + geom_boxplot(aes(x = as.factor(weeknum), y = data))