Spaces:
Sleeping
Sleeping
Commit
·
f1f0527
1
Parent(s):
2929fa3
Change implementation of player- and league-level stats
Browse files- daily_pitcher_leaderboard.py +2 -2
- data.py +51 -30
- gradio_function.py +18 -9
daily_pitcher_leaderboard.py
CHANGED
|
@@ -103,8 +103,8 @@ def create_daily_pitcher_leaderboard():
|
|
| 103 |
min_width=50
|
| 104 |
)
|
| 105 |
top_players = gr.Number(10, label='# Top players', scale=1, min_width=100)
|
| 106 |
-
strict = gr.Checkbox(False, label='Strict', info='Ignore ties and restrict to # top players', scale=
|
| 107 |
-
ignore_zero_whiffs = gr.Checkbox(False, label='Ignore zero whiffs', info='Ignore zero whiff players if in top ranked', scale=
|
| 108 |
show_rank = gr.Checkbox(False, label='Show rank', scale=1, min_width=100)
|
| 109 |
debug = gr.Checkbox(False, label='Debug', info='Show dates', scale=1, min_width=100)
|
| 110 |
search_btn = gr.Button('Search', scale=1, min_width=100)
|
|
|
|
| 103 |
min_width=50
|
| 104 |
)
|
| 105 |
top_players = gr.Number(10, label='# Top players', scale=1, min_width=100)
|
| 106 |
+
strict = gr.Checkbox(False, label='Strict', info='Ignore ties and restrict to # top players', scale=2, min_width=100)
|
| 107 |
+
ignore_zero_whiffs = gr.Checkbox(False, label='Ignore zero whiffs', info='Ignore zero whiff players if in top ranked', scale=2, min_width=100)
|
| 108 |
show_rank = gr.Checkbox(False, label='Show rank', scale=1, min_width=100)
|
| 109 |
debug = gr.Checkbox(False, label='Debug', info='Show dates', scale=1, min_width=100)
|
| 110 |
search_btn = gr.Button('Search', scale=1, min_width=100)
|
data.py
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
# import pandas as pd
|
| 3 |
import polars as pl
|
| 4 |
import numpy as np
|
| 5 |
-
from gradio_client import Client
|
| 6 |
from tqdm.auto import tqdm
|
| 7 |
|
| 8 |
import os
|
|
@@ -159,32 +159,53 @@ df = (
|
|
| 159 |
# unfortunately we have pas that don't show up in the pitch data, so this would be useful for
|
| 160 |
pa_df = pa_df.join(player_df.rename({'player_id': 'pitcher'}), on='pitcher', how='inner')
|
| 161 |
|
| 162 |
-
pitch_stats, rhb_pitch_stats, lhb_pitch_stats = [
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
|
| 168 |
-
|
| 169 |
-
|
| 170 |
-
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
|
| 174 |
-
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
|
| 180 |
-
|
| 181 |
-
]
|
| 182 |
-
league_pitch_stats, rhb_league_pitch_stats, lhb_league_pitch_stats = [
|
| 183 |
-
|
| 184 |
-
|
| 185 |
-
|
| 186 |
-
|
| 187 |
-
|
| 188 |
-
|
| 189 |
-
|
| 190 |
-
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
# import pandas as pd
|
| 3 |
import polars as pl
|
| 4 |
import numpy as np
|
| 5 |
+
# from gradio_client import Client
|
| 6 |
from tqdm.auto import tqdm
|
| 7 |
|
| 8 |
import os
|
|
|
|
| 159 |
# unfortunately we have pas that don't show up in the pitch data, so this would be useful for
|
| 160 |
pa_df = pa_df.join(player_df.rename({'player_id': 'pitcher'}), on='pitcher', how='inner')
|
| 161 |
|
| 162 |
+
# pitch_stats, rhb_pitch_stats, lhb_pitch_stats = [
|
| 163 |
+
# (
|
| 164 |
+
# _df
|
| 165 |
+
# .group_by(['name', 'pitch_name'])
|
| 166 |
+
# .agg(
|
| 167 |
+
# ((pl.col('whiff').sum() / pl.col('swing').sum()) * 100).round(1).alias('Whiff%'),
|
| 168 |
+
# ((pl.col('csw').sum() / pl.col('normal_pitch').sum()) * 100).round(1).alias('CSW%'),
|
| 169 |
+
# pl.col('release_speed').mean().round(1).alias('Velocity'),
|
| 170 |
+
# pl.len().alias('Count')
|
| 171 |
+
# )
|
| 172 |
+
# .sort(['name', 'Count'], descending=[False, True])
|
| 173 |
+
# # .rename({'name': 'Player', 'pitch_name': 'Pitch'})
|
| 174 |
+
# )
|
| 175 |
+
# for _df
|
| 176 |
+
# in (
|
| 177 |
+
# df,
|
| 178 |
+
# df.filter(pl.col('stand') == 'R'),
|
| 179 |
+
# df.filter(pl.col('stand') == 'L'),
|
| 180 |
+
# )
|
| 181 |
+
# ]
|
| 182 |
+
# league_pitch_stats, rhb_league_pitch_stats, lhb_league_pitch_stats = [
|
| 183 |
+
# _df.group_by('pitch_name').agg(pl.col('release_speed').mean().round(1).alias('Velocity'))
|
| 184 |
+
# for _df
|
| 185 |
+
# in (
|
| 186 |
+
# df,
|
| 187 |
+
# df.filter(pl.col('stand') == 'R'),
|
| 188 |
+
# df.filter(pl.col('stand') == 'L'),
|
| 189 |
+
# )
|
| 190 |
+
# ]
|
| 191 |
+
|
| 192 |
+
def compute_pitch_stats(df):
|
| 193 |
+
pitch_stats = (
|
| 194 |
+
df
|
| 195 |
+
.group_by(['name', 'pitch_name'])
|
| 196 |
+
.agg(
|
| 197 |
+
((pl.col('whiff').sum() / pl.col('swing').sum()) * 100).round(1).alias('Whiff%'),
|
| 198 |
+
((pl.col('csw').sum() / pl.col('normal_pitch').sum()) * 100).round(1).alias('CSW%'),
|
| 199 |
+
pl.col('release_speed').mean().round(1).alias('Velocity'),
|
| 200 |
+
pl.len().alias('Count')
|
| 201 |
+
)
|
| 202 |
+
.sort(['name', 'Count'], descending=[False, True])
|
| 203 |
+
)
|
| 204 |
+
return pitch_stats
|
| 205 |
+
|
| 206 |
+
pitch_stats = compute_pitch_stats(df)
|
| 207 |
+
|
| 208 |
+
def compute_league_pitch_stats(df):
|
| 209 |
+
return df.group_by('pitch_name').agg(pl.col('release_speed').mean().round(1).alias('Velocity'))
|
| 210 |
+
|
| 211 |
+
league_pitch_stats = compute_league_pitch_stats(df)
|
gradio_function.py
CHANGED
|
@@ -12,8 +12,9 @@ from math import ceil
|
|
| 12 |
from translate import max_pitch_types, jp_pitch_to_en_pitch
|
| 13 |
from data import (
|
| 14 |
df,
|
| 15 |
-
pitch_stats, rhb_pitch_stats,lhb_pitch_stats,
|
| 16 |
-
league_pitch_stats, rhb_league_pitch_stats, lhb_league_pitch_stats
|
|
|
|
| 17 |
)
|
| 18 |
|
| 19 |
|
|
@@ -315,19 +316,27 @@ def plot_velo_summary(df, league_df, player):
|
|
| 315 |
def update_dfs(player, handedness, df):
|
| 316 |
if handedness == 'Both':
|
| 317 |
handedness_filter = pl.col('stand').is_in(['R', 'L'])
|
| 318 |
-
_pitch_stats = pitch_stats
|
| 319 |
-
_league_pitch_stats = league_pitch_stats
|
| 320 |
elif handedness == 'Right':
|
| 321 |
handedness_filter = pl.col('stand') == 'R'
|
| 322 |
-
_pitch_stats = rhb_pitch_stats
|
| 323 |
-
_league_pitch_stats = rhb_league_pitch_stats
|
| 324 |
elif handedness == 'Left':
|
| 325 |
handedness_filter = pl.col('stand') == 'L'
|
| 326 |
-
_pitch_stats = lhb_pitch_stats
|
| 327 |
-
_league_pitch_stats = lhb_league_pitch_stats
|
| 328 |
player_filter = pl.col('name') == player
|
| 329 |
final_filter = player_filter & handedness_filter
|
| 330 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 331 |
|
| 332 |
def create_set_download_file_fn(filepath):
|
| 333 |
def set_download_file(df):
|
|
|
|
| 12 |
from translate import max_pitch_types, jp_pitch_to_en_pitch
|
| 13 |
from data import (
|
| 14 |
df,
|
| 15 |
+
# pitch_stats, rhb_pitch_stats,lhb_pitch_stats,
|
| 16 |
+
# league_pitch_stats, rhb_league_pitch_stats, lhb_league_pitch_stats
|
| 17 |
+
compute_pitch_stats, compute_league_pitch_stats
|
| 18 |
)
|
| 19 |
|
| 20 |
|
|
|
|
| 316 |
def update_dfs(player, handedness, df):
|
| 317 |
if handedness == 'Both':
|
| 318 |
handedness_filter = pl.col('stand').is_in(['R', 'L'])
|
| 319 |
+
# _pitch_stats = pitch_stats
|
| 320 |
+
# _league_pitch_stats = league_pitch_stats
|
| 321 |
elif handedness == 'Right':
|
| 322 |
handedness_filter = pl.col('stand') == 'R'
|
| 323 |
+
# _pitch_stats = rhb_pitch_stats
|
| 324 |
+
# _league_pitch_stats = rhb_league_pitch_stats
|
| 325 |
elif handedness == 'Left':
|
| 326 |
handedness_filter = pl.col('stand') == 'L'
|
| 327 |
+
# _pitch_stats = lhb_pitch_stats
|
| 328 |
+
# _league_pitch_stats = lhb_league_pitch_stats
|
| 329 |
player_filter = pl.col('name') == player
|
| 330 |
final_filter = player_filter & handedness_filter
|
| 331 |
+
_df = df.filter(final_filter)
|
| 332 |
+
_league_df = df.filter(handedness_filter)
|
| 333 |
+
|
| 334 |
+
return (
|
| 335 |
+
_df,
|
| 336 |
+
_league_df,
|
| 337 |
+
compute_pitch_stats(_df),
|
| 338 |
+
compute_league_pitch_stats(_league_df),
|
| 339 |
+
)
|
| 340 |
|
| 341 |
def create_set_download_file_fn(filepath):
|
| 342 |
def set_download_file(df):
|