James McCool commited on
Commit
c2ffc4c
·
1 Parent(s): 1a1a009

Enhance app.py by adding a teams_playing_count parameter to the sim_contest function, allowing for dynamic adjustments in projection calculations. This change includes the implementation of a stack bonus based on the number of teams playing, improving the accuracy of contest simulations. Additionally, update init_baselines to return the teams_playing_count for better data management across the application.

Browse files
Files changed (1) hide show
  1. app.py +19 -15
app.py CHANGED
@@ -65,7 +65,9 @@ def init_baselines():
65
  fd_raw = FD_load_display.dropna(subset=['Median'])
66
  fd_raw['Team'] = fd_raw['Team'].replace(['TB', 'SJ', 'LA'], ['TBL', 'SJS', 'LAK'])
67
 
68
- return dk_raw, fd_raw
 
 
69
 
70
  @st.cache_data
71
  def convert_df(array):
@@ -87,7 +89,7 @@ def calculate_FD_value_frequencies(np_array):
87
  return combined_array
88
 
89
  @st.cache_data
90
- def sim_contest(Sim_size, seed_frame, maps_dict, Contest_Size):
91
  SimVar = 1
92
  Sim_Winners = []
93
  fp_array = seed_frame.copy()
@@ -100,15 +102,17 @@ def sim_contest(Sim_size, seed_frame, maps_dict, Contest_Size):
100
  while SimVar <= Sim_size:
101
  fp_random = fp_array[np.random.choice(fp_array.shape[0], Contest_Size)]
102
 
103
- sample_arrays1 = np.c_[
104
- fp_random,
105
- np.sum(np.random.normal(
106
- loc=vec_projection_map(fp_random[:, :-7]),
107
- scale=vec_stdev_map(fp_random[:, :-7])),
108
- axis=1)
109
- ]
 
 
110
 
111
- sample_arrays = sample_arrays1
112
 
113
  final_array = sample_arrays[sample_arrays[:, 10].argsort()[::-1]]
114
  best_lineup = final_array[final_array[:, -1].argsort(kind='stable')[::-1][:1]]
@@ -117,7 +121,7 @@ def sim_contest(Sim_size, seed_frame, maps_dict, Contest_Size):
117
 
118
  return Sim_Winners
119
 
120
- dk_raw, fd_raw = init_baselines()
121
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
122
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
123
 
@@ -131,7 +135,7 @@ with tab2:
131
  del st.session_state[key]
132
  DK_seed = init_DK_seed_frames(10000)
133
  FD_seed = init_FD_seed_frames(10000)
134
- dk_raw, fd_raw = init_baselines()
135
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
136
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
137
 
@@ -244,7 +248,7 @@ with tab1:
244
  del st.session_state[key]
245
  DK_seed = init_DK_seed_frames(10000)
246
  FD_seed = init_FD_seed_frames(10000)
247
- dk_raw, fd_raw = init_baselines()
248
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
249
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
250
 
@@ -284,7 +288,7 @@ with tab1:
284
  'Team_map':dict(zip(raw_baselines.Player,raw_baselines.Team)),
285
  'STDev_map':dict(zip(raw_baselines.Player,raw_baselines.STDev))
286
  }
287
- Sim_Winners = sim_contest(1000, st.session_state.working_seed, st.session_state.maps_dict, Contest_Size)
288
  Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners))
289
 
290
  #st.table(Sim_Winner_Frame)
@@ -333,7 +337,7 @@ with tab1:
333
  'Team_map':dict(zip(raw_baselines.Player,raw_baselines.Team)),
334
  'STDev_map':dict(zip(raw_baselines.Player,raw_baselines.STDev))
335
  }
336
- Sim_Winners = sim_contest(1000, st.session_state.working_seed, st.session_state.maps_dict, Contest_Size)
337
  Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners))
338
 
339
  #st.table(Sim_Winner_Frame)
 
65
  fd_raw = FD_load_display.dropna(subset=['Median'])
66
  fd_raw['Team'] = fd_raw['Team'].replace(['TB', 'SJ', 'LA'], ['TBL', 'SJS', 'LAK'])
67
 
68
+ teams_playing_count = len(dk_raw.Team.unique())
69
+
70
+ return dk_raw, fd_raw, teams_playing_count
71
 
72
  @st.cache_data
73
  def convert_df(array):
 
89
  return combined_array
90
 
91
  @st.cache_data
92
+ def sim_contest(Sim_size, seed_frame, maps_dict, Contest_Size, teams_playing_count):
93
  SimVar = 1
94
  Sim_Winners = []
95
  fp_array = seed_frame.copy()
 
102
  while SimVar <= Sim_size:
103
  fp_random = fp_array[np.random.choice(fp_array.shape[0], Contest_Size)]
104
 
105
+ # Calculate base projections
106
+ base_projections = np.sum(np.random.normal(
107
+ loc=vec_projection_map(fp_random[:, :-7]),
108
+ scale=vec_stdev_map(fp_random[:, :-7])),
109
+ axis=1)
110
+
111
+ # Apply 10% bonus for stacks of 5 or more based on the number of teams playing
112
+ stack_bonus = np.where(fp_random[:, 12] >= 5, base_projections * (0.05 * (teams_playing_count - 12)), 0)
113
+ final_projections = base_projections + stack_bonus
114
 
115
+ sample_arrays = np.c_[fp_random, final_projections]
116
 
117
  final_array = sample_arrays[sample_arrays[:, 10].argsort()[::-1]]
118
  best_lineup = final_array[final_array[:, -1].argsort(kind='stable')[::-1][:1]]
 
121
 
122
  return Sim_Winners
123
 
124
+ dk_raw, fd_raw, teams_playing_count = init_baselines()
125
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
126
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
127
 
 
135
  del st.session_state[key]
136
  DK_seed = init_DK_seed_frames(10000)
137
  FD_seed = init_FD_seed_frames(10000)
138
+ dk_raw, fd_raw, teams_playing_count = init_baselines()
139
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
140
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
141
 
 
248
  del st.session_state[key]
249
  DK_seed = init_DK_seed_frames(10000)
250
  FD_seed = init_FD_seed_frames(10000)
251
+ dk_raw, fd_raw, teams_playing_count = init_baselines()
252
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
253
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
254
 
 
288
  'Team_map':dict(zip(raw_baselines.Player,raw_baselines.Team)),
289
  'STDev_map':dict(zip(raw_baselines.Player,raw_baselines.STDev))
290
  }
291
+ Sim_Winners = sim_contest(1000, st.session_state.working_seed, st.session_state.maps_dict, Contest_Size, teams_playing_count)
292
  Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners))
293
 
294
  #st.table(Sim_Winner_Frame)
 
337
  'Team_map':dict(zip(raw_baselines.Player,raw_baselines.Team)),
338
  'STDev_map':dict(zip(raw_baselines.Player,raw_baselines.STDev))
339
  }
340
+ Sim_Winners = sim_contest(1000, st.session_state.working_seed, st.session_state.maps_dict, Contest_Size, teams_playing_count)
341
  Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners))
342
 
343
  #st.table(Sim_Winner_Frame)