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