Spaces:
Sleeping
Sleeping
James McCool
commited on
Commit
·
8de59cc
1
Parent(s):
eb5071e
reverting change for vectorizing names
Browse files
app.py
CHANGED
@@ -192,15 +192,6 @@ def init_baselines(sport):
|
|
192 |
|
193 |
return dk_raw, fd_raw
|
194 |
|
195 |
-
@st.cache_data
|
196 |
-
def standardize_name(name):
|
197 |
-
# Remove common suffixes and standardize
|
198 |
-
suffixes = [' Jr.', ' Jr', ' Sr.', ' Sr', ' III', ' II', ' IV']
|
199 |
-
name = str(name) # Ensure name is a string
|
200 |
-
for suffix in suffixes:
|
201 |
-
name = name.replace(suffix, '')
|
202 |
-
return name.strip()
|
203 |
-
|
204 |
@st.cache_data
|
205 |
def convert_df(array):
|
206 |
array = pd.DataFrame(array, columns=column_names)
|
@@ -225,14 +216,12 @@ def sim_contest(Sim_size, seed_frame, maps_dict, sharp_split, Contest_Size):
|
|
225 |
SimVar = 1
|
226 |
Sim_Winners = []
|
227 |
fp_array = seed_frame[:sharp_split, :]
|
228 |
-
|
229 |
-
vec_standardize = np.vectorize(standardize_name)
|
230 |
|
231 |
# Pre-vectorize functions
|
232 |
-
vec_projection_map =
|
233 |
-
vec_cpt_projection_map =
|
234 |
-
vec_stdev_map =
|
235 |
-
vec_cpt_stdev_map =
|
236 |
|
237 |
st.write('Simulating contest on frames')
|
238 |
|
@@ -398,7 +387,6 @@ with tab1:
|
|
398 |
elif sport_var1 == 'NBA':
|
399 |
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
400 |
raw_baselines = dk_raw
|
401 |
-
raw_baselines['Player'] = raw_baselines['Player'].apply(standardize_name)
|
402 |
column_names = dk_columns
|
403 |
elif sim_site_var1 == 'Fanduel':
|
404 |
if sim_slate_var1 == 'Showdown':
|
@@ -414,7 +402,6 @@ with tab1:
|
|
414 |
elif sport_var1 == 'NBA':
|
415 |
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
416 |
raw_baselines = fd_raw
|
417 |
-
raw_baselines['Player'] = raw_baselines['Player'].apply(standardize_name)
|
418 |
column_names = fd_columns
|
419 |
|
420 |
contest_var1 = st.selectbox("What contest size are you simulating?", ('Small', 'Medium', 'Large', 'Custom'))
|
@@ -445,15 +432,15 @@ with tab1:
|
|
445 |
if st.button("Run Contest Sim"):
|
446 |
if 'working_seed' in st.session_state:
|
447 |
maps_dict = {
|
448 |
-
'Projection_map':dict(zip(raw_baselines.Player
|
449 |
-
'cpt_projection_map':dict(zip(raw_baselines.Player
|
450 |
-
'Salary_map':dict(zip(raw_baselines.Player
|
451 |
-
'Pos_map':dict(zip(raw_baselines.Player
|
452 |
-
'Own_map':dict(zip(raw_baselines.Player
|
453 |
-
'cpt_Own_map':dict(zip(raw_baselines.Player
|
454 |
-
'Team_map':dict(zip(raw_baselines.Player
|
455 |
-
'STDev_map':dict(zip(raw_baselines.Player
|
456 |
-
'cpt_STDev_map':dict(zip(raw_baselines.Player
|
457 |
}
|
458 |
Sim_Winners = sim_contest(1000, st.session_state.working_seed, maps_dict, sharp_split, Contest_Size)
|
459 |
Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners))
|
@@ -486,15 +473,15 @@ with tab1:
|
|
486 |
elif sim_site_var1 == 'Fanduel':
|
487 |
st.session_state.working_seed = FD_seed.copy()
|
488 |
maps_dict = {
|
489 |
-
'Projection_map':dict(zip(raw_baselines.Player
|
490 |
-
'cpt_projection_map':dict(zip(raw_baselines.Player
|
491 |
-
'Salary_map':dict(zip(raw_baselines.Player
|
492 |
-
'Pos_map':dict(zip(raw_baselines.Player
|
493 |
-
'Own_map':dict(zip(raw_baselines.Player
|
494 |
-
'cpt_Own_map':dict(zip(raw_baselines.Player
|
495 |
-
'Team_map':dict(zip(raw_baselines.Player
|
496 |
-
'STDev_map':dict(zip(raw_baselines.Player
|
497 |
-
'cpt_STDev_map':dict(zip(raw_baselines.Player
|
498 |
}
|
499 |
Sim_Winners = sim_contest(1000, st.session_state.working_seed, maps_dict, sharp_split, Contest_Size)
|
500 |
Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners))
|
@@ -530,18 +517,18 @@ with tab1:
|
|
530 |
freq_working = pd.DataFrame(np.column_stack(np.unique(freq_copy.iloc[:,0:5].values, return_counts=True)),
|
531 |
columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
|
532 |
freq_working['Freq'] = freq_working['Freq'].astype(int)
|
533 |
-
freq_working['Position'] = freq_working['Player'].
|
534 |
if sim_site_var1 == 'Draftkings':
|
535 |
if sim_sport_var1 == 'NFL':
|
536 |
-
freq_working['Salary'] = freq_working['Player'].
|
537 |
elif sim_sport_var1 == 'NBA':
|
538 |
-
freq_working['Salary'] = freq_working['Player'].
|
539 |
elif sim_site_var1 == 'Fanduel':
|
540 |
-
freq_working['Salary'] = freq_working['Player'].
|
541 |
-
freq_working['Proj Own'] = freq_working['Player'].
|
542 |
freq_working['Exposure'] = freq_working['Freq']/(1000)
|
543 |
freq_working['Edge'] = freq_working['Exposure'] - freq_working['Proj Own']
|
544 |
-
freq_working['Team'] = freq_working['Player'].
|
545 |
st.session_state.player_freq = freq_working.copy()
|
546 |
|
547 |
if sim_site_var1 == 'Draftkings':
|
@@ -551,15 +538,15 @@ with tab1:
|
|
551 |
cpt_working = pd.DataFrame(np.column_stack(np.unique(freq_copy.iloc[:,0:1].values, return_counts=True)),
|
552 |
columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
|
553 |
cpt_working['Freq'] = cpt_working['Freq'].astype(int)
|
554 |
-
cpt_working['Position'] = cpt_working['Player'].
|
555 |
if sim_sport_var1 == 'NFL':
|
556 |
-
cpt_working['Salary'] = cpt_working['Player'].
|
557 |
elif sim_sport_var1 == 'NBA':
|
558 |
-
cpt_working['Salary'] = cpt_working['Player'].
|
559 |
-
cpt_working['Proj Own'] = cpt_working['Player'].
|
560 |
cpt_working['Exposure'] = cpt_working['Freq']/(1000)
|
561 |
cpt_working['Edge'] = cpt_working['Exposure'] - cpt_working['Proj Own']
|
562 |
-
cpt_working['Team'] = cpt_working['Player'].
|
563 |
st.session_state.sp_freq = cpt_working.copy()
|
564 |
|
565 |
if sim_site_var1 == 'Draftkings':
|
@@ -574,15 +561,15 @@ with tab1:
|
|
574 |
flex_working['Position'] = flex_working['Player'].map(maps_dict['Pos_map'])
|
575 |
if sim_site_var1 == 'Draftkings':
|
576 |
if sim_sport_var1 == 'NFL':
|
577 |
-
flex_working['Salary'] = flex_working['Player'].
|
578 |
elif sim_sport_var1 == 'NBA':
|
579 |
-
flex_working['Salary'] = flex_working['Player'].
|
580 |
elif sim_site_var1 == 'Fanduel':
|
581 |
-
flex_working['Salary'] = flex_working['Player'].
|
582 |
-
flex_working['Proj Own'] = (flex_working['Player'].
|
583 |
flex_working['Exposure'] = flex_working['Freq']/(1000)
|
584 |
flex_working['Edge'] = flex_working['Exposure'] - flex_working['Proj Own']
|
585 |
-
flex_working['Team'] = flex_working['Player'].
|
586 |
st.session_state.flex_freq = flex_working.copy()
|
587 |
|
588 |
if sim_site_var1 == 'Draftkings':
|
|
|
192 |
|
193 |
return dk_raw, fd_raw
|
194 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
195 |
@st.cache_data
|
196 |
def convert_df(array):
|
197 |
array = pd.DataFrame(array, columns=column_names)
|
|
|
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__)
|
222 |
+
vec_cpt_projection_map = np.vectorize(maps_dict['cpt_projection_map'].__getitem__)
|
223 |
+
vec_stdev_map = np.vectorize(maps_dict['STDev_map'].__getitem__)
|
224 |
+
vec_cpt_stdev_map = np.vectorize(maps_dict['cpt_STDev_map'].__getitem__)
|
225 |
|
226 |
st.write('Simulating contest on frames')
|
227 |
|
|
|
387 |
elif sport_var1 == 'NBA':
|
388 |
export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
|
389 |
raw_baselines = dk_raw
|
|
|
390 |
column_names = dk_columns
|
391 |
elif sim_site_var1 == 'Fanduel':
|
392 |
if sim_slate_var1 == 'Showdown':
|
|
|
402 |
elif sport_var1 == 'NBA':
|
403 |
export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
|
404 |
raw_baselines = fd_raw
|
|
|
405 |
column_names = fd_columns
|
406 |
|
407 |
contest_var1 = st.selectbox("What contest size are you simulating?", ('Small', 'Medium', 'Large', 'Custom'))
|
|
|
432 |
if st.button("Run Contest Sim"):
|
433 |
if 'working_seed' in st.session_state:
|
434 |
maps_dict = {
|
435 |
+
'Projection_map':dict(zip(raw_baselines.Player,raw_baselines.Median)),
|
436 |
+
'cpt_projection_map':dict(zip(raw_baselines.Player,raw_baselines.cpt_Median)),
|
437 |
+
'Salary_map':dict(zip(raw_baselines.Player,raw_baselines.Salary)),
|
438 |
+
'Pos_map':dict(zip(raw_baselines.Player,raw_baselines.Position)),
|
439 |
+
'Own_map':dict(zip(raw_baselines.Player,raw_baselines['Own'])),
|
440 |
+
'cpt_Own_map':dict(zip(raw_baselines.Player,raw_baselines['CPT_Own'])),
|
441 |
+
'Team_map':dict(zip(raw_baselines.Player,raw_baselines.Team)),
|
442 |
+
'STDev_map':dict(zip(raw_baselines.Player,raw_baselines.STDev)),
|
443 |
+
'cpt_STDev_map':dict(zip(raw_baselines.Player,raw_baselines['CPT_STDev']))
|
444 |
}
|
445 |
Sim_Winners = sim_contest(1000, st.session_state.working_seed, maps_dict, sharp_split, Contest_Size)
|
446 |
Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners))
|
|
|
473 |
elif sim_site_var1 == 'Fanduel':
|
474 |
st.session_state.working_seed = FD_seed.copy()
|
475 |
maps_dict = {
|
476 |
+
'Projection_map':dict(zip(raw_baselines.Player,raw_baselines.Median)),
|
477 |
+
'cpt_projection_map':dict(zip(raw_baselines.Player,raw_baselines.cpt_Median)),
|
478 |
+
'Salary_map':dict(zip(raw_baselines.Player,raw_baselines.Salary)),
|
479 |
+
'Pos_map':dict(zip(raw_baselines.Player,raw_baselines.Position)),
|
480 |
+
'Own_map':dict(zip(raw_baselines.Player,raw_baselines['Own'])),
|
481 |
+
'cpt_Own_map':dict(zip(raw_baselines.Player,raw_baselines['CPT_Own'])),
|
482 |
+
'Team_map':dict(zip(raw_baselines.Player,raw_baselines.Team)),
|
483 |
+
'STDev_map':dict(zip(raw_baselines.Player,raw_baselines.STDev)),
|
484 |
+
'cpt_STDev_map':dict(zip(raw_baselines.Player,raw_baselines['CPT_STDev']))
|
485 |
}
|
486 |
Sim_Winners = sim_contest(1000, st.session_state.working_seed, maps_dict, sharp_split, Contest_Size)
|
487 |
Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners))
|
|
|
517 |
freq_working = pd.DataFrame(np.column_stack(np.unique(freq_copy.iloc[:,0:5].values, return_counts=True)),
|
518 |
columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
|
519 |
freq_working['Freq'] = freq_working['Freq'].astype(int)
|
520 |
+
freq_working['Position'] = freq_working['Player'].map(maps_dict['Pos_map'])
|
521 |
if sim_site_var1 == 'Draftkings':
|
522 |
if sim_sport_var1 == 'NFL':
|
523 |
+
freq_working['Salary'] = freq_working['Player'].map(maps_dict['Salary_map']) / 1.5
|
524 |
elif sim_sport_var1 == 'NBA':
|
525 |
+
freq_working['Salary'] = freq_working['Player'].map(maps_dict['Salary_map'])
|
526 |
elif sim_site_var1 == 'Fanduel':
|
527 |
+
freq_working['Salary'] = freq_working['Player'].map(maps_dict['Salary_map'])
|
528 |
+
freq_working['Proj Own'] = freq_working['Player'].map(maps_dict['Own_map']) / 100
|
529 |
freq_working['Exposure'] = freq_working['Freq']/(1000)
|
530 |
freq_working['Edge'] = freq_working['Exposure'] - freq_working['Proj Own']
|
531 |
+
freq_working['Team'] = freq_working['Player'].map(maps_dict['Team_map'])
|
532 |
st.session_state.player_freq = freq_working.copy()
|
533 |
|
534 |
if sim_site_var1 == 'Draftkings':
|
|
|
538 |
cpt_working = pd.DataFrame(np.column_stack(np.unique(freq_copy.iloc[:,0:1].values, return_counts=True)),
|
539 |
columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
|
540 |
cpt_working['Freq'] = cpt_working['Freq'].astype(int)
|
541 |
+
cpt_working['Position'] = cpt_working['Player'].map(maps_dict['Pos_map'])
|
542 |
if sim_sport_var1 == 'NFL':
|
543 |
+
cpt_working['Salary'] = cpt_working['Player'].map(maps_dict['Salary_map'])
|
544 |
elif sim_sport_var1 == 'NBA':
|
545 |
+
cpt_working['Salary'] = cpt_working['Player'].map(maps_dict['Salary_map']) * 1.5
|
546 |
+
cpt_working['Proj Own'] = cpt_working['Player'].map(maps_dict['cpt_Own_map']) / 100
|
547 |
cpt_working['Exposure'] = cpt_working['Freq']/(1000)
|
548 |
cpt_working['Edge'] = cpt_working['Exposure'] - cpt_working['Proj Own']
|
549 |
+
cpt_working['Team'] = cpt_working['Player'].map(maps_dict['Team_map'])
|
550 |
st.session_state.sp_freq = cpt_working.copy()
|
551 |
|
552 |
if sim_site_var1 == 'Draftkings':
|
|
|
561 |
flex_working['Position'] = flex_working['Player'].map(maps_dict['Pos_map'])
|
562 |
if sim_site_var1 == 'Draftkings':
|
563 |
if sim_sport_var1 == 'NFL':
|
564 |
+
flex_working['Salary'] = flex_working['Player'].map(maps_dict['Salary_map']) / 1.5
|
565 |
elif sim_sport_var1 == 'NBA':
|
566 |
+
flex_working['Salary'] = flex_working['Player'].map(maps_dict['Salary_map'])
|
567 |
elif sim_site_var1 == 'Fanduel':
|
568 |
+
flex_working['Salary'] = flex_working['Player'].map(maps_dict['Salary_map'])
|
569 |
+
flex_working['Proj Own'] = (flex_working['Player'].map(maps_dict['Own_map']) / 100) - (flex_working['Player'].map(maps_dict['cpt_Own_map']) / 100)
|
570 |
flex_working['Exposure'] = flex_working['Freq']/(1000)
|
571 |
flex_working['Edge'] = flex_working['Exposure'] - flex_working['Proj Own']
|
572 |
+
flex_working['Team'] = flex_working['Player'].map(maps_dict['Team_map'])
|
573 |
st.session_state.flex_freq = flex_working.copy()
|
574 |
|
575 |
if sim_site_var1 == 'Draftkings':
|