2ヶ月前のエントリーにはてブが入りまくった件で「そういえば続編書いてないや」と気が付き、エントリーしますた。
「誰でも」の定義および、このエントリーの対象読者について
「誰でも」というのは、
(エンジニアなら)誰でも
という意味です。
より具体的には、
- 野球愛溢れるエンジニアにとって、Vagrant + Ansibleでのサーバー構築の練習&Pythonでのプログラミングという趣味実益を兼ねたいい感じのお勉強なるかつ、趣味の野球でhackが出来る二度美味しい内容です
- 野球に興味が無い方にとっては野球愛溢れるエンジニア同様サーバー構築&Pythonネタとしていい勉強になるかもです。ただ、他にももっといいエントリーがあると思います
- 非エンジニアの野球ファンの皆さまにとっては(小難しい的な意味で)ヘビーな内容となっていますので、覚悟してお読みください!ただ、プログラミングを覚えたい方にとっては凄くいい勉強になるかも
なお、事実上こちらのエントリーの続編となります!
おしながき
Retrosheetって何?
Retrosheet(http://www.retrosheet.org/)は一言で言うと、
「MLBの試合実況・スコアブックを元に作成された試合情報オープンデータ」
です。データの特性および作成経緯は本家HPおよび前回のエントリーをご参照ください。
特徴をザックリ言うと、
- 約80年分の試合データ(Game logs)、および各試合の打席・走塁イベント(Event file)が公開されている
- Game logs/Event file共にcsv形式だが、かなり独特の構成で使いにくい
独特かつ使いにくい、が知りたい方は是非ダウンロードしてzipを解凍してみてください。頭痛待ったなしです!
ちなみにデータの解説・仕様はこちらにあります。
かなりの野球リテラシー、スコアブック読み力を要求される辛い(もしくは楽しい)仕様ですね!
Vagrant + Ansibleで野球(MLB)データベースを作る
CSVのままではExcelで読むことはできても、アプリの題材にしたりプログラミングしたりはできないので、以下のライブラリ達を使ってMySQL Serverにまとめてみました。
ついでに、同じように使いたい人もきっといるだろうと思い、
Vagrant + AnsibleでServerを自動構成&みんなで使えるようにPlaybookを公開しました!
Shinichi-Nakagawa/retrosheet-mysql-server · GitHub
詳細な利用方法はREADME.mdに譲りますが、基本的にはリポジトリをcloneして以下の2行で起動します。
※playbookの内容を見直し、実行の手順を簡素化&taskをsub task化しました(2015/4/11)
$ vagrant up
$ ansible-playbook -i hosts retrosheet_server.yml
この2行でライブラリのインストール、DB schemeの作成、データの入手とダウンロードまで全て行います。
【Appendix】Playbook内で利用しているライブラリ
- Python 2.7.6(Ubuntu 14.04標準のモノ)
- git(説明不要)
- MySQL 5.6(同上)
- SQLAlchemy/mysql-db(PythonからMySQLを使うのに必要)
- wellsoliver/py-retrosheet · GitHub ※前回エントリーでも紹介、タイポは無くなってました!
- Chadwick: Software Tools for Game-Level Baseball Data — Chadwick 0.6.4 documentation ※こちらも前回エントリーで紹介、Ubuntu上で使えるようにしました!*1
試しにPythonで使ってみる
DBだけあっても何もできないので、ライブラリのサンプルも用意してみました。
Shinichi-Nakagawa/retrosheet-app-example · GitHub
試しにイチローさんが2014年、どんな打球を飛ばしたかの傾向を可視化してみます。
こんな結果になりました。単打が多いイチローさんらしい結果になりました!!!
今後の展開(≒私がやりたいこと)
- 投球および打席ベースの成績はほぼすべてとれるので、セイバーメトリクス的な指標を自分で書いたりして遊ぶ
- ある日ある試合の打席やらスタメン表がとれるので、それを利用して超細かい野球選手名鑑(MLB)を作る
- 投球情報(しかも一球毎!)を活用して「振り返り用Pitch f/x*2」を作る
- 球場の情報とGISを紐付けて「アメリカ野球地図」アプリを作る。例えばこれで各チーム(30球団)のオールスターとか作っちゃったりetc...
やりたいことがたくさんありすぎます!
触ってみた方、居ましたらフィードバックよろしくお願いします&何か面白いことを一緒にやりましょう!