SlideShare a Scribd company logo
Pythonではじめる野球プログラミング 
Python×オープンデータでセイバーメトリクスをはじめよう 
Shinichi Nakagawa(リクルート住まいカンパニー)
自己紹介 
• 名前:Shinichi Nakagawa(中川伸一) 
• 別名:野生の野球アナリスト 
• Twitter: @shinyorke 
• 所属:リクルート住まいカンパニー 
• 仕事:Engineer, Lean Startup/Agile Coach(仮)
本日のスタメン 
• きっかけ 
• データはどこにある? 
• 野球データベースをつくろう 
• Djangoでアプリをつくろう 
• セイバーメトリクスを可視化 
• まとめ
きっかけ 
大好きなソーシャル野球ゲームで勝ちたいんや!!! 
! 
→勝つためには優秀な選手・調子いい選手が必要 
! 
→オススメの選手を紹介するサービスを思いつく 
! 
→まずは選手とチームの成績を可視化しよう!←今ここ
ソーシャル野球ゲーム 
Yahoo Fantasy Baseball http://baseball.fantasysports.yahoo.com/
データはどこにある? 
Web上で公開されている主要な野球データ(MLBのみ) 
メディア形式使い勝手備考 
MLB.com 公開データなし- ライセンス+αの理由で使え 
ない(察し) 
Baseball 
Reference 
Web Site 
(html) ☓ スクレイピング前提、ライ 
センス的に使えない 
Yahoo Social 
APIs 
REST 
△ アプリから使いやすいが、 
(json or XML) 取得可能な情報が少ない 
Sean 
Lahman CSV,SQL他◯ CC3.0ライセンス、情報が 
充実、コレなら使える!
Sean Lahman Database 
・1871~2013までのMLB選手・球団のデータ 
・CSV/SQL/Microsoft Access Database 
・Creative Commons 3.0 License 
http://www.seanlahman.com/baseball-archive/statistics/
野球データベースをつくろう 
• 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^)
Pythonではじめる野球プログラミング PyCon JP 2014 9/14 Talk Session
Pythonではじめる野球プログラミング PyCon JP 2014 9/14 Talk Session
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
Django 
• Web Applicationフレームワーク 
• 競合:Ruby On Railsなど 
• MTV(Model Template View)と呼ば 
れるアーキテクチャで実装されてい 
る 
• https://www.djangoproject.com/ 
• アプリ本体は全部Djangoで実装 
• でも本当はFlaskの方が好み(小声)
[Tips]MySQLとの付き合い方 
• ConnectorはPyMySQLを 
使いましょう 
• PyMySQL3だと動きません! 
• Django内で使う時は 
__init__.py内におまじないを 
かけましょう(写真) 
• ここが一番のハマりポイント 
でした…←丸一日潰しました
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 : プレーの運・不運を可視化 
• ピタゴラス勝率 : 得点と失点からチーム勝率を予測
デモその① 
「プロフィールを表示」
Pythonではじめる野球プログラミング PyCon JP 2014 9/14 Talk Session
BABIP 
• 正式名「Batting Average on Balls In Play」 
• 本塁打を除くグラウンド内に飛んだ打球が安打になっ 
た割合を指標化したもの。別名「インプレー打率」 
• .300前後が平均値。平均値を外れた場合は何らか 
の外的要因があると考える(運、守備の巧拙etc…) 
• 式:(安打-本塁打)÷(打数-三振-本塁打+犠飛)
デモその② 
「BABIPと打率を比較」
Pythonではじめる野球プログラミング PyCon JP 2014 9/14 Talk Session
ピタゴラス勝率 
• “得点と失点が等しい時の勝率は5割である”という 
仮説に基づき生み出された指標 
• 総得点と総失点から予想勝率を算出 
• 式:(総得点の二乗)÷(総得点の二乗+総失点の二乗) 
• ラグビー、サッカー等、他の球技でも使える
デモその③ 
「ピタゴラス勝率」
Pythonではじめる野球プログラミング PyCon JP 2014 9/14 Talk Session
学びとTips 
• Python + オープンデータでDIYな可視化とデータ 
解析ができる! 
• 改めて知った「野球データの奥深さ」 
• 【提案】好きなデータを好きな言語でHackすると 
楽しいよ\(^o^)/ 
• ソースコードは後日Githubで公開しますので、真 
似するなりforkしてやってみてください!
walk-off home run!!! 
ご清聴ありがとうございました!さようなら!!! 
Blog: http://shinyorke.hatenablog.com/

