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.
Pythonではじめる野球プログラミング 
Python×オープンデータでセイバーメトリクスをはじめよう 
Shinichi Nakagawa(リクルート住まいカンパニー)
自己紹介 
• 名前:Shinichi Nakagawa(中川伸一) 
• 別名:野生の野球アナリスト 
• Twitter: @shinyorke 
• 所属:リクルート住まいカンパニー 
• 仕事:Engineer, Lean Startu...
本日のスタメン 
• きっかけ 
• データはどこにある? 
• 野球データベースをつくろう 
• Djangoでアプリをつくろう 
• セイバーメトリクスを可視化 
• まとめ
きっかけ 
大好きなソーシャル野球ゲームで勝ちたいんや!!! 
! 
→勝つためには優秀な選手・調子いい選手が必要 
! 
→オススメの選手を紹介するサービスを思いつく 
! 
→まずは選手とチームの成績を可視化しよう!←今ここ
ソーシャル野球ゲーム 
Yahoo Fantasy Baseball http://baseball.fantasysports.yahoo.com/
データはどこにある? 
Web上で公開されている主要な野球データ(MLBのみ) 
メディア形式使い勝手備考 
MLB.com 公開データなし- ライセンス+αの理由で使え 
ない(察し) 
Baseball 
Reference 
Web Si...
Sean Lahman Database 
・1871~2013までのMLB選手・球団のデータ 
・CSV/SQL/Microsoft Access Database 
・Creative Commons 3.0 License 
http:/...
野球データベースをつくろう 
• Serverを立てる 
• MySQLをインストール 
• Schemeをつくる 
• SchemeからModelを自動生成 
• CSVデータを投入 
sqlacodegen
• Serverをコードで管理 
• DB Serverの構築に活用 
• Virtual Box上にUbuntu 
14.04 LTSのイメージを立て 
るコードを実装 
• ついでにChef soloの起動も 
• vm.boxを変えればそ...
Chef solo 
• ミドルウェアをコードで管理 
• インフラ作業をrecipe化 
• MySQLをインストール 
• Pythonをインストール 
• Scheme作成のシェル実行 
• コードでインフラを書く喜び 
(^o^)
sqlacodegen 
• DB SchemeからSQLAlchemy 
のModelコードを自動生成 
• pipでインストール可能 
• MySQL/PostgreSQL/ 
SQLite3などに対応 
• https://pypi.py...
出力結果 
まあ楽ちん!
• O/R Mapper Python代表 
• なんやかんやで使いやすい 
• Webアプリは勿論、他のプロ 
ダクトでも普通に使える 
• http://www.sqlalchemy.org/ 
• 選手および球団データを 
MySQLに投...
Djangoでアプリをつくろう 
• Python3.4 + Django 1.7でアプリ構築 
• MySQLの接続にハマる 
• Bootstrapで楽ちんデザイン 
• morris.jsで折れ線グラフを描く 
• HIGHCHARTSで...
Django 
• Web Applicationフレームワーク 
• 競合:Ruby On Railsなど 
• MTV(Model Template View)と呼ば 
れるアーキテクチャで実装されてい 
る 
• https://www....
[Tips]MySQLとの付き合い方 
• ConnectorはPyMySQLを 
使いましょう 
• PyMySQL3だと動きません! 
• Django内で使う時は 
__init__.py内におまじないを 
かけましょう(写真) 
• こ...
Start Bootstrap 
• http://startbootstrap.com/ 
• Bootstrapのtemplate集 
• ランディングページ、Admin 
(管理)など、種類が抱負 
• フリーと有料の両方アリ 
• 野球...
morris.js 
• Javascript製グラフ描画ライ 
ブラリ 
• http://morrisjs.github.io/ 
morris.js/ 
• 非常にシンプルで楽 
• レスポンシブデザインに対応 
• 折れ線グラフ描画に使...
HIGHCHARTS 
• Javascript製のビジュアライゼー 
ションライブラリ 
• レスポンシブデザインに対応 
• http://www.highcharts.com/ 
• 折れ線、棒、散布図etc…ほと 
んどのグラフがかける...
セイバーメトリクスを可視化 
• 選手のプロフィールを見やすく表示 
• BABIP : プレーの運・不運を可視化 
• ピタゴラス勝率 : 得点と失点からチーム勝率を予測
デモその① 
「プロフィールを表示」
BABIP 
• 正式名「Batting Average on Balls In Play」 
• 本塁打を除くグラウンド内に飛んだ打球が安打になっ 
た割合を指標化したもの。別名「インプレー打率」 
• .300前後が平均値。平均値を外れた場...
デモその② 
「BABIPと打率を比較」
ピタゴラス勝率 
• “得点と失点が等しい時の勝率は5割である”という 
仮説に基づき生み出された指標 
• 総得点と総失点から予想勝率を算出 
• 式:(総得点の二乗)÷(総得点の二乗+総失点の二乗) 
• ラグビー、サッカー等、他の球技でも...
デモその③ 
「ピタゴラス勝率」
学びとTips 
• Python + オープンデータでDIYな可視化とデータ 
解析ができる! 
• 改めて知った「野球データの奥深さ」 
• 【提案】好きなデータを好きな言語でHackすると 
楽しいよ\(^o^)/ 
• ソースコードは後...
walk-off home run!!! 
ご清聴ありがとうございました!さようなら!!! 
Blog: http://shinyorke.hatenablog.com/
Pythonではじめる野球プログラミング PyCon JP 2014 9/14 Talk Session
Pythonではじめる野球プログラミング PyCon JP 2014 9/14 Talk Session
Pythonではじめる野球プログラミング PyCon JP 2014 9/14 Talk Session
Pythonではじめる野球プログラミング PyCon JP 2014 9/14 Talk Session
Pythonではじめる野球プログラミング PyCon JP 2014 9/14 Talk Session
Upcoming SlideShare
Loading in …5
×

