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

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

関連記事

no image

[PHP]まとめ読みをPSRで改良する(1)

今回の改良対象 → ミニ四駆まとめサイト なぜやるのか? PHPのバージョンアップによる速度の向上 一番はこれでしょう。 今のはPHP5.2で動いています。 1割から5割の速度向上が見込まれます。 1 …

(VPSでつくる) Python(Flask)でMariaDB(MySQL)へ接続できるアプリをもっと読みやすく改良してみよう

連載第十二回目です。 前回の記事で、Python3.6.8+FlaskでMariaDBに接続・データベースを編集するアプリを動作させる設定を行い、動作確認しました。 今回は、機能は前回と全く同じアプリ …

[Meisyo]ver0.04へのアップデート

Meisyoがバージョン0.04になりました。 バージョンNo.の基準はありません。(1.00(正式リリース)が遠い) 下記機能が0.04で追加されました。 目的としては、「ユーザがゲームを長く楽しめ …

Flask-Babelを使って、Pythonアプリで多言語対応を行う

Pythonで多言語対応してみたいなーと思っていました。 思っていましたが、実際になかなか使うタイミングがない・・・。 今回自作ゲームでユーザー数の増加がみられ、かつ海外からのアクセスも複数確認できた …

(VPSでつくる) Nginx+PHPでHello World

連載第七回目です。 今回はGUIでデータベースを操作できるphpMyAdminのインストール準備のために、PHPという言語をインストールします。 この記事は、VPSで作るPythonでのWebアプリ運 …