Lean Baseball

No Engineering, No Baseball.

Pythonではじめる野球プログラミング~GitHubで公開を始めました #pyconjp

気がつけば約一ヶ月半、ブログを放置してました。

新天地での仕事や出会い、喜びや苦しみを全身で楽しんでいる*1僕ですこんばんは。

あ、ついでにPepperのレンタル*2も決まりましたw

遡ること一ヶ月半前、PyCon JP 2014 in Tokyo | September 12th – September 15th二日目のトークセッションで披露した「Pythonではじめる野球プログラミング」ですが、こちらのアプリケーションを公開したので今日はそんな紹介を書かせてください。

Pythonではじめる野球プログラミング~GitHubで公開を始めました

GitHubプロジェクト

アプリとDBで別々にプロジェクトを管理しています

アプリケーション本体(Python Django)

Shinichi-Nakagawa/no-ball-app-django · GitHub

データベースサーバー(Vagrant + Chef Solo)

Shinichi-Nakagawa/no-ball-db-server · GitHub

プロジェクト名「no-ball(のぼーる)」の由来

日本を代表する俳人であり、最初期の野球選手である、正岡子規さんの雅号「野球(のぼーる)」にちなんで名づけました。

「打者」「走者」「四球」「直球」「飛球」etc...野球の用語や指標を日本語に訳したのは正岡子規さんだそうです。

そんな、「のぼーる」さんが生み出した野球の表現・文学の歴史を継承するという意味合いをこめてこの名前を拝借しました。

ちなみに、正岡子規と野球についてはウィキペディアのページに乗っています。

正岡子規 - Wikipedia

デモ

このアプリケーションで出来ること・楽しめることは、こちらの発表動画・スライドでお楽しみください。

技術の話も簡単に触れています。

Talk Session 「Pythonではじめる野球プログラミング」


CH15 Pythonではじめる野球プログラミング (ja) - YouTube

Lightning Talk 「Pythonではじめる野球プログラミング(続き)」

動画は16分目あたりから再生してください!


CH16 Lightning Talks ~ Closing - YouTube

Pythonではじめるセイバーメトリクス~セイバーメトリクスのコードをちょこっと紹介

打率、出塁率、WHIP、アダム・ダン率etc...スコアブックおよびセイバーメトリクスで使用されているメトリクスの計算は以下のコードにあります。

https://github.com/Shinichi-Nakagawa/no-ball-app-django/blob/master/noball/service/stats.py

service/stats.py

上記のGistではIP(イニング数)、BABIP(インプレー打率)、RC/RC27(Run created/Runcreated 27、得点能力の指標)、そしてアダム・ダン率を紹介しています。

基本的に四則演算で終わっていますが、計算式が煩雑なRC/RC27はやっぱりカオスですw

このクラスのメソッドはすべて、引数(ヒット、ホームラン、打席、etc...)を貰ったら計算結果を返す、というシンプルな構成でできています。

同じディレクトリにあるテストコードをご覧頂ければ何をしたいかは一目瞭然かと思います。

こちらは、Djangoのアプリケーションから独立した形で作っていますので、Pythonで野球をやりたい人はそのままパクって持って行って貰って構いません。

プロジェクト解説~又はREADME.mdに載せていない小ネタなど
アプリケーションとデータベースが別のプロジェクトな理由

元々はDjangoもデータベースも同じプロジェクトだったのですが、切り離すことにしました。

理由は単純で、

データベースのみの使用が出来るように切り離した

だけです。

今回は発表用にPythonで実装しましたが、実際の利用シーンとしては、

  • DBのみ構築、アプリを作らずSQLを直叩きして遊ぶ
  • Python以外の言語、例えばRubyPHPなどで開発

といった用途に使えるよう、切り分けしました。

PyCon JPの発表で、

好きなデータを好きな言語でHackするのは楽しい

という事を勢いで言わせて貰ったのですが、もし野球やMLBが好きでアプリを書きたい!と思ってる人が、

「好きな言語でプロジェクトを活用」してくれたらすっご嬉しいです。

アプリケーションの構成

今はメジャーリーグのデータのみを取り扱っていますが、日本プロ野球高校野球、etc...他の野球を円滑に拡張できるよう、

ドメインを分離しやすく作っています。

Djangoの記法的な意味での解説ですが、アプリケーションは全て「mlb」というドメインの下に実装しています。

templatesも同様です。

なので、仮にこのアプリケーションに「日本プロ野球」を加えたい場合は、

python managy.py startapp npb

とか打てば、日本プロ野球用のアプリを構築、MLBのアプリを気にすることなく開発出来ます。

実際自分は試していませんが、Djangoの標準機能ですので多分上手く行くはずです。

今後

2014年の野球が終わり、そろそろ今年の成績もデータとして上がってくると思います。

DBの方は引き続きSean Lahman Databaseのバージョンに合わせ、開発を続けたいと思います。

Djangoアプリの方は細かい改修・細々としたテストを続けるとは思いますが、基本的には開発終了にしたい感じです。

とはいえ、野球アプリの開発はまだまだ続きます。

今後作りたいネタは、

、、、とまあ、他の言語で遊んだり、Pepperという相棒を活用した、

「野球とプログラミングの世界」

「世界で一番やさしい野球選手名鑑」

を実現する感じで突っ走って行きたいと思います。

あ、ちなみに言うとPythonistaを引退するわけではありませんよ、あしからず...

ではでは。

*1:何をどう楽しんでいるかは、X年後に書くであろう退職エントリーのネタとして取っておきます(意訳:今は書かない)

*2:買うかどうかは別の話