Submit Search
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp
•
75 likes
•
103,359 views
Shinichi Nakagawa
Follow
PyCon JP 2015 Talk Session発表資料
Read less
Read more
1 of 66
Download now
Downloaded 70 times
More Related Content
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp
1.
野球Hack!~Pythonを用いたデータ分析と可視化 - The Art
Of Programming A Baseball Game! - Shinichi Nakagawa@shinyorke PyCon JP 2015 Talk Session(2015/10/11)
2.
Who am I
? • Shinichi Nakagawa(@shinyorke) • Recruit Sumai Company, Ltd. • Pythonista/Agile/Baseball Scientist • 贔屓チーム • 北海道日本ハムファイターズ(NPB) • オークランド・アスレチックス(MLB) • “野生の野球アナリスト”活動
3.
“野生の野球アナリスト” 活動
4.
• PyCon JP
2014 Talk Session(去年のやつ) • MLBオープンデータ分析&可視化サービスをPythonで構築 • はてブ200超え、PV 14,000以上(slideshare)
5.
• PyCon JP
2014 Lightning Talk(去年のやつ) • Agileプロセス活用、アダム・ダン率の紹介 • アダム・ダンさん、Python界隈で有名になる
6.
Other… • ブログで野球Hackの成果および考察を披露(不定期) • MLBオープンデータの紹介と活用例紹介 •
野球データの分析&解析用のライブラリを Githubで公開(ほぼPython製) • データドリブン野球解説 ※後ほど解説
7.
最終目標(40歳までに) • エンジニア×ビジネスマンとして、 日本プロ野球orMLBの仕事をやる! ※NPB12球団+MLB30球団のオファー待ってます • 野球データとエンジニアの知見を活かし、 2020年東京五輪でメダル獲得のサポート ※エンジニアとして(選手にはならないw)
8.
Today’s Starting Member •
Pythonと野球 • MLBオープンデータ活用とPython • Pythonで「俺々野球分析基盤」 • まとめ - これからの野球Hack
9.
Pythonと野球
10.
なぜ野球×Pythonなのか? • 野球データと野球Hack • Pythonと野球Hack
11.
野球データ(嬉) • ボックス・スコアによる正規化済みのデータが存在 • 打撃・投球・試合の成績がボックス・スコアで読みやすい・書きや すいフォーマットでまとまっている •
使えるデータが存在 • メジャーリーグはオープンなライセンスで使えるデータが存在 (利用制限ほぼなし) • 日本プロ野球はデータをぶっこ抜く自動的に取得する仕組みを自作 することにより入手可能(当然、利用は制限される)
12.
ボックス・スコア ※Sportsnaviより
13.
野球データ(辛) • データの解釈 • ボックス・スコア自体は読みやすいが、解釈そのものはルールや規約を 正確に読む必要がある 例)振り逃げはどう記録される? インフィールドフライの条件とは? •
ボックス・スコアには乗らないデータの存在 • 投手の球速、変化球の種類、打球の速度や着地点etc… ボックス・スコアに乗らないデータが存在 &独自のフォーマットでの記載が多く読み書きが難しい
14.
野球Hackの掟 • スクラップアンドビルド • データを読む→仮説を立てる→コードを書く→可視化する→検証→ またデータを読む …の繰り返し、コードを書いては壊すを繰り返す作業が大半 •
データの読み書きとルールの勉強 • 野球の記録の読み方、記録がつく理由を把握する為にルールを勉強 →ルールを正確に把握するため、公認野球規則&審判の知識が必要 ※実際本を買って勉強してます(実話)
15.
Pythonと野球Hack • インフラ管理・構成 Ansibleおよびdocker compose(というよりDocker)を活用、 すぐ作れる&壊せるインフラで思う存分スクラップアンドビルドを! •
バージョン&パッケージ管理 pyenv + virtualenvでバージョン&パッケージ管理をプロジェクト単位で切り替え. →特定のPythonバージョン&パッケージに依存しない作り. • データ分析・可視化 IPython notebook + pandas + matplotlibでカジュアルに分析&可視化. 面倒くさいQUERYなどはSQLAlchemyなどで型化. • Webアプリ構築 サクッと作る目的でFlask/bottle、しっかり作る目的でDjangoを使う.
16.
なんでや!Pythonじゃなくてもできるやろ!! ※ボールの判定に不服なバルフォアさん、ではありません 元画像:http://www.sbs.com.au/
17.
はい、Pythonじゃなくできます • インフラ管理・構成 部分的にVagrantを使用、ちなみにChefはやめた. • バージョン&パッケージ管理 Rubyのrenv/rbenv-gemsetなど、他の言語にも当然ながら存在. •
データ分析・可視化 得意な人はR・Juliaでいいと思う、野球HackをRでやってる方もいます. (他の言語は、、、どうなんだろう?) • Webアプリ構築 APIやバッチならGolang, サイトならRuby On Rails他選択肢がたくさん有り 目的(と好み)に合わせて手段を柔軟に変えましょう
18.
好きな言語でHackしようぜ! ※キャプテン・ジーター、本当にお疲れ様でした 元画像:http://www.playbuzz.com/
19.
MLBオープンデータとPython
20.
元ネタ(過去ブログより) http://shinyorke.hatenablog.com/entry/ 2015/04/06/190243
21.
やりたかったこと • 野球ゲーム「Fantasy Baseball」に勝つため、 選手の詳細な情報(主に成績)が必要に •
MLBのオープンデータ「Retrosheet」に それらが詰められてるらしい ワイ「データベースつくればいいじゃん!」
22.
Retrosheet is 何? •
メジャーリーグのスコアデータ集 • 1887~2014(昨シーズン)までのデータをCSVで配布 ※1989以前は欠損有り • スコアブックで得られる情報(得点、失点、スタメン、打席 結果etc…)と選手情報(名前、ポジションなど)がひと目 でわかる • http://retrosheet.org/
23.
やったこと • Vagrant +
AnsibleでMySQL Server構築 • SQLAlchemy + py-retrosheetでmigration • Jupyter(IPython notebook)とpandasで分析 • matplotlibで可視化
24.
構成 Simple is Best?
25.
構成 Simple is Best!!! →構成を型化してイケてる感じに
26.
サーバー構築とmigration $ vagrant up $
ansible-playbook -i hosts retrosheet_server.yml この2行でサーバーを作れるようにしました! ※VagrantとAnsibleを導入している前提です
27.
PY-RETROSHEET - やきうScript •
Retrosheet専用Download&migration script
[email protected]
:wellsoliver/py-retrosheet.git • データ取得からDB(MySQLなど)へのmigrationを一気通貫に行える神ライブラリ
28.
IPython notebook+pandas • 平たく言えば、「ブラウザ上で使えるPythonその他のSandbox環境」 •
データやLibraryが不確実( 使いこなせていない)時の試し打ちとして最高すぎる環境 • pandasで前処理、matplotlibでお絵かき(グラフ描画など)
29.
分析と可視化 • レスターは何月に一番勝っているのか? • ボットのマルチ四球(=1試合2四球)の回数 Jon
Lester Joey Votto
30.
Jon Lester(ジョン・レスター) • メジャー屈指の先発左腕、優勝請負人 ※世界一経験二回 •
プレーオフ(10/9)に先発、なお負け投手 • レッドソックス(2006-2014)→アスレチックス(2014)→カブス(2015)
31.
レスターさんの月別勝利数 • 調子いい時は4,5月で稼いでいる、8,9月も良さげだがそんなに極端ではない • 残りの月はなんか微妙だけど傾向がアレ ちなみに7月はオールスターの為登板が少ない(レスターにかぎらず)
32.
Joey Votto(ジョーイ・ボット) • レッズ一筋(2007-2015)、強打の一塁手 •
選球眼が良すぎて散歩(四球)が多い、通算アダム・ダン率は38% • 内野フライが異常に少ない。とある統計によると、2009-2012の4年間で3本(ファ!?)
33.
塁間さんぽ(イッチVSボット) • 月別の四球数、凡例の数字はシーズン通算 • 圧倒的にボットさんが散歩好き、特に8,9月やばい •
神イチローはとにかく打って走るスタイル、春先はまあまあ歩いてる イチロー ボット
34.
マルチさんぽ(イッチVSボット) • 1試合で2個以上四球を選んだ試合を月別にカウント • ボットさんの回数がやばい •
神イチローはある意味予想通り、流石天才バッター イチロー ボット
35.
コードは後日公開!!!
36.
Pythonで 「俺々野球分析基盤」 を作ったハナシ
37.
キッカケはコチラ
38.
http://www.slideshare.net/shinyorke/agile-baseball-science-52692504
39.
やりたかったこと • 日本プロ野球データを元に野球統計学の話を するネタを思いつく • だがしかし、MLBのようにオープン化された データなんぞない •
そうだ、データをぶっこ抜く自動的に取得し て計算してレポート出せばいいじゃん!
40.
どうやって解決したか • スポーツのデータサイト(Y⃝hoo等)から、 順位表と選手成績を取得 • 取得したデータを元にセイバーメトリクス指標 を算出 •
一日に一回、取得&算出を行い、Excelシートに 計算結果出力&AWS S3に転送
41.
構成(development)
42.
構成(Provisioning)
43.
• ぶっちゃけ当初の要件でDockerは不要だった • しかし、将来的に「俺々野球基盤」としてService を立ち上げる構想があり、今のうちに試せること はためそう!と思いDockerを本番投入 •
docker compose(旧名fig)でアプリとDBを 一気通貫にService立ちあげする下地を作った
44.
crontab(parse-crontab) • DockerのPython container(Debian)、 デフォルトでcrontabが使えない事が判明 •
いちいち設定するのもアレだ…と思った矢先に、 いい感じのライブラリーを発見!!! parse-crontab: https://github.com/josiahcarlson/parse-crontab example : http://gaujin.jp/index.php?itemid=27 ※ @gaujin_jp さんありがとうございます! • ピュアなPython環境でcrontab環境実現&自動実行が可能に!!!
45.
分析と可視化 • アダム・ダン率 三振・四球・ホームランでアダム・ダンらしさ を評価 • 被アダム・ダン率 アダム・ダンな打者を量産する可能性がある 投手を見つける
46.
Wikipedia「三振」 ※1年ぶり2回目の登場 https://ja.wikipedia.org/wiki/三振 アダム・ダン
47.
アダム・ダン率 = (ダンらしさ)
/ 打数 * 100 ※ダンらしさ = 本塁打 + 四球+ 三振
48.
アダム・ダン率ランキング(P) 順位 選手名 (チーム) ダン 率 HR 四球 三振
コメント 1 中村剛也(西) 46.2 37 68 172 三振王かつ本塁打王 2 メヒア(西) 42.9 27 45 153 去年の本塁打王 3 ペーニャ(楽) 40.2 17 70 111 典型的な地蔵タイプ 4 森友哉(西) 38.4 17 44 143 お若いのに三振多すぎぃ 5 松田宣浩(ソ) 38.1 35 60 135 テラス席の申し子 ※2015シーズン終了時
49.
アダム・ダン率ランキング(C) 順位 選手名 (チーム) ダン 率 HR 四球 三振
コメント 1 丸佳浩(広) 40.4 19 94 143 三振と四球で二冠達成 2 ゴメス(神) 37.1 17 72 134 キャラ通りの成績 3 山田哲人(ヤ) 35.6 38 81 111 思ったより三振多い 4 梶谷隆幸(D) 34.4 13 54 132 役割的に三振の数は深刻 5 筒香嘉智(D) 33.5 24 68 98 まあまあ合格点 ※2015シーズン終了時
50.
被アダム・ダン率 = (ダンらしさ)
/ 打者数 * 100 ※ダンらしさ = 被本塁打 + 与四死球 + 三振
51.
被アダム・ダン率ランキング(P) 順位 選手名 (チーム) ダン 率 HR 四球 三振
コメント 1 大谷翔平(日) 40.6 7 46 196 本格派すぎる 2 則本昂大(楽) 35.3 14 48 215 奪三振王&やや飛翔 3 武田翔太(ソ) 34.8 14 59 163 やや飛翔癖あり 4 中田賢一(ソ) 33 17 61 130 飛翔しすぎぃ 5 西勇輝(オ) 31 11 43 143 本格派になりつつある ※2015シーズン終了時
52.
被アダム・ダン率ランキング(C) 順位 選手名 (チーム) ダン 率 HR 四球 三振
コメント 1 藤浪晋太郎(神) 38.5 9 82 221 三振と四球で二冠達成 2 メッセンジャー(神) 33.5 10 60 194 三振&四球2位 3 高木勇人(巨) 29.8 16 47 131 ルーキー 4 ジョンソン(広) 29 5 67 150 同僚の黒田は21.9ダン 5 小川泰弘(ヤ) 28.3 18 48 128 成瀬の代わりに飛翔 ※2015シーズン終了時
53.
コードは後日公開…
54.
しません!!! (察してください…w)
55.
まとめ シモンズの守備ってまとめに相応しいよね 元画像: http://a.espncdn.com/photo/2013/1028/mlb_nl-gloves_06.jpg
56.
Python + Baseball •
「野球Hackで迷ったらPython!」 • データ分析&検証、プロトタイプ作りといった、 「不確定要素が多いproject」でのPythonは強い →スタートアップとか(野球関係ないけど…w) • とはいえ向き・不向きや好みもあるので他の言語 やFWもいい感じに柔軟に使うといいでしょう
57.
好きな言語でHackしようぜ! ※大切なので二回いいました 元画像:http://www.playbuzz.com/
58.
Possibilities of Python
59.
これからの野球Hack • 個人として • みんなで(コミュニティ的な意味で) •
大切にしたいこと
60.
これからの野球Hack(願望) • 「データドリブン野球解説」を通じて新しい野球とスポーツの可能性を説いて生きたい!! →やきうをオープンな情報基盤に! • 東京五輪に向けて、新しい野球・スポーツの楽しみ方を模索&リードしていきたい!!!
61.
みんなで野球Hack!!! • 本日の発表などを通じ、 「面白い!」 「俺も(私も)やりたい!!」 と思った方!是非一緒にやりましょう!!! • 明日(10/12)のPyCon
JP 2015 Sprintsで 一緒に野球をHackしましょう!!!
62.
大切にしたいこと
63.
ビル・ジェームズ -野球統計学「セイバーメトリクス」の生みの親- 元画像: http://sportsworld.nbcsports.com/bill-james-statistical-revolution/
64.
“”” わたしの関心事は、野球だけ。 いったいなぜだろう? それは,ほかの分野の数字と 違って,野球のデータには 言葉と同じ力があるからだ。 “”” - 書籍「マネー・ボール」第四章より
65.
Possibilities of 野球Hack!
66.
ゲームセット!!! ご清聴ありがとうございました. Shinichi Nakagawa(Twitter/Facebook/hatena:@shinyorke)
Download