Spaces:
Running
Running
James McCool
commited on
Commit
·
ef6c0f1
1
Parent(s):
f47294a
Refactor load_overall_stats function in app.py: remove backlog data retrieval and associated UI elements to streamline data handling and improve performance
Browse files
app.py
CHANGED
@@ -144,17 +144,8 @@ def load_overall_stats():
|
|
144 |
roo_raw = raw_display.sort_values(by='Median', ascending=False)
|
145 |
|
146 |
timestamp = raw_display['timestamp'].values[0]
|
147 |
-
|
148 |
-
collection = db["Range_Of_Outcomes_Backlog"]
|
149 |
-
cursor = collection.find()
|
150 |
-
|
151 |
-
raw_display = pd.DataFrame(list(cursor))
|
152 |
-
raw_display = raw_display[['Player', 'Minutes Proj', 'Position', 'Team', 'Opp', 'Salary', 'Floor', 'Median', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '20+%', '4x%', '5x%', '6x%', 'GPP%',
|
153 |
-
'Own', 'Small_Own', 'Large_Own', 'Cash_Own', 'CPT_Own', 'LevX', 'ValX', 'site', 'version', 'slate', 'timestamp', 'Date']]
|
154 |
-
roo_backlog = raw_display.sort_values(by='Date', ascending=False)
|
155 |
-
roo_backlog = roo_backlog[roo_backlog['slate'] == 'Main Slate']
|
156 |
|
157 |
-
return dk_raw, fd_raw, dk_raw_sec, fd_raw_sec, roo_raw, timestamp
|
158 |
|
159 |
@st.cache_data(ttl = 60)
|
160 |
def init_DK_lineups():
|
@@ -204,7 +195,7 @@ def convert_df(array):
|
|
204 |
array = pd.DataFrame(array, columns=column_names)
|
205 |
return array.to_csv().encode('utf-8')
|
206 |
|
207 |
-
dk_raw, fd_raw, dk_raw_sec, fd_raw_sec, roo_raw, timestamp
|
208 |
salary_dict = dict(zip(roo_raw.Player, roo_raw.Salary))
|
209 |
|
210 |
try:
|
@@ -217,101 +208,6 @@ t_stamp = f"Last Update: " + str(timestamp) + f" CST"
|
|
217 |
|
218 |
tab1, tab2 = st.tabs(['Range of Outcomes', 'Optimals'])
|
219 |
|
220 |
-
with st.sidebar:
|
221 |
-
st.header("Quick Builder")
|
222 |
-
st.info("This is a quick hand building helper to give you some basic info about player combos and lineup feasibility")
|
223 |
-
sidebar_site = st.selectbox("What site are you running?", ('Draftkings', 'Fanduel'), key='sidebar_site')
|
224 |
-
sidebar_slate = st.selectbox("What slate are you running?", ('Main Slate', 'Secondary Slate'), key='sidebar_slate')
|
225 |
-
|
226 |
-
if sidebar_site == 'Draftkings':
|
227 |
-
roo_sample = roo_raw[roo_raw['slate'] == str(sidebar_slate)]
|
228 |
-
roo_sample = roo_sample[roo_sample['site'] == 'Draftkings']
|
229 |
-
roo_sample = roo_sample.sort_values(by='Own', ascending=False)
|
230 |
-
selected_pg = []
|
231 |
-
selected_sg = []
|
232 |
-
selected_sf = []
|
233 |
-
selected_pf = []
|
234 |
-
selected_c = []
|
235 |
-
selected_g = []
|
236 |
-
selected_f = []
|
237 |
-
selected_flex = []
|
238 |
-
elif sidebar_site == 'Fanduel':
|
239 |
-
roo_sample = roo_raw[roo_raw['slate'] == str(sidebar_slate)]
|
240 |
-
roo_sample = roo_sample[roo_sample['site'] == 'Fanduel']
|
241 |
-
roo_sample = roo_sample.sort_values(by='Own', ascending=False)
|
242 |
-
selected_pg1 = []
|
243 |
-
selected_pg2 = []
|
244 |
-
selected_sg1 = []
|
245 |
-
selected_sg2 = []
|
246 |
-
selected_sf1 = []
|
247 |
-
selected_sf2 = []
|
248 |
-
selected_pf1 = []
|
249 |
-
selected_pf2 = []
|
250 |
-
selected_c1 = []
|
251 |
-
|
252 |
-
# Get unique players by position from dk_roo_raw
|
253 |
-
pgs = roo_sample[roo_sample['Position'].str.contains('PG')]['Player'].unique()
|
254 |
-
sgs = roo_sample[roo_sample['Position'].str.contains('SG')]['Player'].unique()
|
255 |
-
sfs = roo_sample[roo_sample['Position'].str.contains('SF')]['Player'].unique()
|
256 |
-
pfs = roo_sample[roo_sample['Position'].str.contains('PF')]['Player'].unique()
|
257 |
-
centers = roo_sample[roo_sample['Position'].str.contains('C')]['Player'].unique()
|
258 |
-
guards = roo_sample[roo_sample['Position'].str.contains('G')]['Player'].unique()
|
259 |
-
forwards = roo_sample[roo_sample['Position'].str.contains('F')]['Player'].unique()
|
260 |
-
flex = roo_sample['Player'].unique()
|
261 |
-
|
262 |
-
if sidebar_site == 'Draftkings':
|
263 |
-
selected_pgs = st.multiselect('Select PG:', list(pgs), default=None, placeholder='Select PG', label_visibility='collapsed', key='pg1')
|
264 |
-
selected_sgs = st.multiselect('Select SG:', list(sgs), default=None, placeholder='Select SG', label_visibility='collapsed', key='sg1')
|
265 |
-
selected_sfs = st.multiselect('Select SF:', list(sfs), default=None, placeholder='Select SF', label_visibility='collapsed', key='sf1')
|
266 |
-
selected_pfs = st.multiselect('Select PF:', list(pfs), default=None, placeholder='Select PF', label_visibility='collapsed', key='pf1')
|
267 |
-
selected_cs = st.multiselect('Select C:', list(centers), default=None, placeholder='Select C', label_visibility='collapsed', key='c1')
|
268 |
-
selected_g = st.multiselect('Select G:', list(guards), default=None, placeholder='Select G', label_visibility='collapsed', key='g')
|
269 |
-
selected_f = st.multiselect('Select F:', list(forwards), default=None, placeholder='Select F', label_visibility='collapsed', key='f')
|
270 |
-
selected_flex = st.multiselect('Select Flex:', list(flex), default=None, placeholder='Select Flex', label_visibility='collapsed', key='flex')
|
271 |
-
|
272 |
-
# Combine all selected players
|
273 |
-
all_selected = selected_pgs + selected_sgs + selected_sfs + selected_pfs + selected_cs + selected_g + selected_f + selected_flex
|
274 |
-
|
275 |
-
elif sidebar_site == 'Fanduel':
|
276 |
-
selected_pg1 = st.multiselect('Select PG1:', list(pgs), default=None, placeholder='Select PG1', label_visibility='collapsed', key='pg1')
|
277 |
-
selected_pg2 = st.multiselect('Select PG2:', list(pgs), default=None, placeholder='Select PG2', label_visibility='collapsed', key='pg2')
|
278 |
-
selected_sg1 = st.multiselect('Select SG1:', list(sgs), default=None, placeholder='Select SG1', label_visibility='collapsed', key='sg1')
|
279 |
-
selected_sg2 = st.multiselect('Select SG2:', list(sgs), default=None, placeholder='Select SG2', label_visibility='collapsed', key='sg2')
|
280 |
-
selected_sf1 = st.multiselect('Select SF1:', list(sfs), default=None, placeholder='Select SF1', label_visibility='collapsed', key='sf1')
|
281 |
-
selected_sf2 = st.multiselect('Select SF2:', list(sfs), default=None, placeholder='Select SF2', label_visibility='collapsed', key='sf2')
|
282 |
-
selected_pf1 = st.multiselect('Select PF1:', list(pfs), default=None, placeholder='Select PF1', label_visibility='collapsed', key='pf1')
|
283 |
-
selected_pf2 = st.multiselect('Select PF2:', list(pfs), default=None, placeholder='Select PF2', label_visibility='collapsed', key='pf2')
|
284 |
-
selected_c1 = st.multiselect('Select C1:', list(centers), default=None, placeholder='Select C1', label_visibility='collapsed', key='c1')
|
285 |
-
|
286 |
-
# Combine all selected players
|
287 |
-
all_selected = selected_pg1 + selected_pg2 + selected_sg1 + selected_sg2 + selected_sf1 + selected_sf2 + selected_pf1 + selected_pf2 + selected_c1
|
288 |
-
|
289 |
-
if all_selected:
|
290 |
-
# Get stats for selected players
|
291 |
-
selected_stats = roo_sample[roo_sample['Player'].isin(all_selected)]
|
292 |
-
|
293 |
-
# Calculate sums
|
294 |
-
salary_sum = selected_stats['Salary'].sum()
|
295 |
-
median_sum = selected_stats['Median'].sum()
|
296 |
-
own_sum = selected_stats['Own'].sum()
|
297 |
-
levx_sum = selected_stats['LevX'].sum()
|
298 |
-
|
299 |
-
# Display sums
|
300 |
-
st.write('---')
|
301 |
-
if sidebar_site == 'Draftkings':
|
302 |
-
if salary_sum > 50000:
|
303 |
-
st.warning(f'Total Salary: ${salary_sum:.2f} exceeds limit of $50,000')
|
304 |
-
else:
|
305 |
-
st.write(f'Total Salary: ${salary_sum:.2f}')
|
306 |
-
elif sidebar_site == 'Fanduel':
|
307 |
-
if salary_sum > 60000:
|
308 |
-
st.warning(f'Total Salary: ${salary_sum:.2f} exceeds limit of $60,000')
|
309 |
-
else:
|
310 |
-
st.write(f'Total Salary: ${salary_sum:.2f}')
|
311 |
-
st.write(f'Total Median: {median_sum:.2f}')
|
312 |
-
st.write(f'Total Ownership: {own_sum:.2f}%')
|
313 |
-
st.write(f'Total LevX: {levx_sum:.2f}')
|
314 |
-
|
315 |
with tab1:
|
316 |
|
317 |
with st.expander("Info and Filters"):
|
@@ -325,7 +221,7 @@ with tab1:
|
|
325 |
with col2:
|
326 |
if st.button("Load/Reset Data", key='reset1'):
|
327 |
st.cache_data.clear()
|
328 |
-
dk_raw, fd_raw, dk_raw_sec, fd_raw_sec, roo_raw, timestamp
|
329 |
id_dict = dict(zip(roo_raw.Player, roo_raw.player_ID))
|
330 |
dk_lineups = init_DK_lineups()
|
331 |
fd_lineups = init_FD_lineups()
|
@@ -341,10 +237,8 @@ with tab1:
|
|
341 |
# Process site selection
|
342 |
if site_var2 == 'Draftkings':
|
343 |
site_baselines = roo_raw[roo_raw['site'] == 'Draftkings']
|
344 |
-
site_backlog = roo_backlog[roo_backlog['site'] == 'Draftkings']
|
345 |
elif site_var2 == 'Fanduel':
|
346 |
site_baselines = roo_raw[roo_raw['site'] == 'Fanduel']
|
347 |
-
site_backlog = roo_backlog[roo_backlog['site'] == 'Fanduel']
|
348 |
with col3:
|
349 |
slate_split = st.radio("Slate Type", ('Main Slate', 'Secondary', 'Backlog'), key='slate_split')
|
350 |
|
@@ -352,21 +246,6 @@ with tab1:
|
|
352 |
raw_baselines = site_baselines[site_baselines['slate'] == 'Main Slate']
|
353 |
elif slate_split == 'Secondary':
|
354 |
raw_baselines = site_baselines[site_baselines['slate'] == 'Secondary Slate']
|
355 |
-
elif slate_split == 'Backlog':
|
356 |
-
raw_baselines = site_backlog
|
357 |
-
# Third row - backlog options
|
358 |
-
col1, col2 = st.columns(2)
|
359 |
-
with col1:
|
360 |
-
view_all = st.checkbox("View all dates?", key='view_all')
|
361 |
-
with col2:
|
362 |
-
if not view_all:
|
363 |
-
date_var2 = st.date_input("Select date", key='date_var2')
|
364 |
-
|
365 |
-
if view_all:
|
366 |
-
raw_baselines = raw_baselines.sort_values(by=['Median', 'Date'], ascending=[False, False])
|
367 |
-
else:
|
368 |
-
raw_baselines = raw_baselines[raw_baselines['Date'] == date_var2.strftime('%m-%d-%Y')]
|
369 |
-
raw_baselines = raw_baselines.sort_values(by='Median', ascending=False)
|
370 |
|
371 |
with col4:
|
372 |
split_var2 = st.radio("Slate Range", ('Full Slate Run', 'Specific Games'), key='split_var2')
|
|
|
144 |
roo_raw = raw_display.sort_values(by='Median', ascending=False)
|
145 |
|
146 |
timestamp = raw_display['timestamp'].values[0]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
147 |
|
148 |
+
return dk_raw, fd_raw, dk_raw_sec, fd_raw_sec, roo_raw, timestamp
|
149 |
|
150 |
@st.cache_data(ttl = 60)
|
151 |
def init_DK_lineups():
|
|
|
195 |
array = pd.DataFrame(array, columns=column_names)
|
196 |
return array.to_csv().encode('utf-8')
|
197 |
|
198 |
+
dk_raw, fd_raw, dk_raw_sec, fd_raw_sec, roo_raw, timestamp = load_overall_stats()
|
199 |
salary_dict = dict(zip(roo_raw.Player, roo_raw.Salary))
|
200 |
|
201 |
try:
|
|
|
208 |
|
209 |
tab1, tab2 = st.tabs(['Range of Outcomes', 'Optimals'])
|
210 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
211 |
with tab1:
|
212 |
|
213 |
with st.expander("Info and Filters"):
|
|
|
221 |
with col2:
|
222 |
if st.button("Load/Reset Data", key='reset1'):
|
223 |
st.cache_data.clear()
|
224 |
+
dk_raw, fd_raw, dk_raw_sec, fd_raw_sec, roo_raw, timestamp = load_overall_stats()
|
225 |
id_dict = dict(zip(roo_raw.Player, roo_raw.player_ID))
|
226 |
dk_lineups = init_DK_lineups()
|
227 |
fd_lineups = init_FD_lineups()
|
|
|
237 |
# Process site selection
|
238 |
if site_var2 == 'Draftkings':
|
239 |
site_baselines = roo_raw[roo_raw['site'] == 'Draftkings']
|
|
|
240 |
elif site_var2 == 'Fanduel':
|
241 |
site_baselines = roo_raw[roo_raw['site'] == 'Fanduel']
|
|
|
242 |
with col3:
|
243 |
slate_split = st.radio("Slate Type", ('Main Slate', 'Secondary', 'Backlog'), key='slate_split')
|
244 |
|
|
|
246 |
raw_baselines = site_baselines[site_baselines['slate'] == 'Main Slate']
|
247 |
elif slate_split == 'Secondary':
|
248 |
raw_baselines = site_baselines[site_baselines['slate'] == 'Secondary Slate']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
249 |
|
250 |
with col4:
|
251 |
split_var2 = st.radio("Slate Range", ('Full Slate Run', 'Specific Games'), key='split_var2')
|