Spaces:
Running
Running
James McCool
commited on
Commit
·
a33b237
1
Parent(s):
efa96d9
Refactor app.py to replace radio buttons with selectboxes for view selection and streamline site and slate type inputs across all tabs, enhancing user experience and maintaining consistent data management.
Browse files
app.py
CHANGED
@@ -124,14 +124,16 @@ hold_display = roo_data
|
|
124 |
with st.container():
|
125 |
col1, col2 = st.columns([3, 3])
|
126 |
with col1:
|
127 |
-
view_var = st.
|
128 |
with col2:
|
129 |
-
|
130 |
|
131 |
-
|
|
|
|
|
132 |
st.header("Scoring Percentages")
|
133 |
with st.expander("Info and Filters"):
|
134 |
-
col1, col2, col3
|
135 |
with col1:
|
136 |
if st.button("Load/Reset Data", key='reset1'):
|
137 |
st.cache_data.clear()
|
@@ -142,11 +144,9 @@ if model_var == 'Scoring Percentages':
|
|
142 |
for key in st.session_state.keys():
|
143 |
del st.session_state[key]
|
144 |
with col2:
|
145 |
-
|
146 |
with col3:
|
147 |
-
|
148 |
-
with col4:
|
149 |
-
own_var1 = st.radio("How would you like to display team ownership?", ('Sum', 'Average'), key='own_var1')
|
150 |
st.title("Scoring Percentages")
|
151 |
if view_var == "Simple":
|
152 |
scoring_percentages = scoring_percentages[['Names', 'Avg Score', '8+ runs', 'Win Percentage']]
|
@@ -154,10 +154,10 @@ if model_var == 'Scoring Percentages':
|
|
154 |
elif view_var == "Advanced":
|
155 |
st.dataframe(scoring_percentages.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(game_format, precision=2), height=750, use_container_width = True, hide_index=True)
|
156 |
|
157 |
-
|
158 |
st.header("Player ROO")
|
159 |
with st.expander("Info and Filters"):
|
160 |
-
col1, col2, col3, col4
|
161 |
with col1:
|
162 |
if st.button("Load/Reset Data", key='reset2'):
|
163 |
st.cache_data.clear()
|
@@ -168,17 +168,15 @@ if model_var == 'Player ROO':
|
|
168 |
for key in st.session_state.keys():
|
169 |
del st.session_state[key]
|
170 |
with col2:
|
171 |
-
|
172 |
with col3:
|
173 |
-
|
174 |
with col4:
|
175 |
-
|
176 |
-
with col5:
|
177 |
-
pos_var2 = st.radio("Which position group would you like to view?", ('All', 'Pitchers', 'Hitters'), key='pos_var2')
|
178 |
|
179 |
if slate_type_var2 == 'Regular':
|
180 |
player_roo_raw = roo_data.copy()
|
181 |
-
if
|
182 |
player_roo_raw['Site'] = 'Draftkings'
|
183 |
|
184 |
if pos_var2 == 'All':
|
@@ -187,7 +185,7 @@ if model_var == 'Player ROO':
|
|
187 |
player_roo_raw = player_roo_raw[player_roo_raw['Position'] == 'SP']
|
188 |
elif pos_var2 == 'Hitters':
|
189 |
player_roo_raw = player_roo_raw[player_roo_raw['Position'] != 'SP']
|
190 |
-
elif
|
191 |
player_roo_raw['Site'] = 'Fanduel'
|
192 |
|
193 |
if pos_var2 == 'All':
|
@@ -206,9 +204,9 @@ if model_var == 'Player ROO':
|
|
206 |
|
207 |
elif slate_type_var2 == 'Showdown':
|
208 |
player_roo_raw = sd_roo_data.copy()
|
209 |
-
if
|
210 |
player_roo_raw['Site'] = 'Draftkings'
|
211 |
-
elif
|
212 |
player_roo_raw['Site'] = 'Fanduel'
|
213 |
st.session_state['player_roo'] = player_roo_raw.drop(columns=['site', 'slate', 'version', 'timestamp'])
|
214 |
if view_var == "Simple":
|
@@ -217,7 +215,7 @@ if model_var == 'Player ROO':
|
|
217 |
elif view_var == "Advanced":
|
218 |
st.dataframe(st.session_state['player_roo'].style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(player_roo_format, precision=2), height=750, use_container_width = True, hide_index=True)
|
219 |
|
220 |
-
|
221 |
st.header("Optimals")
|
222 |
with st.expander("Info and Filters"):
|
223 |
if st.button("Load/Reset Data", key='reset3'):
|
@@ -229,19 +227,18 @@ if model_var == 'Optimals':
|
|
229 |
for key in st.session_state.keys():
|
230 |
del st.session_state[key]
|
231 |
|
232 |
-
|
233 |
-
|
234 |
-
slate_var3 = st.radio("Which slate data are you loading?", ('Main', 'Secondary', 'Auxiliary'), key='slate_var3')
|
235 |
|
236 |
if slate_type_var3 == 'Regular':
|
237 |
-
if
|
238 |
dk_lineups = init_DK_lineups(slate_var3)
|
239 |
-
elif
|
240 |
fd_lineups = init_FD_lineups(slate_var3)
|
241 |
elif slate_type_var3 == 'Showdown':
|
242 |
-
if
|
243 |
dk_lineups = init_DK_lineups(slate_var3)
|
244 |
-
elif
|
245 |
fd_lineups = init_FD_lineups(slate_var3)
|
246 |
lineup_num_var = st.number_input("How many lineups do you want to display?", min_value=1, max_value=1000, value=150, step=1)
|
247 |
|
@@ -250,7 +247,7 @@ if model_var == 'Optimals':
|
|
250 |
elif slate_type_var3 == 'Showdown':
|
251 |
raw_baselines = sd_roo_data
|
252 |
|
253 |
-
if
|
254 |
if slate_type_var3 == 'Regular':
|
255 |
ROO_slice = raw_baselines[raw_baselines['Site'] == 'Draftkings']
|
256 |
player_salaries = dict(zip(ROO_slice['Player'], ROO_slice['Salary']))
|
@@ -267,7 +264,7 @@ if model_var == 'Optimals':
|
|
267 |
elif player_var1 == 'Full Slate':
|
268 |
player_var2 = raw_baselines.Player.values.tolist()
|
269 |
|
270 |
-
elif
|
271 |
raw_baselines = hold_display
|
272 |
if slate_type_var3 == 'Regular':
|
273 |
ROO_slice = raw_baselines[raw_baselines['Site'] == 'Fanduel']
|
@@ -286,10 +283,10 @@ if model_var == 'Optimals':
|
|
286 |
|
287 |
if st.button("Prepare data export", key='data_export'):
|
288 |
data_export = st.session_state.working_seed.copy()
|
289 |
-
# if
|
290 |
# for col_idx in range(6):
|
291 |
# data_export[:, col_idx] = np.array([id_dict.get(player, player) for player in data_export[:, col_idx]])
|
292 |
-
# elif
|
293 |
# for col_idx in range(6):
|
294 |
# data_export[:, col_idx] = np.array([id_dict.get(player, player) for player in data_export[:, col_idx]])
|
295 |
st.download_button(
|
@@ -299,7 +296,7 @@ if model_var == 'Optimals':
|
|
299 |
mime='text/csv',
|
300 |
)
|
301 |
|
302 |
-
if
|
303 |
if 'working_seed' in st.session_state:
|
304 |
st.session_state.working_seed = st.session_state.working_seed
|
305 |
if player_var1 == 'Specific Players':
|
@@ -316,7 +313,7 @@ if model_var == 'Optimals':
|
|
316 |
st.session_state.working_seed = dk_lineups.copy()
|
317 |
st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)
|
318 |
|
319 |
-
elif
|
320 |
if 'working_seed' in st.session_state:
|
321 |
st.session_state.working_seed = st.session_state.working_seed
|
322 |
if player_var1 == 'Specific Players':
|
@@ -334,10 +331,10 @@ if model_var == 'Optimals':
|
|
334 |
st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)
|
335 |
|
336 |
export_file = st.session_state.data_export_display.copy()
|
337 |
-
# if
|
338 |
# for col_idx in range(6):
|
339 |
# export_file.iloc[:, col_idx] = export_file.iloc[:, col_idx].map(id_dict)
|
340 |
-
# elif
|
341 |
# for col_idx in range(6):
|
342 |
# export_file.iloc[:, col_idx] = export_file.iloc[:, col_idx].map(id_dict)
|
343 |
|
@@ -345,9 +342,9 @@ if model_var == 'Optimals':
|
|
345 |
if st.button("Reset Optimals", key='reset3'):
|
346 |
for key in st.session_state.keys():
|
347 |
del st.session_state[key]
|
348 |
-
if
|
349 |
st.session_state.working_seed = dk_lineups.copy()
|
350 |
-
elif
|
351 |
st.session_state.working_seed = fd_lineups.copy()
|
352 |
if 'data_export_display' in st.session_state:
|
353 |
st.dataframe(st.session_state.data_export_display.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(precision=2), height=500, use_container_width = True)
|
@@ -361,7 +358,7 @@ if model_var == 'Optimals':
|
|
361 |
with st.container():
|
362 |
if 'working_seed' in st.session_state:
|
363 |
# Create a new dataframe with summary statistics
|
364 |
-
if
|
365 |
summary_df = pd.DataFrame({
|
366 |
'Metric': ['Min', 'Average', 'Max', 'STDdev'],
|
367 |
'Salary': [
|
@@ -383,7 +380,7 @@ if model_var == 'Optimals':
|
|
383 |
np.std(st.session_state.working_seed[:,8])
|
384 |
]
|
385 |
})
|
386 |
-
elif
|
387 |
summary_df = pd.DataFrame({
|
388 |
'Metric': ['Min', 'Average', 'Max', 'STDdev'],
|
389 |
'Salary': [
|
@@ -421,9 +418,9 @@ if model_var == 'Optimals':
|
|
421 |
tab1, tab2 = st.tabs(["Display Frequency", "Seed Frame Frequency"])
|
422 |
with tab1:
|
423 |
if 'data_export_display' in st.session_state:
|
424 |
-
if
|
425 |
player_columns = st.session_state.data_export_display.iloc[:, :6]
|
426 |
-
elif
|
427 |
player_columns = st.session_state.data_export_display.iloc[:, :6]
|
428 |
|
429 |
# Flatten the DataFrame and count unique values
|
@@ -457,9 +454,9 @@ if model_var == 'Optimals':
|
|
457 |
)
|
458 |
with tab2:
|
459 |
if 'working_seed' in st.session_state:
|
460 |
-
if
|
461 |
player_columns = st.session_state.working_seed[:, :6]
|
462 |
-
elif
|
463 |
player_columns = st.session_state.working_seed[:, :6]
|
464 |
|
465 |
# Flatten the DataFrame and count unique values
|
|
|
124 |
with st.container():
|
125 |
col1, col2 = st.columns([3, 3])
|
126 |
with col1:
|
127 |
+
view_var = st.selectbox("Select view", ["Simple", "Advanced"])
|
128 |
with col2:
|
129 |
+
site_var = st.selectbox("What site do you want to view?", ('Draftkings', 'Fanduel'))
|
130 |
|
131 |
+
tab1, tab2, tab3 = st.tabs(["Scoring Percentages", "Player ROO", "Optimals"])
|
132 |
+
|
133 |
+
with tab1:
|
134 |
st.header("Scoring Percentages")
|
135 |
with st.expander("Info and Filters"):
|
136 |
+
col1, col2, col3 = st.columns([3, 3, 3])
|
137 |
with col1:
|
138 |
if st.button("Load/Reset Data", key='reset1'):
|
139 |
st.cache_data.clear()
|
|
|
144 |
for key in st.session_state.keys():
|
145 |
del st.session_state[key]
|
146 |
with col2:
|
147 |
+
slate_var1 = st.radio("Which data are you loading?", ('Main Slate', 'Secondary Slate', 'All Games'))
|
148 |
with col3:
|
149 |
+
own_var1 = st.radio("How would you like to display team ownership?", ('Sum', 'Average'))
|
|
|
|
|
150 |
st.title("Scoring Percentages")
|
151 |
if view_var == "Simple":
|
152 |
scoring_percentages = scoring_percentages[['Names', 'Avg Score', '8+ runs', 'Win Percentage']]
|
|
|
154 |
elif view_var == "Advanced":
|
155 |
st.dataframe(scoring_percentages.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(game_format, precision=2), height=750, use_container_width = True, hide_index=True)
|
156 |
|
157 |
+
with tab2:
|
158 |
st.header("Player ROO")
|
159 |
with st.expander("Info and Filters"):
|
160 |
+
col1, col2, col3, col4 = st.columns([3, 3, 3, 3])
|
161 |
with col1:
|
162 |
if st.button("Load/Reset Data", key='reset2'):
|
163 |
st.cache_data.clear()
|
|
|
168 |
for key in st.session_state.keys():
|
169 |
del st.session_state[key]
|
170 |
with col2:
|
171 |
+
slate_type_var2 = st.radio("Which slate type are you loading?", ('Regular', 'Showdown'))
|
172 |
with col3:
|
173 |
+
slate_var2 = st.radio("Which slate data are you loading?", ('Main', 'Secondary', 'Auxiliary'))
|
174 |
with col4:
|
175 |
+
pos_var2 = st.radio("Which position group would you like to view?", ('All', 'Pitchers', 'Hitters'))
|
|
|
|
|
176 |
|
177 |
if slate_type_var2 == 'Regular':
|
178 |
player_roo_raw = roo_data.copy()
|
179 |
+
if site_var == 'Draftkings':
|
180 |
player_roo_raw['Site'] = 'Draftkings'
|
181 |
|
182 |
if pos_var2 == 'All':
|
|
|
185 |
player_roo_raw = player_roo_raw[player_roo_raw['Position'] == 'SP']
|
186 |
elif pos_var2 == 'Hitters':
|
187 |
player_roo_raw = player_roo_raw[player_roo_raw['Position'] != 'SP']
|
188 |
+
elif site_var == 'Fanduel':
|
189 |
player_roo_raw['Site'] = 'Fanduel'
|
190 |
|
191 |
if pos_var2 == 'All':
|
|
|
204 |
|
205 |
elif slate_type_var2 == 'Showdown':
|
206 |
player_roo_raw = sd_roo_data.copy()
|
207 |
+
if site_var == 'Draftkings':
|
208 |
player_roo_raw['Site'] = 'Draftkings'
|
209 |
+
elif site_var == 'Fanduel':
|
210 |
player_roo_raw['Site'] = 'Fanduel'
|
211 |
st.session_state['player_roo'] = player_roo_raw.drop(columns=['site', 'slate', 'version', 'timestamp'])
|
212 |
if view_var == "Simple":
|
|
|
215 |
elif view_var == "Advanced":
|
216 |
st.dataframe(st.session_state['player_roo'].style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(player_roo_format, precision=2), height=750, use_container_width = True, hide_index=True)
|
217 |
|
218 |
+
with tab3:
|
219 |
st.header("Optimals")
|
220 |
with st.expander("Info and Filters"):
|
221 |
if st.button("Load/Reset Data", key='reset3'):
|
|
|
227 |
for key in st.session_state.keys():
|
228 |
del st.session_state[key]
|
229 |
|
230 |
+
slate_type_var3 = st.radio("Which slate type are you loading?", ('Regular', 'Showdown'))
|
231 |
+
slate_var3 = st.radio("Which slate data are you loading?", ('Main', 'Secondary', 'Auxiliary'))
|
|
|
232 |
|
233 |
if slate_type_var3 == 'Regular':
|
234 |
+
if site_var == 'Draftkings':
|
235 |
dk_lineups = init_DK_lineups(slate_var3)
|
236 |
+
elif site_var == 'Fanduel':
|
237 |
fd_lineups = init_FD_lineups(slate_var3)
|
238 |
elif slate_type_var3 == 'Showdown':
|
239 |
+
if site_var == 'Draftkings':
|
240 |
dk_lineups = init_DK_lineups(slate_var3)
|
241 |
+
elif site_var == 'Fanduel':
|
242 |
fd_lineups = init_FD_lineups(slate_var3)
|
243 |
lineup_num_var = st.number_input("How many lineups do you want to display?", min_value=1, max_value=1000, value=150, step=1)
|
244 |
|
|
|
247 |
elif slate_type_var3 == 'Showdown':
|
248 |
raw_baselines = sd_roo_data
|
249 |
|
250 |
+
if site_var == 'Draftkings':
|
251 |
if slate_type_var3 == 'Regular':
|
252 |
ROO_slice = raw_baselines[raw_baselines['Site'] == 'Draftkings']
|
253 |
player_salaries = dict(zip(ROO_slice['Player'], ROO_slice['Salary']))
|
|
|
264 |
elif player_var1 == 'Full Slate':
|
265 |
player_var2 = raw_baselines.Player.values.tolist()
|
266 |
|
267 |
+
elif site_var == 'Fanduel':
|
268 |
raw_baselines = hold_display
|
269 |
if slate_type_var3 == 'Regular':
|
270 |
ROO_slice = raw_baselines[raw_baselines['Site'] == 'Fanduel']
|
|
|
283 |
|
284 |
if st.button("Prepare data export", key='data_export'):
|
285 |
data_export = st.session_state.working_seed.copy()
|
286 |
+
# if site_var == 'Draftkings':
|
287 |
# for col_idx in range(6):
|
288 |
# data_export[:, col_idx] = np.array([id_dict.get(player, player) for player in data_export[:, col_idx]])
|
289 |
+
# elif site_var == 'Fanduel':
|
290 |
# for col_idx in range(6):
|
291 |
# data_export[:, col_idx] = np.array([id_dict.get(player, player) for player in data_export[:, col_idx]])
|
292 |
st.download_button(
|
|
|
296 |
mime='text/csv',
|
297 |
)
|
298 |
|
299 |
+
if site_var == 'Draftkings':
|
300 |
if 'working_seed' in st.session_state:
|
301 |
st.session_state.working_seed = st.session_state.working_seed
|
302 |
if player_var1 == 'Specific Players':
|
|
|
313 |
st.session_state.working_seed = dk_lineups.copy()
|
314 |
st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)
|
315 |
|
316 |
+
elif site_var == 'Fanduel':
|
317 |
if 'working_seed' in st.session_state:
|
318 |
st.session_state.working_seed = st.session_state.working_seed
|
319 |
if player_var1 == 'Specific Players':
|
|
|
331 |
st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)
|
332 |
|
333 |
export_file = st.session_state.data_export_display.copy()
|
334 |
+
# if site_var == 'Draftkings':
|
335 |
# for col_idx in range(6):
|
336 |
# export_file.iloc[:, col_idx] = export_file.iloc[:, col_idx].map(id_dict)
|
337 |
+
# elif site_var == 'Fanduel':
|
338 |
# for col_idx in range(6):
|
339 |
# export_file.iloc[:, col_idx] = export_file.iloc[:, col_idx].map(id_dict)
|
340 |
|
|
|
342 |
if st.button("Reset Optimals", key='reset3'):
|
343 |
for key in st.session_state.keys():
|
344 |
del st.session_state[key]
|
345 |
+
if site_var == 'Draftkings':
|
346 |
st.session_state.working_seed = dk_lineups.copy()
|
347 |
+
elif site_var == 'Fanduel':
|
348 |
st.session_state.working_seed = fd_lineups.copy()
|
349 |
if 'data_export_display' in st.session_state:
|
350 |
st.dataframe(st.session_state.data_export_display.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(precision=2), height=500, use_container_width = True)
|
|
|
358 |
with st.container():
|
359 |
if 'working_seed' in st.session_state:
|
360 |
# Create a new dataframe with summary statistics
|
361 |
+
if site_var == 'Draftkings':
|
362 |
summary_df = pd.DataFrame({
|
363 |
'Metric': ['Min', 'Average', 'Max', 'STDdev'],
|
364 |
'Salary': [
|
|
|
380 |
np.std(st.session_state.working_seed[:,8])
|
381 |
]
|
382 |
})
|
383 |
+
elif site_var == 'Fanduel':
|
384 |
summary_df = pd.DataFrame({
|
385 |
'Metric': ['Min', 'Average', 'Max', 'STDdev'],
|
386 |
'Salary': [
|
|
|
418 |
tab1, tab2 = st.tabs(["Display Frequency", "Seed Frame Frequency"])
|
419 |
with tab1:
|
420 |
if 'data_export_display' in st.session_state:
|
421 |
+
if site_var == 'Draftkings':
|
422 |
player_columns = st.session_state.data_export_display.iloc[:, :6]
|
423 |
+
elif site_var == 'Fanduel':
|
424 |
player_columns = st.session_state.data_export_display.iloc[:, :6]
|
425 |
|
426 |
# Flatten the DataFrame and count unique values
|
|
|
454 |
)
|
455 |
with tab2:
|
456 |
if 'working_seed' in st.session_state:
|
457 |
+
if site_var == 'Draftkings':
|
458 |
player_columns = st.session_state.working_seed[:, :6]
|
459 |
+
elif site_var == 'Fanduel':
|
460 |
player_columns = st.session_state.working_seed[:, :6]
|
461 |
|
462 |
# Flatten the DataFrame and count unique values
|