James McCool commited on
Commit
e4db190
·
1 Parent(s): 711af0e

Enhance player median calculations and projections in init_baselines and sim_contest functions. Added 'cpt_Median' field to raw_display DataFrame for both DraftKings and FanDuel, and updated projection logic to utilize 'cpt_projection_map' for improved accuracy in simulations.

Browse files
Files changed (1) hide show
  1. app.py +10 -2
app.py CHANGED
@@ -132,6 +132,7 @@ def init_baselines(sport):
132
  raw_display = pd.DataFrame(list(cursor))
133
  raw_display = raw_display[['Player', 'Position', 'Team', 'Opp', 'Salary', 'Floor', 'Median', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '20+%', '2x%', '3x%', '4x%',
134
  'Own', 'Small_Field_Own', 'Large_Field_Own', 'Cash_Field_Own', 'CPT_Own', 'LevX', 'version', 'slate', 'timestamp', 'player_id', 'site']]
 
135
  raw_display['STDev'] = raw_display['Median'] / 4
136
 
137
  dk_raw = raw_display.dropna(subset=['Median'])
@@ -142,6 +143,7 @@ def init_baselines(sport):
142
  raw_display = pd.DataFrame(list(cursor))
143
  raw_display = raw_display[['Player', 'Position', 'Team', 'Opp', 'Salary', 'Floor', 'Median', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '20+%', '2x%', '3x%', '4x%',
144
  'Own', 'Small_Field_Own', 'Large_Field_Own', 'Cash_Field_Own', 'CPT_Own', 'LevX', 'version', 'slate', 'timestamp', 'player_id', 'site']]
 
145
  raw_display['STDev'] = raw_display['Median'] / 4
146
 
147
  fd_raw = raw_display.dropna(subset=['Median'])
@@ -154,6 +156,7 @@ def init_baselines(sport):
154
  raw_display = pd.DataFrame(list(cursor))
155
  raw_display = raw_display[['Player', 'Minutes Proj', 'Position', 'Team', 'Opp', 'Salary', 'Floor', 'Median', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '20+%', '4x%', '5x%', '6x%', 'GPP%',
156
  'Own', 'Small_Own', 'Large_Own', 'Cash_Own', 'CPT_Own', 'LevX', 'ValX', 'site', 'version', 'slate', 'timestamp']]
 
157
  raw_display = raw_display[raw_display['site'] == 'Draftkings']
158
  raw_display['STDev'] = raw_display['Median'] / 4
159
 
@@ -165,6 +168,7 @@ def init_baselines(sport):
165
  raw_display = pd.DataFrame(list(cursor))
166
  raw_display = raw_display[['Player', 'Minutes Proj', 'Position', 'Team', 'Opp', 'Salary', 'Floor', 'Median', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '20+%', '4x%', '5x%', '6x%', 'GPP%',
167
  'Own', 'Small_Own', 'Large_Own', 'Cash_Own', 'CPT_Own', 'LevX', 'ValX', 'site', 'version', 'slate', 'timestamp']]
 
168
  raw_display = raw_display[raw_display['site'] == 'Fanduel']
169
  raw_display['STDev'] = raw_display['Median'] / 4
170
 
@@ -207,9 +211,11 @@ def sim_contest(Sim_size, seed_frame, maps_dict, sharp_split, Contest_Size):
207
  fp_random = fp_array[np.random.choice(fp_array.shape[0], Contest_Size)]
208
 
209
  sample_arrays1 = np.c_[
210
- fp_random,
211
  np.sum(np.random.normal(
212
- loc=vec_projection_map(fp_random[:, :-7]),
 
 
213
  scale=vec_stdev_map(fp_random[:, :-7])),
214
  axis=1)
215
  ]
@@ -403,6 +409,7 @@ with tab1:
403
  if 'working_seed' in st.session_state:
