GeoJackass

ちゃらんぽらんの絶対領域は、是を頑なに堅持

実践データ解析--その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ステージくらいなので、まだしばらく追う価値あると思う。

geojackass.hatenablog.com