RのWeb制作

Webサービス制作のための技術情報を。データ分析(Python、機械学習コンペ他)や自作野球ゲームMeisyoのこと中心。

Web制作 Meisyo

[Meisyo]速球の地位向上

投稿日:2019年3月22日 更新日:

[Meisyo]ビッグデータから学ぶ試合の基礎設計4から早4か月。
「速球の上方修正してほしいな」というコメントが届きました。

すみません!
制球に比べ、速球は蔑ろにされてきたことはわかっております。
速球投手が強くなるように調整を近日中に行います。

今回は、速球の補正値を上方修正するために、速球の高低でどれくらい打率が変わるのか検証します。

目的

・速球の補正値を上方修正する。

やること

・あるべき姿を設定する
 速球が上がれば打率はかなり落ちる
・現状把握
 ・全体データ読み込み
 ・分析
・解決策の提示

あるべき姿を設定する

速球が上がれば打率はかなり落ちる
→かなりってどれくらい?
 3割程度の減少を見込んでいます。
→現状どうなってんの?
 [Meisyo]ビッグデータから学ぶ試合の基礎設計3を見る限り、速球が上がると防御率、WHIPともに上がってる。・・・ゲーム設定大丈夫か?
→速球をどれくらい上げれば明確な差が出るの?
 それはデータ見てから設定しよう。

現状把握

全体データ読み込み

SQLで必要データのみ抽出

Pythonでデータクレンジングとか

分析

1. 全体の把握

直球(pc_br=0)の投球コースを把握

設計通り隅に投げ分けています。

2. 被打コースの把握

ヒット系 = 1、空振り等 = 0として計算。あとは関係ないログを削除しました。

# ヒット = 1, 打ち損じ = 0
df_test['result'] = df_test['result'].replace(['HR', '1B', '2B', '3B'], 1.0)
df_test['result'] = df_test['result'].replace(['MH', 'SS', 'SF', 'DP' ,'FB'], 0.0)
# 関係ない項目を削除
df_test = df_test[df_test['result'] != 'POINT']
df_test = df_test[df_test['result'] != 'BB']
df_test = df_test[df_test['result'] != 'SB']
df_test = df_test[df_test['result'] != 'SBO']
df_test = df_test[df_test['result'] != 'ER']
df_test = df_test[df_test['result'] != 'SO']
df_test = df_test[df_test['result'] != 'BN'] # 振っていない
df_test = df_test[df_test['result'] != 'SN'] # 振っていない

ヒット系(赤)、打ち損じ(青)で表示しました。

うん。ほとんど違いが判らない・・・。

3. 球速ごとのヒット系、打ち損じのヒストグラム作成


球速が速いほど、被打率は下がってそうですね。

4. 球速ごとのヒット系、打ち損じの各ヒストグラム作成


分布は同じ感じ・・?ですね。絶対数が違います。

5. 球速ごと(5kmずつ)の被打率グラフ作成


いい感じで被打率が球速によって落ちています。
すごくきれいに線が引けそうなグラフです!

6. 回帰分析を行う

p = sp * -0.00118 + 0.32
重相関 R=0.868

速度spが1km早くなると0.118% 被打率(打率ではない)が落ちる。

7. 現在の補正値を確認する

球速の補正値は以下の通り。

$rand_mt = mt_rand(0, (($G['pc_bbC'] - $G['bt']['S_b_ss']) / 10 + 1) * 1000)/1000; // 速球 vs 反応

ブレの最大値(cm)は((sp - ss) / 10 + 1)で表される。

反応の平均値がAVG(BTss) = 40.09

速球の計算値(調子、ランダム値は平均値)は

$km = floor(0.8576 * $st_sp + 83.74);

を考えると、

140km/hの場合、st_spは65.60
その場合の被打率は0.1548。
ブレの最大値(cm)は((sp - ss) / 10 + 1) = 25.51 / 10 + 1 = 3.551であり、
最小値0、最大値が3.551なので、ブレの平均値は1.78cm。

ブレがなくなる → sp = ssの場合(sp=40.09)は
被打率は0.2727

そのことから、(0.2727 - 0.1548) / 1.78 = 0.06623
1cmのブレに対して被打率が0.06623下がるので、

140km時点の被打率を3割下げることを想定すると、
被打率は0.1086となり、ブレはさらに0.6975cm程度必要となる。

つまり、ブレの最大値を4.955cmにする必要があるので、
補正値は((sp - ss) / 6.45 + 1)で表される。

解決策の提示

補正値は((sp - ss) / 6.45 + 1)とする。

そうすることで速球の被打率が現行の70%になることが予想される。

速球投手がだいぶ強くなりました!
これで速球投手が報われるとよいのですが・・・。

-Web制作, Meisyo

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

Webサイトの更新を続ける秘訣

何かを続けることって辛くありませんか? 実は・・・続けることに努力は必要ありません。 あなた自身に対して合う方法を設定すれば、うまくいきます。 更新を続ける秘訣 報酬を設定する やる時間を決める やら …

no image

知らなかった!「while」と「do while」の違い

Perl→PHPを独学でやって現在C言語をやってます。 「do{ ~ }while( ~ );」←ナニコレ状態でした。 「while」と「do while」の違いは、 「前」で条件判定をするか、「後ろ …

とても簡単なPythonインストール in Windows10

拍子抜けするほど簡単なPythonインストール。 パソコン初心者のあなたにも簡単にできます! 目次 Pythonとは? Pythonの入手 Pythonのインストール Pythonの動作確認 インスト …

ゲームアプリ運営の分析ノウハウ vol.2 新規登録者編

はじめに アプリ開発者によくある悩み・・・登録者がゲームを続けてくれません!!。 続けてくれないをより細かく言うと、(1)コンテンツを一通りプレイしてもらいたいのか、(2)毎日プレイしてほしいのかによ …

(VPSでつくる) phpMyAdminインストール

連載第九回目です。 GUI上でMariaDB(MySQL)を触れるようにするために、phpMyAdminをインストールしましょう。 この記事は、VPSで作るPythonでのWebアプリ運用環境の連載記 …