James McCool commited on
Commit
85bca50
·
1 Parent(s): 0973679

Enhance app.py by introducing auxiliary seed frame initialization for Draftkings and Fanduel, allowing for additional player data retrieval. Update logic to support selection of auxiliary slates in the user interface, ensuring comprehensive data representation across all slate types.

Browse files
Files changed (1) hide show
  1. app.py +132 -20
app.py CHANGED
@@ -94,9 +94,31 @@ def init_DK_secondary_seed_frames(sharp_split):
94
  dict_columns = ['SP1', 'SP2', '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
  DK_seed = raw_display.to_numpy()
101
 
102
  return DK_seed
@@ -119,12 +141,9 @@ def init_FD_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
@@ -147,12 +166,34 @@ def init_FD_secondary_seed_frames(sharp_split):
147
 
148
  raw_display = pd.DataFrame(list(cursor))
149
  raw_display = raw_display[['P', 'C_1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3', 'UTIL', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
150
- dict_columns = ['P', 'C_1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3']
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
151
  # Map names
152
  raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
153
-
154
- # Remove any remaining NaN values
155
- raw_display = raw_display.dropna()
156
  FD_seed = raw_display.to_numpy()
157
 
158
  return FD_seed
@@ -192,9 +233,21 @@ def init_baselines():
192
  fd_secondary = fd_secondary_roo_raw.dropna(subset=['Median'])
193
  fd_secondary = fd_secondary.rename(columns={'Own%': 'Own'})
194
 
 
 
 
 
 
 
 
 
 
 
 
 
195
  teams_playing_count = len(dk_raw.Team.unique())
196
 
197
- return dk_raw, fd_raw, dk_secondary, fd_secondary, teams_playing_count
198
 
199
  @st.cache_data
200
  def validate_lineup_players(df, valid_players, player_columns):
@@ -275,7 +328,7 @@ def sim_contest(Sim_size, seed_frame, maps_dict, Contest_Size, teams_playing_cou
275
 
276
  return Sim_Winners
277
 
278
- dk_raw, fd_raw, dk_secondary, fd_secondary, teams_playing_count = init_baselines()
279
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
280
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
281
 
@@ -289,11 +342,11 @@ with tab1:
289
  del st.session_state[key]
290
  DK_seed = init_DK_seed_frames(10000)
291
  FD_seed = init_FD_seed_frames(10000)
292
- dk_raw, fd_raw, dk_secondary, fd_secondary, teams_playing_count = init_baselines()
293
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
294
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
295
 
296
- sim_slate_var1 = st.radio("Which data are you loading?", ('Main Slate', 'Other Main Slate'), key='sim_slate_var1')
297
  sim_site_var1 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'), key='sim_site_var1')
298
 
299
  contest_var1 = st.selectbox("What contest size are you simulating?", ('Small', 'Medium', 'Large', 'Custom'))
@@ -362,12 +415,34 @@ with tab1:
362
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
363
  raw_baselines = dk_raw
364
  column_names = dk_columns
 
 
 
 
 
 
 
 
 
 
 
365
  elif sim_site_var1 == 'Fanduel':
366
  if sim_slate_var1 == 'Main Slate':
367
  st.session_state.working_seed = init_FD_seed_frames(sharp_split)
368
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
369
  raw_baselines = fd_raw
370
  column_names = fd_columns
 
 
 
 
 
 
 
 
 
 
 
371
 
372
  st.session_state.maps_dict = {
373
  'Projection_map':dict(zip(raw_baselines.Player,raw_baselines.Median)),
@@ -626,7 +701,7 @@ with tab2:
626
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
627
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
628
 
629
- slate_var1 = st.radio("Which data are you loading?", ('Main Slate', 'Secondary Slate'))
630
  site_var1 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'))
631
  sharp_split_var = st.number_input("How many lineups do you want?", value=10000, max_value=500000, min_value=10000, step=10000)
632
  lineup_num_var = st.number_input("How many lineups do you want to display?", min_value=1, max_value=500, value=10, step=1)
@@ -686,10 +761,17 @@ with tab2:
686
  elif slate_var1 == 'Secondary Slate':
687
  st.session_state.working_seed = init_DK_secondary_seed_frames(sharp_split_var)
688
 
689
- dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
690
- raw_baselines = dk_raw
 
 
 
 
 
 
691
  column_names = dk_columns
692
 
 
693
  elif site_var1 == 'Fanduel':
694
  if slate_var1 == 'Main Slate':
695
  st.session_state.working_seed = init_FD_seed_frames(sharp_split_var)
@@ -700,8 +782,14 @@ with tab2:
700
  elif slate_var1 == 'Secondary Slate':
701
  st.session_state.working_seed = init_FD_secondary_seed_frames(sharp_split_var)
702
 
703
- fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
704
- raw_baselines = fd_raw
 
 
 
 
 
 
705
  column_names = fd_columns
706
  if site_var1 == 'Draftkings':
707
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], team_var2)]
@@ -737,7 +825,19 @@ with tab2:
737
 
738
  raw_baselines = dk_raw
739
  column_names = dk_columns
740
-
 
 
 
 
 
 
 
 
 
 
 
 
741
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], team_var2)]
742
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 13], stack_var2)]
743
  st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)
