17
kawasaki.rb #15 2014/8/27 Shinichi Nakagawa a.k.a ガジェットさん Pythonではじめる野球プログラミング オープンデータとDjangoで野球を可視化してみた

Pythonではじめる野球プログラミング - kawasaki.rb #15 2014/8/27

  • Upload
    -

  • View
    2.783

  • Download
    7

Embed Size (px)

DESCRIPTION

2014/8/27 kawasaki.rb #15 発表資料 PyCon JP 2014 「Pythonではじめる野球プログラミング」の試作Ver.です。 https://pycon.jp/2014/schedule/presentation/30/

Citation preview

Page 1: Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27

kawasaki.rb #15 2014/8/27

Shinichi Nakagawa a.k.a ガジェットさん

Pythonではじめる野球プログラミングオープンデータとDjangoで野球を可視化してみた

Page 2: Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27

自己紹介

• 名前:Shinichi Nakagawa(中川伸一)

• Twitter:@shinyorke

• 呼び名:シンさん、ガジェットさん

• 所属:八重洲のWebサービス屋さん ※9月から

• 仕事:エンジニア 個人活動:野球アナリスト

• 興味:Python/可視化/Lean Startup/ロボット

• 野球と食べ歩き、ガジェット好き

• 普通のRuby使いからPythonistaへ

Page 3: Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27

• きっかけ

• データはどこにある?

• Pythonを使ったデータクリーニング

• Djangoアプリ構築

• セイバーメトリクスを可視化

おしながき

Page 4: Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27

きっかけ

大好きなソーシャル野球ゲームで勝ちたい !

→勝つためには優秀な選手・調子いい選手が必要 !

→オススメの選手を紹介するサービスを思いつく !

→プロフィールや成績を可視化してみたら?←今ココ

Page 5: Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27

ソーシャル野球ゲーム

Yahoo Fantasy Baseball http://baseball.fantasysports.yahoo.com/

Page 6: Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27

データはどこにある?

メディア 形式 使い勝手 備考

MLB公式 公開データなし - 何も公開していない

Baseball Reference

Web Site (html) ☓

スクレイピング前提、ライセンス的に使えない

Yahoo Social APIs

REST (json or XML) △

アプリから使いやすいが、取得可能な情報が少ない

Sean Lahman CSV,SQL他 ◯ CC3.0ライセンス、情報が

充実、コレなら使える!

Web上で使える主な野球データ(MLBのみ)

Page 7: Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27

Sean Lahman Database

http://www.seanlahman.com/baseball-archive/statistics/

・1871~2013までのMLB選手・球団のデータ ・CSV/SQL/Microsoft Access Database ・Creative Commons 3.0 License

Page 8: Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27

• DB Server(Ubuntu 14.04 LTS)構築

• MySQL他、必要なpackageのインストール

• スキーマ作成←Sean LahmanのDDLクエリー

• DB schemeからSQLAlchemyのModelを自動生成

• SQLAlchemyを使ってCSVをMySQLにロード

使ったもの:Vagrant, Chef solo, sqlacodegen

Pythonを使ったデータクリーニング

Page 9: Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27

sqlacodegen

https://pypi.python.org/pypi/sqlacodegen

・SQLAlchemyのModelを自動生成するパッケージ ・MySQL/SQLite/PostgreSQL(他も出来るかも) ・LegacyなサービスのReplaceなんかに使える > sqlacodegen mysql://user:pass@host/db

Page 10: Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27

出力結果

Page 11: Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27

• Djangoでアプリを作った←割と普通

• Python 3.4(最新版)を使用←頑張った

• Python 3.x系でのMySQL接続にハマる→解決!

• あとはひたすらviewとmodelを実装←割と普通

Djangoアプリ構築

Page 12: Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27

Python 3.4 + Django + MySQL・ConnectorはPyMySQL パッケージを使いましょう ・PyMySQL3は使えません←ハマったポイント ・__init__.pyにおまじないをかける(下の写真)

Page 13: Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27

• templateはBootstrap + HighCharts(グラフ描画)

• セイバーメトリクス指標を元にデータを可視化

• アウトにならない率:出塁率

• 投手/野手の運を指標化: BABIP

• 野手の純然たる得点能力:OPS, RC27,etc…

• チーム得点と失点から勝率を予測:ピタゴラス勝率

セイバーメトリクスを可視化

Page 14: Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27

ピタゴラス勝率とは?

・チームの総得点と総失点から勝率を予測する計算式 ・実際の勝率との比較で使う(特に運の要素) ・野球以外のスポーツにも応用可能

総得点の二乗 / (総得点の二乗 + 総失点の二乗)

【計算式】

Page 15: Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27

Demo

縦軸:ピタゴラス勝率による予測勝利数 横軸:実際の勝利数 2013年のメジャーリーグ、アメリカンリーグの成績を元に表示

Page 16: Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27

PyCon JP 2014(9/13(土),9/14(日)) #54 Pythonではじめる野球プログラミング(Shinichi Nakagawa)

https://pycon.jp/2014/

9/14(日) 16:15-16:45 Conference Hall ※一番広い場所 LTの前に野球やるよ!

Page 17: Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27

walk-off home run!!!ご清聴ありがとうございました!さようなら!!! Blog: http://shinyorke.hatenablog.com/