Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 32 Ad

More Related Content

Slideshows for you (20)

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

Advertisement

More from Shinichi Nakagawa (15)

Recently uploaded (20)

Advertisement

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/

×