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

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

関連記事

[Meisyo]大型アップデート予定のお知らせ

名将と呼ばれた者達よりお知らせです。 下記アップデートを予定しています。 1・サーバーの移転(高速化) 今まで練習試合等で非常に時間がかかっていた問題が解消されます。 2・チーム名等の仕様変更 チーム …

(VPSでつくる) Pythonのバージョンを2.7.5から3.6.8にする

連載第四回目です。 CentOS7にインストールされているPythonのバージョンが2.7なので、バージョンアップをします。 そうしないとPythonのアプリが動きません。 なぜなら、Python2と …

[Meisyo+] 試合成績の区分作成

Meisyo+でアンケートを行っています。 そのご意見をいただいた中で、より使いやすい成績利用のために成績区分を作成しました。 どんな感じになったの? 試合と特訓で成績を分けるようにしました。データ管 …

[Meisyo] ver 0.40リリース情報

名将と呼ばれた者達を9/1、ver 0.40にアップデートしました。 更新予定 1・ストーリーの追加・その他調整 2・試合でのステータスの強弱再調整 3・その他 更新詳細 ストーリーの追加・その他調整 …

(VPSでつくる) セキュリティ設定

連載第十四回目です。 セキュリティ設定について何もわからん状態なので色々と漁っていました。 PythonやFlaskなどの個別のモノに対してのセキュリティ設定の書籍は中々多くないので、Linuxなどの …