404
  maps_dict = {
405
  'Projection_map':dict(zip(raw_baselines.Player,raw_baselines.Median)),
 
406
  'Salary_map':dict(zip(raw_baselines.Player,raw_baselines.Salary)),
407
  'Pos_map':dict(zip(raw_baselines.Player,raw_baselines.Position)),
408
  'Own_map':dict(zip(raw_baselines.Player,raw_baselines['Own'])),
@@ -441,6 +448,7 @@ with tab1:
441
  st.session_state.working_seed = FD_seed.copy()
442
  maps_dict = {
443
  'Projection_map':dict(zip(raw_baselines.Player,raw_baselines.Median)),
 
444
  'Salary_map':dict(zip(raw_baselines.Player,raw_baselines.Salary)),
445
  'Pos_map':dict(zip(raw_baselines.Player,raw_baselines.Position)),
446
  'Own_map':dict(zip(raw_baselines.Player,raw_baselines['Own'])),
 
132
  raw_display = pd.DataFrame(list(cursor))
133
  raw_display = raw_display[['Player', 'Position', 'Team', 'Opp', 'Salary', 'Floor', 'Median', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '20+%', '2x%', '3x%', '4x%',
134
  'Own', 'Small_Field_Own', 'Large_Field_Own', 'Cash_Field_Own', 'CPT_Own', 'LevX', 'version', 'slate', 'timestamp', 'player_id', 'site']]
135
+ raw_display['cpt_Median'] = raw_display['Median'] * 1.5
136
  raw_display['STDev'] = raw_display['Median'] / 4
137
 
138
  dk_raw = raw_display.dropna(subset=['Median'])
 
143
  raw_display = pd.DataFrame(list(cursor))
144
  raw_display = raw_display[['Player', 'Position', 'Team', 'Opp', 'Salary', 'Floor', 'Median', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '20+%', '2x%', '3x%', '4x%',
145
  'Own', 'Small_Field_Own', 'Large_Field_Own', 'Cash_Field_Own', 'CPT_Own', 'LevX', 'version', 'slate', 'timestamp', 'player_id', 'site']]
146
+ raw_display['cpt_Median'] = raw_display['Median']
147
  raw_display['STDev'] = raw_display['Median'] / 4
148
 
149
  fd_raw = raw_display.dropna(subset=['Median'])
 
156
  raw_display = pd.DataFrame(list(cursor))
157
  raw_display = raw_display[['Player', 'Minutes Proj', 'Position', 'Team', 'Opp', 'Salary', 'Floor', 'Median', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '20+%', '4x%', '5x%', '6x%', 'GPP%',
158
  'Own', 'Small_Own', 'Large_Own', 'Cash_Own', 'CPT_Own', 'LevX', 'ValX', 'site', 'version', 'slate', 'timestamp']]
159
+ raw_display['cpt_Median'] = raw_display['Median'] * 1.5
160
  raw_display = raw_display[raw_display['site'] == 'Draftkings']
161
  raw_display['STDev'] = raw_display['Median'] / 4
162
 
 
168
  raw_display = pd.DataFrame(list(cursor))
169
  raw_display = raw_display[['Player', 'Minutes Proj', 'Position', 'Team', 'Opp', 'Salary', 'Floor', 'Median', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '20+%', '4x%', '5x%', '6x%', 'GPP%',
170
  'Own', 'Small_Own', 'Large_Own', 'Cash_Own', 'CPT_Own', 'LevX', 'ValX', 'site', 'version', 'slate', 'timestamp']]
171
+ raw_display['cpt_Median'] = raw_display['Median']
172
  raw_display = raw_display[raw_display['site'] == 'Fanduel']
173
  raw_display['STDev'] = raw_display['Median'] / 4
174
 
 
211
  fp_random = fp_array[np.random.choice(fp_array.shape[0], Contest_Size)]
212
 
213
  sample_arrays1 = np.c_[
214
+ fp_random,
215
  np.sum(np.random.normal(
216
+ loc=np.where(np.arange(fp_random.shape[1]) == 0, # Check if it's the first column
217
+ cpt_projection_map(fp_random[:, :-7]), # Use cpt_projection_map for first column
218
+ vec_projection_map(fp_random[:, :-7])), # Use original for other columns
219
  scale=vec_stdev_map(fp_random[:, :-7])),
220
  axis=1)
221
  ]
 
409
  if 'working_seed' in st.session_state:
410
  maps_dict = {
411
  'Projection_map':dict(zip(raw_baselines.Player,raw_baselines.Median)),
412
+ 'cpt_projection_map':dict(zip(raw_baselines.Player,raw_baselines.cpt_Median)),
413
  'Salary_map':dict(zip(raw_baselines.Player,raw_baselines.Salary)),
414
  'Pos_map':dict(zip(raw_baselines.Player,raw_baselines.Position)),
415
  'Own_map':dict(zip(raw_baselines.Player,raw_baselines['Own'])),
 
448
  st.session_state.working_seed = FD_seed.copy()
449
  maps_dict = {
450
  'Projection_map':dict(zip(raw_baselines.Player,raw_baselines.Median)),
451
+ 'cpt_projection_map':dict(zip(raw_baselines.Player,raw_baselines.cpt_Median)),
452
  'Salary_map':dict(zip(raw_baselines.Player,raw_baselines.Salary)),
453
  'Pos_map':dict(zip(raw_baselines.Player,raw_baselines.Position)),
454
  'Own_map':dict(zip(raw_baselines.Player,raw_baselines['Own'])),