patrickramos commited on
Commit
c01843a
·
1 Parent(s): f5e8492

Add plotted leaderboard

Browse files
Files changed (1) hide show
  1. daily_weekly_leaderboard.py +66 -5
daily_weekly_leaderboard.py CHANGED
@@ -1,5 +1,9 @@
1
  import gradio as gr
2
  from gradio_calendar import Calendar
 
 
 
 
3
 
4
  from data import df, game_df
5
  from gradio_function import *
@@ -23,17 +27,24 @@ def filter_pitcher_leaderboard_by_date(date, *args, **kwargs):
23
  monday = date - datetime.timedelta(days=date.weekday())
24
  sunday = date + datetime.timedelta(days=6-date.weekday())
25
  week_df = df.filter((pl.col('game_date') >= monday) & (pl.col('game_date') <= sunday))
 
 
26
  return (
27
  f'<center><h1>Daily Leaderboard<h1><h2>{date.strftime("%B %d, %Y")}</h2><h3>{date.strftime("%A")}</h3></center>',
28
  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>',
29
- *compute_pitcher_leaderboards(day_df, *args, **kwargs),
30
- *compute_pitcher_leaderboards(week_df, *args, **kwargs),
 
 
 
 
31
  gr.update(interactive=True),
32
  gr.update(interactive=True),
33
  gr.update(interactive=True),
34
  gr.update(interactive=True)
35
  )
36
-
 
37
  def compute_pitcher_leaderboards(df, top_players, strict, ignore_zero_whiffs, show_rank, debug):
38
  # _df = df.filter(pl.col('game_date') == date)
39
  _df = df
