この記事はPython Advent Calendar 2015 18日目の記事です.
こんにちは!ストーブリーグが大好物な人です.
Python Advent Calendar 2015の順番が周る頃には新しい野球のライブラリ開発が終わる予定だったのですが...終わってないので今日は別の野球ネタ、それも一発芸的なネタで遊びたいと思います!
何をやったのか
- Pythonで野球データ分析をカジュアルにやってみる
- 中日の新助っ人大砲ダヤン・ビシエド外野手のメジャーリーグ時代(2012-2014)を調べてみた.
- Jupyter + pandas + matplotlibの超カンタンな使い方
Who am I ?
- @shinyorke(Twitter)
- 「野球」「Python」で探すと出てくるブログやらスライドを作っている人
- 将来は野球データで仕事がしたい(プロチームとか日本代表とかのスタッフで)
ビシエドさんis誰
- 中日ドラゴンズの新外国人(ウィキペディア)
- キューバ出身の26歳、年俸1億7千万円(推定)
- 2010-2014年はホワイトソックスでメジャーリーガーとしてプレー、2015年はいろんなチームを転々とした結果メジャー出場なし
- 右投げ右打ち、外野手、パワーヒッターで走塁・守備は苦手なタイプ
背景
昨夜、Pythonとは関係ない、野球のチャットで、
ビシエドは(彼を追っかけてる人が)評判よりいいって言ってました
とか、
ドラゴンズが来季優勝するには、4番一塁ビシエドを143試合やり続けることだと思います!
とか、そんな会話の流れで私が、
(守備力が)ウッズよりマシかどうかは別としてビシエドはパワー以外のスキルありまへんで(直球)
と、メジャー時代のイメージだけで適当な事を言っちゃったので、この「言っちゃったこと」をほんの少しだけ解明しよう!ということでやってみました.
準備
環境
私が試した環境です.
- Mac OS X 10.11(El Capitan)
- Python 3.5
- Docker
分析環境を構築(Jupyter notebook + MySQL)
RETROSHEETデータセットを扱う用のJupyter + pandas + matplotlib環境を一気呵成につくるプロジェクトがあるのでこちらを使います.
環境のセットアップはREADME.mdを参照ください.
ざっくり書くと、
- docker-composeコマンドでMySQLサーバー起動
- スキーマ作成
- 下記のコマンドでデータセット取得&MySQLにマイグレ
$ python migration.py -f 2012 -t 2014
ビシエドさんのデータを取得&可視化するPythonコード
データが手に入った&使える環境になったハズなので、jupyter notebookを起動します.
# hatteberg/retrosheet_app下で実行
$ jupyter notebook
無事に起動したらこんな感じでnotebook(Pythonスクリプト)を書きましょう.
%matplotlib inline
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from retrosheet_controller import RetroSheetDataController
from analyze_batter import AnalyzeBatter
# Retrosheetのデータを扱う人
cl = RetroSheetDataController()
# バッターを分析する人
analyzer = AnalyzeBatter()
# ビシエドがまともにメジャーでプレーした2012-2014年までの打撃成績を取得
hits = {}
for year in range(2012, 2015):
hits[year] = cl.batter_event_by_hits('Dayan', 'Viciedo', year)
# パワーヒッターらしいので、外野に飛んだ打球の傾向を見てみる
for year, hit in hits.items():
# 内外野に飛んだ打球の結果(single/double/triple/Homerun)ごとにカウント
hit_charts = analyzer.hit_location_data(hit)
# 外野に飛んだ打球を📊にする
df_hit_charts = pd.DataFrame(hit_charts.get('of', {}))
df_hit_charts.T.plot(kind='bar', stacked=True, ylim=(0, 100), title='Dayan Viciedo({year})'.format(year=year))
結果・考察・結論
結果
うまくいくと、こんなグラフが3つ出てきます.
縦軸がヒットの本数、横軸がポジションで、左からレフト・センター・ライトです.
グラフは積み上げになっていて、1B(単打)、2B(二塁打)、3B(三塁打)、HR(ホームラン)という感じで積んでいます.
考察と結論
- 真ん中左右と綺麗に打ち分けている.びっくりするぐらいのスプレーヒッター!
- とは言っても右のパワーヒッターだし左に引っ張り多いやろ!、、、って思ったら、右方向も多い.特に2013年はセンターから右が多い(割と不調な年だったとはいえ)
- パワーに加え、広角に打ち分けるバッティングスタイルは広いナゴヤドームを本拠地とする中日にはピッタリの選手ではなかろうかっ!?
今回は検証していない、守備や選球眼、三振の数を考えるとまだまだ安心はできませんが、少なくともドラゴンズ野球にフィットする可能性は高そうです.
パワー以外のスキルとして、「広角打法」もありました!というあたりが学びですね.
適当な事言ってすいませんでしたm(_ _)m
次の方へ
Pyladies Tokyoの座長@a_macbeeさんがきっと面白いことをしてくれるハズですw