芝生の乱れを可視化する

GitHubには芝生がある。進捗を可視化してくれる緑のアレだ。
芝生の乱れは進捗の乱れ。進捗の乱れは心の乱れということで、芝生から異常値を検出する。

芝生を取得する

以前までは↓にあるようにAPI経由でデータが取得できたのに今はできない。
http://qiita.com/uri/items/f62ae42af8c28a053ad7

仕方が無いので泥臭くデータを取得する。
この人が芝生をローカルで再現すべくNokogiriでごりごりやっていたのでそれを参考にした。
http://blog.akerl.org/2014/12/19/reverse-engineering-github-streaks/

要は下記URLで表示されるSVGから日付とコミット数を取り出せばよいだけ。
rvestで簡単にできる。

https://github.com/users/(username)/contributions

以上の話はsinchokurパッケージのgetPubContribtion関数として実装した。
以下で取得できる。

# sinchokurのインストール
devtools::install_github("dichika/sinchokur")
getPubContribution("dichika")

芝生の乱れを可視化する

これは簡単。最近Twitterから出たAnomalyDetectonパッケージを使えば良い。

# これもgithubからインストールする
devtools::install_github("twitter/AnomalyDetection")

library(AnomalyDetection)
smp <- getPubContribution("dichika")
smp$date <- as.POSIXct(paste0(smp$date, " 01:00:00")) #タイムスタンプしか受け付けないのでデータを偽装
res <- AnomalyDetectionTs(smp, max_anoms=0.02, direction='both', plot=TRUE)
res$plot

こんな感じである。

追記(2015-01-09)

ggplot2でプロットされているようなので、scalesパッケージを用いて軸表記をいじることができる。

library(ggplot2)
library(scales)
res$plot + scale_x_datetime(labels=date_format("%Y-%m-%d"))


enjoy!!!