npb_data_app / daily_weekly_leaderboard.py
patrickramos's picture
Update player name translation, add daily and weekly leaderboards
d3fa801
raw
history blame
2.48 kB
import gradio as gr
import matplotlib.pyplot as plt
import datetime
from plotting import create_daily_weekly_leaderboard
from data import data_df
def gr_create_daily_weekly_leaderboards(leaderboard_date, whiff_leaders, velo_leaders, data_df):
filenames = []
for time_type in ('daily', 'weekly'):
for stat, leaders in zip(('whiff', 'velo'), (whiff_leaders, velo_leaders)):
create_daily_weekly_leaderboard(stat, leaderboard_date, time_type, leaders, data_df)
filename = f'{stat}_{time_type}.png'
plt.savefig(filename, bbox_inches='tight')
filenames.append(filename)
return filenames
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_weekly_leaderboard_app(data_df):
with gr.Blocks() as app:
gr.Markdown('# Daily/Weekly Leaderboards')
_data_df = gr.State(data_df)
with gr.Row():
date_init = data_df['date'].max()
date_init = datetime.datetime(date_init.year, date_init.month, date_init.day)
leaderboard_date = gr.DateTime(date_init, include_time=False, type='datetime', label='Date')
whiff_leaders = gr.Number(10, precision=0, minimum=0, label='Whiff Leaders')
velo_leaders = gr.Number(10, precision=0, minimum=0, label='Velo Leaders')
search = gr.Button('Search')
with gr.Row():
prev_week = gr.Button('Previous Week')
prev_day = gr.Button('Previous Day')
next_day = gr.Button('Next Day')
next_week = gr.Button('Next Week')
leaderboards = []
for time_type in ('Daily', 'Weekly'):
with gr.Row():
gr.Markdown(f'## {time_type}')
with gr.Row():
for stat in ('Whiff', 'Velo'):
leaderboards.append(gr.Image(label=f'{time_type} {stat} Leaderboard', height=512))
search.click(gr_create_daily_weekly_leaderboards, inputs=[leaderboard_date, whiff_leaders, velo_leaders, _data_df], outputs=leaderboards)
for btn, fn in (
(prev_day, go_back_day),
(next_day, go_forward_day),
(prev_week, go_back_week),
(next_week, go_forward_week)
):
btn.click(fn, inputs=leaderboard_date, outputs=leaderboard_date)
return app
if __name__ == '__main__':
app = create_daily_weekly_leaderboard_app(data_df)
app.launch()