Spaces:
Build error
Build error
File size: 6,617 Bytes
c00ad6e 75e5ca4 c00ad6e 75e5ca4 c00ad6e 7dac96a eaf2663 c00ad6e 248dee2 75e5ca4 c00ad6e 75e5ca4 c00ad6e 75e5ca4 c00ad6e 75e5ca4 c00ad6e 75e5ca4 c00ad6e 75e5ca4 248dee2 75e5ca4 248dee2 c00ad6e 75e5ca4 f1f0527 75e5ca4 248dee2 75e5ca4 c00ad6e 248dee2 c00ad6e c0335c8 248dee2 c0335c8 c00ad6e 75e5ca4 248dee2 75e5ca4 248dee2 75e5ca4 248dee2 75e5ca4 c00ad6e |
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 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
import gradio as gr
from gradio_calendar import Calendar
from data import df, game_df
from gradio_function import *
from css import css
import datetime
df = (
df
# .join(game_df, on='game_pk')
# .with_columns(pl.col('game_date').str.to_datetime())
.rename({
'name': 'Name',
'release_speed': 'Velocity',
})
)
def filter_pitcher_leaderboard_by_date(date, *args, **kwargs):
day_df = df.filter(pl.col('game_date') == date)
monday = date - datetime.timedelta(days=date.weekday())
sunday = date + datetime.timedelta(days=6-date.weekday())
week_df = df.filter((pl.col('game_date') >= monday) & (pl.col('game_date') <= sunday))
return (
f'<center><h1>Daily Leaderboard<h1><h2>{date.strftime("%B %d, %Y")}</h2><h3>{date.strftime("%A")}</h3></center>',
f'<center><h1>Weekly Leaderboard<h1><h2>{monday.strftime("%B %d, %Y")} to {sunday.strftime("%B %d, %Y")}</h2><h3>{monday.strftime("%A")} to {sunday.strftime("%A")} </h3></center>',
*compute_pitcher_leaderboards(day_df, *args, **kwargs),
*compute_pitcher_leaderboards(week_df, *args, **kwargs),
gr.update(interactive=True),
gr.update(interactive=True),
gr.update(interactive=True),
gr.update(interactive=True)
)
def compute_pitcher_leaderboards(df, top_players, strict, ignore_zero_whiffs, show_rank, debug):
# _df = df.filter(pl.col('game_date') == date)
_df = df
other_cols = ['Name']
if debug:
other_cols = ['game_date'] + other_cols
whiffs = (
_df
.group_by(['pitcher'])
.agg(
pl.col('whiff').sum().alias('Whiffs'),
*[pl.col(col).first() for col in other_cols]
)
.select(*other_cols, 'Whiffs')
.sort('Whiffs', descending=True)
)
if ignore_zero_whiffs:
whiffs = whiffs.filter(pl.col('Whiffs') > 0)
if len(whiffs) >top_players:
whiffs = (
whiffs
.filter(pl.col('Whiffs') >= whiffs['Whiffs'][top_players])
)
if strict:
whiffs = whiffs[:top_players]
if show_rank:
whiffs = (
whiffs
.with_row_index(offset=1)
.rename({'index': 'Rank'})
)
velos = (
_df
.select(*other_cols, 'Velocity')
.drop_nulls()
.sort(['Velocity', 'Name'], descending=[True, False])
)
if len(velos) > top_players:
velos = velos.filter(pl.col('Velocity') >= velos['Velocity'][top_players])
if strict:
velos = velos[:top_players]
if show_rank:
velos = (
velos
.with_row_index(offset=1)
.rename({'index': 'Rank'})
)
return whiffs, velos
# return (
# f'<center><h1>Daily Leaderboard<h1><h2>{date.strftime("%B %d, %Y")}</h2><h3>{date.strftime("%A")}</h3></center>',
# whiffs,
# velos,
# gr.update(interactive=True),
# gr.update(interactive=True)
# )
def go_back_day(date):
return date - datetime.timedelta(days=1)
def go_forward_day(date):
return date + datetime.timedelta(days=1)
def go_back_week(date):
return date - datetime.timedelta(days=7)
def go_forward_week(date):
return date + datetime.timedelta(days=7)
def create_daily_pitcher_leaderboard():
with gr.Blocks(
css=css
) as demo:
with gr.Row():
# date_picker = gr.DateTime(
# value=df['game_date'].max().strftime('%Y-%m-%d'),
# include_time=False,
# type='datetime',
# label='Date',
# scale=4
# )
date_picker = Calendar(
value=df['game_date'].max().strftime('%Y-%m-%d'),
type='datetime',
label='Date',
scale=2,
min_width=50
)
top_players = gr.Number(10, label='# Top players', scale=1, min_width=100)
strict = gr.Checkbox(False, label='Strict', info='Ignore ties and restrict to # top players', scale=2, min_width=100)
ignore_zero_whiffs = gr.Checkbox(False, label='Ignore zero whiffs', info='Ignore zero whiff players if in top ranked', scale=2, min_width=100)
show_rank = gr.Checkbox(False, label='Show rank', scale=1, min_width=100)
debug = gr.Checkbox(False, label='Debug', info='Show dates', scale=1, min_width=100)
search_btn = gr.Button('Search', scale=1, min_width=100)
with gr.Row():
prev_week_btn = gr.Button('Previous Week', interactive=False)
prev_day_btn = gr.Button('Previous Day', interactive=False)
next_day_btn = gr.Button('Next Day', interactive=False)
next_week_btn = gr.Button('Next Week', interactive=False)
daily_header = gr.HTML('<center><h1>Daily Leaderboard<h1><h2 style="display: none;"></h2><h3 style="display: none;"></h3></center>')
with gr.Row():
daily_whiffs = gr.Dataframe(pl.DataFrame({'Name': [], 'Whiffs': []}), label='Whiffs', interactive=False, height=1000)
daily_velos = gr.Dataframe(pl.DataFrame({'Name': [], 'Velocity': []}), label='Velocity', interactive=False, height=1000)
weekly_header = gr.HTML('<center><h1>Weekly Leaderboard<h1><h2 style="display: none;"></h2><h3 style="display: none;"></h3></center>')
with gr.Row():
weekly_whiffs = gr.Dataframe(pl.DataFrame({'Name': [], 'Whiffs': []}), label='Whiffs', interactive=False, height=1000)
weekly_velos = gr.Dataframe(pl.DataFrame({'Name': [], 'Velocity': []}), label='Velocity', interactive=False, height=1000)
search_kwargs = dict(
fn=filter_pitcher_leaderboard_by_date,
inputs=[date_picker, top_players, strict, ignore_zero_whiffs, show_rank, debug],
outputs=[daily_header, weekly_header, daily_whiffs, daily_velos, weekly_whiffs, weekly_velos, prev_day_btn, next_day_btn, prev_week_btn, next_week_btn]
)
search_btn.click(**search_kwargs)
for btn, fn in (
(prev_day_btn, go_back_day),
(next_day_btn, go_forward_day),
(prev_week_btn, go_back_week),
(next_week_btn, go_forward_week)
):
(
btn
.click(fn, date_picker, date_picker)
.then(**search_kwargs)
)
return demo
demo = create_daily_pitcher_leaderboard()
if __name__ == '__main__':
# demo = create_daily_pitcher_leaderboard()
demo.launch()
|