npb_data_viz_demo / daily_pitcher_leaderboard.py
patrickramos's picture
Add daily pitcher leaderboard
c00ad6e
raw
history blame
1.74 kB
import gradio as gr
from data import df, game_df
from gradio_function import *
from css import css
df = (
df
.join(game_df, on='game_pk').with_columns(pl.col('game_date').str.to_datetime())
.rename({
'name': 'Name',
'release_speed': 'Velocity',
})
)
def get_pitcher_leaderboards(datetime):
_df = df.filter(pl.col('game_date') == datetime)
whiffs = (
_df
.group_by(['pitcher'])
.agg(
pl.col('whiff').sum().alias('Whiffs'),
pl.col('Name').first()
)
.select('Name', 'Whiffs')
.sort('Whiffs', descending=True)
[:10]
)
velos = (
_df
.select('Name', 'Velocity')
.drop_nulls()
.sort(['Velocity', 'Name'], descending=[True, False])
[:10]
)
return f'<center><h1>Daily Leaderboard<h1><h2>{datetime.strftime("%B %d, %Y")}</h2></center>', whiffs, velos
def create_daily_pitcher_leaderboard():
with gr.Blocks(
css=css
) as demo:
date_picker = gr.DateTime(value=df['game_date'].max().strftime('%Y-%m-%d'), include_time=False, type='datetime', label='Date')
search_btn = gr.Button('Search')
header = gr.HTML('<center><h1>Daily Leaderboard<h2><br></center>')
with gr.Row():
whiffs = gr.Dataframe(pl.DataFrame({'Name': [], 'Whiffs': []}), label='Whiffs')
velos = gr.Dataframe(pl.DataFrame({'Name': [], 'Velocity': []}), label='Velocity')
search_btn.click(get_pitcher_leaderboards, date_picker, [header, whiffs, velos])
return demo
demo = create_daily_pitcher_leaderboard()
if __name__ == '__main__':
# demo = create_daily_pitcher_leaderboard()
demo.launch()