実践データ解析--その2 vuleta a espana point賞に関して--
目的
最近流行している、スポーツデータのビジュアライゼーションを行ってみる。 今回は事例として、先日開催されたVuelta a Espanaを例にする。 自転車のレースは、
- 誰が、
- どこのポイントを、
- 何位で通過したか、 また、
- その際の所要時間は何分か??
を基本的に必要なデータとする。そのため、時空間データとして扱うには好例なのではなかろうか...が、思いの外、データ整形が難航している。
(特にステージレースの場合は、そのステージに関しては、そのステージの、総合に関してはそれまでのステージの合計で算出されるため、想像以上に、すごいことになっている)
特に、今年のブエルタは展開が荒れているし...どうなるかの、予測モデルを組む前に、今、どうなっているか??をまず把握したい。
手段
pythonによるデータ解析入門とRによる時系列分析入門とRクックブックを用いる
2015/09/01現在時点で第10ステージまで終了している。
- グラフ化には各ステージ終了後のpoint総合を使用する。
- データが散らばりやすいので、postgresqlに集約する。
- 初日はTTTなので、個人の得点はない。
- ステージ7は強制的に飛ばしている。
CREATE TABLE stg2point (rider varchar, point int); copy stg2point from 'path/to/{file}' delimiter ' ' csv header;
\o 'dir/path/{filename.tsv}' \a #揃えを行わない場合 \f '\t' select * from stg2points full join stg3points USING(rider) full join stg4points USING(rider) full join stg5points USING(rider) full join stg6points USING(rider) full join stg8points USING(rider) full join stg9points USING(rider) full join stg10points USING(rider) ;
- riderで色分けする場合にoptionにgroup=idを渡すこと(これがないとplotの段階で文字列をカラーに変換できないというエラーが出る)
data <- read.csv('{filename}', sep="\t") colnames(data) <- c('rider', 'stg2', 'stg3', 'stg4', 'stg5', 'stg6', 'stg8', 'stg9', 'stg10') #sortは降順にする class <- data[order(-data$stg10),] class <- class[1:15,] class.bind <- cbind(1:nrow(class), class) colnames(class.bind)[1] <- "id" class.melted <- melt(class.bind, id.var=c('id', 'rider')) g <- ggplot(class.melted, aes( x=variable, y =value, colour=rider, group=id)) g <- g + geom_line(size=2) + xlab('stage') + ylab('points') + labs(title="points", colour="rider") plot(g)
結果
第10ステージ終了時点での、上位15名分をグラフ化する
結論
サガン第8ステージ終了時点までは、ポイント賞(TDFもそう)だったのだが...第9ステージ終了時点でリタイア(第NステージでのDNS)と第Nステージの(DNF)をどう切り分けるか
KML化するライブラリと自転車function書くの若干面倒くさい。
ツールも何となく決まったのは第16ステージくらいなので、まだしばらく追う価値あると思う。