James McCool commited on
Commit
46ed57c
·
1 Parent(s): 33016ba

Enhance app.py: Added auxiliary seed frame functions for Draftkings and Fanduel, updated data handling for secondary and auxiliary slates, and modified UI options for slate selection.

Browse files
Files changed (1) hide show
  1. app.py +133 -21
app.py CHANGED
@@ -66,9 +66,31 @@ def init_DK_secondary_seed_frames(sharp_split):
66
  dict_columns = ['SP1', 'SP2', 'C', '1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3']
67
  # Map names
68
  raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
 
 
 
 
 
 
69
 
70
- # Remove any remaining NaN values
71
- raw_display = raw_display.dropna()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
  DK_seed = raw_display.to_numpy()
73
 
74
  return DK_seed
@@ -91,12 +113,9 @@ def init_FD_seed_frames(sharp_split):
91
 
92
  raw_display = pd.DataFrame(list(cursor))
93
  raw_display = raw_display[['P', 'C_1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3', 'UTIL', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
94
- dict_columns = ['P', 'C_1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3']
95
  # Map names
96
  raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
97
-
98
- # Remove any remaining NaN values
99
- raw_display = raw_display.dropna()
100
  FD_seed = raw_display.to_numpy()
101
 
102
  return FD_seed
@@ -119,12 +138,34 @@ def init_FD_secondary_seed_frames(sharp_split):
119
 
120
  raw_display = pd.DataFrame(list(cursor))
121
  raw_display = raw_display[['P', 'C_1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3', 'UTIL', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
122
- dict_columns = ['P', 'C_1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3']
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
  # Map names
124
  raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
125
-
126
- # Remove any remaining NaN values
127
- raw_display = raw_display.dropna()
128
  FD_seed = raw_display.to_numpy()
129
 
130
  return FD_seed
@@ -164,9 +205,21 @@ def init_baselines():
164
  fd_secondary = fd_secondary_roo_raw.dropna(subset=['Median'])
165
  fd_secondary = fd_secondary.rename(columns={'Own%': 'Own'})
166
 
 
 
 
 
 
 
 
 
 
 
 
 
167
  teams_playing_count = len(dk_raw.Team.unique())
168
 
169
- return dk_raw, fd_raw, dk_secondary, fd_secondary, teams_playing_count
170
 
171
  @st.cache_data
172
  def validate_lineup_players(df, valid_players, player_columns):
@@ -247,7 +300,7 @@ def sim_contest(Sim_size, seed_frame, maps_dict, Contest_Size, teams_playing_cou
247
 
248
  return Sim_Winners
249
 
250
- dk_raw, fd_raw, dk_secondary, fd_secondary, teams_playing_count = init_baselines()
251
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
252
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
253
 
@@ -261,11 +314,11 @@ with tab1:
261
  del st.session_state[key]
262
  DK_seed = init_DK_seed_frames(10000)
263
  FD_seed = init_FD_seed_frames(10000)
264
- dk_raw, fd_raw, dk_secondary, fd_secondary, teams_playing_count = init_baselines()
265
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
266
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
267
 
268
- sim_slate_var1 = st.radio("Which data are you loading?", ('Main Slate', 'Other Main Slate'), key='sim_slate_var1')
269
  sim_site_var1 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'), key='sim_site_var1')
270
 
271
  contest_var1 = st.selectbox("What contest size are you simulating?", ('Small', 'Medium', 'Large', 'Custom'))
@@ -334,12 +387,34 @@ with tab1:
334
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
335
  raw_baselines = dk_raw
336
  column_names = dk_columns
 
 
 
 
 
 
 
 
 
 
 
337
  elif sim_site_var1 == 'Fanduel':
338
  if sim_slate_var1 == 'Main Slate':
339
  st.session_state.working_seed = init_FD_seed_frames(sharp_split)
340
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
341
  raw_baselines = fd_raw
342
  column_names = fd_columns
 
 
 
 
 
 
 
 
 
 
 
343
 
344
  st.session_state.maps_dict = {
345
  'Projection_map':dict(zip(raw_baselines.Player,raw_baselines.Median)),
@@ -370,7 +445,7 @@ with tab1:
370
 
371
  # Data Copying
372
  st.session_state.Sim_Winner_Export = Sim_Winner_Frame.copy()
373
- for col in st.session_state.Sim_Winner_Export.iloc[:, 0:9].columns:
374
  st.session_state.Sim_Winner_Export[col] = st.session_state.Sim_Winner_Export[col].map(dk_id_dict)
375
  st.session_state.Sim_Winner_Export = st.session_state.Sim_Winner_Export.drop_duplicates(subset=['Team', 'Secondary', 'salary', 'unique_id'])
376
 
@@ -598,7 +673,7 @@ with tab2:
598
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
599
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
600
 
601
- slate_var1 = st.radio("Which data are you loading?", ('Main Slate', 'Secondary Slate'))
602
  site_var1 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'))
603
  sharp_split_var = st.number_input("How many lineups do you want?", value=10000, max_value=500000, min_value=10000, step=10000)
604
  lineup_num_var = st.number_input("How many lineups do you want to display?", min_value=1, max_value=500, value=10, step=1)
@@ -658,10 +733,17 @@ with tab2:
658
  elif slate_var1 == 'Secondary Slate':
659
  st.session_state.working_seed = init_DK_secondary_seed_frames(sharp_split_var)
660
 
661
- dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
662
- raw_baselines = dk_raw
 
 
 
 
 
 
663
  column_names = dk_columns
664
 
 
665
  elif site_var1 == 'Fanduel':
666
  if slate_var1 == 'Main Slate':
667
  st.session_state.working_seed = init_FD_seed_frames(sharp_split_var)
@@ -672,8 +754,14 @@ with tab2:
672
  elif slate_var1 == 'Secondary Slate':
673
  st.session_state.working_seed = init_FD_secondary_seed_frames(sharp_split_var)
674
 
675
- fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
676
- raw_baselines = fd_raw
 
 
 
 
 
 
677
  column_names = fd_columns
678
  if site_var1 == 'Draftkings':
679
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], team_var2)]
@@ -709,7 +797,19 @@ with tab2:
709
 
710
  raw_baselines = dk_raw
711
  column_names = dk_columns
712
-
 
 
 
 
 
 
 
 
 
 
 
 
713
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], team_var2)]
714
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 13], stack_var2)]
715
  st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)
