Spaces:
Running
Running
James McCool
commited on
Commit
·
8d20291
1
Parent(s):
3571793
Refactor data loading and filtering options in app.py, introducing new radio buttons for site, slate type, and position group selection, enhancing user interaction and data management capabilities.
Browse files
app.py
CHANGED
@@ -149,14 +149,25 @@ with tab1:
|
|
149 |
with tab2:
|
150 |
st.title("Player ROO")
|
151 |
with st.expander("Info and Filters"):
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
159 |
|
|
|
|
|
|
|
|
|
160 |
display_data = display_data.drop(columns=['site', 'slate', 'version', 'timestamp'])
|
161 |
if view_var == "Simple":
|
162 |
display_data = display_data[['Player', 'Position', 'Salary', 'Median', 'Ceiling', 'Own']]
|
@@ -170,36 +181,37 @@ with tab3:
|
|
170 |
st.cache_data.clear()
|
171 |
roo_data, sd_roo_data, scoring_percentages = init_baselines()
|
172 |
hold_display = roo_data
|
173 |
-
dk_lineups = init_DK_lineups()
|
174 |
-
fd_lineups = init_FD_lineups()
|
175 |
for key in st.session_state.keys():
|
176 |
del st.session_state[key]
|
177 |
-
|
178 |
-
slate_var1 = st.radio("Which data are you loading?", ('Regular', 'Showdown'))
|
179 |
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
|
|
|
|
|
|
191 |
lineup_num_var = st.number_input("How many lineups do you want to display?", min_value=1, max_value=1000, value=150, step=1)
|
192 |
|
193 |
-
if
|
194 |
raw_baselines = roo_data
|
195 |
-
elif
|
196 |
raw_baselines = sd_roo_data
|
197 |
|
198 |
-
if
|
199 |
-
if
|
200 |
ROO_slice = raw_baselines[raw_baselines['Site'] == 'Draftkings']
|
201 |
player_salaries = dict(zip(ROO_slice['Player'], ROO_slice['Salary']))
|
202 |
-
elif
|
203 |
player_salaries = dict(zip(raw_baselines['Player'], raw_baselines['Salary']))
|
204 |
# Get the minimum and maximum ownership values from dk_lineups
|
205 |
min_own = np.min(dk_lineups[:,8])
|
@@ -212,12 +224,12 @@ with tab3:
|
|
212 |
elif player_var1 == 'Full Slate':
|
213 |
player_var2 = raw_baselines.Player.values.tolist()
|
214 |
|
215 |
-
elif
|
216 |
raw_baselines = hold_display
|
217 |
-
if
|
218 |
ROO_slice = raw_baselines[raw_baselines['Site'] == 'Fanduel']
|
219 |
player_salaries = dict(zip(ROO_slice['Player'], ROO_slice['Salary']))
|
220 |
-
elif
|
221 |
player_salaries = dict(zip(raw_baselines['Player'], raw_baselines['Salary']))
|
222 |
min_own = np.min(fd_lineups[:,8])
|
223 |
max_own = np.max(fd_lineups[:,8])
|
@@ -231,10 +243,10 @@ with tab3:
|
|
231 |
|
232 |
if st.button("Prepare data export", key='data_export'):
|
233 |
data_export = st.session_state.working_seed.copy()
|
234 |
-
# if
|
235 |
# for col_idx in range(6):
|
236 |
# data_export[:, col_idx] = np.array([id_dict.get(player, player) for player in data_export[:, col_idx]])
|
237 |
-
# elif
|
238 |
# for col_idx in range(6):
|
239 |
# data_export[:, col_idx] = np.array([id_dict.get(player, player) for player in data_export[:, col_idx]])
|
240 |
st.download_button(
|
@@ -244,7 +256,7 @@ with tab3:
|
|
244 |
mime='text/csv',
|
245 |
)
|
246 |
|
247 |
-
if
|
248 |
if 'working_seed' in st.session_state:
|
249 |
st.session_state.working_seed = st.session_state.working_seed
|
250 |
if player_var1 == 'Specific Players':
|
@@ -261,7 +273,7 @@ with tab3:
|
|
261 |
st.session_state.working_seed = dk_lineups.copy()
|
262 |
st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)
|
263 |
|
264 |
-
elif
|
265 |
if 'working_seed' in st.session_state:
|
266 |
st.session_state.working_seed = st.session_state.working_seed
|
267 |
if player_var1 == 'Specific Players':
|
@@ -279,10 +291,10 @@ with tab3:
|
|
279 |
st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)
|
280 |
|
281 |
export_file = st.session_state.data_export_display.copy()
|
282 |
-
# if
|
283 |
# for col_idx in range(6):
|
284 |
# export_file.iloc[:, col_idx] = export_file.iloc[:, col_idx].map(id_dict)
|
285 |
-
# elif
|
286 |
# for col_idx in range(6):
|
287 |
# export_file.iloc[:, col_idx] = export_file.iloc[:, col_idx].map(id_dict)
|
288 |
|
@@ -290,9 +302,9 @@ with tab3:
|
|
290 |
if st.button("Reset Optimals", key='reset3'):
|
291 |
for key in st.session_state.keys():
|
292 |
del st.session_state[key]
|
293 |
-
if
|
294 |
st.session_state.working_seed = dk_lineups.copy()
|
295 |
-
elif
|
296 |
st.session_state.working_seed = fd_lineups.copy()
|
297 |
if 'data_export_display' in st.session_state:
|
298 |
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)
|
@@ -306,7 +318,7 @@ with tab3:
|
|
306 |
with st.container():
|
307 |
if 'working_seed' in st.session_state:
|
308 |
# Create a new dataframe with summary statistics
|
309 |
-
if
|
310 |
summary_df = pd.DataFrame({
|
311 |
'Metric': ['Min', 'Average', 'Max', 'STDdev'],
|
312 |
'Salary': [
|
@@ -328,7 +340,7 @@ with tab3:
|
|
328 |
np.std(st.session_state.working_seed[:,8])
|
329 |
]
|
330 |
})
|
331 |
-
elif
|
332 |
summary_df = pd.DataFrame({
|
333 |
'Metric': ['Min', 'Average', 'Max', 'STDdev'],
|
334 |
'Salary': [
|
@@ -366,9 +378,9 @@ with tab3:
|
|
366 |
tab1, tab2 = st.tabs(["Display Frequency", "Seed Frame Frequency"])
|
367 |
with tab1:
|
368 |
if 'data_export_display' in st.session_state:
|
369 |
-
if
|
370 |
player_columns = st.session_state.data_export_display.iloc[:, :6]
|
371 |
-
elif
|
372 |
player_columns = st.session_state.data_export_display.iloc[:, :6]
|
373 |
|
374 |
# Flatten the DataFrame and count unique values
|
@@ -402,9 +414,9 @@ with tab3:
|
|
402 |
)
|
403 |
with tab2:
|
404 |
if 'working_seed' in st.session_state:
|
405 |
-
if
|
406 |
player_columns = st.session_state.working_seed[:, :6]
|
407 |
-
elif
|
408 |
player_columns = st.session_state.working_seed[:, :6]
|
409 |
|
410 |
# Flatten the DataFrame and count unique values
|
|
|
149 |
with tab2:
|
150 |
st.title("Player ROO")
|
151 |
with st.expander("Info and Filters"):
|
152 |
+
col1, col2, col3, col4, col5 = st.columns([3, 3, 3, 3, 3])
|
153 |
+
with col1:
|
154 |
+
if st.button("Load/Reset Data", key='reset1'):
|
155 |
+
st.cache_data.clear()
|
156 |
+
roo_data, sd_roo_data, scoring_percentages = init_baselines()
|
157 |
+
hold_display = roo_data
|
158 |
+
with col2:
|
159 |
+
site_var2 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'), key='site_var2')
|
160 |
+
with col3:
|
161 |
+
slate_type_var2 = st.radio("Which slate type are you loading?", ('Regular', 'Showdown'), key='slate_type_var2')
|
162 |
+
with col4:
|
163 |
+
slate_var2 = st.radio("Which slate data are you loading?", ('Main', 'Secondary', 'Auxiliary'), key='slate_var2')
|
164 |
+
with col5:
|
165 |
+
pos_var2 = st.radio("Which position group would you like to view?", ('All', 'Pitchers', 'Hitters'), key='pos_var2')
|
166 |
|
167 |
+
if slate_type_var2 == 'Regular':
|
168 |
+
display_data = roo_data
|
169 |
+
elif slate_type_var2 == 'Showdown':
|
170 |
+
display_data = sd_roo_data
|
171 |
display_data = display_data.drop(columns=['site', 'slate', 'version', 'timestamp'])
|
172 |
if view_var == "Simple":
|
173 |
display_data = display_data[['Player', 'Position', 'Salary', 'Median', 'Ceiling', 'Own']]
|
|
|
181 |
st.cache_data.clear()
|
182 |
roo_data, sd_roo_data, scoring_percentages = init_baselines()
|
183 |
hold_display = roo_data
|
184 |
+
dk_lineups = init_DK_lineups('Main')
|
185 |
+
fd_lineups = init_FD_lineups('Main')
|
186 |
for key in st.session_state.keys():
|
187 |
del st.session_state[key]
|
|
|
|
|
188 |
|
189 |
+
site_var3 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'), key='site_var3')
|
190 |
+
slate_type_var3 = st.radio("Which slate type are you loading?", ('Regular', 'Showdown'), key='slate_type_var3')
|
191 |
+
slate_var3 = st.radio("Which slate data are you loading?", ('Main', 'Secondary', 'Auxiliary'), key='slate_var3')
|
192 |
+
|
193 |
+
if slate_type_var3 == 'Regular':
|
194 |
+
if site_var3 == 'Draftkings':
|
195 |
+
dk_lineups = init_DK_lineups(slate_var3)
|
196 |
+
elif site_var3 == 'Fanduel':
|
197 |
+
fd_lineups = init_FD_lineups(slate_var3)
|
198 |
+
elif slate_type_var3 == 'Showdown':
|
199 |
+
if site_var3 == 'Draftkings':
|
200 |
+
dk_lineups = init_DK_lineups(slate_var3)
|
201 |
+
elif site_var3 == 'Fanduel':
|
202 |
+
fd_lineups = init_FD_lineups(slate_var3)
|
203 |
lineup_num_var = st.number_input("How many lineups do you want to display?", min_value=1, max_value=1000, value=150, step=1)
|
204 |
|
205 |
+
if slate_type_var3 == 'Regular':
|
206 |
raw_baselines = roo_data
|
207 |
+
elif slate_type_var3 == 'Showdown':
|
208 |
raw_baselines = sd_roo_data
|
209 |
|
210 |
+
if site_var3 == 'Draftkings':
|
211 |
+
if slate_type_var3 == 'Regular':
|
212 |
ROO_slice = raw_baselines[raw_baselines['Site'] == 'Draftkings']
|
213 |
player_salaries = dict(zip(ROO_slice['Player'], ROO_slice['Salary']))
|
214 |
+
elif slate_type_var3 == 'Showdown':
|
215 |
player_salaries = dict(zip(raw_baselines['Player'], raw_baselines['Salary']))
|
216 |
# Get the minimum and maximum ownership values from dk_lineups
|
217 |
min_own = np.min(dk_lineups[:,8])
|
|
|
224 |
elif player_var1 == 'Full Slate':
|
225 |
player_var2 = raw_baselines.Player.values.tolist()
|
226 |
|
227 |
+
elif site_var3 == 'Fanduel':
|
228 |
raw_baselines = hold_display
|
229 |
+
if slate_type_var3 == 'Regular':
|
230 |
ROO_slice = raw_baselines[raw_baselines['Site'] == 'Fanduel']
|
231 |
player_salaries = dict(zip(ROO_slice['Player'], ROO_slice['Salary']))
|
232 |
+
elif slate_type_var3 == 'Showdown':
|
233 |
player_salaries = dict(zip(raw_baselines['Player'], raw_baselines['Salary']))
|
234 |
min_own = np.min(fd_lineups[:,8])
|
235 |
max_own = np.max(fd_lineups[:,8])
|
|
|
243 |
|
244 |
if st.button("Prepare data export", key='data_export'):
|
245 |
data_export = st.session_state.working_seed.copy()
|
246 |
+
# if site_var3 == 'Draftkings':
|
247 |
# for col_idx in range(6):
|
248 |
# data_export[:, col_idx] = np.array([id_dict.get(player, player) for player in data_export[:, col_idx]])
|
249 |
+
# elif site_var3 == 'Fanduel':
|
250 |
# for col_idx in range(6):
|
251 |
# data_export[:, col_idx] = np.array([id_dict.get(player, player) for player in data_export[:, col_idx]])
|
252 |
st.download_button(
|
|
|
256 |
mime='text/csv',
|
257 |
)
|
258 |
|
259 |
+
if site_var3 == 'Draftkings':
|
260 |
if 'working_seed' in st.session_state:
|
261 |
st.session_state.working_seed = st.session_state.working_seed
|
262 |
if player_var1 == 'Specific Players':
|
|
|
273 |
st.session_state.working_seed = dk_lineups.copy()
|
274 |
st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)
|
275 |
|
276 |
+
elif site_var3 == 'Fanduel':
|
277 |
if 'working_seed' in st.session_state:
|
278 |
st.session_state.working_seed = st.session_state.working_seed
|
279 |
if player_var1 == 'Specific Players':
|
|
|
291 |
st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)
|
292 |
|
293 |
export_file = st.session_state.data_export_display.copy()
|
294 |
+
# if site_var3 == 'Draftkings':
|
295 |
# for col_idx in range(6):
|
296 |
# export_file.iloc[:, col_idx] = export_file.iloc[:, col_idx].map(id_dict)
|
297 |
+
# elif site_var3 == 'Fanduel':
|
298 |
# for col_idx in range(6):
|
299 |
# export_file.iloc[:, col_idx] = export_file.iloc[:, col_idx].map(id_dict)
|
300 |
|
|
|
302 |
if st.button("Reset Optimals", key='reset3'):
|
303 |
for key in st.session_state.keys():
|
304 |
del st.session_state[key]
|
305 |
+
if site_var3 == 'Draftkings':
|
306 |
st.session_state.working_seed = dk_lineups.copy()
|
307 |
+
elif site_var3 == 'Fanduel':
|
308 |
st.session_state.working_seed = fd_lineups.copy()
|
309 |
if 'data_export_display' in st.session_state:
|
310 |
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)
|
|
|
318 |
with st.container():
|
319 |
if 'working_seed' in st.session_state:
|
320 |
# Create a new dataframe with summary statistics
|
321 |
+
if site_var3 == 'Draftkings':
|
322 |
summary_df = pd.DataFrame({
|
323 |
'Metric': ['Min', 'Average', 'Max', 'STDdev'],
|
324 |
'Salary': [
|
|
|
340 |
np.std(st.session_state.working_seed[:,8])
|
341 |
]
|
342 |
})
|
343 |
+
elif site_var3 == 'Fanduel':
|
344 |
summary_df = pd.DataFrame({
|
345 |
'Metric': ['Min', 'Average', 'Max', 'STDdev'],
|
346 |
'Salary': [
|
|
|
378 |
tab1, tab2 = st.tabs(["Display Frequency", "Seed Frame Frequency"])
|
379 |
with tab1:
|
380 |
if 'data_export_display' in st.session_state:
|
381 |
+
if site_var3 == 'Draftkings':
|
382 |
player_columns = st.session_state.data_export_display.iloc[:, :6]
|
383 |
+
elif site_var3 == 'Fanduel':
|
384 |
player_columns = st.session_state.data_export_display.iloc[:, :6]
|
385 |
|
386 |
# Flatten the DataFrame and count unique values
|
|
|
414 |
)
|
415 |
with tab2:
|
416 |
if 'working_seed' in st.session_state:
|
417 |
+
if site_var3 == 'Draftkings':
|
418 |
player_columns = st.session_state.working_seed[:, :6]
|
419 |
+
elif site_var3 == 'Fanduel':
|
420 |
player_columns = st.session_state.working_seed[:, :6]
|
421 |
|
422 |
# Flatten the DataFrame and count unique values
|