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
kawasaki.rb #15 2014/8/27
Shinichi Nakagawa a.k.a ガジェットさん
Pythonではじめる野球プログラミングオープンデータとDjangoで野球を可視化してみた
自己紹介
• 名前:Shinichi Nakagawa(中川伸一)
• Twitter:@shinyorke
• 呼び名:シンさん、ガジェットさん
• 所属:八重洲のWebサービス屋さん ※9月から
• 仕事:エンジニア 個人活動:野球アナリスト
• 興味:Python/可視化/Lean Startup/ロボット
• 野球と食べ歩き、ガジェット好き
• 普通のRuby使いからPythonistaへ
• きっかけ
• データはどこにある?
• Pythonを使ったデータクリーニング
• Djangoアプリ構築
• セイバーメトリクスを可視化
おしながき
きっかけ
大好きなソーシャル野球ゲームで勝ちたい !
→勝つためには優秀な選手・調子いい選手が必要 !
→オススメの選手を紹介するサービスを思いつく !
→プロフィールや成績を可視化してみたら?←今ココ
ソーシャル野球ゲーム
Yahoo Fantasy Baseball http://baseball.fantasysports.yahoo.com/
データはどこにある?
メディア 形式 使い勝手 備考
MLB公式 公開データなし - 何も公開していない
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
• DB Server(Ubuntu 14.04 LTS)構築
• MySQL他、必要なpackageのインストール
• スキーマ作成←Sean LahmanのDDLクエリー
• DB schemeからSQLAlchemyのModelを自動生成
• SQLAlchemyを使ってCSVをMySQLにロード
使ったもの:Vagrant, Chef solo, sqlacodegen
Pythonを使ったデータクリーニング
sqlacodegen
https://pypi.python.org/pypi/sqlacodegen
・SQLAlchemyのModelを自動生成するパッケージ ・MySQL/SQLite/PostgreSQL(他も出来るかも) ・LegacyなサービスのReplaceなんかに使える > sqlacodegen mysql://user:pass@host/db
出力結果
• Djangoでアプリを作った←割と普通
• Python 3.4(最新版)を使用←頑張った
• Python 3.x系でのMySQL接続にハマる→解決!
• あとはひたすらviewとmodelを実装←割と普通
Djangoアプリ構築
Python 3.4 + Django + MySQL・ConnectorはPyMySQL パッケージを使いましょう ・PyMySQL3は使えません←ハマったポイント ・__init__.pyにおまじないをかける(下の写真)
• templateはBootstrap + HighCharts(グラフ描画)
• セイバーメトリクス指標を元にデータを可視化
• アウトにならない率:出塁率
• 投手/野手の運を指標化: BABIP
• 野手の純然たる得点能力:OPS, RC27,etc…
• チーム得点と失点から勝率を予測:ピタゴラス勝率
セイバーメトリクスを可視化
ピタゴラス勝率とは?
・チームの総得点と総失点から勝率を予測する計算式 ・実際の勝率との比較で使う(特に運の要素) ・野球以外のスポーツにも応用可能
総得点の二乗 / (総得点の二乗 + 総失点の二乗)
【計算式】
Demo
縦軸:ピタゴラス勝率による予測勝利数 横軸:実際の勝利数 2013年のメジャーリーグ、アメリカンリーグの成績を元に表示
PyCon JP 2014(9/13(土),9/14(日)) #54 Pythonではじめる野球プログラミング(Shinichi Nakagawa)
https://pycon.jp/2014/
9/14(日) 16:15-16:45 Conference Hall ※一番広い場所 LTの前に野球やるよ!
walk-off home run!!!ご清聴ありがとうございました!さようなら!!! Blog: http://shinyorke.hatenablog.com/