Edited at
kintoneDay 11

kintone でセイバーメトリクスアプリを作ってみる

More than 3 years have passed since last update.

kintone Advent Calendar 2015の11日目です。

kintoneも好きだけれど、野球も大好きな自分がなにか面白いアプリを作れないかなーと思い、今回セイバーメトリクスアプリを思いつきました。

*なにそれ美味しいの?ってかたは、まず映画マネーボールらへんをみてからここに戻ってきてください。


セイバーメトリクス

とはいえ、今回作ったkintoneアプリを紹介する前に「セイバーメトリクス」についてざっくり紹介したいと思います。

セイバーメトリクスとは、野球には打率や出塁率や長打率などといった様々な指標があります。

こういった指標を用いて分析することで、野球における采配に統計学的根拠を与えられる手法のことです。

例えば統計学をもちいるとこんなことが言えます。

「1点差の9回裏ノーアウト1塁でバントをすべきか?」

普通に考えれば、ここは送って得点圏にランナーを進めたいところですよね。しかし統計学的に見ると、2アウトランナー2塁よりも、1アウトランナー1塁の勝利確率の方が4パーセントほど高いということがわかるらしいです。つまりは、バントするよりもヒッティングという戦略をとった方が勝率が上がるということが言えます。

このように、統計学を用いることで感覚的にとってしまう戦略に根拠を与えたり、目に見えている指標だけでは表せない選手固有の能力を発掘したりするイケてる理論なわけです。

実際、プロの球団でもとりいれられているとかられないとか。

……と完全に野球の話しかしていないですが、そんなセイバーメトリクスの指標(簡単め)なものをkintoneで計算できるようなアプリをつくって行きたいと思います!

(そして球団に使われたい!(・ω・))


計算する指標

まだkintoneの話がでてこないの?と思ったあなた。安心してください。

この章の後に出てきます。

今回は、打者の指標に絞って計算していきたいと思います。以下3つの指標をkintoneアプリで計算したいと思います。


IsoP(Isolated power)

純粋に打った安打の中の長打の比率の指標。つまり、これが高いほどパワーヒッターということです。


IsoP計算式

長打率-打率

※長打率 = 塁打数÷打数


OPS(On-base plus slugging)

これはコアな野球ファンであれば目にしたことはある指標かと思います。

出塁率と長打率を足し合わせた指標で、この指標をみることで打者の得点への期待値が分かります。


OPS計算式

OPS=出塁率+長打率

※出塁率=(安打+四球+死球)÷(打数+四球+死球+犠飛)

※長打率 = 塁打数÷打数


IsoD(Isolated Discipline)

安打以外の四死球での出塁率です。選球眼の良さが分かります。


IsoD計算式

IsoD=出塁率-打率

※出塁率=(安打+四球+死球)÷(打数+四球+死球+犠飛)

※打率=安打÷打数


kintoneアプリの作成

はい。やっと出てきました我らがkintone。

実際に、上に挙げた指標を計算するアプリを作っていきたいと思います。アプリのフィールドは以下を用意します。

フィールド名
フィールドタイプ
フィールドコード
備考

打数
数値
at_bats

安打数
数値
hit_num

単打
数値
hit_single

二塁打
数値
hit_2B

三塁打
数値
hit_3B

本塁打
数値
hit_homuran

四球
数値
walk_num

死球
数値
dead_ball

犠飛
数値
sacrifice_fly

打率
計算
batting_average
計算式:hit_num / at_bats

長打率
計算
SLD
計算式:TB / at_bats

出塁率
計算
OBP
計算式:(hit_num + walk_num + dead_ball) / (at_bats + walk_num + dead_ball + sacrifice_fly)

塁打数
計算
TB
計算式:hit_single + 2*hit_2B + 3*hit_3B + 4* hit_homuran

IsoP
計算
IsoP
計算式:SLD - batting_average

OPS
計算
OPS
計算式:OBP + SLD

IsoD
計算
IsoD
計算式:OBP - batting_average


実際のデータを入れてみる

本当は巨人ファンですが、今期トリプルスリーを達成した東京ヤクルトスワローズ山田 哲人選手のデータを入れてみたいと思います。

打者成績にそれぞれ数値を入れ保存ボタンを押すと…

見事に、各指標が計算できました!さすがに、各指標ともトップレベルです。

ついでに家にスコアブックがあったので、2015年の草野球の自分の成績もいれてみました。



打席数が少ないもののまずまずです。

kintoneと同じでfast(早打ち)なので、四死球が一つもないということが分りました。


最後に

ここまで読んでくれた方は薄々気づいているかもしれませんが、今回まったくカスタマイズしないでアプリをつくれてしまいました。

(最初は、計算が少々複雑なのでJavaScriptいるかなーと思ってたのですが、計算フィールドだけでいけてしまいました。)

次回は、もうちょっと複雑ななにかを計算してみたいと思います。

今回作ったテンプレートは下記に公開しますので、草野球等でご活用いただければと思います。


アプリテンプレート


参考URL