Spaces:
Running
Running
File size: 2,699 Bytes
a8b6a3f b421bc5 a8b6a3f b421bc5 a8b6a3f bb5e4ba 9eda2f5 bb5e4ba 7e9d407 bb5e4ba 7e9d407 bb5e4ba a8b6a3f b421bc5 7e9d407 b421bc5 7e9d407 b421bc5 a8b6a3f b421bc5 a8b6a3f bb5e4ba a8b6a3f b421bc5 7e9d407 b421bc5 bb5e4ba a8b6a3f b421bc5 a8b6a3f b421bc5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
import gradio as gr
import matplotlib.pyplot as plt
import polars as pl
from data import SEASONS, data_df
from plotting import create_pitcher_overview_card
notes = '''**Limitations**
- Only supports regular season data
**To-do**
- Fix names of foreign players
- Add teams insignias
- Measure percentiles per pitcher handedness
- Allow for arbitrary date ranges
- Improve readability of pitch velocities
- Add post-season
'''
def dummy(*inputs):
return inputs
def gr_create_pitcher_overview_card(name, season):
# pit_id = name.split(' | ')[-1]
# hard-coded to only do regular season
pit_id = data_df.filter((pl.col('pitcher_name') == name) & (pl.col('date').dt.year() == season) & (pl.col('coarse_game_kind') == 'Regular Season'))['pitId'].unique()
if len(pit_id) == 0:
raise gr.Error(f"No data found for {name} in {season}. If the name looks strangely spelled or formatted there's a possibility that's what causing the error.")
elif len(pit_id) > 1:
raise gr.Error(f'Multiple IDs for {name}')
else:
pit_id = pit_id.item()
create_pitcher_overview_card(pit_id, season=season, dpi=300)
plt.savefig('tmp.png', bbox_inches='tight')
return 'tmp.png'
# def adjust_season_end_based_on_season_start(season_start, season_end):
# return max(season_start, season_end)
#
# def adjust_season_start_based_on_season_end(season_end, season_start):
# return min(season_start, season_end)
def create_pitcher_overview(data_df):
with gr.Blocks() as app:
gr.Markdown('# Pitcher Overview')
with gr.Row():
with gr.Column():
# names = [f'{pit_name} | {pit_id}' for pit_name, pit_id in data_df[['pitcher_name', 'pitId']].unique().sort('pitId').iter_rows()]
names = data_df['pitcher_name'].unique().sort().to_list()
name = gr.Dropdown(names, label='Name')
season = gr.Dropdown(SEASONS, value=max(SEASONS), label='Season')
# season_start = gr.Dropdown(SEASONS, label='Season start')
# season_end = gr.Dropdown(SEASONS, label='Season end')
# game_type = gr.Dropdown(['Spring Training', 'Regular Season', 'Postseason'], label='Game Type'])
view = gr.Button('View')
gr.Markdown(notes)
with gr.Column():
overview_card = gr.Image(label='Overview')
# season_start.input(adjust_season_end_based_on_season_start, inputs=[season_start, season_end], outputs=season_end)
# season_end.input(adjust_season_start_based_on_season_end, inputs=[season_end, season_start], outputs=season_start)
view.click(gr_create_pitcher_overview_card, inputs=[name, season], outputs=overview_card)
return app
if __name__ == '__main__':
create_pitcher_overview(data_df).launch()
|