More Related Content

PDF
Pythonではじめる野球プログラミング - kawasaki.rb #15 2014/8/27
PDF
Pythonではじめる野球プログラミング(続き)PyCon JP 2014 LT
PDF
PyData入門(超初心者編)~野球のデータをカジュアルに可視化
PDF
価値を見せる技術 #DevLOVE ベースボールからみる技術
PDF
Python野球クラスタの紹介
PDF
A Tour of やきう&Go - やきう民の私とGoの半年(実質3日間)
PDF
Railsではじめる野球プログラミング
PDF
【Inception-Deck】野球Hack! - Pythonを用いたデータ分析と可視化
Pythonではじめる野球プログラミング - kawasaki.rb #15 2014/8/27
Pythonではじめる野球プログラミング(続き)PyCon JP 2014 LT
PyData入門(超初心者編)~野球のデータをカジュアルに可視化
価値を見せる技術 #DevLOVE ベースボールからみる技術
Python野球クラスタの紹介
A Tour of やきう&Go - やきう民の私とGoの半年(実質3日間)
Railsではじめる野球プログラミング
【Inception-Deck】野球Hack! - Pythonを用いたデータ分析と可視化

What's hot (20)

PDF
野球Hack!~Pythonを用いたデータ分析と可視化 #kwskrb #28 2015/9/30
PDF
アジャイルサムライ~Pythonista道場 #PyLadiesTokyo 1周年記念パーティー 2015/10/24
PDF
Python Professional Baseball Programming Open Data Edition #bpstudy 91(2015/3...
PDF
野球Hack!(続き)~Pythonを用いた野球サービス構築 #bpstudy
PDF
データ分析に使える野球データまとめ #PyDataTokyo meetup 2015/10/23
PPTX
Django learning Part2
PDF
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp
PDF
User Happyをささえるアジャイルのココロとスクラムのキホン
PDF
Rで野球のデータ解析がしたい (データが欲しい)
PDF
こんなゴールデン・グラブ賞は嫌だ~2015 #bpstudy 100回目記念LT
PPTX
SendGrid Parse APIをデモってみる
PDF
Rでセイバーメトリクス (イチローと松井 どっちが凄い?)
PPTX
私がCephを好きな7つの理由
PDF
Rで野球データ解析がしたい ( pitchRxを使う )
PDF
野球データを可視化してみた ニコニコ学会
PPTX
欅坂46のメンバーを識別するアルゴリズムを作る
PPTX
興味から遠い論文を”あえて”レコメンドするSlack Botを作成してみる
PDF
情報システム部がSplunk を使うとどうなるか?
PDF
Splunk_NiteX 「ノンテクエンジニアでも、デキる!ログ解析」
PDF
SIerでもSphinxを使いたい! 後編
野球Hack!~Pythonを用いたデータ分析と可視化 #kwskrb #28 2015/9/30
アジャイルサムライ~Pythonista道場 #PyLadiesTokyo 1周年記念パーティー 2015/10/24
Python Professional Baseball Programming Open Data Edition #bpstudy 91(2015/3...
野球Hack!(続き)~Pythonを用いた野球サービス構築 #bpstudy
データ分析に使える野球データまとめ #PyDataTokyo meetup 2015/10/23
Django learning Part2
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp
User Happyをささえるアジャイルのココロとスクラムのキホン
Rで野球のデータ解析がしたい (データが欲しい)
こんなゴールデン・グラブ賞は嫌だ~2015 #bpstudy 100回目記念LT
SendGrid Parse APIをデモってみる
Rでセイバーメトリクス (イチローと松井 どっちが凄い?)
私がCephを好きな7つの理由
Rで野球データ解析がしたい ( pitchRxを使う )
野球データを可視化してみた ニコニコ学会
欅坂46のメンバーを識別するアルゴリズムを作る
興味から遠い論文を”あえて”レコメンドするSlack Botを作成してみる
情報システム部がSplunk を使うとどうなるか?
Splunk_NiteX 「ノンテクエンジニアでも、デキる!ログ解析」
SIerでもSphinxを使いたい! 後編
Ad

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