@@ -726,6 +826,18 @@ with tab2:
726
 
727
  raw_baselines = fd_raw
728
  column_names = fd_columns
 
 
 
 
 
 
 
 
 
 
 
 
729
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 11], team_var2)]
730
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
731
  st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)
 
66
  dict_columns = ['SP1', 'SP2', 'C', '1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3']
67
  # Map names
68
  raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
69
+ DK_seed = raw_display.to_numpy()
70
+
71
+ return DK_seed
72
+
73
+ @st.cache_data(ttl = 60)
74
+ def init_DK_auxiliary_seed_frames(sharp_split):
75
 
76
+ collection = db['DK_MLB_turbo_name_map']
77
+ cursor = collection.find()
78
+ raw_data = pd.DataFrame(list(cursor))
79
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
80
+
81
+ # Get the valid players from the Range of Outcomes collection
82
+ collection = db["Player_Range_Of_Outcomes"]
83
+ cursor = collection.find({"Site": "Draftkings", "Slate": "turbo_slate"})
84
+ valid_players = set(pd.DataFrame(list(cursor))['Player'].unique())
85
+
86
+ collection = db["DK_MLB_turbo_seed_frame"]
87
+ cursor = collection.find().limit(sharp_split)
88
+
89
+ raw_display = pd.DataFrame(list(cursor))
90
+ raw_display = raw_display[['SP1', 'SP2', 'C', '1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
91
+ dict_columns = ['SP1', 'SP2', 'C', '1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3']
92
+ # Map names
93
+ raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
94
  DK_seed = raw_display.to_numpy()
95
 
96
  return DK_seed
 
113
 
114
  raw_display = pd.DataFrame(list(cursor))
115
  raw_display = raw_display[['P', 'C_1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3', 'UTIL', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
116
+ dict_columns = ['P', 'C_1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3', 'UTIL']
117
  # Map names
118
  raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
 
 
 
119
  FD_seed = raw_display.to_numpy()
120
 
121
  return FD_seed
 
138
 
139
  raw_display = pd.DataFrame(list(cursor))
140
  raw_display = raw_display[['P', 'C_1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3', 'UTIL', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
141
+ dict_columns = ['P', 'C_1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3', 'UTIL']
142
+ # Map names
143
+ raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
144
+ FD_seed = raw_display.to_numpy()
145
+
146
+ return FD_seed
147
+
148
+ @st.cache_data(ttl = 60)
149
+ def init_FD_auxiliary_seed_frames(sharp_split):
150
+
151
+ collection = db['FD_MLB_turbo_name_map']
152
+ cursor = collection.find()
153
+ raw_data = pd.DataFrame(list(cursor))
154
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
155
+
156
+ # Get the valid players from the Range of Outcomes collection
157
+ collection = db["Player_Range_Of_Outcomes"]
158
+ cursor = collection.find({"Site": "Fanduel", "Slate": "turbo_slate"})
159
+ valid_players = set(pd.DataFrame(list(cursor))['Player'].unique())
160
+
161
+ collection = db["FD_MLB_turbo_seed_frame"]
162
+ cursor = collection.find().limit(sharp_split)
163
+
164
+ raw_display = pd.DataFrame(list(cursor))
165
+ raw_display = raw_display[['P', 'C_1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3', 'UTIL', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
166
+ dict_columns = ['P', 'C_1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3', 'UTIL']
167
  # Map names
168
  raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
 
 
 
169
  FD_seed = raw_display.to_numpy()
170
 
171
  return FD_seed
 
205
  fd_secondary = fd_secondary_roo_raw.dropna(subset=['Median'])
206
  fd_secondary = fd_secondary.rename(columns={'Own%': 'Own'})
207
 
208
+ dk_auxiliary_roo_raw = load_display[load_display['Site'] == 'Draftkings']
209
+ dk_auxiliary_roo_raw = dk_auxiliary_roo_raw[dk_auxiliary_roo_raw['Slate'] == 'turbo_slate']
210
+ dk_auxiliary_roo_raw['STDev'] = dk_auxiliary_roo_raw['Median'] / 3
211
+ dk_auxiliary = dk_auxiliary_roo_raw.dropna(subset=['Median'])
212
+ dk_auxiliary = dk_auxiliary.rename(columns={'Own%': 'Own'})
213
+
214
+ fd_auxiliary_roo_raw = load_display[load_display['Site'] == 'Fanduel']
215
+ fd_auxiliary_roo_raw = fd_auxiliary_roo_raw[fd_auxiliary_roo_raw['Slate'] == 'turbo_slate']
216
+ fd_auxiliary_roo_raw['STDev'] = fd_auxiliary_roo_raw['Median'] / 3
217
+ fd_auxiliary = fd_auxiliary_roo_raw.dropna(subset=['Median'])
218
+ fd_auxiliary = fd_auxiliary.rename(columns={'Own%': 'Own'})
219
+
220
  teams_playing_count = len(dk_raw.Team.unique())
221
 
222
+ return dk_raw, fd_raw, dk_secondary, fd_secondary, dk_auxiliary, fd_auxiliary, teams_playing_count
223
 
224
  @st.cache_data
225
  def validate_lineup_players(df, valid_players, player_columns):
 
300
 
301
  return Sim_Winners
302
 
303
+ dk_raw, fd_raw, dk_secondary, fd_secondary, dk_auxiliary, fd_auxiliary, teams_playing_count = init_baselines()
304
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
305
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
306
 
 
314
  del st.session_state[key]
315
  DK_seed = init_DK_seed_frames(10000)
316
  FD_seed = init_FD_seed_frames(10000)
317
+ dk_raw, fd_raw, dk_secondary, fd_secondary, dk_auxiliary, fd_auxiliary, teams_playing_count = init_baselines()
318
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
319
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
320
 
321
+ sim_slate_var1 = st.radio("Which data are you loading?", ('Main Slate', 'Secondary Slate', 'Auxiliary Slate'), key='sim_slate_var1')
322
  sim_site_var1 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'), key='sim_site_var1')
323
 
324
  contest_var1 = st.selectbox("What contest size are you simulating?", ('Small', 'Medium', 'Large', 'Custom'))
 
387
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
388
  raw_baselines = dk_raw
389
  column_names = dk_columns
390
+ elif sim_slate_var1 == 'Secondary Slate':
391
+ st.session_state.working_seed = init_DK_secondary_seed_frames(sharp_split)
392
+ dk_id_dict = dict(zip(dk_secondary.Player, dk_secondary.player_id))
393
+ raw_baselines = dk_secondary
394
+ column_names = dk_columns
395
+ elif sim_slate_var1 == 'Auxiliary Slate':
396
+ st.session_state.working_seed = init_DK_auxiliary_seed_frames(sharp_split)
397
+ dk_id_dict = dict(zip(dk_auxiliary.Player, dk_auxiliary.player_id))
398
+ raw_baselines = dk_auxiliary
399
+ column_names = dk_columns
400
+
401
  elif sim_site_var1 == 'Fanduel':
402
  if sim_slate_var1 == 'Main Slate':
403
  st.session_state.working_seed = init_FD_seed_frames(sharp_split)
404
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
405
  raw_baselines = fd_raw
406
  column_names = fd_columns
407
+ elif sim_slate_var1 == 'Secondary Slate':
408
+ st.session_state.working_seed = init_FD_secondary_seed_frames(sharp_split)
409
+ fd_id_dict = dict(zip(fd_secondary.Player, fd_secondary.player_id))
410
+ raw_baselines = fd_secondary
411
+ column_names = fd_columns
412
+ elif sim_slate_var1 == 'Auxiliary Slate':
413
+ st.session_state.working_seed = init_FD_auxiliary_seed_frames(sharp_split)
414
+ fd_id_dict = dict(zip(fd_auxiliary.Player, fd_auxiliary.player_id))
415
+ raw_baselines = fd_auxiliary
416
+ column_names = fd_columns
417
+
418
 
419
  st.session_state.maps_dict = {
420
  'Projection_map':dict(zip(raw_baselines.Player,raw_baselines.Median)),
 
445
 
446
  # Data Copying
447
  st.session_state.Sim_Winner_Export = Sim_Winner_Frame.copy()
448
+ for col in st.session_state.Sim_Winner_Export.iloc[:, 0:10].columns:
449
  st.session_state.Sim_Winner_Export[col] = st.session_state.Sim_Winner_Export[col].map(dk_id_dict)
450
  st.session_state.Sim_Winner_Export = st.session_state.Sim_Winner_Export.drop_duplicates(subset=['Team', 'Secondary', 'salary', 'unique_id'])
451
 
 
673
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
674
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
675
 
676
+ slate_var1 = st.radio("Which data are you loading?", ('Main Slate', 'Secondary Slate', 'Auxiliary Slate'))
677
  site_var1 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'))
678
  sharp_split_var = st.number_input("How many lineups do you want?", value=10000, max_value=500000, min_value=10000, step=10000)
679
  lineup_num_var = st.number_input("How many lineups do you want to display?", min_value=1, max_value=500, value=10, step=1)
 
733
  elif slate_var1 == 'Secondary Slate':
734
  st.session_state.working_seed = init_DK_secondary_seed_frames(sharp_split_var)
735
 
736
+ dk_id_dict = dict(zip(dk_secondary.Player, dk_secondary.player_id))
737
+ raw_baselines = dk_secondary
738
+ column_names = dk_columns
739
+ elif slate_var1 == 'Auxiliary Slate':
740
+ st.session_state.working_seed = init_DK_auxiliary_seed_frames(sharp_split_var)
741
+
742
+ dk_id_dict = dict(zip(dk_auxiliary.Player, dk_auxiliary.player_id))
743
+ raw_baselines = dk_auxiliary
744
  column_names = dk_columns
745
 
746
+
747
  elif site_var1 == 'Fanduel':
748
  if slate_var1 == 'Main Slate':
749
  st.session_state.working_seed = init_FD_seed_frames(sharp_split_var)
 
754
  elif slate_var1 == 'Secondary Slate':
755
  st.session_state.working_seed = init_FD_secondary_seed_frames(sharp_split_var)
756
 
757
+ fd_id_dict = dict(zip(fd_secondary.Player, fd_secondary.player_id))
758
+ raw_baselines = fd_secondary
759
+ column_names = fd_columns
760
+ elif slate_var1 == 'Auxiliary Slate':
761
+ st.session_state.working_seed = init_FD_auxiliary_seed_frames(sharp_split_var)
762
+
763
+ fd_id_dict = dict(zip(fd_auxiliary.Player, fd_auxiliary.player_id))
764
+ raw_baselines = fd_auxiliary
765
  column_names = fd_columns
766
  if site_var1 == 'Draftkings':
767
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], team_var2)]
 
797
 
798
  raw_baselines = dk_raw
799
  column_names = dk_columns
800
+ elif slate_var1 == 'Secondary Slate':
801
+ st.session_state.working_seed = init_DK_secondary_seed_frames(sharp_split_var)
802
+
803
+ dk_id_dict = dict(zip(dk_secondary.Player, dk_secondary.player_id))
804
+ raw_baselines = dk_secondary
805
+ column_names = dk_columns
806
+ elif slate_var1 == 'Auxiliary Slate':
807
+ st.session_state.working_seed = init_DK_auxiliary_seed_frames(sharp_split_var)
808
+
809
+ dk_id_dict = dict(zip(dk_auxiliary.Player, dk_auxiliary.player_id))
810
+ raw_baselines = dk_auxiliary
811
+ column_names = dk_columns
812
+
813
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], team_var2)]
814
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 13], stack_var2)]
815
  st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)
 
826
 
827
  raw_baselines = fd_raw
828
  column_names = fd_columns
829
+ elif slate_var1 == 'Secondary Slate':
830
+ st.session_state.working_seed = init_FD_secondary_seed_frames(sharp_split_var)
831
+
832
+ fd_id_dict = dict(zip(fd_secondary.Player, fd_secondary.player_id))
833
+ raw_baselines = fd_secondary
834
+ column_names = fd_columns
835
+ elif slate_var1 == 'Auxiliary Slate':
836
+ st.session_state.working_seed = init_FD_auxiliary_seed_frames(sharp_split_var)
837
+
838
+ fd_id_dict = dict(zip(fd_auxiliary.Player, fd_auxiliary.player_id))
839
+ raw_baselines = fd_auxiliary
840
+ column_names = fd_columns
841
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 11], team_var2)]
842
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
843
  st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)