@@ -754,6 +854,18 @@ with tab2:
754
 
755
  raw_baselines = fd_raw
756
  column_names = fd_columns
 
 
 
 
 
 
 
 
 
 
 
 
757
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 11], team_var2)]
758
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
759
  st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)
 
94
  dict_columns = ['SP1', 'SP2', '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
+ DK_seed = raw_display.to_numpy()
98
+
99
+ return DK_seed
100
+
101
+ @st.cache_data(ttl = 60)
102
+ def init_DK_auxiliary_seed_frames(sharp_split):
103
 
104
+ collection = db['DK_MLB_turbo_name_map']
105
+ cursor = collection.find()
106
+ raw_data = pd.DataFrame(list(cursor))
107
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
108
+
109
+ # Get the valid players from the Range of Outcomes collection
110
+ collection = db["Player_Range_Of_Outcomes"]
111
+ cursor = collection.find({"Site": "Draftkings", "Slate": "turbo_slate"})
112
+ valid_players = set(pd.DataFrame(list(cursor))['Player'].unique())
113
+
114
+ collection = db["DK_MLB_turbo_seed_frame"]
115
+ cursor = collection.find().limit(sharp_split)
116
+
117
+ raw_display = pd.DataFrame(list(cursor))
118
+ raw_display = raw_display[['SP1', 'SP2', 'C', '1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
119
+ dict_columns = ['SP1', 'SP2', 'C', '1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3']
120
+ # Map names
121
+ raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
122
  DK_seed = raw_display.to_numpy()
123
 
124
  return DK_seed
 
141
 
142
  raw_display = pd.DataFrame(list(cursor))
143
  raw_display = raw_display[['P', 'C_1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3', 'UTIL', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
144
+ dict_columns = ['P', 'C_1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3', 'UTIL']
145
  # Map names
146
  raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
 
 
 
147
  FD_seed = raw_display.to_numpy()
148
 
149
  return FD_seed
 
166
 
167
  raw_display = pd.DataFrame(list(cursor))
168
  raw_display = raw_display[['P', 'C_1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3', 'UTIL', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
169
+ dict_columns = ['P', 'C_1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3', 'UTIL']
170
+ # Map names
171
+ raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
172
+ FD_seed = raw_display.to_numpy()
173
+
174
+ return FD_seed
175
+
176
+ @st.cache_data(ttl = 60)
177
+ def init_FD_auxiliary_seed_frames(sharp_split):
178
+
179
+ collection = db['FD_MLB_turbo_name_map']
180
+ cursor = collection.find()
181
+ raw_data = pd.DataFrame(list(cursor))
182
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
183
+
184
+ # Get the valid players from the Range of Outcomes collection
185
+ collection = db["Player_Range_Of_Outcomes"]
186
+ cursor = collection.find({"Site": "Fanduel", "Slate": "turbo_slate"})
187
+ valid_players = set(pd.DataFrame(list(cursor))['Player'].unique())
188
+
189
+ collection = db["FD_MLB_turbo_seed_frame"]
190
+ cursor = collection.find().limit(sharp_split)
191
+
192
+ raw_display = pd.DataFrame(list(cursor))
193
+ raw_display = raw_display[['P', 'C_1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3', 'UTIL', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
194
+ dict_columns = ['P', 'C_1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3', 'UTIL']
195
  # Map names
196
  raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
 
 
 
197
  FD_seed = raw_display.to_numpy()
198
 
199
  return FD_seed
 
233
  fd_secondary = fd_secondary_roo_raw.dropna(subset=['Median'])
234
  fd_secondary = fd_secondary.rename(columns={'Own%': 'Own'})
235
 
236
+ dk_auxiliary_roo_raw = load_display[load_display['Site'] == 'Draftkings']
237
+ dk_auxiliary_roo_raw = dk_auxiliary_roo_raw[dk_auxiliary_roo_raw['Slate'] == 'turbo_slate']
238
+ dk_auxiliary_roo_raw['STDev'] = dk_auxiliary_roo_raw['Median'] / 3
239
+ dk_auxiliary = dk_auxiliary_roo_raw.dropna(subset=['Median'])
240
+ dk_auxiliary = dk_auxiliary.rename(columns={'Own%': 'Own'})
241
+
242
+ fd_auxiliary_roo_raw = load_display[load_display['Site'] == 'Fanduel']
243
+ fd_auxiliary_roo_raw = fd_auxiliary_roo_raw[fd_auxiliary_roo_raw['Slate'] == 'turbo_slate']
244
+ fd_auxiliary_roo_raw['STDev'] = fd_auxiliary_roo_raw['Median'] / 3
245
+ fd_auxiliary = fd_auxiliary_roo_raw.dropna(subset=['Median'])
246
+ fd_auxiliary = fd_auxiliary.rename(columns={'Own%': 'Own'})
247
+
248
  teams_playing_count = len(dk_raw.Team.unique())
249
 
250
+ return dk_raw, fd_raw, dk_secondary, fd_secondary, dk_auxiliary, fd_auxiliary, teams_playing_count
251
 
252
  @st.cache_data
253
  def validate_lineup_players(df, valid_players, player_columns):
 
328
 
329
  return Sim_Winners
330
 
331
+ dk_raw, fd_raw, dk_secondary, fd_secondary, dk_auxiliary, fd_auxiliary, teams_playing_count = init_baselines()
332
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
333
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
334
 
 
342
  del st.session_state[key]
343
  DK_seed = init_DK_seed_frames(10000)
344
  FD_seed = init_FD_seed_frames(10000)
345
+ dk_raw, fd_raw, dk_secondary, fd_secondary, dk_auxiliary, fd_auxiliary, teams_playing_count = init_baselines()
346
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
347
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
348
 
349
+ sim_slate_var1 = st.radio("Which data are you loading?", ('Main Slate', 'Secondary Slate', 'Auxiliary Slate'), key='sim_slate_var1')
350
  sim_site_var1 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'), key='sim_site_var1')
351
 
352
  contest_var1 = st.selectbox("What contest size are you simulating?", ('Small', 'Medium', 'Large', 'Custom'))
 
415
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
416
  raw_baselines = dk_raw
417
  column_names = dk_columns
418
+ elif sim_slate_var1 == 'Secondary Slate':
419
+ st.session_state.working_seed = init_DK_secondary_seed_frames(sharp_split)
420
+ dk_id_dict = dict(zip(dk_secondary.Player, dk_secondary.player_id))
421
+ raw_baselines = dk_secondary
422
+ column_names = dk_columns
423
+ elif sim_slate_var1 == 'Auxiliary Slate':
424
+ st.session_state.working_seed = init_DK_auxiliary_seed_frames(sharp_split)
425
+ dk_id_dict = dict(zip(dk_auxiliary.Player, dk_auxiliary.player_id))
426
+ raw_baselines = dk_auxiliary
427
+ column_names = dk_columns
428
+
429
  elif sim_site_var1 == 'Fanduel':
430
  if sim_slate_var1 == 'Main Slate':
431
  st.session_state.working_seed = init_FD_seed_frames(sharp_split)
432
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
433
  raw_baselines = fd_raw
434
  column_names = fd_columns
435
+ elif sim_slate_var1 == 'Secondary Slate':
436
+ st.session_state.working_seed = init_FD_secondary_seed_frames(sharp_split)
437
+ fd_id_dict = dict(zip(fd_secondary.Player, fd_secondary.player_id))
438
+ raw_baselines = fd_secondary
439
+ column_names = fd_columns
440
+ elif sim_slate_var1 == 'Auxiliary Slate':
441
+ st.session_state.working_seed = init_FD_auxiliary_seed_frames(sharp_split)
442
+ fd_id_dict = dict(zip(fd_auxiliary.Player, fd_auxiliary.player_id))
443
+ raw_baselines = fd_auxiliary
444
+ column_names = fd_columns
445
+
446
 
447
  st.session_state.maps_dict = {
448
  'Projection_map':dict(zip(raw_baselines.Player,raw_baselines.Median)),
 
701
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
702
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
703
 
704
+ slate_var1 = st.radio("Which data are you loading?", ('Main Slate', 'Secondary Slate', 'Auxiliary Slate'))
705
  site_var1 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'))
706
  sharp_split_var = st.number_input("How many lineups do you want?", value=10000, max_value=500000, min_value=10000, step=10000)
707
  lineup_num_var = st.number_input("How many lineups do you want to display?", min_value=1, max_value=500, value=10, step=1)
 
761
  elif slate_var1 == 'Secondary Slate':
762
  st.session_state.working_seed = init_DK_secondary_seed_frames(sharp_split_var)
763
 
764
+ dk_id_dict = dict(zip(dk_secondary.Player, dk_secondary.player_id))
765
+ raw_baselines = dk_secondary
766
+ column_names = dk_columns
767
+ elif slate_var1 == 'Auxiliary Slate':
768
+ st.session_state.working_seed = init_DK_auxiliary_seed_frames(sharp_split_var)
769
+
770
+ dk_id_dict = dict(zip(dk_auxiliary.Player, dk_auxiliary.player_id))
771
+ raw_baselines = dk_auxiliary
772
  column_names = dk_columns
773
 
774
+
775
  elif site_var1 == 'Fanduel':
776
  if slate_var1 == 'Main Slate':
777
  st.session_state.working_seed = init_FD_seed_frames(sharp_split_var)
 
782
  elif slate_var1 == 'Secondary Slate':
783
  st.session_state.working_seed = init_FD_secondary_seed_frames(sharp_split_var)
784
 
785
+ fd_id_dict = dict(zip(fd_secondary.Player, fd_secondary.player_id))
786
+ raw_baselines = fd_secondary
787
+ column_names = fd_columns
788
+ elif slate_var1 == 'Auxiliary Slate':
789
+ st.session_state.working_seed = init_FD_auxiliary_seed_frames(sharp_split_var)
790
+
791
+ fd_id_dict = dict(zip(fd_auxiliary.Player, fd_auxiliary.player_id))
792
+ raw_baselines = fd_auxiliary
793
  column_names = fd_columns
794
  if site_var1 == 'Draftkings':
795
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], team_var2)]
 
825
 
826
  raw_baselines = dk_raw
827
  column_names = dk_columns
828
+ elif slate_var1 == 'Secondary Slate':
829
+ st.session_state.working_seed = init_DK_secondary_seed_frames(sharp_split_var)
830
+
831
+ dk_id_dict = dict(zip(dk_secondary.Player, dk_secondary.player_id))
832
+ raw_baselines = dk_secondary
833
+ column_names = dk_columns
834
+ elif slate_var1 == 'Auxiliary Slate':
835
+ st.session_state.working_seed = init_DK_auxiliary_seed_frames(sharp_split_var)
836
+
837
+ dk_id_dict = dict(zip(dk_auxiliary.Player, dk_auxiliary.player_id))
838
+ raw_baselines = dk_auxiliary
839
+ column_names = dk_columns
840
+
841
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], team_var2)]
842
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 13], stack_var2)]
843
  st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)
 
854
 
855
  raw_baselines = fd_raw
856
  column_names = fd_columns
857
+ elif slate_var1 == 'Secondary Slate':
858
+ st.session_state.working_seed = init_FD_secondary_seed_frames(sharp_split_var)
859
+
860
+ fd_id_dict = dict(zip(fd_secondary.Player, fd_secondary.player_id))
861
+ raw_baselines = fd_secondary
862
+ column_names = fd_columns
863
+ elif slate_var1 == 'Auxiliary Slate':
864
+ st.session_state.working_seed = init_FD_auxiliary_seed_frames(sharp_split_var)
865
+
866
+ fd_id_dict = dict(zip(fd_auxiliary.Player, fd_auxiliary.player_id))
867
+ raw_baselines = fd_auxiliary
868
+ column_names = fd_columns
869
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 11], team_var2)]
870
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
871
  st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)