Spaces:
Sleeping
Sleeping
James McCool
commited on
Commit
·
5a3709f
1
Parent(s):
937edee
Refactor seed frame initialization in app.py to include split parameter for limiting database queries. Updated functions for DraftKings and FanDuel to enhance performance and flexibility in data handling. Adjusted contest simulation logic to utilize the new split parameter, improving user control over lineup generation. This change streamlines data retrieval and enhances the overall efficiency of player ownership analysis and contest simulations.
Browse files
app.py
CHANGED
@@ -22,14 +22,14 @@ dk_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'pro
|
|
22 |
fd_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
|
23 |
|
24 |
@st.cache_data(ttl = 599)
|
25 |
-
def init_DK_seed_frames(sport):
|
26 |
if sport == 'NFL':
|
27 |
db = client["NFL_Database"]
|
28 |
elif sport == 'NBA':
|
29 |
db = client["NBA_DFS"]
|
30 |
|
31 |
collection = db[f"DK_{sport}_SD_seed_frame"]
|
32 |
-
cursor = collection.find()
|
33 |
|
34 |
raw_display = pd.DataFrame(list(cursor))
|
35 |
raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
|
@@ -38,7 +38,7 @@ def init_DK_seed_frames(sport):
|
|
38 |
return DK_seed
|
39 |
|
40 |
@st.cache_data(ttl = 599)
|
41 |
-
def init_DK_secondary_seed_frames(sport):
|
42 |
|
43 |
if sport == 'NFL':
|
44 |
db = client["NFL_Database"]
|
@@ -46,7 +46,7 @@ def init_DK_secondary_seed_frames(sport):
|
|
46 |
db = client["NBA_DFS"]
|
47 |
|
48 |
collection = db[f"DK_{sport}_Secondary_SD_seed_frame"]
|
49 |
-
cursor = collection.find()
|
50 |
|
51 |
raw_display = pd.DataFrame(list(cursor))
|
52 |
raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
|
@@ -55,7 +55,7 @@ def init_DK_secondary_seed_frames(sport):
|
|
55 |
return DK_second_seed
|
56 |
|
57 |
@st.cache_data(ttl = 599)
|
58 |
-
def init_DK_auxiliary_seed_frames(sport):
|
59 |
|
60 |
if sport == 'NFL':
|
61 |
db = client["NFL_Database"]
|
@@ -63,7 +63,7 @@ def init_DK_auxiliary_seed_frames(sport):
|
|
63 |
db = client["NBA_DFS"]
|
64 |
|
65 |
collection = db[f"DK_{sport}_Auxiliary_SD_seed_frame"]
|
66 |
-
cursor = collection.find()
|
67 |
|
68 |
raw_display = pd.DataFrame(list(cursor))
|
69 |
raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
|
@@ -72,7 +72,7 @@ def init_DK_auxiliary_seed_frames(sport):
|
|
72 |
return DK_auxiliary_seed
|
73 |
|
74 |
@st.cache_data(ttl = 599)
|
75 |
-
def init_FD_seed_frames(sport):
|
76 |
|
77 |
if sport == 'NFL':
|
78 |
db = client["NFL_Database"]
|
@@ -80,7 +80,7 @@ def init_FD_seed_frames(sport):
|
|
80 |
db = client["NBA_DFS"]
|
81 |
|
82 |
collection = db[f"FD_{sport}_SD_seed_frame"]
|
83 |
-
cursor = collection.find()
|
84 |
|
85 |
raw_display = pd.DataFrame(list(cursor))
|
86 |
raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
|
@@ -89,7 +89,7 @@ def init_FD_seed_frames(sport):
|
|
89 |
return FD_seed
|
90 |
|
91 |
@st.cache_data(ttl = 599)
|
92 |
-
def init_FD_secondary_seed_frames(sport):
|
93 |
|
94 |
if sport == 'NFL':
|
95 |
db = client["NFL_Database"]
|
@@ -97,7 +97,7 @@ def init_FD_secondary_seed_frames(sport):
|
|
97 |
db = client["NBA_DFS"]
|
98 |
|
99 |
collection = db[f"FD_{sport}_Secondary_SD_seed_frame"]
|
100 |
-
cursor = collection.find()
|
101 |
|
102 |
raw_display = pd.DataFrame(list(cursor))
|
103 |
raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
|
@@ -106,7 +106,7 @@ def init_FD_secondary_seed_frames(sport):
|
|
106 |
return FD_second_seed
|
107 |
|
108 |
@st.cache_data(ttl = 599)
|
109 |
-
def init_FD_auxiliary_seed_frames(sport):
|
110 |
|
111 |
if sport == 'NFL':
|
112 |
db = client["NFL_Database"]
|
@@ -114,7 +114,7 @@ def init_FD_auxiliary_seed_frames(sport):
|
|
114 |
db = client["NBA_DFS"]
|
115 |
|
116 |
collection = db[f"FD_{sport}_Auxiliary_SD_seed_frame"]
|
117 |
-
cursor = collection.find()
|
118 |
|
119 |
raw_display = pd.DataFrame(list(cursor))
|
120 |
raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
|
@@ -212,10 +212,9 @@ def calculate_FD_value_frequencies(np_array):
|
|
212 |
return combined_array
|
213 |
|
214 |
@st.cache_data
|
215 |
-
def sim_contest(Sim_size, seed_frame, maps_dict,
|
216 |
SimVar = 1
|
217 |
Sim_Winners = []
|
218 |
-
fp_array = seed_frame[:sharp_split, :]
|
219 |
|
220 |
# Pre-vectorize functions
|
221 |
vec_projection_map = np.vectorize(maps_dict['Projection_map'].__getitem__)
|
@@ -226,7 +225,7 @@ def sim_contest(Sim_size, seed_frame, maps_dict, sharp_split, Contest_Size):
|
|
226 |
st.write('Simulating contest on frames')
|
227 |
|
228 |
while SimVar <= Sim_size:
|
229 |
-
fp_random =
|
230 |
|
231 |
sample_arrays1 = np.c_[
|
232 |
fp_random,
|
@@ -262,31 +261,11 @@ with tab2:
|
|
262 |
dk_raw, fd_raw = init_baselines('NFL')
|
263 |
|
264 |
sport_var1 = st.radio("What sport are you working with?", ('NFL', 'NBA'), key='sport_var1')
|
265 |
-
dk_raw, fd_raw = init_baselines(sport_var1)
|
266 |
slate_var1 = st.radio("Which data are you loading?", ('Showdown', 'Secondary Showdown', 'Auxiliary Showdown'), key='slate_var1')
|
|
|
267 |
|
268 |
site_var1 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'), key='site_var1')
|
269 |
if site_var1 == 'Draftkings':
|
270 |
-
if slate_var1 == 'Showdown':
|
271 |
-
DK_seed = init_DK_seed_frames(sport_var1)
|
272 |
-
if sport_var1 == 'NFL':
|
273 |
-
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
274 |
-
elif sport_var1 == 'NBA':
|
275 |
-
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
276 |
-
elif slate_var1 == 'Secondary Showdown':
|
277 |
-
DK_seed = init_DK_secondary_seed_frames(sport_var1)
|
278 |
-
if sport_var1 == 'NFL':
|
279 |
-
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
280 |
-
elif sport_var1 == 'NBA':
|
281 |
-
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
282 |
-
elif slate_var1 == 'Auxiliary Showdown':
|
283 |
-
DK_seed = init_DK_auxiliary_seed_frames(sport_var1)
|
284 |
-
if sport_var1 == 'NFL':
|
285 |
-
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
286 |
-
elif sport_var1 == 'NBA':
|
287 |
-
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
288 |
-
raw_baselines = dk_raw
|
289 |
-
column_names = dk_columns
|
290 |
|
291 |
team_var1 = st.radio("Do you want a frame with specific teams?", ('Full Slate', 'Specific Teams'), key='team_var1')
|
292 |
if team_var1 == 'Specific Teams':
|
@@ -301,26 +280,6 @@ with tab2:
|
|
301 |
stack_var2 = [5, 4, 3, 2, 1, 0]
|
302 |
|
303 |
elif site_var1 == 'Fanduel':
|
304 |
-
if slate_var1 == 'Showdown':
|
305 |
-
FD_seed = init_FD_seed_frames(sport_var1)
|
306 |
-
if sport_var1 == 'NFL':
|
307 |
-
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
308 |
-
elif sport_var1 == 'NBA':
|
309 |
-
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
310 |
-
elif slate_var1 == 'Secondary Showdown':
|
311 |
-
FD_seed = init_FD_secondary_seed_frames(sport_var1)
|
312 |
-
if sport_var1 == 'NFL':
|
313 |
-
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
314 |
-
elif sport_var1 == 'NBA':
|
315 |
-
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
316 |
-
elif slate_var1 == 'Auxiliary Showdown':
|
317 |
-
FD_seed = init_FD_auxiliary_seed_frames(sport_var1)
|
318 |
-
if sport_var1 == 'NFL':
|
319 |
-
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
320 |
-
elif sport_var1 == 'NBA':
|
321 |
-
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
322 |
-
raw_baselines = fd_raw
|
323 |
-
column_names = fd_columns
|
324 |
|
325 |
team_var1 = st.radio("Do you want a frame with specific teams?", ('Full Slate', 'Specific Teams'), key='team_var1')
|
326 |
if team_var1 == 'Specific Teams':
|
@@ -336,12 +295,58 @@ with tab2:
|
|
336 |
|
337 |
|
338 |
if st.button("Prepare data export", key='data_export'):
|
|
|
339 |
data_export = st.session_state.working_seed.copy()
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
345 |
mime='text/csv',
|
346 |
)
|
347 |
|
@@ -353,7 +358,24 @@ with tab2:
|
|
353 |
st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 10], stack_var2)]
|
354 |
st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
|
355 |
elif 'working_seed' not in st.session_state:
|
356 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
357 |
st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 9], team_var2)]
|
358 |
st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 10], stack_var2)]
|
359 |
st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
|
@@ -364,7 +386,26 @@ with tab2:
|
|
364 |
st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 9], stack_var2)]
|
365 |
st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
|
366 |
elif 'working_seed' not in st.session_state:
|
367 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
368 |
st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 8], team_var2)]
|
369 |
st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 9], stack_var2)]
|
370 |
st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
|
@@ -385,48 +426,6 @@ with tab1:
|
|
385 |
dk_raw, fd_raw = init_baselines(sim_sport_var1)
|
386 |
sim_slate_var1 = st.radio("Which data are you loading?", ('Showdown', 'Secondary Showdown', 'Auxiliary Showdown'), key='sim_slate_var1')
|
387 |
sim_site_var1 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'), key='sim_site_var1')
|
388 |
-
if sim_site_var1 == 'Draftkings':
|
389 |
-
if sim_slate_var1 == 'Showdown':
|
390 |
-
DK_seed = init_DK_seed_frames(sim_sport_var1)
|
391 |
-
if sport_var1 == 'NFL':
|
392 |
-
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
393 |
-
elif sport_var1 == 'NBA':
|
394 |
-
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
395 |
-
elif sim_slate_var1 == 'Secondary Showdown':
|
396 |
-
DK_seed = init_DK_secondary_seed_frames(sim_sport_var1)
|
397 |
-
if sport_var1 == 'NFL':
|
398 |
-
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
399 |
-
elif sport_var1 == 'NBA':
|
400 |
-
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
401 |
-
elif sim_slate_var1 == 'Auxiliary Showdown':
|
402 |
-
DK_seed = init_DK_auxiliary_seed_frames(sim_sport_var1)
|
403 |
-
if sport_var1 == 'NFL':
|
404 |
-
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
405 |
-
elif sport_var1 == 'NBA':
|
406 |
-
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
407 |
-
raw_baselines = dk_raw
|
408 |
-
column_names = dk_columns
|
409 |
-
elif sim_site_var1 == 'Fanduel':
|
410 |
-
if sim_slate_var1 == 'Showdown':
|
411 |
-
FD_seed = init_FD_seed_frames(sim_sport_var1)
|
412 |
-
if sport_var1 == 'NFL':
|
413 |
-
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
414 |
-
elif sport_var1 == 'NBA':
|
415 |
-
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
416 |
-
elif sim_slate_var1 == 'Secondary Showdown':
|
417 |
-
FD_seed = init_FD_secondary_seed_frames(sim_sport_var1)
|
418 |
-
if sport_var1 == 'NFL':
|
419 |
-
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
420 |
-
elif sport_var1 == 'NBA':
|
421 |
-
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
422 |
-
elif sim_slate_var1 == 'Auxiliary Showdown':
|
423 |
-
FD_seed = init_FD_auxiliary_seed_frames(sim_sport_var1)
|
424 |
-
if sport_var1 == 'NFL':
|
425 |
-
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
426 |
-
elif sport_var1 == 'NBA':
|
427 |
-
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
428 |
-
raw_baselines = fd_raw
|
429 |
-
column_names = fd_columns
|
430 |
|
431 |
contest_var1 = st.selectbox("What contest size are you simulating?", ('Small', 'Medium', 'Large', 'Custom'))
|
432 |
if contest_var1 == 'Small':
|
@@ -469,7 +468,7 @@ with tab1:
|
|
469 |
'STDev_map':dict(zip(raw_baselines.Player,raw_baselines.STDev)),
|
470 |
'cpt_STDev_map':dict(zip(raw_baselines.Player,raw_baselines['CPT_STDev']))
|
471 |
}
|
472 |
-
Sim_Winners = sim_contest(1000, st.session_state.working_seed, maps_dict,
|
473 |
Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners))
|
474 |
|
475 |
#st.table(Sim_Winner_Frame)
|
@@ -496,9 +495,47 @@ with tab1:
|
|
496 |
|
497 |
else:
|
498 |
if sim_site_var1 == 'Draftkings':
|
499 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
500 |
elif sim_site_var1 == 'Fanduel':
|
501 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
502 |
maps_dict = {
|
503 |
'Projection_map':dict(zip(raw_baselines.Player,raw_baselines.Median)),
|
504 |
'cpt_projection_map':dict(zip(raw_baselines.Player,raw_baselines.cpt_Median)),
|
@@ -510,7 +547,7 @@ with tab1:
|
|
510 |
'STDev_map':dict(zip(raw_baselines.Player,raw_baselines.STDev)),
|
511 |
'cpt_STDev_map':dict(zip(raw_baselines.Player,raw_baselines['CPT_STDev']))
|
512 |
}
|
513 |
-
Sim_Winners = sim_contest(1000, st.session_state.working_seed, maps_dict,
|
514 |
Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners))
|
515 |
|
516 |
#st.table(Sim_Winner_Frame)
|
|
|
22 |
fd_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
|
23 |
|
24 |
@st.cache_data(ttl = 599)
|
25 |
+
def init_DK_seed_frames(sport, split):
|
26 |
if sport == 'NFL':
|
27 |
db = client["NFL_Database"]
|
28 |
elif sport == 'NBA':
|
29 |
db = client["NBA_DFS"]
|
30 |
|
31 |
collection = db[f"DK_{sport}_SD_seed_frame"]
|
32 |
+
cursor = collection.find().limit(split)
|
33 |
|
34 |
raw_display = pd.DataFrame(list(cursor))
|
35 |
raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
|
|
|
38 |
return DK_seed
|
39 |
|
40 |
@st.cache_data(ttl = 599)
|
41 |
+
def init_DK_secondary_seed_frames(sport, split):
|
42 |
|
43 |
if sport == 'NFL':
|
44 |
db = client["NFL_Database"]
|
|
|
46 |
db = client["NBA_DFS"]
|
47 |
|
48 |
collection = db[f"DK_{sport}_Secondary_SD_seed_frame"]
|
49 |
+
cursor = collection.find().limit(split)
|
50 |
|
51 |
raw_display = pd.DataFrame(list(cursor))
|
52 |
raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
|
|
|
55 |
return DK_second_seed
|
56 |
|
57 |
@st.cache_data(ttl = 599)
|
58 |
+
def init_DK_auxiliary_seed_frames(sport, split):
|
59 |
|
60 |
if sport == 'NFL':
|
61 |
db = client["NFL_Database"]
|
|
|
63 |
db = client["NBA_DFS"]
|
64 |
|
65 |
collection = db[f"DK_{sport}_Auxiliary_SD_seed_frame"]
|
66 |
+
cursor = collection.find().limit(split)
|
67 |
|
68 |
raw_display = pd.DataFrame(list(cursor))
|
69 |
raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
|
|
|
72 |
return DK_auxiliary_seed
|
73 |
|
74 |
@st.cache_data(ttl = 599)
|
75 |
+
def init_FD_seed_frames(sport, split):
|
76 |
|
77 |
if sport == 'NFL':
|
78 |
db = client["NFL_Database"]
|
|
|
80 |
db = client["NBA_DFS"]
|
81 |
|
82 |
collection = db[f"FD_{sport}_SD_seed_frame"]
|
83 |
+
cursor = collection.find().limit(split)
|
84 |
|
85 |
raw_display = pd.DataFrame(list(cursor))
|
86 |
raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
|
|
|
89 |
return FD_seed
|
90 |
|
91 |
@st.cache_data(ttl = 599)
|
92 |
+
def init_FD_secondary_seed_frames(sport, split):
|
93 |
|
94 |
if sport == 'NFL':
|
95 |
db = client["NFL_Database"]
|
|
|
97 |
db = client["NBA_DFS"]
|
98 |
|
99 |
collection = db[f"FD_{sport}_Secondary_SD_seed_frame"]
|
100 |
+
cursor = collection.find().limit(split)
|
101 |
|
102 |
raw_display = pd.DataFrame(list(cursor))
|
103 |
raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
|
|
|
106 |
return FD_second_seed
|
107 |
|
108 |
@st.cache_data(ttl = 599)
|
109 |
+
def init_FD_auxiliary_seed_frames(sport, split):
|
110 |
|
111 |
if sport == 'NFL':
|
112 |
db = client["NFL_Database"]
|
|
|
114 |
db = client["NBA_DFS"]
|
115 |
|
116 |
collection = db[f"FD_{sport}_Auxiliary_SD_seed_frame"]
|
117 |
+
cursor = collection.find().limit(split)
|
118 |
|
119 |
raw_display = pd.DataFrame(list(cursor))
|
120 |
raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
|
|
|
212 |
return combined_array
|
213 |
|
214 |
@st.cache_data
|
215 |
+
def sim_contest(Sim_size, seed_frame, maps_dict, Contest_Size):
|
216 |
SimVar = 1
|
217 |
Sim_Winners = []
|
|
|
218 |
|
219 |
# Pre-vectorize functions
|
220 |
vec_projection_map = np.vectorize(maps_dict['Projection_map'].__getitem__)
|
|
|
225 |
st.write('Simulating contest on frames')
|
226 |
|
227 |
while SimVar <= Sim_size:
|
228 |
+
fp_random = seed_frame[np.random.choice(seed_frame.shape[0], Contest_Size)]
|
229 |
|
230 |
sample_arrays1 = np.c_[
|
231 |
fp_random,
|
|
|
261 |
dk_raw, fd_raw = init_baselines('NFL')
|
262 |
|
263 |
sport_var1 = st.radio("What sport are you working with?", ('NFL', 'NBA'), key='sport_var1')
|
|
|
264 |
slate_var1 = st.radio("Which data are you loading?", ('Showdown', 'Secondary Showdown', 'Auxiliary Showdown'), key='slate_var1')
|
265 |
+
sharp_split_var = st.number_input("How many lineups do you want?", value=10000, max_value=500000, min_value=10000, step=10000)
|
266 |
|
267 |
site_var1 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'), key='site_var1')
|
268 |
if site_var1 == 'Draftkings':
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
269 |
|
270 |
team_var1 = st.radio("Do you want a frame with specific teams?", ('Full Slate', 'Specific Teams'), key='team_var1')
|
271 |
if team_var1 == 'Specific Teams':
|
|
|
280 |
stack_var2 = [5, 4, 3, 2, 1, 0]
|
281 |
|
282 |
elif site_var1 == 'Fanduel':
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
283 |
|
284 |
team_var1 = st.radio("Do you want a frame with specific teams?", ('Full Slate', 'Specific Teams'), key='team_var1')
|
285 |
if team_var1 == 'Specific Teams':
|
|
|
295 |
|
296 |
|
297 |
if st.button("Prepare data export", key='data_export'):
|
298 |
+
if 'working_seed' in st.session_state:
|
299 |
data_export = st.session_state.working_seed.copy()
|
300 |
+
elif 'working_seed' not in st.session_state:
|
301 |
+
if site_var1 == 'Draftkings':
|
302 |
+
if slate_var1 == 'Showdown':
|
303 |
+
st.session_state.working_seed = init_DK_seed_frames(sport_var1, sharp_split_var)
|
304 |
+
if sport_var1 == 'NFL':
|
305 |
+
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
306 |
+
elif sport_var1 == 'NBA':
|
307 |
+
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
308 |
+
elif slate_var1 == 'Secondary Showdown':
|
309 |
+
st.session_state.working_seed = init_DK_secondary_seed_frames(sport_var1, sharp_split_var)
|
310 |
+
if sport_var1 == 'NFL':
|
311 |
+
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
312 |
+
elif sport_var1 == 'NBA':
|
313 |
+
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
314 |
+
elif slate_var1 == 'Auxiliary Showdown':
|
315 |
+
st.session_state.working_seed = init_DK_auxiliary_seed_frames(sport_var1, sharp_split_var)
|
316 |
+
if sport_var1 == 'NFL':
|
317 |
+
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
318 |
+
elif sport_var1 == 'NBA':
|
319 |
+
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
320 |
+
raw_baselines = dk_raw
|
321 |
+
column_names = dk_columns
|
322 |
+
elif site_var1 == 'Fanduel':
|
323 |
+
if slate_var1 == 'Showdown':
|
324 |
+
st.session_state.working_seed = init_FD_seed_frames(sport_var1, sharp_split_var)
|
325 |
+
if sport_var1 == 'NFL':
|
326 |
+
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
327 |
+
elif sport_var1 == 'NBA':
|
328 |
+
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
329 |
+
elif slate_var1 == 'Secondary Showdown':
|
330 |
+
st.session_state.working_seed = init_FD_secondary_seed_frames(sport_var1, sharp_split_var)
|
331 |
+
if sport_var1 == 'NFL':
|
332 |
+
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
333 |
+
elif sport_var1 == 'NBA':
|
334 |
+
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
335 |
+
elif slate_var1 == 'Auxiliary Showdown':
|
336 |
+
st.session_state.working_seed = init_FD_auxiliary_seed_frames(sport_var1, sharp_split_var)
|
337 |
+
if sport_var1 == 'NFL':
|
338 |
+
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
339 |
+
elif sport_var1 == 'NBA':
|
340 |
+
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
341 |
+
raw_baselines = fd_raw
|
342 |
+
column_names = fd_columns
|
343 |
+
data_export = st.session_state.working_seed.copy()
|
344 |
+
for col in range(6):
|
345 |
+
data_export[:, col] = np.array([export_id_dict.get(x, x) for x in data_export[:, col]])
|
346 |
+
st.download_button(
|
347 |
+
label="Export optimals set",
|
348 |
+
data=convert_df(data_export),
|
349 |
+
file_name='NFL_SD_optimals_export.csv',
|
350 |
mime='text/csv',
|
351 |
)
|
352 |
|
|
|
358 |
st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 10], stack_var2)]
|
359 |
st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
|
360 |
elif 'working_seed' not in st.session_state:
|
361 |
+
if slate_var1 == 'Showdown':
|
362 |
+
st.session_state.working_seed = init_DK_seed_frames(sport_var1, sharp_split_var)
|
363 |
+
if sport_var1 == 'NFL':
|
364 |
+
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
365 |
+
elif sport_var1 == 'NBA':
|
366 |
+
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
367 |
+
elif slate_var1 == 'Secondary Showdown':
|
368 |
+
st.session_state.working_seed = init_DK_secondary_seed_frames(sport_var1, sharp_split_var)
|
369 |
+
if sport_var1 == 'NFL':
|
370 |
+
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
371 |
+
elif sport_var1 == 'NBA':
|
372 |
+
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
373 |
+
elif slate_var1 == 'Auxiliary Showdown':
|
374 |
+
st.session_state.working_seed = init_DK_auxiliary_seed_frames(sport_var1, sharp_split_var)
|
375 |
+
if sport_var1 == 'NFL':
|
376 |
+
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
377 |
+
elif sport_var1 == 'NBA':
|
378 |
+
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
379 |
st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 9], team_var2)]
|
380 |
st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 10], stack_var2)]
|
381 |
st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
|
|
|
386 |
st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 9], stack_var2)]
|
387 |
st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
|
388 |
elif 'working_seed' not in st.session_state:
|
389 |
+
if slate_var1 == 'Showdown':
|
390 |
+
st.session_state.working_seed = init_FD_seed_frames(sport_var1, sharp_split_var)
|
391 |
+
if sport_var1 == 'NFL':
|
392 |
+
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
393 |
+
elif sport_var1 == 'NBA':
|
394 |
+
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
395 |
+
elif slate_var1 == 'Secondary Showdown':
|
396 |
+
st.session_state.working_seed = init_FD_secondary_seed_frames(sport_var1, sharp_split_var)
|
397 |
+
if sport_var1 == 'NFL':
|
398 |
+
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
399 |
+
elif sport_var1 == 'NBA':
|
400 |
+
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
401 |
+
elif slate_var1 == 'Auxiliary Showdown':
|
402 |
+
st.session_state.working_seed = init_FD_auxiliary_seed_frames(sport_var1, sharp_split_var)
|
403 |
+
if sport_var1 == 'NFL':
|
404 |
+
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
405 |
+
elif sport_var1 == 'NBA':
|
406 |
+
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
407 |
+
raw_baselines = fd_raw
|
408 |
+
column_names = fd_columns
|
409 |
st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 8], team_var2)]
|
410 |
st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 9], stack_var2)]
|
411 |
st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
|
|
|
426 |
dk_raw, fd_raw = init_baselines(sim_sport_var1)
|
427 |
sim_slate_var1 = st.radio("Which data are you loading?", ('Showdown', 'Secondary Showdown', 'Auxiliary Showdown'), key='sim_slate_var1')
|
428 |
sim_site_var1 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'), key='sim_site_var1')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
429 |
|
430 |
contest_var1 = st.selectbox("What contest size are you simulating?", ('Small', 'Medium', 'Large', 'Custom'))
|
431 |
if contest_var1 == 'Small':
|
|
|
468 |
'STDev_map':dict(zip(raw_baselines.Player,raw_baselines.STDev)),
|
469 |
'cpt_STDev_map':dict(zip(raw_baselines.Player,raw_baselines['CPT_STDev']))
|
470 |
}
|
471 |
+
Sim_Winners = sim_contest(1000, st.session_state.working_seed, maps_dict, Contest_Size)
|
472 |
Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners))
|
473 |
|
474 |
#st.table(Sim_Winner_Frame)
|
|
|
495 |
|
496 |
else:
|
497 |
if sim_site_var1 == 'Draftkings':
|
498 |
+
if sim_slate_var1 == 'Showdown':
|
499 |
+
st.session_state.working_seed = init_DK_seed_frames(sim_sport_var1, sharp_split_var)
|
500 |
+
if sport_var1 == 'NFL':
|
501 |
+
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
502 |
+
elif sport_var1 == 'NBA':
|
503 |
+
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
504 |
+
elif sim_slate_var1 == 'Secondary Showdown':
|
505 |
+
st.session_state.working_seed = init_DK_secondary_seed_frames(sim_sport_var1, sharp_split_var)
|
506 |
+
if sport_var1 == 'NFL':
|
507 |
+
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
508 |
+
elif sport_var1 == 'NBA':
|
509 |
+
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
510 |
+
elif sim_slate_var1 == 'Auxiliary Showdown':
|
511 |
+
st.session_state.working_seed = init_DK_auxiliary_seed_frames(sim_sport_var1, sharp_split_var)
|
512 |
+
if sport_var1 == 'NFL':
|
513 |
+
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
514 |
+
elif sport_var1 == 'NBA':
|
515 |
+
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
516 |
+
raw_baselines = dk_raw
|
517 |
+
column_names = dk_columns
|
518 |
elif sim_site_var1 == 'Fanduel':
|
519 |
+
if sim_slate_var1 == 'Showdown':
|
520 |
+
st.session_state.working_seed = init_FD_seed_frames(sim_sport_var1, sharp_split_var)
|
521 |
+
if sport_var1 == 'NFL':
|
522 |
+
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
523 |
+
elif sport_var1 == 'NBA':
|
524 |
+
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
525 |
+
elif sim_slate_var1 == 'Secondary Showdown':
|
526 |
+
st.session_state.working_seed = init_FD_secondary_seed_frames(sim_sport_var1, sharp_split_var)
|
527 |
+
if sport_var1 == 'NFL':
|
528 |
+
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
529 |
+
elif sport_var1 == 'NBA':
|
530 |
+
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
531 |
+
elif sim_slate_var1 == 'Auxiliary Showdown':
|
532 |
+
st.session_state.working_seed = init_FD_auxiliary_seed_frames(sim_sport_var1, sharp_split_var)
|
533 |
+
if sport_var1 == 'NFL':
|
534 |
+
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
535 |
+
elif sport_var1 == 'NBA':
|
536 |
+
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
537 |
+
raw_baselines = fd_raw
|
538 |
+
column_names = fd_columns
|
539 |
maps_dict = {
|
540 |
'Projection_map':dict(zip(raw_baselines.Player,raw_baselines.Median)),
|
541 |
'cpt_projection_map':dict(zip(raw_baselines.Player,raw_baselines.cpt_Median)),
|
|
|
547 |
'STDev_map':dict(zip(raw_baselines.Player,raw_baselines.STDev)),
|
548 |
'cpt_STDev_map':dict(zip(raw_baselines.Player,raw_baselines['CPT_STDev']))
|
549 |
}
|
550 |
+
Sim_Winners = sim_contest(1000, st.session_state.working_seed, maps_dict, Contest_Size)
|
551 |
Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners))
|
552 |
|
553 |
#st.table(Sim_Winner_Frame)
|