Spaces:
Build error
Build error
File size: 3,476 Bytes
41bdb13 26e0ac6 41bdb13 9d7970d cf5350e 41bdb13 cf5350e 41bdb13 cf5350e 41bdb13 26c325e aaf4937 13a3a28 aaf4937 26c325e 13a3a28 26c325e 41bdb13 26e0ac6 e7a5154 41bdb13 cf5350e 43049df f101223 9d7970d 26c325e 9d7970d 26c325e 9d7970d 26c325e 9d7970d 26c325e 9d7970d 26c325e 26e0ac6 13a3a28 43049df 26e0ac6 9d7970d 26c325e 43049df 9d7970d e7a5154 9d7970d cf5350e 9d7970d |
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 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
import gradio as gr
# import pandas as pd
import polars as pl
from math import ceil
import os
from data import player_df
from gradio_function import get_data
from translate import jp_pitch_to_en_pitch, max_pitch_types
os.makedirs('files', exist_ok=True)
css = '''
.pitch-usage {height: 256px}
.pitch-usage .js-plotly-plot {height: 100%}
.pitch-velo {height: 100px}
.pitch-velo .js-plotly-plot {height: 100%}
.pitch-loc {height: 256px}
.pitch-loc .js-plotly-plot {height: 100%}
.pitch-velo-summary {height: 384px}
.pitch-velo-summary .js-plotly-plot {height: 100%}
'''
# display: flex;
# align-items: center;
# justify-content: center;
with gr.Blocks(css=css) as demo:
gr.Markdown('''
# NPB data visualization demo
[Data from SportsNavi](https://sports.yahoo.co.jp/)
''')
# player = gr.Dropdown(value=None, choices=sorted(player_df['name'].dropna().tolist()), label='Player')
with gr.Row():
player = gr.Dropdown(value=None, choices=sorted(player_df.filter(pl.col('name').is_not_null())['name'].to_list()), label='Player')
handedness = gr.Radio(value='Both', choices=['Both', 'Left', 'Right'], type='value', interactive=False, label='Batter Handedness')
player_info = gr.Markdown()
download_file = gr.DownloadButton(label='Download player data')
with gr.Group():
with gr.Row():
usage = gr.Plot(label='Pitch Distribution')#, elem_classes='pitch-usage')
pitch_velo_summary = gr.Plot(label='Velocity Summary')#, elem_classes='pitch-velo-summary')
pitch_loc_summary = gr.Plot(label='Overall Location')
max_pitch_maps = len(jp_pitch_to_en_pitch)
pitch_maps_per_row = 4
max_rows = ceil(max_pitch_maps/pitch_maps_per_row)
gr.Markdown('''
## Pitch Locations
Pitcher's persective
''')
pitch_groups = []
pitch_names = []
pitch_infos = []
pitch_velos = []
pitch_maps = []
for row in range(max_rows):
with gr.Row():
_pitch_maps_per_row = pitch_maps_per_row if row < max_rows-1 else max_pitch_maps - pitch_maps_per_row * (max_rows - 1)
visible = row==0
for col in range(_pitch_maps_per_row):
with gr.Column(elem_classes='pitch-col', min_width=256):
pitch_group = gr.Group(visible=visible)
pitch_groups.append(pitch_group)
with pitch_group:
pitch_names.append(gr.Markdown(f'### Pitch {col+1}', visible=visible))
pitch_infos.append(gr.DataFrame(pl.DataFrame([{'Whiff%': None, 'CSW%': None}]), interactive=False, visible=visible))
pitch_velos.append(gr.Plot(show_label=False, elem_classes='pitch-velo', visible=visible))
pitch_maps.append(gr.Plot(label='Pitch Location', elem_classes='pitch-loc', visible=visible))
gr.Markdown('## Pitch Velocity')
velo_stats = gr.DataFrame(pl.DataFrame([{'Avg. Velo': None, 'League Avg. Velo': None}]), interactive=False, label='Pitch Velocity')
gr.Markdown('## Bugs and other notes')
with gr.Accordion('Click to open', open=False):
gr.Markdown('''
- Y axis ticks messy when no velocity distribution is plotted
- DataFrame precision inconsistent
'''
)
inputs = [player, handedness]
outputs = [player_info, handedness, download_file, usage, pitch_velo_summary, pitch_loc_summary, *pitch_groups, *pitch_names, *pitch_infos, *pitch_velos, *pitch_maps, velo_stats]
player.input(get_data, inputs=inputs, outputs=outputs)
handedness.input(get_data, inputs=inputs, outputs=outputs)
demo.launch(
share=True,
debug=True
)
|