SlideShare a Scribd company logo
The Art Of
Programming
A Baseball Game!!!
野球Hack!~Pythonを用いたデータ分析と可視化
Shinichi Nakagawa@shinyorke
Kawasaki.rb #28 2015/9/30
お前だれよ
• Shinichi Nakagawa(36)
• Recruit Sumai Company, Ltd.(入社1年)
• Web Application Engineer(メインはServer Side)
• Agile/Python/Infrastructure as a codeが大好き
• 北海道日本ハムファイターズ

&オークランド・アスレチックスの大ファン
• 中島卓也(日)、ソニー・グレイ(OAK)、ココ・クリスプ(OAK)推し
• “野生の野球アナリスト”活動とかいう伝導活動
“野生の野球アナリスト”
活動
• PyCon JP 2014 Talk Session(去年のやつ)
• MLBオープンデータ分析&可視化サービスをPythonで構築
• はてブ200超え、PV 14,000以上(slideshare)
• PyCon JP 2014 Lightning Talk(去年のやつ)
• Agileプロセス活用、アダム・ダン率の紹介
• アダム・ダン氏、Python界隈で一番有名なMLB選手に
• XP祭り2015「俺も!!」登壇資料
• ITな仕事をしている人たちに伝えるセイバーメトリクス
• データ収集&レポートの仕組みをPython + Dockerで構築
Other…
• ブログで野球Hackの成果および考察を披露(不定期)
• MLBオープンデータの紹介と活用例紹介
• 野球データの分析&解析用のライブラリを

Githubで公開(ほぼPython製)
• データドリブン野球解説 ※後ほど解説
最終目標(40歳までに)
• エンジニア×ビジネスマンとして、

日本プロ野球orMLBの仕事をやる!

※日本12球団+MLB30球団のオファー待ちw
• 野球データとエンジニアの知見を活かし、

2020年東京五輪でメダル獲得のサポート

※選手じゃないですw、エンジニアとして、ね。
本題
Today’s Starting Member
• Pythonと野球
• MLBオープンデータ活用とPython
• まとめ - これからの野球Hack
Pythonと野球
なぜ野球×Pythonなのか?
• プロトタイピングが楽
• ライブラリ
• 仮想環境
プロトタイピングが楽
• 野球Hackは整形されたデータ(スコアブック)と、
整形されていないデータ(スコアブック以外のデー
タ)の解釈と前処理がメイン

→使いこなすまで、プロトタイピングが続く
• 前処理・分析・可視化がオールインワンで出来る
Pythonが楽でいい

→Jupyter, pandas, matplotlib, この3つでほぼイケる
Python is 全部載せ
ライブラリ
• インフラ構築・管理

Ansible, docker-compose, boto3, etc…
• データ分析・可視化

Jupyter, pandas, matplotlib, etc…
• Webアプリ構築