PPTX
Python札幌201406
PPTX
Chainerで学ぶdeep learning
PPSX
20150808 osc関西@京都
PDF
Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)
PPTX
インドのインターネット環境 との戦い方
PDF
Digital OceanでPythonな環境を作ろう(途中成果) Python mini Hack-a-thon #43
PDF
俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014
PPTX
ノンプログラミングで楽したい
PDF
dots. 7/7 DSWBハンズオン資料
PDF
アジャイルソフトウェア開発の道具箱
PDF
ソーシャルゲーム開発における運用とそのツール
PDF
クラウドコンピューティングでつくるビッグデータ解析のいまとこれから
PDF
PythonによるWebスクレイピング入門
PPTX
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装
PPTX
Type scriptmemo
PPTX
データ分析基盤を支えるエンジニアリング
PDF
スタートアップで培ったアーキテクチャ設計ノウハウ
PDF
20150905 stream analytics
PDF
スクレイピングその後
PPTX
Talking about Microsoft On-premises Data Gateway
Python札幌201406
Chainerで学ぶdeep learning
20150808 osc関西@京都
Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)
インドのインターネット環境 との戦い方
Digital OceanでPythonな環境を作ろう(途中成果) Python mini Hack-a-thon #43
俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014
ノンプログラミングで楽したい
dots. 7/7 DSWBハンズオン資料
アジャイルソフトウェア開発の道具箱
ソーシャルゲーム開発における運用とそのツール
クラウドコンピューティングでつくるビッグデータ解析のいまとこれから
PythonによるWebスクレイピング入門
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装
Type scriptmemo
データ分析基盤を支えるエンジニアリング
スタートアップで培ったアーキテクチャ設計ノウハウ
20150905 stream analytics
スクレイピングその後
Talking about Microsoft On-premises Data Gateway
Ad

More from Shinichi Nakagawa (15)

PDF
Baseball Play Study 2016冬〜Replacement!(ありがとう陽岱鋼!)
PDF
Py "Baseball" Data入門〜サービス(と野球)を支えるデータ分析基盤 #monotarotech
PDF
Py "Baseball" Data入門 - 広島東洋カープ編 #pyconhiro
PDF
XPな俺達に贈るPyCon JP 2016レポート #xpjug
PDF
たった数行のPythonコードで打者大谷翔平がどれだけ凄いのかを見てみる #ABPro
PDF
ビックデータとPythonではじめる野球の統計分析 #pyconjp
PDF
Big Data Baseball with Python - Ichiro Suzuki hacks! #kwsk01
PDF
ビックデータとPythonではじめる野球の統計分析(α)
PDF
Pythonistaデビュー #PyNyumon 2016/5/31
PDF
やきうデータLT「ホームラン」 #pyconjp
PDF
Agile Baseball Science - アジャイル脳によく効く野球のハナシ
PDF
Agile Baseball Science - はじめてのセイバーメトリクス
PDF
Pythonistaな私がChefからAnsibleに乗り換えた話(ひたすらゆるくプレゼンする会 2015/4/9)
PDF
はじめてのLean Canvas〜最初のアイディアを言語化してみよう #bpstudy
PDF
Python + Raspberry Piでスマートハウスを手作りする(計画) Python mini Hack-a-thon #49 成果発表 2014...
Baseball Play Study 2016冬〜Replacement!(ありがとう陽岱鋼!)
Py "Baseball" Data入門〜サービス(と野球)を支えるデータ分析基盤 #monotarotech
Py "Baseball" Data入門 - 広島東洋カープ編 #pyconhiro
XPな俺達に贈るPyCon JP 2016レポート #xpjug
たった数行のPythonコードで打者大谷翔平がどれだけ凄いのかを見てみる #ABPro
ビックデータとPythonではじめる野球の統計分析 #pyconjp
Big Data Baseball with Python - Ichiro Suzuki hacks! #kwsk01
ビックデータとPythonではじめる野球の統計分析(α)
Pythonistaデビュー #PyNyumon 2016/5/31
やきうデータLT「ホームラン」 #pyconjp
Agile Baseball Science - アジャイル脳によく効く野球のハナシ
Agile Baseball Science - はじめてのセイバーメトリクス
Pythonistaな私がChefからAnsibleに乗り換えた話(ひたすらゆるくプレゼンする会 2015/4/9)
はじめてのLean Canvas〜最初のアイディアを言語化してみよう #bpstudy
Python + Raspberry Piでスマートハウスを手作りする(計画) Python mini Hack-a-thon #49 成果発表 2014...

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