Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

Kawasaki.rb #28 (2015/9/30)発表資料.
Pythonを用いた野球プログラミングについて

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

  1. 1. The Art Of Programming A Baseball Game!!! 野球Hack!~Pythonを用いたデータ分析と可視化 Shinichi Nakagawa@shinyorke Kawasaki.rb #28 2015/9/30
  2. 2. お前だれよ • Shinichi Nakagawa(36) • Recruit Sumai Company, Ltd.(入社1年) • Web Application Engineer(メインはServer Side) • Agile/Python/Infrastructure as a codeが大好き • 北海道日本ハムファイターズ
 &オークランド・アスレチックスの大ファン • 中島卓也(日)、ソニー・グレイ(OAK)、ココ・クリスプ(OAK)推し • “野生の野球アナリスト”活動とかいう伝導活動
  3. 3. “野生の野球アナリスト” 活動
  4. 4. • PyCon JP 2014 Talk Session(去年のやつ) • MLBオープンデータ分析&可視化サービスをPythonで構築 • はてブ200超え、PV 14,000以上(slideshare)
  5. 5. • PyCon JP 2014 Lightning Talk(去年のやつ) • Agileプロセス活用、アダム・ダン率の紹介 • アダム・ダン氏、Python界隈で一番有名なMLB選手に
  6. 6. • XP祭り2015「俺も!!」登壇資料 • ITな仕事をしている人たちに伝えるセイバーメトリクス • データ収集&レポートの仕組みをPython + Dockerで構築
  7. 7. Other… • ブログで野球Hackの成果および考察を披露(不定期) • MLBオープンデータの紹介と活用例紹介 • 野球データの分析&解析用のライブラリを
 Githubで公開(ほぼPython製) • データドリブン野球解説 ※後ほど解説
  8. 8. 最終目標(40歳までに) • エンジニア×ビジネスマンとして、
 日本プロ野球orMLBの仕事をやる!
 ※日本12球団+MLB30球団のオファー待ちw • 野球データとエンジニアの知見を活かし、
 2020年東京五輪でメダル獲得のサポート
 ※選手じゃないですw、エンジニアとして、ね。
  9. 9. 本題
  10. 10. Today’s Starting Member • Pythonと野球 • MLBオープンデータ活用とPython • まとめ - これからの野球Hack
  11. 11. Pythonと野球
  12. 12. なぜ野球×Pythonなのか? • プロトタイピングが楽 • ライブラリ • 仮想環境
  13. 13. プロトタイピングが楽 • 野球Hackは整形されたデータ(スコアブック)と、 整形されていないデータ(スコアブック以外のデー タ)の解釈と前処理がメイン
 →使いこなすまで、プロトタイピングが続く • 前処理・分析・可視化がオールインワンで出来る Pythonが楽でいい
 →Jupyter, pandas, matplotlib, この3つでほぼイケる Python is 全部載せ
  14. 14. ライブラリ • インフラ構築・管理
 Ansible, docker-compose, boto3, etc… • データ分析・可視化
 Jupyter, pandas, matplotlib, etc… • Webアプリ構築
 Django, Flask, bottle etc… Pythonはユーティリティープレイヤー( ー`дー´)キリッ
  15. 15. 仮想環境 • pyenvで実行環境切り替え
 OSのPythonに縛られない開発.
 Python3.4.3→3.5.0移行がすんなり行けた • virtualenvでパッケージ管理
 アプリのプロジェクトと分析のプロジェクトで
 パッケージ管理を別々に扱う • docker-compose(旧名fig)でServer丸ごとスクラップ&ビルド
 実行環境をDockerで管理、大胆に「作る」→「壊す」を行う環境を実現
 「作る」→「壊す」→「作る」→「壊す」(以下略)
  16. 16. なんでや!Pythonじゃなくてもできるやろ!! ※ボールの判定に不服なバルフォアさん、ではありません 元画像:http://www.sbs.com.au/
  17. 17. はい、Pythonじゃなくできます • インフラ管理・構成
 部分的にVagrantを使用、ちなみにChefはやめた. • データ分析・可視化
 得意な人はR・Juliaでいいと思う、野球HackをRでやってる方もいます.
 (他の言語は、、、どうなんだろう?) • Webアプリ構築
 APIやバッチならGolang, サイトならRuby On Rails他選択肢がたくさん有り • 仮想化
 Rubyのrenv/rbenv-gemsetも素敵ですよね☆ 目的(と好み)に合わせて手段を柔軟に変えましょう
  18. 18. 好きな言語でHackしようぜ! ※キャプテン・ジーター、本当にお疲れ様でした 元画像:http://www.playbuzz.com/
  19. 19. 俺々開発ルール(やきう版) • スクラップアンドビルドしやすい環境で作る • 野球は仮説検証・技術リスクが高いネタが多い(特に前者) • Sandbox環境で仮説・技術リスクを検証,いらないものは捨てる • シンプルに作る(疎結合・環境非依存) • 豊富なライブラリおよび仮想環境活用で実装と環境をシンプルに • 特にホストOSには依存しない作りにする(Macだけ、Linuxだけルールはナシ) • 繰り返し作業は自動化 • データベース作成、前処理まではある程度決まった作業なので自動化 Pythonが一番やりやすいってことです
  20. 20. MLBオープンデータとPython
  21. 21. 元ネタ(過去ブログより) http://shinyorke.hatenablog.com/entry/ 2015/04/06/190243
  22. 22. やりたかったこと • やきうゲーム「Fantasy Baseball」に勝つため、 選手の詳細な情報(打席、投球など)が欲しい • 「Retrosheet」というデータにそれらが詰めら れてるらしい • よし!Retrosheetデータベースを作ろうじゃな いか!
  23. 23. Retrosheet is 何? • メジャーリーグのスコアデータ集 • 1887~2014(昨シーズン)までのデータをCSVで配布 ※ 1989以前は欠損有り • スコアブックで得られる情報(得点、失点、スタメン、打席 結果etc…)と選手情報(名前、ポジションなど)がひと目 でわかる • http://retrosheet.org/
  24. 24. やったこと • Vagrant + AnsibleでMySQL Server構築 • SQLAlchemy + py-retrosheetでmigration • Jupyter(IPython notebook)とpandasで分析 • matplotlibで可視化
  25. 25. 構成 Simple is Best?
  26. 26. 構成 Simple is Best!!! (自動化頑張りました)
  27. 27. サーバー構築とmigration $ vagrant up $ ansible-playbook -i hosts retrosheet_server.yml この2行でサーバーを作れるようにしました! ※VagrantとAnsibleを導入している前提です
  28. 28. PY-RETROSHEET - やきうScript • Retrosheet専用Download&migration script
 git@github.com:wellsoliver/py-retrosheet.git • データ取得からDB(MySQLなど)へのmigrationを一気通貫に行う • 細々と開発が続いてる(っぽい)
  29. 29. Jupyter+pandas+matplotlib • 平たく言えば、「ブラウザ上で使えるPythonその他のSandbox環境」 • データやLibraryが不確実( 使いこなせていない)時の試し打ちとして最高すぎる環境 • pip install コマンドでちょいちょいとインストールしたらアッサリ環境が出来ます
  30. 30. 分析と可視化 • Hideki Matsui(#55)の全盛期と黄昏時 • Jon Lester(Cubs)は何月に多く勝つのか? Hideki Matsui Jon Lester
  31. 31. 松井(2004) VS 松井(2011) • 外野に飛んだヒットを分類&可視化 • 2004・2011共にセンター~ライトへの打球が多い(センター返しor引っ張り) • 2011年、本塁打と三塁打が恐ろしく少ないあっ(察し 2004(ヤンキース) 2011(アスレチックス)
  32. 32. ジョン・レスター(月別勝利) • 何故か5月に無双してる&いい年は9月に強い • オールスター(7月)前後は微妙に勝てない
  33. 33. コードは後日公開!!!
  34. 34. まとめ シモンズの守備ってまとめに相応しいよね 元画像: http://a.espncdn.com/photo/2013/1028/mlb_nl-gloves_06.jpg
  35. 35. Python + Baseball • 「野球Hackで迷ったらPython!」 • とはいえ、目的や好みに合わせて言語やFWを選ぶの 大切!
 →効率化&自分の武器が増えるという意味で • 好きなデータを好きな言語でHackすると楽しいよ (^O^) ※2年連続2回目
  36. 36. 好きな言語でHackしようぜ! ※キャプテン・ジーター使い回し 元画像:http://www.playbuzz.com/
  37. 37. これからの野球Hack(1年後) • 「データドリブン野球解説」を通じて新しい野球とスポーツの可能性を説いて生きたい!! • “これが、新しい野球. 既存の野球を軽く飛び越え,私たちは新しいスポーツの楽しみを知る” • 質が高い解説をするための情報収集&分析と基盤の整備
  38. 38. これからの野球Hack(2年後) • 「データで知る野球・スポーツ」が「アタリマエ」になる世界へ!!! • 2年後そして5年後の「スポーツ・野球のアタリマエ」を作る自分でありたい!!!
  39. 39. Possibilities of Python
  40. 40. “”” わたしの関心事は、野球だけ。 いったいなぜだろう? それは、ほかの分野の数字と違っ て、野球のデータには言葉と同 じ力があるからだ。 “”” - ビル・ジェームズ(セイバーメトリクスの父)
 書籍「マネー・ボール」第四章より
  41. 41. Possibilities of SABRmetrics
  42. 42. ゲームセット!!! ご清聴ありがとうございました. Shinichi Nakagawa(Twitter/Facebook/hatena:@shinyorke)

×