Pythonではじめる野球プログラミング PyCon JP 2014 9/14 Talk Session

20,475 views

Published on

Pycon JP 2014発表資料です。

ピタゴラス勝率とBABIPについて、Django他で可視化しました。

Published in: Software
  • Be the first to comment

Pythonではじめる野球プログラミング PyCon JP 2014 9/14 Talk Session

  1. 1. Pythonではじめる野球プログラミング Python×オープンデータでセイバーメトリクスをはじめよう Shinichi Nakagawa(リクルート住まいカンパニー)
  2. 2. 自己紹介 • 名前:Shinichi Nakagawa(中川伸一) • 別名:野生の野球アナリスト • Twitter: @shinyorke • 所属:リクルート住まいカンパニー • 仕事:Engineer, Lean Startup/Agile Coach(仮)
  3. 3. 本日のスタメン • きっかけ • データはどこにある? • 野球データベースをつくろう • Djangoでアプリをつくろう • セイバーメトリクスを可視化 • まとめ
  4. 4. きっかけ 大好きなソーシャル野球ゲームで勝ちたいんや!!! ! →勝つためには優秀な選手・調子いい選手が必要 ! →オススメの選手を紹介するサービスを思いつく ! →まずは選手とチームの成績を可視化しよう!←今ここ
  5. 5. ソーシャル野球ゲーム Yahoo Fantasy Baseball http://baseball.fantasysports.yahoo.com/
  6. 6. データはどこにある? Web上で公開されている主要な野球データ(MLBのみ) メディア形式使い勝手備考 MLB.com 公開データなし- ライセンス+αの理由で使え ない(察し) Baseball Reference Web Site (html) ☓ スクレイピング前提、ライ センス的に使えない Yahoo Social APIs REST △ アプリから使いやすいが、 (json or XML) 取得可能な情報が少ない Sean Lahman CSV,SQL他◯ CC3.0ライセンス、情報が 充実、コレなら使える!
  7. 7. Sean Lahman Database ・1871~2013までのMLB選手・球団のデータ ・CSV/SQL/Microsoft Access Database ・Creative Commons 3.0 License http://www.seanlahman.com/baseball-archive/statistics/
  8. 8. 野球データベースをつくろう • Serverを立てる • MySQLをインストール • Schemeをつくる • SchemeからModelを自動生成 • CSVデータを投入 sqlacodegen
  9. 9. • Serverをコードで管理 • DB Serverの構築に活用 • Virtual Box上にUbuntu 14.04 LTSのイメージを立て るコードを実装 • ついでにChef soloの起動も • vm.boxを変えればそのまま Production環境も作れる
  10. 10. Chef solo • ミドルウェアをコードで管理 • インフラ作業をrecipe化 • MySQLをインストール • Pythonをインストール • Scheme作成のシェル実行 • コードでインフラを書く喜び (^o^)
  11. 11. sqlacodegen • DB SchemeからSQLAlchemy のModelコードを自動生成 • pipでインストール可能 • MySQL/PostgreSQL/ SQLite3などに対応 • https://pypi.python.org/ pypi/sqlacodegen • 全テーブル(約20個!)の Modelが瞬殺で完成\(^o^)/
  12. 12. 出力結果 まあ楽ちん!
  13. 13. • O/R Mapper Python代表 • なんやかんやで使いやすい • Webアプリは勿論、他のプロ ダクトでも普通に使える • http://www.sqlalchemy.org/ • 選手および球団データを MySQLに投入するコードの中 で使用しました
  14. 14. Djangoでアプリをつくろう • Python3.4 + Django 1.7でアプリ構築 • MySQLの接続にハマる • Bootstrapで楽ちんデザイン • morris.jsで折れ線グラフを描く • HIGHCHARTSで散布図を描く PyMySQL morris.js HIGHCHARTS
  15. 15. Django • Web Applicationフレームワーク • 競合:Ruby On Railsなど • MTV(Model Template View)と呼ば れるアーキテクチャで実装されてい る • https://www.djangoproject.com/ • アプリ本体は全部Djangoで実装 • でも本当はFlaskの方が好み(小声)
  16. 16. [Tips]MySQLとの付き合い方 • ConnectorはPyMySQLを 使いましょう • PyMySQL3だと動きません! • Django内で使う時は __init__.py内におまじないを かけましょう(写真) • ここが一番のハマりポイント でした…←丸一日潰しました
  17. 17. Start Bootstrap • http://startbootstrap.com/ • Bootstrapのtemplate集 • ランディングページ、Admin (管理)など、種類が抱負 • フリーと有料の両方アリ • 野球アプリのtemplateとして Adminのイメージを使用
  18. 18. morris.js • Javascript製グラフ描画ライ ブラリ • http://morrisjs.github.io/ morris.js/ • 非常にシンプルで楽 • レスポンシブデザインに対応 • 折れ線グラフ描画に使用
  19. 19. HIGHCHARTS • Javascript製のビジュアライゼー ションライブラリ • レスポンシブデザインに対応 • http://www.highcharts.com/ • 折れ線、棒、散布図etc…ほと んどのグラフがかける • morris.jsで描けない散布図を 描画
  20. 20. セイバーメトリクスを可視化 • 選手のプロフィールを見やすく表示 • BABIP : プレーの運・不運を可視化 • ピタゴラス勝率 : 得点と失点からチーム勝率を予測
  21. 21. デモその① 「プロフィールを表示」
  22. 22. BABIP • 正式名「Batting Average on Balls In Play」 • 本塁打を除くグラウンド内に飛んだ打球が安打になっ た割合を指標化したもの。別名「インプレー打率」 • .300前後が平均値。平均値を外れた場合は何らか の外的要因があると考える(運、守備の巧拙etc…) • 式:(安打-本塁打)÷(打数-三振-本塁打+犠飛)
  23. 23. デモその② 「BABIPと打率を比較」
  24. 24. ピタゴラス勝率 • “得点と失点が等しい時の勝率は5割である”という 仮説に基づき生み出された指標 • 総得点と総失点から予想勝率を算出 • 式:(総得点の二乗)÷(総得点の二乗+総失点の二乗) • ラグビー、サッカー等、他の球技でも使える
  25. 25. デモその③ 「ピタゴラス勝率」
  26. 26. 学びとTips • Python + オープンデータでDIYな可視化とデータ 解析ができる! • 改めて知った「野球データの奥深さ」 • 【提案】好きなデータを好きな言語でHackすると 楽しいよ\(^o^)/ • ソースコードは後日Githubで公開しますので、真 似するなりforkしてやってみてください!
  27. 27. walk-off home run!!! ご清聴ありがとうございました!さようなら!!! Blog: http://shinyorke.hatenablog.com/

×