GeoJackass

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

実践データ解析--その1 tour de france point賞に関して--

目的

最近流行している、スポーツデータのビジュアライゼーションを行ってみる。
今回は事例として、先日開催されたTour de Franceを例にする。
そもそも、各ステージごと、あるいは各賞ごとに、時間や得点が公開される。だが、これは、そのステージ終了時点で誰がP分、誰がQ点となっているため、ステージごとの変遷が読みにくい...
そこで、例えば、なぜサガンは個人総合で競っていたはずなのに、なぜポイント賞狙いになったのか??それはいつか。をデータから洗い出してみる...
グランツールは、開催期間中だけでピー百億円規模の産業らしいので、0.1%でも1億円くらいになる...と思う。ちょっと欲しい

手段

pythonによるデータ解析入門とRによる時系列分析入門とRクックブックを用いる

練習用のサンプルデータを作成する。

  • 各ステージごとの、それぞれの賞のリストが取得済みの状態を前提として
    • その賞の名前
    • それぞれの賞の内容のリスト

をもとに、それぞれの賞の内容のリストを、その賞の名前で保存します。

(魔法を使っているような部分は省いているので、察してほしい)

#! usr/bin/python
#! -*-coding: utf-8-*-
#author@Shoichi Otomo

import sys
import pandas as pd

argv = sys.argv
stg = str(argv[1])
rdpth = "path/to/data"
data_pth = "path/to/data/attache"

def split_files(dfs, cap):
    for i in range(len(dfs)):
        try:
            dfs[i + 1].to_csv(data_pth + "{fname}" + stg + cap[0][i] + ".tsv", sep="\t", index=False)
        except:
            print 'whoops'

if __name__ == '__main__':
    dfs= pd.read_html(rdpth + "{fname}"+ stg + '.html')
    cap = pd.read_csv(data_pth + "{fname}"+ stg + '.txt', header=None)
    split_files(dfs, cap)

書き出しにミスが頻発する場合、pythonは、内部的にデータをunicodeで扱う??らしく、utf-8での書き出しが出来ない場合が多い。

  • 下記の設定を追加する。
reload(sys)
sys.setdefaultencoding('utf-8')
  • ハンドルする段階でunicodeで扱い、出力時にencode/decodeする...(これは出来たらかなり上手いと思う)

分割されたファイルの中から、各ステージのポイント賞のリストを作成する。 全てのステージのデータを結合する。

pandasのデータの扱い方は

  • concat,append単純結合
  • merge,joinはキーを指定して結合
inner left right outer
両方にあるキーのみを選択 左のキーのみを選択 右のキーのみを選択 少なくともどちらか一方のキーを選択
  • ポイント賞対象となるポイントは、各山岳(級別)、スプリント、ステージゴールの全てに対して、相応の得点が付与される。
  • stageNに対して、stageN+1の得点は基本的に減らない。
  • stageNに対して、stageN+1では、ポイントを1点以上持つライダーは基本的に減らない。(得点を取得したライダーの数は、前日に比べて同じか、増えるかのどちらか)

  • 例えばpoint賞の第1ステージと第2ステージの結合を行う。

import pandas as pd
dfs1 = pd.read_csv('../{datapath}/{filename}.tsv', sep="\t")
dfs2 = pd.read_csv('../{datapath}/{filename}.tsv', sep="\t")

dfs1 = dfs1[["1", "2"]]
dfs2 = dfs2[["1", "2"]]
dfs = pd.merge(dfs1, dfs2, on="1", how="outer")

結果

全員分をグラフ化すると150本以上になるので、上位10名分をグラフ化する

そういえば、サガンは何だかんだで最初の方は個人総合に絡んでたしな...
グライペル、スプリントゴール勝ちまくってたから、まとまった得点取ってたしなぁ...
とか、そういうことが色々思い出される。(飽きてきたので解析は小並感...後日書く)

あと、各ゴールは各ステージごとにあり、いくつかのサイトでそういったマップを埋め込んである。だが、これらは予めゴール前に作成しているらしく、レース終了後のデータが反映されていない... ゴール後のデータを入力すれば少なくとも、こうだろう。 これは、長いのでまた後日...

結論

ツールドフランスで学ぶデータ解析、結構あるんだけど... こうなったらいいなぁ

  1. システムごとヨーロッパのブックメーカーに買収される...
  2. 来年のツール、もしくは今月末のブエルタ帯同...
  3. あー、SHIMANO(ラバネロパールイズミ)さんとか興味示してくれないだろうか...そういえば、DAIWAさん、ちょっと前までspecializedの総合代理店やってませんでしたっけ??