@@ -96,18 +107,60 @@ def compute_pitcher_leaderboards(df, top_players, strict, ignore_zero_whiffs, sh
96
  # )
97
 
98
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99
  def go_back_day(date):
100
  return date - datetime.timedelta(days=1)
101
 
 
102
  def go_forward_day(date):
103
  return date + datetime.timedelta(days=1)
104
 
 
105
  def go_back_week(date):
106
  return date - datetime.timedelta(days=7)
107
 
 
108
  def go_forward_week(date):
109
  return date + datetime.timedelta(days=7)
110
-
 
111
  def create_daily_pitcher_leaderboard():
112
  with gr.Blocks(
113
  css=css
@@ -151,10 +204,18 @@ def create_daily_pitcher_leaderboard():
151
  weekly_whiffs = gr.Dataframe(pl.DataFrame({'Name': [], 'Whiffs': []}), label='Whiffs', interactive=False, height=1000)
152
  weekly_velos = gr.Dataframe(pl.DataFrame({'Name': [], 'Velocity': []}), label='Velocity', interactive=False, height=1000)
153
 
 
 
 
 
 
 
 
 
154
  search_kwargs = dict(
155
  fn=filter_pitcher_leaderboard_by_date,
156
  inputs=[date_picker, top_players, strict, ignore_zero_whiffs, show_rank, debug],
157
- 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]
158
  )
159
  search_btn.click(**search_kwargs)
160
  for btn, fn in (
 
1
  import gradio as gr
2
  from gradio_calendar import Calendar
3
+ import polars as pl
4
+ import pandas as pd
5
+ import matplotlib.pyplot as plt
6
+ from plottable import Table, ColumnDefinition
7
 
8
  from data import df, game_df
9
  from gradio_function import *
 
27
  monday = date - datetime.timedelta(days=date.weekday())
28
  sunday = date + datetime.timedelta(days=6-date.weekday())
29
  week_df = df.filter((pl.col('game_date') >= monday) & (pl.col('game_date') <= sunday))
30
+ daily_whiffs, daily_velos = compute_pitcher_leaderboards(day_df, *args, **kwargs)
31
+ weekly_whiffs, weekly_velos = compute_pitcher_leaderboards(week_df, *args, **kwargs)
32
  return (
33
  f'<center><h1>Daily Leaderboard<h1><h2>{date.strftime("%B %d, %Y")}</h2><h3>{date.strftime("%A")}</h3></center>',
34
  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>',
35
+ daily_whiffs,
36
+ daily_velos,
37
+ weekly_whiffs,
38
+ weekly_velos,
39
+ plot_tables(daily_whiffs, daily_velos, 'Daily'),
40
+ plot_tables(weekly_whiffs, weekly_velos, 'Weekly'),
41
  gr.update(interactive=True),
42
  gr.update(interactive=True),
43
  gr.update(interactive=True),
44
  gr.update(interactive=True)
45
  )
46
+
47
+
48
  def compute_pitcher_leaderboards(df, top_players, strict, ignore_zero_whiffs, show_rank, debug):
49
  # _df = df.filter(pl.col('game_date') == date)
50
  _df = df
 
107
  # )
108
 
109
 
110
+ def plot_tables(whiffs, velos, time_type):
111
+ fig, (whiff_ax, velo_ax) = plt.subplots(ncols=2, constrained_layout=True, sharey=True)
112
+
113
+ whiffs = whiffs.to_pandas()
114
+ if 'Rank' in whiffs.columns:
115
+ whiffs = whiffs.set_index('Rank')
116
+ else:
117
+ whiffs.index = pd.Series(range(1, len(whiffs)+1), name='Rank')
118
+ Table(
119
+ whiffs,
120
+ column_definitions=[
121
+ ColumnDefinition(name="Rank", title="Rank", width=0.25),
122
+ ColumnDefinition(name="Name", title="Player", textprops={'ha': 'left'}),
123
+ ColumnDefinition(name="Whiffs", title="#", width=0.25)
124
+ ],
125
+ ax=whiff_ax
126
+ )
127
+ whiff_ax.set_title('Whiffs')
128
+
129
+ velos = velos.to_pandas()
130
+ if 'Rank' in velos.columns:
131
+ velos = velos.set_index('Rank')
132
+ else:
133
+ velos.index = pd.Series(range(1, len(velos)+1), name='Rank')
134
+ Table(
135
+ velos,
136
+ column_definitions=[
137
+ ColumnDefinition(name="Rank", title="Rank", width=0.25),
138
+ ColumnDefinition(name="Name", title="Player", textprops={'ha': 'left'}),
139
+ ColumnDefinition(name="Velocity", title="MPH")
140
+ ],
141
+ ax=velo_ax
142
+ )
143
+ velo_ax.set_title('Velocity')
144
+
145
+ fig.suptitle(f'{time_type} Leaderboard')
146
+ return fig
147
+
148
  def go_back_day(date):
149
  return date - datetime.timedelta(days=1)
150
 
151
+
152
  def go_forward_day(date):
153
  return date + datetime.timedelta(days=1)
154
 
155
+
156
  def go_back_week(date):
157
  return date - datetime.timedelta(days=7)
158
 
159
+
160
  def go_forward_week(date):
161
  return date + datetime.timedelta(days=7)
162
+
163
+
164
  def create_daily_pitcher_leaderboard():
165
  with gr.Blocks(
166
  css=css
 
204
  weekly_whiffs = gr.Dataframe(pl.DataFrame({'Name': [], 'Whiffs': []}), label='Whiffs', interactive=False, height=1000)
205
  weekly_velos = gr.Dataframe(pl.DataFrame({'Name': [], 'Velocity': []}), label='Velocity', interactive=False, height=1000)
206
 
207
+ gr.Markdown('''# Plotted leaderboards
208
+
209
+ For easier sharing
210
+ ''')
211
+ with gr.Row():
212
+ daily_plot = gr.Plot(label='Daily plot')
213
+ weekly_plot = gr.Plot(label='Weekly plot')
214
+
215
  search_kwargs = dict(
216
  fn=filter_pitcher_leaderboard_by_date,
217
  inputs=[date_picker, top_players, strict, ignore_zero_whiffs, show_rank, debug],
218
+ outputs=[daily_header, weekly_header, daily_whiffs, daily_velos, weekly_whiffs, weekly_velos, daily_plot, weekly_plot, prev_day_btn, next_day_btn, prev_week_btn, next_week_btn]
219
  )
220
  search_btn.click(**search_kwargs)
221
  for btn, fn in (