Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp

92.934 visualizaciones

Publicado el

PyCon JP 2015 Talk Session発表資料

Publicado en: Software
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí

野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp

  1. 1. 野球Hack!~Pythonを用いたデータ分析と可視化 - The Art Of Programming A Baseball Game! - Shinichi Nakagawa@shinyorke PyCon JP 2015 Talk Session(2015/10/11)
  2. 2. Who am I ? • Shinichi Nakagawa(@shinyorke) • Recruit Sumai Company, Ltd. • Pythonista/Agile/Baseball Scientist • 贔屓チーム • 北海道日本ハムファイターズ(NPB) • オークランド・アスレチックス(MLB) • “野生の野球アナリスト”活動
  3. 3. “野生の野球アナリスト” 活動
  4. 4. • PyCon JP 2014 Talk Session(去年のやつ) • MLBオープンデータ分析&可視化サービスをPythonで構築 • はてブ200超え、PV 14,000以上(slideshare)
  5. 5. • PyCon JP 2014 Lightning Talk(去年のやつ) • Agileプロセス活用、アダム・ダン率の紹介 • アダム・ダンさん、Python界隈で有名になる
  6. 6. Other… • ブログで野球Hackの成果および考察を披露(不定期) • MLBオープンデータの紹介と活用例紹介 • 野球データの分析&解析用のライブラリを
 Githubで公開(ほぼPython製) • データドリブン野球解説 ※後ほど解説
  7. 7. 最終目標(40歳までに) • エンジニア×ビジネスマンとして、
 日本プロ野球orMLBの仕事をやる!
 ※NPB12球団+MLB30球団のオファー待ってます • 野球データとエンジニアの知見を活かし、
 2020年東京五輪でメダル獲得のサポート
 ※エンジニアとして(選手にはならないw)
  8. 8. Today’s Starting Member • Pythonと野球 • MLBオープンデータ活用とPython • Pythonで「俺々野球分析基盤」 • まとめ - これからの野球Hack
  9. 9. Pythonと野球
  10. 10. なぜ野球×Pythonなのか? • 野球データと野球Hack • Pythonと野球Hack
  11. 11. 野球データ(嬉) • ボックス・スコアによる正規化済みのデータが存在 • 打撃・投球・試合の成績がボックス・スコアで読みやすい・書きや すいフォーマットでまとまっている • 使えるデータが存在 • メジャーリーグはオープンなライセンスで使えるデータが存在
 (利用制限ほぼなし) • 日本プロ野球はデータをぶっこ抜く自動的に取得する仕組みを自作 することにより入手可能(当然、利用は制限される)
  12. 12. ボックス・スコア ※Sportsnaviより
  13. 13. 野球データ(辛) • データの解釈 • ボックス・スコア自体は読みやすいが、解釈そのものはルールや規約を 正確に読む必要がある
 例)振り逃げはどう記録される?
   インフィールドフライの条件とは? • ボックス・スコアには乗らないデータの存在 • 投手の球速、変化球の種類、打球の速度や着地点etc…
 ボックス・スコアに乗らないデータが存在
 &独自のフォーマットでの記載が多く読み書きが難しい
  14. 14. 野球Hackの掟 • スクラップアンドビルド • データを読む→仮説を立てる→コードを書く→可視化する→検証→ またデータを読む
 …の繰り返し、コードを書いては壊すを繰り返す作業が大半 • データの読み書きとルールの勉強 • 野球の記録の読み方、記録がつく理由を把握する為にルールを勉強
 →ルールを正確に把握するため、公認野球規則&審判の知識が必要
  ※実際本を買って勉強してます(実話)
  15. 15. Pythonと野球Hack • インフラ管理・構成
 Ansibleおよびdocker compose(というよりDocker)を活用、
 すぐ作れる&壊せるインフラで思う存分スクラップアンドビルドを! • バージョン&パッケージ管理
 pyenv + virtualenvでバージョン&パッケージ管理をプロジェクト単位で切り替え.
 →特定のPythonバージョン&パッケージに依存しない作り. • データ分析・可視化
 IPython notebook + pandas + matplotlibでカジュアルに分析&可視化.
 面倒くさいQUERYなどはSQLAlchemyなどで型化. • Webアプリ構築
 サクッと作る目的でFlask/bottle、しっかり作る目的でDjangoを使う.
  16. 16. なんでや!Pythonじゃなくてもできるやろ!! ※ボールの判定に不服なバルフォアさん、ではありません 元画像:http://www.sbs.com.au/
  17. 17. はい、Pythonじゃなくできます • インフラ管理・構成
 部分的にVagrantを使用、ちなみにChefはやめた. • バージョン&パッケージ管理
 Rubyのrenv/rbenv-gemsetなど、他の言語にも当然ながら存在. • データ分析・可視化
 得意な人はR・Juliaでいいと思う、野球HackをRでやってる方もいます.
 (他の言語は、、、どうなんだろう?) • Webアプリ構築
 APIやバッチならGolang, サイトならRuby On Rails他選択肢がたくさん有り 目的(と好み)に合わせて手段を柔軟に変えましょう
  18. 18. 好きな言語でHackしようぜ! ※キャプテン・ジーター、本当にお疲れ様でした 元画像:http://www.playbuzz.com/
  19. 19. MLBオープンデータとPython
  20. 20. 元ネタ(過去ブログより) http://shinyorke.hatenablog.com/entry/ 2015/04/06/190243
  21. 21. やりたかったこと • 野球ゲーム「Fantasy Baseball」に勝つため、 選手の詳細な情報(主に成績)が必要に • MLBのオープンデータ「Retrosheet」に
 それらが詰められてるらしい
 
 ワイ「データベースつくればいいじゃん!」
  22. 22. Retrosheet is 何? • メジャーリーグのスコアデータ集 • 1887~2014(昨シーズン)までのデータをCSVで配布 
 ※1989以前は欠損有り • スコアブックで得られる情報(得点、失点、スタメン、打席 結果etc…)と選手情報(名前、ポジションなど)がひと目 でわかる • http://retrosheet.org/
  23. 23. やったこと • Vagrant + AnsibleでMySQL Server構築 • SQLAlchemy + py-retrosheetでmigration • Jupyter(IPython notebook)とpandasで分析 • matplotlibで可視化
  24. 24. 構成 Simple is Best?
  25. 25. 構成 Simple is Best!!! →構成を型化してイケてる感じに
  26. 26. サーバー構築とmigration $ vagrant up $ ansible-playbook -i hosts retrosheet_server.yml この2行でサーバーを作れるようにしました! ※VagrantとAnsibleを導入している前提です
  27. 27. PY-RETROSHEET - やきうScript • Retrosheet専用Download&migration script
 git@github.com:wellsoliver/py-retrosheet.git • データ取得からDB(MySQLなど)へのmigrationを一気通貫に行える神ライブラリ
  28. 28. IPython notebook+pandas • 平たく言えば、「ブラウザ上で使えるPythonその他のSandbox環境」 • データやLibraryが不確実( 使いこなせていない)時の試し打ちとして最高すぎる環境 • pandasで前処理、matplotlibでお絵かき(グラフ描画など)
  29. 29. 分析と可視化 • レスターは何月に一番勝っているのか? • ボットのマルチ四球(=1試合2四球)の回数
 Jon Lester Joey Votto
  30. 30. Jon Lester(ジョン・レスター) • メジャー屈指の先発左腕、優勝請負人 ※世界一経験二回 • プレーオフ(10/9)に先発、なお負け投手 • レッドソックス(2006-2014)→アスレチックス(2014)→カブス(2015)
  31. 31. レスターさんの月別勝利数 • 調子いい時は4,5月で稼いでいる、8,9月も良さげだがそんなに極端ではない • 残りの月はなんか微妙だけど傾向がアレ
 ちなみに7月はオールスターの為登板が少ない(レスターにかぎらず)
  32. 32. Joey Votto(ジョーイ・ボット) • レッズ一筋(2007-2015)、強打の一塁手 • 選球眼が良すぎて散歩(四球)が多い、通算アダム・ダン率は38% • 内野フライが異常に少ない。とある統計によると、2009-2012の4年間で3本(ファ!?)
  33. 33. 塁間さんぽ(イッチVSボット) • 月別の四球数、凡例の数字はシーズン通算 • 圧倒的にボットさんが散歩好き、特に8,9月やばい • 神イチローはとにかく打って走るスタイル、春先はまあまあ歩いてる イチロー ボット
  34. 34. マルチさんぽ(イッチVSボット) • 1試合で2個以上四球を選んだ試合を月別にカウント • ボットさんの回数がやばい • 神イチローはある意味予想通り、流石天才バッター イチロー ボット
  35. 35. コードは後日公開!!!
  36. 36. Pythonで 「俺々野球分析基盤」 を作ったハナシ
  37. 37. キッカケはコチラ
  38. 38. http://www.slideshare.net/shinyorke/agile-baseball-science-52692504
  39. 39. やりたかったこと • 日本プロ野球データを元に野球統計学の話を するネタを思いつく • だがしかし、MLBのようにオープン化された データなんぞない • そうだ、データをぶっこ抜く自動的に取得し て計算してレポート出せばいいじゃん!
  40. 40. どうやって解決したか • スポーツのデータサイト(Y⃝hoo等)から、
 順位表と選手成績を取得 • 取得したデータを元にセイバーメトリクス指標 を算出 • 一日に一回、取得&算出を行い、Excelシートに 計算結果出力&AWS S3に転送
  41. 41. 構成(development)
  42. 42. 構成(Provisioning)
  43. 43. • ぶっちゃけ当初の要件でDockerは不要だった • しかし、将来的に「俺々野球基盤」としてService を立ち上げる構想があり、今のうちに試せること はためそう!と思いDockerを本番投入 • docker compose(旧名fig)でアプリとDBを
 一気通貫にService立ちあげする下地を作った
  44. 44. crontab(parse-crontab) • DockerのPython container(Debian)、
 デフォルトでcrontabが使えない事が判明 • いちいち設定するのもアレだ…と思った矢先に、
 いい感じのライブラリーを発見!!!
 parse-crontab: https://github.com/josiahcarlson/parse-crontab
 example : http://gaujin.jp/index.php?itemid=27 
 ※ @gaujin_jp さんありがとうございます! • ピュアなPython環境でcrontab環境実現&自動実行が可能に!!!
  45. 45. 分析と可視化 • アダム・ダン率
 三振・四球・ホームランでアダム・ダンらしさ を評価 • 被アダム・ダン率
 アダム・ダンな打者を量産する可能性がある 投手を見つける
  46. 46. Wikipedia「三振」 ※1年ぶり2回目の登場 https://ja.wikipedia.org/wiki/三振 アダム・ダン
  47. 47. アダム・ダン率 = (ダンらしさ) / 打数 * 100 
 ※ダンらしさ = 本塁打 + 四球+ 三振
  48. 48. アダム・ダン率ランキング(P) 順位 選手名 (チーム) ダン 率 HR 四球 三振 コメント 1 中村剛也(西) 46.2 37 68 172 三振王かつ本塁打王 2 メヒア(西) 42.9 27 45 153 去年の本塁打王 3 ペーニャ(楽) 40.2 17 70 111 典型的な地蔵タイプ 4 森友哉(西) 38.4 17 44 143 お若いのに三振多すぎぃ 5 松田宣浩(ソ) 38.1 35 60 135 テラス席の申し子 ※2015シーズン終了時
  49. 49. アダム・ダン率ランキング(C) 順位 選手名 (チーム) ダン 率 HR 四球 三振 コメント 1 丸佳浩(広) 40.4 19 94 143 三振と四球で二冠達成 2 ゴメス(神) 37.1 17 72 134 キャラ通りの成績 3 山田哲人(ヤ) 35.6 38 81 111 思ったより三振多い 4 梶谷隆幸(D) 34.4 13 54 132 役割的に三振の数は深刻 5 筒香嘉智(D) 33.5 24 68 98 まあまあ合格点 ※2015シーズン終了時
  50. 50. 被アダム・ダン率 = (ダンらしさ) / 打者数 * 100 
 ※ダンらしさ = 被本塁打 + 与四死球 + 三振
  51. 51. 被アダム・ダン率ランキング(P) 順位 選手名 (チーム) ダン 率 HR 四球 三振 コメント 1 大谷翔平(日) 40.6 7 46 196 本格派すぎる 2 則本昂大(楽) 35.3 14 48 215 奪三振王&やや飛翔 3 武田翔太(ソ) 34.8 14 59 163 やや飛翔癖あり 4 中田賢一(ソ) 33 17 61 130 飛翔しすぎぃ 5 西勇輝(オ) 31 11 43 143 本格派になりつつある ※2015シーズン終了時
  52. 52. 被アダム・ダン率ランキング(C) 順位 選手名 (チーム) ダン 率 HR 四球 三振 コメント 1 藤浪晋太郎(神) 38.5 9 82 221 三振と四球で二冠達成 2 メッセンジャー(神) 33.5 10 60 194 三振&四球2位 3 高木勇人(巨) 29.8 16 47 131 ルーキー 4 ジョンソン(広) 29 5 67 150 同僚の黒田は21.9ダン 5 小川泰弘(ヤ) 28.3 18 48 128 成瀬の代わりに飛翔 ※2015シーズン終了時
  53. 53. コードは後日公開…
  54. 54. しません!!! (察してください…w)
  55. 55. まとめ シモンズの守備ってまとめに相応しいよね 元画像: http://a.espncdn.com/photo/2013/1028/mlb_nl-gloves_06.jpg
  56. 56. Python + Baseball • 「野球Hackで迷ったらPython!」 • データ分析&検証、プロトタイプ作りといった、
 「不確定要素が多いproject」でのPythonは強い
 →スタートアップとか(野球関係ないけど…w) • とはいえ向き・不向きや好みもあるので他の言語 やFWもいい感じに柔軟に使うといいでしょう
  57. 57. 好きな言語でHackしようぜ! ※大切なので二回いいました 元画像:http://www.playbuzz.com/
  58. 58. Possibilities of Python
  59. 59. これからの野球Hack • 個人として • みんなで(コミュニティ的な意味で) • 大切にしたいこと
  60. 60. これからの野球Hack(願望) • 「データドリブン野球解説」を通じて新しい野球とスポーツの可能性を説いて生きたい!! →やきうをオープンな情報基盤に! • 東京五輪に向けて、新しい野球・スポーツの楽しみ方を模索&リードしていきたい!!!
  61. 61. みんなで野球Hack!!! • 本日の発表などを通じ、
 「面白い!」
 「俺も(私も)やりたい!!」
 と思った方!是非一緒にやりましょう!!! • 明日(10/12)のPyCon JP 2015 Sprintsで
 一緒に野球をHackしましょう!!!
  62. 62. 大切にしたいこと
  63. 63. ビル・ジェームズ -野球統計学「セイバーメトリクス」の生みの親- 元画像: http://sportsworld.nbcsports.com/bill-james-statistical-revolution/
  64. 64. “”” わたしの関心事は、野球だけ。 いったいなぜだろう? それは,ほかの分野の数字と 違って,野球のデータには
 言葉と同じ力があるからだ。 “”” - 書籍「マネー・ボール」第四章より
  65. 65. Possibilities of 野球Hack!
  66. 66. ゲームセット!!! ご清聴ありがとうございました. Shinichi Nakagawa(Twitter/Facebook/hatena:@shinyorke)

×