Reactでアプリ作成(準備編)

ご無沙汰しております

最近React熱が高まってきており、本を読んだりしているんですが、そろそろ自作のアプリにチャレンジしてみようと思い、せっかくなのでその一部始終をブログに残そうということで筆を執りました

当方野球好きなので、野球のチーム・選手の成績を見られるアプリを作ろうかと思います

今考えている、今回やりたいことと・やらないことは以下です

やりたいこと

  • チーム、選手のCRUD
  • 一覧画面、詳細画面、編集画面のrouting設定
  • 検索機能、ソート機能

やらないこと

今回は以下はやらないと割り切る予定ですが、いずれやりたいです

  • reduxを使ったステータス管理
  • データの永続化

Reactとは

Reactの特徴について簡単に書きます

reactjs.org

上記ページを参考にすると、Reactはユーザインタフェース構築のためのJavaScriptライブラリのことで、以下の3つの特徴を備えています

1. 宣言的
  • アプリケーションの状態ごとにシンプルなビューを設定する
  • データが変更されたとき、正しいコンポーネントを効率よく更新しレンダリングする
  • 宣言的なビューはコードをより予測しやすく、理解をシンプルに、そしてデバッグを容易にする
2. コンポーネントベース
3. 一度学べば、どこでも書ける
  • 既存のコードを書き換える必要なくReactの新機能を開発できる
  • ReactはNodeを使ってサーバ上にレンダリングしたり、React Nativeを使ってモバイルアプリを作れる

準備編ということで今回はここまで、次回から実装に着手したいと思います

セイバーメトリクス -OPS編-

前回、得失点差がプラスであればあるほど勝率が高い傾向にあると書きました。 「得失点差がプラスであればあるほど」ということは、得点を多く取りかつ、失点を少なくする必要があります。 今回は得点を多くとるということについてフォーカスを当ててみようと思います。

打撃成績でよく見られる「打率」「出塁率」「長打率」「OPS」と、得点の関連性について見てみましょう。

打率

野球の打撃成績として「打率」というのがよく登場します。打率とはヒットを打つ確率(ホームランなども含まれます)のことで、以下の計算で求められます。

打率 = 安打 / 打数

ヒットを打てば打つほど(=打率が高ければ高いほど)多く得点が入るというのは理にかなっているように見えますね。得点と打率の相関関係を表すグラフを見てみましょう。

(※この記事のグラフは全て2005-2015の11年間×セパ12球団の計132チーム分のデータを元に作成しています)

f:id:t_ohtsuka:20151014011904p:plain

相関係数は0.693なので、そこそこ強い相関関係にあることがわかります。

出塁率長打率

次に出塁率長打率です。それぞれ以下の様な計算で求めることができます。

出塁率 = (安打 + 四球 + 死球) / (打数 + 四球 + 死球 + 犠飛)
長打率 = 塁打 / 打数

出塁率とはヒットやフォアボールを全てひっくるめて、打者が塁に出る確率を表したものです。極端に言うと、チーム全員の出塁率が100%の場合は、誰一人アウトにならないという無限ループ状態に突入して、永遠と点が入り続けるというホラー状態に陥ります。

長打率は、1打数あたりの塁打数の期待値を表す指標です。例えば同じヒットでも、ただのヒットとホームランでは進める塁の数が違うので、ホームランはヒット4本分と考えようというのが長打率の考え方です(打率では両方同じ1本のヒットとカウントされます)。ホームランが多い選手などは必然的に高い値となります。

こちらもグラフを見てみましょう。

f:id:t_ohtsuka:20151014011916p:plain

出塁率長打率の相関係数はそれぞれ0.726、0.813となり打率よりも強い相関関係にあることが分かります。

OPS

OPSはOn-base plus sluggingの略で、単純に出塁率長打率を足したものです。

OPS = 出塁率 + 長打率

例のごとく、こちらもグラフを見てみましょう。

f:id:t_ohtsuka:20151014011925p:plain

今までの値より更に強い相関関係があることが分かります。(相関係数は0.887)

この結果から、単純に打率よりもOPS(塁に出る確率が高い+塁打を稼ぐ能力がある)が高いほうがより多くの得点を期待できるということが分かります。

これらは既に知られている話で、有名な「マネーボール」では、当時注目されていなかった出塁率を重視したチームを作ることによりチームが快進撃を続けるという話となっております。

機会があればそのへんの話も書いてみたいと思います。

セイバーメトリクス -勝率を高めるために編-

セイバーメトリクスとは

野球は「数字のスポーツ」と言われるほど、たくさんの数字が登場するスポーツです。
セイバーメトリクスとは、これらの数字を客観的に分析して、選手の評価や戦略を考える分析手法のことです。
なお、セイバーメトリクスという言葉は、アメリカ野球学会(Society for American Baseball Research)の略称 SABR と測定基準( metrics )を組み合わせた造語です。

今回のテーマ

プロ野球の各チームは優勝することを最大の目的としています。
そのために数多く勝つこと(=勝率を高めること)が欠かせません。
勝率を高くするために何が必要か?
実は先人の分析結果より、勝率が高いチームは得失点差が大きくプラスとなる傾向にあること(逆もまた然り)が知られています。
まず各用語の説明をします。

勝率

勝率 = 勝利数 / 試合数

読んで字のごとく、チームが勝つ確率のことです。 勝率が高いチームがリーグ覇者となるため、各チームは勝率No1をめざしてシーズンを戦います。

得失点差

得失点差 = 得点 - 失点

チームの得点から失点を引いた数です。 良い値を残すためには、多くの点を取り、失点を少なくする必要があります。

分析結果

2005-2015年のセパ両リーグの各12チーム(計132チーム分)の勝率と得失点差を調べてグラフにしてみました。(縦軸が勝率、横軸が得失点差です)

f:id:t_ohtsuka:20151012222834p:plain

見ていただけたら分かる通り、勝率と得失点差に強い相関関係があることが分かります。 このように、高い勝率を残すためには点を多く取り、失点を少なくすることが重要という傾向にあるということが見て取れます。

そんなこと当たり前じゃねーか!という声が聞こえてきそうですが、イメージでそう思っていたものでも客観的に分析して見える化するのは面白いですね。