Django, Flask, bottle etc…
Pythonはユーティリティープレイヤー( ー`дー´)キリッ
仮想環境
• pyenvで実行環境切り替え

OSのPythonに縛られない開発.

Python3.4.3→3.5.0移行がすんなり行けた
• virtualenvでパッケージ管理

アプリのプロジェクトと分析のプロジェクトで

パッケージ管理を別々に扱う
• docker-compose(旧名fig)でServer丸ごとスクラップ&ビルド

実行環境をDockerで管理、大胆に「作る」→「壊す」を行う環境を実現

「作る」→「壊す」→「作る」→「壊す」(以下略)
なんでや!Pythonじゃなくてもできるやろ!!
※ボールの判定に不服なバルフォアさん、ではありません
元画像:http://www.sbs.com.au/
はい、Pythonじゃなくできます
• インフラ管理・構成

部分的にVagrantを使用、ちなみにChefはやめた.
• データ分析・可視化

得意な人はR・Juliaでいいと思う、野球HackをRでやってる方もいます.

(他の言語は、、、どうなんだろう?)
• Webアプリ構築

APIやバッチならGolang, サイトならRuby On Rails他選択肢がたくさん有り
• 仮想化

Rubyのrenv/rbenv-gemsetも素敵ですよね☆
目的(と好み)に合わせて手段を柔軟に変えましょう
好きな言語でHackしようぜ!
※キャプテン・ジーター、本当にお疲れ様でした
元画像:http://www.playbuzz.com/
俺々開発ルール(やきう版)
• スクラップアンドビルドしやすい環境で作る
• 野球は仮説検証・技術リスクが高いネタが多い(特に前者)
• Sandbox環境で仮説・技術リスクを検証,いらないものは捨てる
• シンプルに作る(疎結合・環境非依存)
• 豊富なライブラリおよび仮想環境活用で実装と環境をシンプルに
• 特にホストOSには依存しない作りにする(Macだけ、Linuxだけルールはナシ)
• 繰り返し作業は自動化
• データベース作成、前処理まではある程度決まった作業なので自動化
Pythonが一番やりやすいってことです
MLBオープンデータとPython
元ネタ(過去ブログより)
http://shinyorke.hatenablog.com/entry/
2015/04/06/190243
やりたかったこと
• やきうゲーム「Fantasy Baseball」に勝つため、
選手の詳細な情報(打席、投球など)が欲しい
• 「Retrosheet」というデータにそれらが詰めら
れてるらしい
• よし!Retrosheetデータベースを作ろうじゃな
いか!
Retrosheet is 何?
• メジャーリーグのスコアデータ集
• 1887~2014(昨シーズン)までのデータをCSVで配布 ※
1989以前は欠損有り
• スコアブックで得られる情報(得点、失点、スタメン、打席
結果etc…)と選手情報(名前、ポジションなど)がひと目
でわかる
• http://retrosheet.org/
やったこと
• Vagrant + AnsibleでMySQL Server構築
• SQLAlchemy + py-retrosheetでmigration
• Jupyter(IPython notebook)とpandasで分析
• matplotlibで可視化
構成
Simple is Best?
構成
Simple is Best!!!
(自動化頑張りました)
サーバー構築とmigration
$ vagrant up
$ ansible-playbook -i hosts retrosheet_server.yml
この2行でサーバーを作れるようにしました!
※VagrantとAnsibleを導入している前提です
PY-RETROSHEET - やきうScript
• Retrosheet専用Download&migration script

git@github.com:wellsoliver/py-retrosheet.git
• データ取得からDB(MySQLなど)へのmigrationを一気通貫に行う
• 細々と開発が続いてる(っぽい)
Jupyter+pandas+matplotlib
• 平たく言えば、「ブラウザ上で使えるPythonその他のSandbox環境」
• データやLibraryが不確実( 使いこなせていない)時の試し打ちとして最高すぎる環境
• pip install コマンドでちょいちょいとインストールしたらアッサリ環境が出来ます
分析と可視化
• Hideki Matsui(#55)の全盛期と黄昏時
• Jon Lester(Cubs)は何月に多く勝つのか?
Hideki Matsui Jon Lester
松井(2004) VS 松井(2011)
• 外野に飛んだヒットを分類&可視化
• 2004・2011共にセンター~ライトへの打球が多い(センター返しor引っ張り)
• 2011年、本塁打と三塁打が恐ろしく少ないあっ(察し
2004(ヤンキース) 2011(アスレチックス)
ジョン・レスター(月別勝利)
• 何故か5月に無双してる&いい年は9月に強い
• オールスター(7月)前後は微妙に勝てない
コードは後日公開!!!
まとめ
シモンズの守備ってまとめに相応しいよね
元画像: http://a.espncdn.com/photo/2013/1028/mlb_nl-gloves_06.jpg
Python + Baseball
• 「野球Hackで迷ったらPython!」
• とはいえ、目的や好みに合わせて言語やFWを選ぶの
大切!

→効率化&自分の武器が増えるという意味で
• 好きなデータを好きな言語でHackすると楽しいよ
(^O^) ※2年連続2回目
好きな言語でHackしようぜ!
※キャプテン・ジーター使い回し
元画像:http://www.playbuzz.com/
これからの野球Hack(1年後)
• 「データドリブン野球解説」を通じて新しい野球とスポーツの可能性を説いて生きたい!!
• “これが、新しい野球. 既存の野球を軽く飛び越え,私たちは新しいスポーツの楽しみを知る”
• 質が高い解説をするための情報収集&分析と基盤の整備
これからの野球Hack(2年後)
• 「データで知る野球・スポーツ」が「アタリマエ」になる世界へ!!!
• 2年後そして5年後の「スポーツ・野球のアタリマエ」を作る自分でありたい!!!
Possibilities of Python
“””
わたしの関心事は、野球だけ。
いったいなぜだろう?
それは、ほかの分野の数字と違っ
て、野球のデータには言葉と同
じ力があるからだ。
“””
- ビル・ジェームズ(セイバーメトリクスの父)

書籍「マネー・ボール」第四章より
Possibilities of SABRmetrics
ゲームセット!!!
ご清聴ありがとうございました.
Shinichi Nakagawa(Twitter/Facebook/hatena:@shinyorke)

More Related Content

野球Hack!~Pythonを用いたデータ分析と可視化 #kwskrb #28 2015/9/30