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

42
The Art Of Programming A Baseball Game!!! 野球Hack!~Pythonを用いたデータ分析と可視化 Shinichi Nakagawa@shinyorke Kawasaki.rb #28 2015/9/30

Upload: shinichi-nakagawa

Post on 28-Jan-2018

2.330 views

Category:

Software


0 download

TRANSCRIPT

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

[email protected]: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)