James McCool commited on
Commit
68a1d9b
·
1 Parent(s): aa2e2bd

Adding PGA functionality

Browse files
Files changed (3) hide show
  1. app.py +102 -61
  2. database.py +4 -3
  3. database_queries.py +415 -5
app.py CHANGED
@@ -57,6 +57,12 @@ dk_db_mma_showdown_selections = ['DK_MMA_SD_seed_frame_Showdown #1', 'DK_MMA_SD_
57
  fd_db_mma_showdown_selections = ['FD_MMA_SD_seed_frame_Showdown #1', 'FD_MMA_SD_seed_frame_Showdown #2', 'FD_MMA_SD_seed_frame_Showdown #3', 'FD_MMA_SD_seed_frame_Showdown #4', 'FD_MMA_SD_seed_frame_Showdown #5', 'FD_MMA_SD_seed_frame_Showdown #6',
58
  'FD_MMA_SD_seed_frame_Showdown #7', 'FD_MMA_SD_seed_frame_Showdown #8', 'FD_MMA_SD_seed_frame_Showdown #9', 'FD_MMA_SD_seed_frame_Showdown #10', 'FD_MMA_SD_seed_frame_Showdown #11', 'FD_MMA_SD_seed_frame_Showdown #12', 'FD_MMA_SD_seed_frame_Showdown #13',
59
  'FD_MMA_SD_seed_frame_Showdown #14', 'FD_MMA_SD_seed_frame_Showdown #15']
 
 
 
 
 
 
60
 
61
  dk_nfl_showdown_db_translation = dict(zip(showdown_selections, dk_db_nfl_showdown_selections))
62
  fd_nfl_showdown_db_translation = dict(zip(showdown_selections, fd_db_nfl_showdown_selections))
@@ -66,6 +72,8 @@ dk_nhl_showdown_db_translation = dict(zip(showdown_selections, dk_db_nhl_showdow
66
  fd_nhl_showdown_db_translation = dict(zip(showdown_selections, fd_db_nhl_showdown_selections))
67
  dk_mma_showdown_db_translation = dict(zip(showdown_selections, dk_db_mma_showdown_selections))
68
  fd_mma_showdown_db_translation = dict(zip(showdown_selections, fd_db_mma_showdown_selections))
 
 
69
 
70
  freq_format = {'Finish_percentile': '{:.2%}', 'Lineup Edge': '{:.2%}', 'Lineup Edge_Raw': '{:.2%}', 'Win%': '{:.2%}'}
71
  stacking_sports = ['MLB', 'NHL', 'NFL', 'LOL', 'NCAAF']
@@ -149,7 +157,7 @@ def grab_nfl_reg_salaries(slate_var: str):
149
  collection = salaries_db["NFL_reg_player_info"]
150
  eastern = pytz.timezone('US/Eastern')
151
  today_str = datetime.now(eastern).strftime("%Y%m%d")
152
- records = pd.DataFrame(list(collection.find({'Date': {'$gte': today_str}})))
153
  records = records[['Display Name', 'draftableId', 'Position', 'Salary']]
154
  records = records.rename(columns={'Display Name': 'Name', 'draftableId': 'ID', 'Position': 'Roster Position'})
155
  if slate_var == 'Main':
@@ -183,7 +191,7 @@ def grab_nfl_showdown_salaries():
183
  collection = salaries_db["NFL_showdown_player_info"]
184
  eastern = pytz.timezone('US/Eastern')
185
  today_str = datetime.now(eastern).strftime("%Y%m%d")
186
- records = pd.DataFrame(list(collection.find({'Date': {'$gte': today_str}})))
187
  records = records[['Display Name', 'draftableId', 'Position', 'Salary']]
188
  records = records.rename(columns={'Display Name': 'Name', 'draftableId': 'ID', 'Position': 'Roster Position'})
189
  return records
@@ -192,7 +200,7 @@ def grab_nba_reg_salaries(slate_var: str):
192
  collection = salaries_db["NBA_reg_player_info"]
193
  eastern = pytz.timezone('US/Eastern')
194
  today_str = datetime.now(eastern).strftime("%Y%m%d")
195
- records = pd.DataFrame(list(collection.find({'Date': {'$gte': today_str}})))
196
  records = records[['Display Name', 'draftableId', 'Position', 'Salary']]
197
  records = records.rename(columns={'Display Name': 'Name', 'draftableId': 'ID', 'Position': 'Roster Position'})
198
  if slate_var == 'Main':
@@ -228,7 +236,7 @@ def grab_nba_showdown_salaries():
228
  eastern = pytz.timezone('US/Eastern')
229
  today_str = datetime.now(eastern).strftime("%Y%m%d")
230
  print(f"Current date in Eastern Time: {today_str}")
231
- records = pd.DataFrame(list(collection.find({'Date': {'$gte': today_str}})))
232
  records = records[['Display Name', 'draftableId', 'Position', 'Salary']]
233
  records = records.rename(columns={'Display Name': 'Name', 'draftableId': 'ID', 'Position': 'Roster Position'})
234
  return records
@@ -237,7 +245,7 @@ def grab_mlb_reg_salaries(slate_var: str):
237
  collection = salaries_db["MLB_reg_player_info"]
238
  eastern = pytz.timezone('US/Eastern')
239
  today_str = datetime.now(eastern).strftime("%Y%m%d")
240
- records = pd.DataFrame(list(collection.find({'Date': {'$gte': today_str}})))
241
  records = records[['Display Name', 'draftableId', 'Position', 'Salary']]
242
  records = records.rename(columns={'Display Name': 'Name', 'draftableId': 'ID', 'Position': 'Roster Position'})
243
  if slate_var == 'Main':
@@ -271,7 +279,7 @@ def grab_mlb_showdown_salaries():
271
  collection = salaries_db["MLB_showdown_player_info"]
272
  eastern = pytz.timezone('US/Eastern')
273
  today_str = datetime.now(eastern).strftime("%Y%m%d")
274
- records = pd.DataFrame(list(collection.find({'Date': {'$gte': today_str}})))
275
  records = records[['Display Name', 'draftableId', 'Position', 'Salary']]
276
  records = records.rename(columns={'Display Name': 'Name', 'draftableId': 'ID', 'Position': 'Roster Position'})
277
  return records
@@ -280,7 +288,7 @@ def grab_nhl_reg_salaries(slate_var: str):
280
  collection = salaries_db["NHL_reg_player_info"]
281
  eastern = pytz.timezone('US/Eastern')
282
  today_str = datetime.now(eastern).strftime("%Y%m%d")
283
- records = pd.DataFrame(list(collection.find({'Date': {'$gte': today_str}})))
284
  records = records[['Display Name', 'draftableId', 'Position', 'Salary']]
285
  records = records.rename(columns={'Display Name': 'Name', 'draftableId': 'ID', 'Position': 'Roster Position'})
286
  if slate_var == 'Main':
@@ -314,7 +322,7 @@ def grab_nhl_showdown_salaries():
314
  collection = salaries_db["NHL_showdown_player_info"]
315
  eastern = pytz.timezone('US/Eastern')
316
  today_str = datetime.now(eastern).strftime("%Y%m%d")
317
- records = pd.DataFrame(list(collection.find({'Date': {'$gte': today_str}})))
318
  records = records[['Display Name', 'draftableId', 'Position', 'Salary']]
319
  records = records.rename(columns={'Display Name': 'Name', 'draftableId': 'ID', 'Position': 'Roster Position'})
320
  return records
@@ -357,7 +365,50 @@ def grab_mma_showdown_salaries():
357
  collection = salaries_db["MMA_showdown_player_info"]
358
  eastern = pytz.timezone('US/Eastern')
359
  today_str = datetime.now(eastern).strftime("%Y%m%d")
360
- records = pd.DataFrame(list(collection.find({'Date': {'$gte': today_str}})))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
361
  records = records[['Display Name', 'draftableId', 'Position', 'Salary']]
362
  records = records.rename(columns={'Display Name': 'Name', 'draftableId': 'ID', 'Position': 'Roster Position'})
363
  return records
@@ -498,52 +549,6 @@ except:
498
  nhl_slate_names_fd = []
499
  nhl_slate_name_lookup_fd = {}
500
 
501
- def define_dk_mma_showdown_slates():
502
- collection = mma_db["Player_Level_SD_ROO"]
503
- cursor = collection.find()
504
- raw_display = pd.DataFrame(list(cursor))
505
- raw_display = raw_display[raw_display['Site'] == 'Draftkings']
506
- unique_slates = raw_display['Slate'].unique()
507
-
508
- slate_names = []
509
-
510
- for slate in unique_slates:
511
- slate_data = raw_display[raw_display['Slate'] == slate]
512
- slate_name = slate_data.iloc[0]['Team'] + ' vs. ' + slate_data.iloc[0]['Opp']
513
- slate_names.append(slate_name)
514
-
515
- slate_name_lookup = dict(zip(slate_names, unique_slates))
516
- return slate_names, slate_name_lookup
517
-
518
- def define_fd_mma_showdown_slates():
519
- collection = mma_db["Player_Level_SD_ROO"]
520
- cursor = collection.find()
521
- raw_display = pd.DataFrame(list(cursor))
522
- raw_display = raw_display[raw_display['Site'] == 'Fanduel']
523
- unique_slates = raw_display['Slate'].unique()
524
-
525
- slate_names = []
526
-
527
- for slate in unique_slates:
528
- slate_data = raw_display[raw_display['Slate'] == slate]
529
- slate_name = slate_data.iloc[0]['Team'] + ' vs. ' + slate_data.iloc[0]['Opp']
530
- slate_names.append(slate_name)
531
-
532
- slate_name_lookup = dict(zip(slate_names, unique_slates))
533
- return slate_names, slate_name_lookup
534
-
535
- try:
536
- mma_slate_names_dk, mma_slate_name_lookup_dk = define_dk_mma_showdown_slates()
537
- except:
538
- mma_slate_names_dk = []
539
- mma_slate_name_lookup_dk = {}
540
-
541
- try:
542
- mma_slate_names_fd, mma_slate_name_lookup_fd = define_fd_mma_showdown_slates()
543
- except:
544
- mma_slate_names_fd = []
545
- mma_slate_name_lookup_fd = {}
546
-
547
  # Memory optimization helper functions
548
  def chunk_name_matching(portfolio_names, csv_names, chunk_size=1000):
549
  """Process name matching in chunks to reduce memory usage"""
@@ -924,7 +929,9 @@ with st.container():
924
  elif sport_var == 'NHL':
925
  slate_var3 = st.radio("Which slate data are you loading?", (nhl_slate_names_dk if type_var == 'Showdown' else ['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
926
  elif sport_var == 'MMA':
927
- slate_var3 = st.radio("Which slate data are you loading?", (mma_slate_names_dk if type_var == 'Showdown' else ['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
 
 
928
  else:
929
  slate_var3 = st.radio("Which slate data are you loading?", (['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
930
  elif site_var == 'Fanduel':
@@ -935,7 +942,9 @@ with st.container():
935
  elif sport_var == 'NHL':
936
  slate_var3 = st.radio("Which slate data are you loading?", (nhl_slate_names_fd if type_var == 'Showdown' else ['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
937
  elif sport_var == 'MMA':
938
- slate_var3 = st.radio("Which slate data are you loading?", (mma_slate_names_fd if type_var == 'Showdown' else ['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
 
 
939
  else:
940
  slate_var3 = st.radio("Which slate data are you loading?", (['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
941
 
@@ -990,6 +999,14 @@ with st.container():
990
  mma_showdown_salaries = grab_mma_showdown_salaries()
991
  except:
992
  mma_showdown_salaries = None
 
 
 
 
 
 
 
 
993
 
994
  try:
995
  selected_tab = st.segmented_control(
@@ -1049,6 +1066,11 @@ if selected_tab == 'Data Load':
1049
  st.session_state['csv_file'] = load_csv(mma_reg_salaries)
1050
  elif type_var == 'Showdown':
1051
  st.session_state['csv_file'] = load_csv(mma_showdown_salaries)
 
 
 
 
 
1052
  st.session_state['pricing_loaded'] = True
1053
 
1054
  try:
@@ -1124,7 +1146,9 @@ if selected_tab == 'Data Load':
1124
  elif sport_var == 'NHL':
1125
  portfolio_load = init_DK_NHL_lineups(type_var, slate_var3, prio_var, 50, dk_nhl_showdown_db_translation, lineup_num_var, [])
1126
  elif sport_var == 'MMA':
1127
- portfolio_load = init_DK_MMA_lineups(type_var, slate_var3, prio_var, 50, dk_mma_showdown_db_translation, lineup_num_var, [])
 
 
1128
  else:
1129
  if sport_var == 'NBA':
1130
  portfolio_load = init_DK_NBA_lineups(type_var, nba_slate_name_lookup_dk[slate_var3], prio_var, 50, dk_nba_showdown_db_translation, lineup_num_var, [])
@@ -1133,7 +1157,9 @@ if selected_tab == 'Data Load':
1133
  elif sport_var == 'NHL':
1134
  portfolio_load = init_DK_NHL_lineups(type_var, nhl_slate_name_lookup_dk[slate_var3], prio_var, 50, dk_nhl_showdown_db_translation, lineup_num_var, [])
1135
  elif sport_var == 'MMA':
1136
- portfolio_load = init_DK_MMA_lineups(type_var, mma_slate_name_lookup_dk[slate_var3], prio_var, 50, dk_mma_showdown_db_translation, lineup_num_var, [])
 
 
1137
 
1138
  st.session_state['db_portfolio_file'] = pd.DataFrame(portfolio_load)
1139
  st.session_state['portfolio_loaded'] = True
@@ -1150,7 +1176,9 @@ if selected_tab == 'Data Load':
1150
  elif sport_var == 'NHL':
1151
  portfolio_load = init_FD_NHL_lineups(type_var, slate_var3, prio_var, 50, fd_nhl_showdown_db_translation, lineup_num_var, [])
1152
  elif sport_var == 'MMA':
1153
- portfolio_load = init_FD_MMA_lineups(type_var, slate_var3, prio_var, 50, fd_mma_showdown_db_translation, lineup_num_var, [])
 
 
1154
  else:
1155
  if sport_var == 'NBA':
1156
  portfolio_load = init_FD_NBA_lineups(type_var, nba_slate_name_lookup_fd[slate_var3], prio_var, 50, fd_nba_showdown_db_translation, lineup_num_var, [])
@@ -1159,7 +1187,9 @@ if selected_tab == 'Data Load':
1159
  elif sport_var == 'NHL':
1160
  portfolio_load = init_FD_NHL_lineups(type_var, nhl_slate_name_lookup_fd[slate_var3], prio_var, 50, fd_nhl_showdown_db_translation, lineup_num_var, [])
1161
  elif sport_var == 'MMA':
1162
- portfolio_load = init_FD_MMA_lineups(type_var, mma_slate_name_lookup_fd[slate_var3], prio_var, 50, fd_mma_showdown_db_translation, lineup_num_var, [])
 
 
1163
 
1164
  st.session_state['db_portfolio_file'] = pd.DataFrame(portfolio_load)
1165
  st.session_state['portfolio_loaded'] = True
@@ -1305,6 +1335,17 @@ if selected_tab == 'Data Load':
1305
  projections_file = init_mma_baselines(type_var, site_var, slate_var3)[1]
1306
  elif type_var == 'Showdown':
1307
  projections_file = init_mma_baselines(type_var, site_var, slate_var3)[3]
 
 
 
 
 
 
 
 
 
 
 
1308
  st.session_state['db_projections_file'] = projections_file
1309
  st.session_state['projections_loaded'] = True
1310
  if 'projections_df' in st.session_state:
 
57
  fd_db_mma_showdown_selections = ['FD_MMA_SD_seed_frame_Showdown #1', 'FD_MMA_SD_seed_frame_Showdown #2', 'FD_MMA_SD_seed_frame_Showdown #3', 'FD_MMA_SD_seed_frame_Showdown #4', 'FD_MMA_SD_seed_frame_Showdown #5', 'FD_MMA_SD_seed_frame_Showdown #6',
58
  'FD_MMA_SD_seed_frame_Showdown #7', 'FD_MMA_SD_seed_frame_Showdown #8', 'FD_MMA_SD_seed_frame_Showdown #9', 'FD_MMA_SD_seed_frame_Showdown #10', 'FD_MMA_SD_seed_frame_Showdown #11', 'FD_MMA_SD_seed_frame_Showdown #12', 'FD_MMA_SD_seed_frame_Showdown #13',
59
  'FD_MMA_SD_seed_frame_Showdown #14', 'FD_MMA_SD_seed_frame_Showdown #15']
60
+ dk_db_pga_showdown_selections = ['DK_PGA_SD_seed_frame_Showdown #1', 'DK_PGA_SD_seed_frame_Showdown #2', 'DK_PGA_SD_seed_frame_Showdown #3', 'DK_PGA_SD_seed_frame_Showdown #4', 'DK_PGA_SD_seed_frame_Showdown #5', 'DK_PGA_SD_seed_frame_Showdown #6',
61
+ 'DK_PGA_SD_seed_frame_Showdown #7', 'DK_PGA_SD_seed_frame_Showdown #8', 'DK_PGA_SD_seed_frame_Showdown #9', 'DK_PGA_SD_seed_frame_Showdown #10', 'DK_PGA_SD_seed_frame_Showdown #11', 'DK_PGA_SD_seed_frame_Showdown #12', 'DK_PGA_SD_seed_frame_Showdown #13',
62
+ 'DK_PGA_SD_seed_frame_Showdown #14', 'DK_PGA_SD_seed_frame_Showdown #15']
63
+ fd_db_pga_showdown_selections = ['FD_PGA_SD_seed_frame_Showdown #1', 'FD_PGA_SD_seed_frame_Showdown #2', 'FD_PGA_SD_seed_frame_Showdown #3', 'FD_PGA_SD_seed_frame_Showdown #4', 'FD_PGA_SD_seed_frame_Showdown #5', 'FD_PGA_SD_seed_frame_Showdown #6',
64
+ 'FD_PGA_SD_seed_frame_Showdown #7', 'FD_PGA_SD_seed_frame_Showdown #8', 'FD_PGA_SD_seed_frame_Showdown #9', 'FD_PGA_SD_seed_frame_Showdown #10', 'FD_PGA_SD_seed_frame_Showdown #11', 'FD_PGA_SD_seed_frame_Showdown #12', 'FD_PGA_SD_seed_frame_Showdown #13',
65
+ 'FD_PGA_SD_seed_frame_Showdown #14', 'FD_PGA_SD_seed_frame_Showdown #15']
66
 
67
  dk_nfl_showdown_db_translation = dict(zip(showdown_selections, dk_db_nfl_showdown_selections))
68
  fd_nfl_showdown_db_translation = dict(zip(showdown_selections, fd_db_nfl_showdown_selections))
 
72
  fd_nhl_showdown_db_translation = dict(zip(showdown_selections, fd_db_nhl_showdown_selections))
73
  dk_mma_showdown_db_translation = dict(zip(showdown_selections, dk_db_mma_showdown_selections))
74
  fd_mma_showdown_db_translation = dict(zip(showdown_selections, fd_db_mma_showdown_selections))
75
+ dk_pga_showdown_db_translation = dict(zip(showdown_selections, dk_db_pga_showdown_selections))
76
+ fd_pga_showdown_db_translation = dict(zip(showdown_selections, fd_db_pga_showdown_selections))
77
 
78
  freq_format = {'Finish_percentile': '{:.2%}', 'Lineup Edge': '{:.2%}', 'Lineup Edge_Raw': '{:.2%}', 'Win%': '{:.2%}'}
79
  stacking_sports = ['MLB', 'NHL', 'NFL', 'LOL', 'NCAAF']
 
157
  collection = salaries_db["NFL_reg_player_info"]
158
  eastern = pytz.timezone('US/Eastern')
159
  today_str = datetime.now(eastern).strftime("%Y%m%d")
160
+ records = pd.DataFrame(list(collection.find({'Contest Date': {'$gte': today_str}})))
161
  records = records[['Display Name', 'draftableId', 'Position', 'Salary']]
162
  records = records.rename(columns={'Display Name': 'Name', 'draftableId': 'ID', 'Position': 'Roster Position'})
163
  if slate_var == 'Main':
 
191
  collection = salaries_db["NFL_showdown_player_info"]
192
  eastern = pytz.timezone('US/Eastern')
193
  today_str = datetime.now(eastern).strftime("%Y%m%d")
194
+ records = pd.DataFrame(list(collection.find({'Contest Date': {'$gte': today_str}})))
195
  records = records[['Display Name', 'draftableId', 'Position', 'Salary']]
196
  records = records.rename(columns={'Display Name': 'Name', 'draftableId': 'ID', 'Position': 'Roster Position'})
197
  return records
 
200
  collection = salaries_db["NBA_reg_player_info"]
201
  eastern = pytz.timezone('US/Eastern')
202
  today_str = datetime.now(eastern).strftime("%Y%m%d")
203
+ records = pd.DataFrame(list(collection.find({'Contest Date': {'$gte': today_str}})))
204
  records = records[['Display Name', 'draftableId', 'Position', 'Salary']]
205
  records = records.rename(columns={'Display Name': 'Name', 'draftableId': 'ID', 'Position': 'Roster Position'})
206
  if slate_var == 'Main':
 
236
  eastern = pytz.timezone('US/Eastern')
237
  today_str = datetime.now(eastern).strftime("%Y%m%d")
238
  print(f"Current date in Eastern Time: {today_str}")
239
+ records = pd.DataFrame(list(collection.find({'Contest Date': {'$gte': today_str}})))
240
  records = records[['Display Name', 'draftableId', 'Position', 'Salary']]
241
  records = records.rename(columns={'Display Name': 'Name', 'draftableId': 'ID', 'Position': 'Roster Position'})
242
  return records
 
245
  collection = salaries_db["MLB_reg_player_info"]
246
  eastern = pytz.timezone('US/Eastern')
247
  today_str = datetime.now(eastern).strftime("%Y%m%d")
248
+ records = pd.DataFrame(list(collection.find({'Contest Date': {'$gte': today_str}})))
249
  records = records[['Display Name', 'draftableId', 'Position', 'Salary']]
250
  records = records.rename(columns={'Display Name': 'Name', 'draftableId': 'ID', 'Position': 'Roster Position'})
251
  if slate_var == 'Main':
 
279
  collection = salaries_db["MLB_showdown_player_info"]
280
  eastern = pytz.timezone('US/Eastern')
281
  today_str = datetime.now(eastern).strftime("%Y%m%d")
282
+ records = pd.DataFrame(list(collection.find({'Contest Date': {'$gte': today_str}})))
283
  records = records[['Display Name', 'draftableId', 'Position', 'Salary']]
284
  records = records.rename(columns={'Display Name': 'Name', 'draftableId': 'ID', 'Position': 'Roster Position'})
285
  return records
 
288
  collection = salaries_db["NHL_reg_player_info"]
289
  eastern = pytz.timezone('US/Eastern')
290
  today_str = datetime.now(eastern).strftime("%Y%m%d")
291
+ records = pd.DataFrame(list(collection.find({'Contest Date': {'$gte': today_str}})))
292
  records = records[['Display Name', 'draftableId', 'Position', 'Salary']]
293
  records = records.rename(columns={'Display Name': 'Name', 'draftableId': 'ID', 'Position': 'Roster Position'})
294
  if slate_var == 'Main':
 
322
  collection = salaries_db["NHL_showdown_player_info"]
323
  eastern = pytz.timezone('US/Eastern')
324
  today_str = datetime.now(eastern).strftime("%Y%m%d")
325
+ records = pd.DataFrame(list(collection.find({'Contest Date': {'$gte': today_str}})))
326
  records = records[['Display Name', 'draftableId', 'Position', 'Salary']]
327
  records = records.rename(columns={'Display Name': 'Name', 'draftableId': 'ID', 'Position': 'Roster Position'})
328
  return records
 
365
  collection = salaries_db["MMA_showdown_player_info"]
366
  eastern = pytz.timezone('US/Eastern')
367
  today_str = datetime.now(eastern).strftime("%Y%m%d")
368
+ records = pd.DataFrame(list(collection.find({'Contest Date': {'$gte': today_str}})))
369
+ records = records[['Display Name', 'draftableId', 'Position', 'Salary']]
370
+ records = records.rename(columns={'Display Name': 'Name', 'draftableId': 'ID', 'Position': 'Roster Position'})
371
+ return records
372
+
373
+ def grab_pga_reg_salaries(slate_var: str):
374
+ collection = salaries_db["PGA_reg_player_info"]
375
+ eastern = pytz.timezone('US/Eastern')
376
+ today_str = datetime.now(eastern).strftime("%Y%m%d")
377
+ records = pd.DataFrame(list(collection.find({'Contest Date': {'$gte': today_str}})))
378
+ records = records[['Display Name', 'draftableId', 'Position', 'Salary']]
379
+ records = records.rename(columns={'Display Name': 'Name', 'draftableId': 'ID', 'Position': 'Roster Position'})
380
+ if slate_var == 'Main':
381
+ records = records.sort_values(by='ID', ascending=True)
382
+ records = records.drop_duplicates(subset=['Name'], keep='first')
383
+ elif slate_var == 'Secondary':
384
+ records = records.sort_values(by='ID', ascending=True)
385
+ # Keep middle occurrence: drop first and last, keep middle
386
+ grouped = records.groupby('Name')
387
+ middle_records = []
388
+ for name, group in grouped:
389
+ if len(group) == 1:
390
+ # Only one record, keep it
391
+ middle_records.append(group)
392
+ elif len(group) == 2:
393
+ # Two records, keep the second one (last)
394
+ middle_records.append(group.iloc[1:2])
395
+ else:
396
+ # Three or more records, keep the middle one(s)
397
+ # For odd number of records, keep the true middle
398
+ # For even number of records, keep the record at index len//2
399
+ middle_idx = len(group) // 2
400
+ middle_records.append(group.iloc[middle_idx:middle_idx+1])
401
+ records = pd.concat(middle_records, ignore_index=True)
402
+ elif slate_var == 'Auxiliary':
403
+ records = records.sort_values(by='ID', ascending=True)
404
+ records = records.drop_duplicates(subset=['Name'], keep='last')
405
+ return records
406
+
407
+ def grab_pga_showdown_salaries():
408
+ collection = salaries_db["PGA_showdown_player_info"]
409
+ eastern = pytz.timezone('US/Eastern')
410
+ today_str = datetime.now(eastern).strftime("%Y%m%d")
411
+ records = pd.DataFrame(list(collection.find({'Contest Date': {'$gte': today_str}})))
412
  records = records[['Display Name', 'draftableId', 'Position', 'Salary']]
413
  records = records.rename(columns={'Display Name': 'Name', 'draftableId': 'ID', 'Position': 'Roster Position'})
414
  return records
 
549
  nhl_slate_names_fd = []
550
  nhl_slate_name_lookup_fd = {}
551
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
552
  # Memory optimization helper functions
553
  def chunk_name_matching(portfolio_names, csv_names, chunk_size=1000):
554
  """Process name matching in chunks to reduce memory usage"""
 
929
  elif sport_var == 'NHL':
930
  slate_var3 = st.radio("Which slate data are you loading?", (nhl_slate_names_dk if type_var == 'Showdown' else ['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
931
  elif sport_var == 'MMA':
932
+ slate_var3 = st.radio("Which slate data are you loading?", (['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
933
+ elif sport_var == 'GOLF':
934
+ slate_var3 = st.radio("Which slate data are you loading?", (['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
935
  else:
936
  slate_var3 = st.radio("Which slate data are you loading?", (['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
937
  elif site_var == 'Fanduel':
 
942
  elif sport_var == 'NHL':
943
  slate_var3 = st.radio("Which slate data are you loading?", (nhl_slate_names_fd if type_var == 'Showdown' else ['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
944
  elif sport_var == 'MMA':
945
+ slate_var3 = st.radio("Which slate data are you loading?", (['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
946
+ elif sport_var == 'GOLF':
947
+ slate_var3 = st.radio("Which slate data are you loading?", (['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
948
  else:
949
  slate_var3 = st.radio("Which slate data are you loading?", (['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
950
 
 
999
  mma_showdown_salaries = grab_mma_showdown_salaries()
1000
  except:
1001
  mma_showdown_salaries = None
1002
+ try:
1003
+ pga_reg_salaries = grab_pga_reg_salaries(slate_var3)
1004
+ except:
1005
+ pga_reg_salaries = None
1006
+ try:
1007
+ pga_showdown_salaries = grab_pga_showdown_salaries()
1008
+ except:
1009
+ pga_showdown_salaries = None
1010
 
1011
  try:
1012
  selected_tab = st.segmented_control(
 
1066
  st.session_state['csv_file'] = load_csv(mma_reg_salaries)
1067
  elif type_var == 'Showdown':
1068
  st.session_state['csv_file'] = load_csv(mma_showdown_salaries)
1069
+ elif sport_var == 'GOLF':
1070
+ if type_var == 'Classic':
1071
+ st.session_state['csv_file'] = load_csv(pga_reg_salaries)
1072
+ elif type_var == 'Showdown':
1073
+ st.session_state['csv_file'] = load_csv(pga_showdown_salaries)
1074
  st.session_state['pricing_loaded'] = True
1075
 
1076
  try:
 
1146
  elif sport_var == 'NHL':
1147
  portfolio_load = init_DK_NHL_lineups(type_var, slate_var3, prio_var, 50, dk_nhl_showdown_db_translation, lineup_num_var, [])
1148
  elif sport_var == 'MMA':
1149
+ portfolio_load = init_DK_MMA_lineups(type_var, slate_var3, prio_var, 50, lineup_num_var, [])
1150
+ elif sport_var == 'GOLF':
1151
+ portfolio_load = init_DK_PGA_lineups(type_var, slate_var3, prio_var, 50, lineup_num_var, [])
1152
  else:
1153
  if sport_var == 'NBA':
1154
  portfolio_load = init_DK_NBA_lineups(type_var, nba_slate_name_lookup_dk[slate_var3], prio_var, 50, dk_nba_showdown_db_translation, lineup_num_var, [])
 
1157
  elif sport_var == 'NHL':
1158
  portfolio_load = init_DK_NHL_lineups(type_var, nhl_slate_name_lookup_dk[slate_var3], prio_var, 50, dk_nhl_showdown_db_translation, lineup_num_var, [])
1159
  elif sport_var == 'MMA':
1160
+ portfolio_load = init_DK_MMA_lineups(type_var, slate_var3, prio_var, 50, lineup_num_var, [])
1161
+ elif sport_var == 'GOLF':
1162
+ portfolio_load = init_DK_PGA_lineups(type_var, slate_var3, prio_var, 50, lineup_num_var, [])
1163
 
1164
  st.session_state['db_portfolio_file'] = pd.DataFrame(portfolio_load)
1165
  st.session_state['portfolio_loaded'] = True
 
1176
  elif sport_var == 'NHL':
1177
  portfolio_load = init_FD_NHL_lineups(type_var, slate_var3, prio_var, 50, fd_nhl_showdown_db_translation, lineup_num_var, [])
1178
  elif sport_var == 'MMA':
1179
+ portfolio_load = init_FD_MMA_lineups(type_var, slate_var3, prio_var, 50, lineup_num_var, [])
1180
+ elif sport_var == 'GOLF':
1181
+ portfolio_load = init_FD_PGA_lineups(type_var, slate_var3, prio_var, 50, lineup_num_var, [])
1182
  else:
1183
  if sport_var == 'NBA':
1184
  portfolio_load = init_FD_NBA_lineups(type_var, nba_slate_name_lookup_fd[slate_var3], prio_var, 50, fd_nba_showdown_db_translation, lineup_num_var, [])
 
1187
  elif sport_var == 'NHL':
1188
  portfolio_load = init_FD_NHL_lineups(type_var, nhl_slate_name_lookup_fd[slate_var3], prio_var, 50, fd_nhl_showdown_db_translation, lineup_num_var, [])
1189
  elif sport_var == 'MMA':
1190
+ portfolio_load = init_FD_MMA_lineups(type_var, slate_var3, prio_var, 50, lineup_num_var, [])
1191
+ elif sport_var == 'GOLF':
1192
+ portfolio_load = init_FD_PGA_lineups(type_var, slate_var3, prio_var, 50, lineup_num_var, [])
1193
 
1194
  st.session_state['db_portfolio_file'] = pd.DataFrame(portfolio_load)
1195
  st.session_state['portfolio_loaded'] = True
 
1335
  projections_file = init_mma_baselines(type_var, site_var, slate_var3)[1]
1336
  elif type_var == 'Showdown':
1337
  projections_file = init_mma_baselines(type_var, site_var, slate_var3)[3]
1338
+ elif sport_var == 'GOLF':
1339
+ if site_var == 'Draftkings':
1340
+ if type_var == 'Classic':
1341
+ projections_file = init_pga_baselines(type_var, site_var, slate_var3)[0]
1342
+ elif type_var == 'Showdown':
1343
+ projections_file = init_pga_baselines(type_var, site_var, slate_var3)[2]
1344
+ elif site_var == 'Fanduel':
1345
+ if type_var == 'Classic':
1346
+ projections_file = init_pga_baselines(type_var, site_var, slate_var3)[1]
1347
+ elif type_var == 'Showdown':
1348
+ projections_file = init_pga_baselines(type_var, site_var, slate_var3)[3]
1349
  st.session_state['db_projections_file'] = projections_file
1350
  st.session_state['projections_loaded'] = True
1351
  if 'projections_df' in st.session_state:
database.py CHANGED
@@ -9,13 +9,14 @@ def init_conn():
9
  if not uri:
10
  uri = st.secrets['mongo_uri']
11
  client = pymongo.MongoClient(uri, retryWrites=True, serverSelectionTimeoutMS=500000)
12
- nfl_db = client["NFL_Database"]
13
  salaries_db = client['Contest_Information']
 
14
  nba_db = client["NBA_Database"]
15
  mlb_db = client["MLB_Database"]
16
  nhl_db = client["NHL_Database"]
17
  mma_db = client["MMA_Database"]
 
18
 
19
- return nfl_db, salaries_db, nba_db, mlb_db, nhl_db, mma_db
20
 
21
- nfl_db, salaries_db, nba_db, mlb_db, nhl_db, mma_db = init_conn()
 
9
  if not uri:
10
  uri = st.secrets['mongo_uri']
11
  client = pymongo.MongoClient(uri, retryWrites=True, serverSelectionTimeoutMS=500000)
 
12
  salaries_db = client['Contest_Information']
13
+ nfl_db = client["NFL_Database"]
14
  nba_db = client["NBA_Database"]
15
  mlb_db = client["MLB_Database"]
16
  nhl_db = client["NHL_Database"]
17
  mma_db = client["MMA_Database"]
18
+ pga_db = client["PGA_Database"]
19
 
20
+ return nfl_db, salaries_db, nba_db, mlb_db, nhl_db, mma_db, pga_db
21
 
22
+ nfl_db, salaries_db, nba_db, mlb_db, nhl_db, mma_db, pga_db = init_conn()
database_queries.py CHANGED
@@ -102,7 +102,7 @@ def init_nfl_baselines(type_var: str, site_var: str, slate_var: str):
102
 
103
  return dk_roo_raw, fd_roo_raw, dk_sd_roo_raw, fd_sd_roo_raw, dk_id_map, fd_id_map, dk_sd_id_map, fd_sd_id_map
104
 
105
- def init_DK_NFL_lineups(type_var, slate_var, prio_var, prio_mix, nfl_db_translation, lineup_num, player_var2):
106
 
107
  if prio_var == 'Mix':
108
  prio_var = None
@@ -506,7 +506,7 @@ def init_nba_baselines(type_var: str, site_var: str, slate_var: str):
506
 
507
  return dk_roo_raw, fd_roo_raw, dk_sd_roo_raw, fd_sd_roo_raw, dk_id_map, fd_id_map, dk_sd_id_map, fd_sd_id_map
508
 
509
- def init_DK_NBA_lineups(type_var, slate_var, prio_var, prio_mix, nba_db_translation, lineup_num, player_var2):
510
 
511
  if prio_var == 'Mix':
512
  prio_var = None
@@ -900,7 +900,7 @@ def init_nhl_baselines(type_var: str, site_var: str, slate_var: str):
900
 
901
  return dk_roo_raw, fd_roo_raw, dk_sd_roo_raw, fd_sd_roo_raw, dk_id_map, fd_id_map, dk_sd_id_map, fd_sd_id_map
902
 
903
- def init_DK_NHL_lineups(type_var, slate_var, prio_var, prio_mix, nhl_db_translation, lineup_num, player_var2):
904
 
905
  if prio_var == 'Mix':
906
  prio_var = None
@@ -1296,7 +1296,7 @@ def init_mma_baselines(type_var: str, site_var: str, slate_var: str):
1296
 
1297
  return dk_roo_raw, fd_roo_raw, dk_sd_roo_raw, fd_sd_roo_raw, dk_id_map, fd_id_map, dk_sd_id_map, fd_sd_id_map
1298
 
1299
- def init_DK_MMA_lineups(type_var, slate_var, prio_var, prio_mix, mma_db_translation, lineup_num, player_var2):
1300
 
1301
  if prio_var == 'Mix':
1302
  prio_var = None
@@ -1459,7 +1459,7 @@ def init_DK_MMA_lineups(type_var, slate_var, prio_var, prio_mix, mma_db_translat
1459
 
1460
  return DK_seed
1461
 
1462
- def init_FD_MMA_lineups(type_var, slate_var, prio_var, prio_mix, mma_db_translation, lineup_num, player_var2):
1463
 
1464
  if prio_var == 'Mix':
1465
  prio_var = None
@@ -1622,4 +1622,414 @@ def init_FD_MMA_lineups(type_var, slate_var, prio_var, prio_mix, mma_db_translat
1622
 
1623
  FD_seed = raw_display.to_numpy()
1624
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1625
  return FD_seed
 
102
 
103
  return dk_roo_raw, fd_roo_raw, dk_sd_roo_raw, fd_sd_roo_raw, dk_id_map, fd_id_map, dk_sd_id_map, fd_sd_id_map
104
 
105
+ def init_DK_NFL_lineups(type_var, slate_var, prio_var, prio_mix, nfl_db_translation, lineup_num, player_var2):
106
 
107
  if prio_var == 'Mix':
108
  prio_var = None
 
506
 
507
  return dk_roo_raw, fd_roo_raw, dk_sd_roo_raw, fd_sd_roo_raw, dk_id_map, fd_id_map, dk_sd_id_map, fd_sd_id_map
508
 
509
+ def init_DK_NBA_lineups(type_var, slate_var, prio_var, prio_mix, nba_db_translation, lineup_num, player_var2):
510
 
511
  if prio_var == 'Mix':
512
  prio_var = None
 
900
 
901
  return dk_roo_raw, fd_roo_raw, dk_sd_roo_raw, fd_sd_roo_raw, dk_id_map, fd_id_map, dk_sd_id_map, fd_sd_id_map
902
 
903
+ def init_DK_NHL_lineups(type_var, slate_var, prio_var, prio_mix, nhl_db_translation, lineup_num, player_var2):
904
 
905
  if prio_var == 'Mix':
906
  prio_var = None
 
1296
 
1297
  return dk_roo_raw, fd_roo_raw, dk_sd_roo_raw, fd_sd_roo_raw, dk_id_map, fd_id_map, dk_sd_id_map, fd_sd_id_map
1298
 
1299
+ def init_DK_MMA_lineups(type_var, slate_var, prio_var, prio_mix, lineup_num, player_var2):
1300
 
1301
  if prio_var == 'Mix':
1302
  prio_var = None
 
1459
 
1460
  return DK_seed
1461
 
1462
+ def init_FD_MMA_lineups(type_var, slate_var, prio_var, prio_mix, lineup_num, player_var2):
1463
 
1464
  if prio_var == 'Mix':
1465
  prio_var = None
 
1622
 
1623
  FD_seed = raw_display.to_numpy()
1624
 
1625
+ return FD_seed
1626
+
1627
+ def init_pga_baselines(type_var: str, site_var: str, slate_var: str):
1628
+
1629
+ if slate_var == 'Main':
1630
+ slate_var = 'Main Slate'
1631
+ elif slate_var == 'Secondary':
1632
+ slate_var = 'Secondary Slate'
1633
+ elif slate_var == 'Auxiliary':
1634
+ slate_var = 'Late Slate'
1635
+
1636
+ if type_var == 'Showdown':
1637
+ collection = pga_db["Player_Level_Showdown_ROO"]
1638
+ cursor = collection.find()
1639
+
1640
+ raw_display = pd.DataFrame(list(cursor))
1641
+ raw_display = raw_display[['Player', 'Position', 'Team', 'Salary', 'Median', 'Own', 'CPT_Own', 'player_id', 'slate', 'site', 'version']]
1642
+ raw_display['Median'] = raw_display['Median'].replace('', 0).astype(float)
1643
+ raw_display = raw_display.rename(columns={"player_id": "player_ID"})
1644
+ raw_display = raw_display.loc[raw_display['Median'] > 0]
1645
+ raw_display = raw_display.apply(pd.to_numeric, errors='ignore')
1646
+ sd_raw = raw_display.sort_values(by='Median', ascending=False)
1647
+ dk_sd_roo_raw = sd_raw[sd_raw['site'] == 'Draftkings']
1648
+ dk_sd_id_map = dict(zip(dk_sd_roo_raw['Player'], dk_sd_roo_raw['player_ID']))
1649
+ fd_sd_roo_raw = sd_raw[sd_raw['site'] == 'Fanduel']
1650
+ fd_sd_id_map = dict(zip(fd_sd_roo_raw['Player'], fd_sd_roo_raw['player_ID']))
1651
+ fd_sd_roo_raw['player_ID'] = fd_sd_roo_raw['player_ID'].astype(str)
1652
+ fd_sd_roo_raw['player_ID'] = fd_sd_roo_raw['player_ID'].str.rsplit('-', n=1).str[0].astype(str)
1653
+
1654
+ dk_sd_roo_raw = dk_sd_roo_raw.drop(columns=['player_ID', 'slate', 'version', 'site'])
1655
+ fd_sd_roo_raw = fd_sd_roo_raw.drop(columns=['player_ID', 'slate', 'version', 'site'])
1656
+
1657
+ dk_sd_roo_raw = dk_sd_roo_raw.rename(columns={'Player': 'player_names', 'Position': 'position', 'Team': 'team', 'Salary': 'salary', 'Median': 'median', 'Own': 'ownership', 'CPT_Own': 'captain ownership'})
1658
+ fd_sd_roo_raw = fd_sd_roo_raw.rename(columns={'Player': 'player_names', 'Position': 'position', 'Team': 'team', 'Salary': 'salary', 'Median': 'median', 'Own': 'ownership', 'CPT_Own': 'captain ownership'})
1659
+
1660
+ dk_roo_raw = None
1661
+ fd_roo_raw = None
1662
+ dk_id_map = None
1663
+ fd_id_map = None
1664
+
1665
+ else:
1666
+ collection = pga_db["Player_Level_ROO"]
1667
+ cursor = collection.find()
1668
+
1669
+ raw_display = pd.DataFrame(list(cursor))
1670
+ raw_display = raw_display[['Player', 'Position', 'Salary', 'Median', 'Own', 'CPT_Own', 'player_id']]
1671
+ raw_display['Team'] = 'PGA'
1672
+ raw_display['Site'] = site_var
1673
+ raw_display = raw_display.rename(columns={"player_id": "player_ID"})
1674
+ raw_display['Median'] = raw_display['Median'].replace('', 0).astype(float)
1675
+ raw_display = raw_display.loc[raw_display['Median'] > 0]
1676
+ dk_roo_raw = raw_display[raw_display['Site'] == 'Draftkings']
1677
+ fd_roo_raw = raw_display[raw_display['Site'] == 'Draftkings']
1678
+ dk_id_map = dict(zip(dk_roo_raw['Player'], dk_roo_raw['player_ID']))
1679
+ fd_id_map = dict(zip(fd_roo_raw['Player'], fd_roo_raw['player_ID']))
1680
+ raw_display = raw_display.apply(pd.to_numeric, errors='ignore')
1681
+
1682
+ dk_roo_raw = dk_roo_raw.drop(columns=['player_ID'])
1683
+ fd_roo_raw = fd_roo_raw.drop(columns=['player_ID'])
1684
+
1685
+ dk_roo_raw = dk_roo_raw.rename(columns={'Player': 'player_names', 'Position': 'position', 'Team': 'team', 'Salary': 'salary', 'Median': 'median', 'Own': 'ownership', 'CPT_Own': 'captain ownership'})
1686
+ fd_roo_raw = fd_roo_raw.rename(columns={'Player': 'player_names', 'Position': 'position', 'Team': 'team', 'Salary': 'salary', 'Median': 'median', 'Own': 'ownership', 'CPT_Own': 'captain ownership'})
1687
+
1688
+ dk_sd_roo_raw = None
1689
+ fd_sd_roo_raw = None
1690
+ dk_sd_id_map = None
1691
+ fd_sd_id_map = None
1692
+
1693
+ return dk_roo_raw, fd_roo_raw, dk_sd_roo_raw, fd_sd_roo_raw, dk_id_map, fd_id_map, dk_sd_id_map, fd_sd_id_map
1694
+
1695
+ def init_DK_PGA_lineups(type_var, slate_var, prio_var, prio_mix, lineup_num, player_var2):
1696
+
1697
+ if prio_var == 'Mix':
1698
+ prio_var = None
1699
+
1700
+ if type_var == 'Classic':
1701
+ if slate_var == 'Main':
1702
+ collection = pga_db['DK_PGA_Classic_name_map']
1703
+ cursor = collection.find()
1704
+ raw_data = pd.DataFrame(list(cursor))
1705
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
1706
+
1707
+ collection = pga_db['DK_PGA_Classic_seed_frame_Main Slate']
1708
+ if prio_var == None:
1709
+ if player_var2 != []:
1710
+ player_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1711
+ query_conditions = []
1712
+
1713
+ for player in player_var2:
1714
+ # Create a condition for each player to check if they appear in any column
1715
+ player_condition = {'$or': [{col: player} for col in player_columns]}
1716
+ query_conditions.append(player_condition)
1717
+
1718
+ # Combine all player conditions with $or
1719
+ if query_conditions:
1720
+ filter_query = {'$or': query_conditions}
1721
+ cursor1 = collection.find(filter_query).limit(math.ceil(lineup_num * (prio_mix / 100)))
1722
+ cursor2 = collection.find(filter_query).sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1723
+ else:
1724
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1725
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1726
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1727
+ else:
1728
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1729
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1730
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1731
+ else:
1732
+ cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
1733
+ raw_display = pd.DataFrame(list(cursor))
1734
+
1735
+ raw_display = raw_display.drop_duplicates(subset=['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'])
1736
+
1737
+ raw_display = raw_display[['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']]
1738
+ dict_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1739
+ # Map names
1740
+ raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
1741
+ elif slate_var == 'Secondary':
1742
+ collection = pga_db['DK_PGA_Classic_Secondary_name_map']
1743
+ cursor = collection.find()
1744
+ raw_data = pd.DataFrame(list(cursor))
1745
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
1746
+
1747
+ collection = pga_db['DK_PGA_Classic_seed_frame_Secondary Slate']
1748
+ if prio_var == None:
1749
+ if player_var2 != []:
1750
+ player_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1751
+ query_conditions = []
1752
+
1753
+ for player in player_var2:
1754
+ # Create a condition for each player to check if they appear in any column
1755
+ player_condition = {'$or': [{col: player} for col in player_columns]}
1756
+ query_conditions.append(player_condition)
1757
+
1758
+ # Combine all player conditions with $or
1759
+ if query_conditions:
1760
+ filter_query = {'$or': query_conditions}
1761
+ cursor1 = collection.find(filter_query).limit(math.ceil(lineup_num * (prio_mix / 100)))
1762
+ cursor2 = collection.find(filter_query).sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1763
+ else:
1764
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1765
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1766
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1767
+ else:
1768
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1769
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1770
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1771
+ else:
1772
+ cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
1773
+ raw_display = pd.DataFrame(list(cursor))
1774
+
1775
+ raw_display = raw_display.drop_duplicates(subset=['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'])
1776
+
1777
+ raw_display = raw_display[['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']]
1778
+ dict_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1779
+ # Map names
1780
+ raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
1781
+ elif slate_var == 'Auxiliary':
1782
+ collection = pga_db['DK_PGA_Classic_Late_name_map']
1783
+ cursor = collection.find()
1784
+ raw_data = pd.DataFrame(list(cursor))
1785
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
1786
+
1787
+ collection = pga_db['DK_PGA_Classic_seed_frame_Late Slate']
1788
+ if prio_var == None:
1789
+ if player_var2 != []:
1790
+ player_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1791
+ query_conditions = []
1792
+
1793
+ for player in player_var2:
1794
+ # Create a condition for each player to check if they appear in any column
1795
+ player_condition = {'$or': [{col: player} for col in player_columns]}
1796
+ query_conditions.append(player_condition)
1797
+
1798
+ # Combine all player conditions with $or
1799
+ if query_conditions:
1800
+ filter_query = {'$or': query_conditions}
1801
+ cursor1 = collection.find(filter_query).limit(math.ceil(lineup_num * (prio_mix / 100)))
1802
+ cursor2 = collection.find(filter_query).sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1803
+ else:
1804
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1805
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1806
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1807
+ else:
1808
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1809
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1810
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1811
+ else:
1812
+ cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
1813
+ raw_display = pd.DataFrame(list(cursor))
1814
+
1815
+ raw_display = raw_display.drop_duplicates(subset=['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'])
1816
+
1817
+ raw_display = raw_display[['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']]
1818
+ dict_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1819
+ # Map names
1820
+ raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
1821
+ elif type_var == 'Showdown':
1822
+ collection = pga_db['DK_PGA_Showdown_name_map']
1823
+ cursor = collection.find()
1824
+ raw_data = pd.DataFrame(list(cursor))
1825
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
1826
+
1827
+ collection = pga_db['DK_PGA_Showdown_seed_frame_Main Slate']
1828
+ if prio_var == None:
1829
+ if player_var2 != []:
1830
+ player_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1831
+ query_conditions = []
1832
+
1833
+ for player in player_var2:
1834
+ # Create a condition for each player to check if they appear in any column
1835
+ player_condition = {'$or': [{col: player} for col in player_columns]}
1836
+ query_conditions.append(player_condition)
1837
+
1838
+ # Combine all player conditions with $or
1839
+ if query_conditions:
1840
+ filter_query = {'$or': query_conditions}
1841
+ cursor1 = collection.find(filter_query).limit(math.ceil(lineup_num * (prio_mix / 100)))
1842
+ cursor2 = collection.find(filter_query).sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1843
+ else:
1844
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1845
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1846
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1847
+ else:
1848
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1849
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1850
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1851
+ else:
1852
+ cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
1853
+ raw_display = pd.DataFrame(list(cursor))
1854
+
1855
+ raw_display = raw_display.drop_duplicates(subset=['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'])
1856
+
1857
+ raw_display = raw_display[['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']]
1858
+ dict_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1859
+ # Map names
1860
+ raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
1861
+
1862
+ DK_seed = raw_display.to_numpy()
1863
+
1864
+ return DK_seed
1865
+
1866
+ def init_FD_PGA_lineups(type_var, slate_var, prio_var, prio_mix, lineup_num, player_var2):
1867
+
1868
+ if prio_var == 'Mix':
1869
+ prio_var = None
1870
+
1871
+ if type_var == 'Classic':
1872
+ if slate_var == 'Main':
1873
+ collection = pga_db['FD_PGA_Classic_name_map']
1874
+ cursor = collection.find()
1875
+ raw_data = pd.DataFrame(list(cursor))
1876
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
1877
+
1878
+ collection = pga_db['FD_PGA_Classic_seed_frame_Main Slate']
1879
+ if prio_var == None:
1880
+ if player_var2 != []:
1881
+ player_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1882
+ query_conditions = []
1883
+
1884
+ for player in player_var2:
1885
+ # Create a condition for each player to check if they appear in any column
1886
+ player_condition = {'$or': [{col: player} for col in player_columns]}
1887
+ query_conditions.append(player_condition)
1888
+
1889
+ # Combine all player conditions with $or
1890
+ if query_conditions:
1891
+ filter_query = {'$or': query_conditions}
1892
+ cursor1 = collection.find(filter_query).limit(math.ceil(lineup_num * (prio_mix / 100)))
1893
+ cursor2 = collection.find(filter_query).sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1894
+ else:
1895
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1896
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1897
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1898
+ else:
1899
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1900
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1901
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1902
+ else:
1903
+ cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
1904
+ raw_display = pd.DataFrame(list(cursor))
1905
+
1906
+ raw_display = raw_display.drop_duplicates(subset=['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'])
1907
+
1908
+ raw_display = raw_display[['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']]
1909
+ dict_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1910
+ # Map names
1911
+ raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
1912
+ elif slate_var == 'Secondary':
1913
+ collection = pga_db['FD_PGA_Classic_Secondary_name_map']
1914
+ cursor = collection.find()
1915
+ raw_data = pd.DataFrame(list(cursor))
1916
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
1917
+
1918
+ collection = pga_db['FD_PGA_Classic_seed_frame_Secondary Slate']
1919
+ if prio_var == None:
1920
+ if player_var2 != []:
1921
+ player_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1922
+ query_conditions = []
1923
+
1924
+ for player in player_var2:
1925
+ # Create a condition for each player to check if they appear in any column
1926
+ player_condition = {'$or': [{col: player} for col in player_columns]}
1927
+ query_conditions.append(player_condition)
1928
+
1929
+ # Combine all player conditions with $or
1930
+ if query_conditions:
1931
+ filter_query = {'$or': query_conditions}
1932
+ cursor1 = collection.find(filter_query).limit(math.ceil(lineup_num * (prio_mix / 100)))
1933
+ cursor2 = collection.find(filter_query).sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1934
+ else:
1935
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1936
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1937
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1938
+ else:
1939
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1940
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1941
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1942
+ else:
1943
+ cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
1944
+ raw_display = pd.DataFrame(list(cursor))
1945
+
1946
+ raw_display = raw_display.drop_duplicates(subset=['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'])
1947
+
1948
+ raw_display = raw_display[['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']]
1949
+ dict_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1950
+ # Map names
1951
+ raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
1952
+ elif slate_var == 'Auxiliary':
1953
+ collection = pga_db['FD_PGA_Classic_Late_name_map']
1954
+ cursor = collection.find()
1955
+ raw_data = pd.DataFrame(list(cursor))
1956
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
1957
+
1958
+ collection = pga_db['FD_PGA_Classic_seed_frame_Late Slate']
1959
+ if prio_var == None:
1960
+ if player_var2 != []:
1961
+ player_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1962
+ query_conditions = []
1963
+
1964
+ for player in player_var2:
1965
+ # Create a condition for each player to check if they appear in any column
1966
+ player_condition = {'$or': [{col: player} for col in player_columns]}
1967
+ query_conditions.append(player_condition)
1968
+
1969
+ # Combine all player conditions with $or
1970
+ if query_conditions:
1971
+ filter_query = {'$or': query_conditions}
1972
+ cursor1 = collection.find(filter_query).limit(math.ceil(lineup_num * (prio_mix / 100)))
1973
+ cursor2 = collection.find(filter_query).sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1974
+ else:
1975
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1976
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1977
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1978
+ else:
1979
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1980
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1981
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1982
+ else:
1983
+ cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
1984
+ raw_display = pd.DataFrame(list(cursor))
1985
+
1986
+ raw_display = raw_display.drop_duplicates(subset=['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'])
1987
+
1988
+ raw_display = raw_display[['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']]
1989
+ dict_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1990
+ # Map names
1991
+ raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
1992
+ elif type_var == 'Showdown':
1993
+ collection = pga_db['FD_PGA_Showdown_name_map']
1994
+ cursor = collection.find()
1995
+ raw_data = pd.DataFrame(list(cursor))
1996
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
1997
+
1998
+ collection = pga_db['FD_PGA_Showdown_seed_frame_Main Slate']
1999
+ if prio_var == None:
2000
+ if player_var2 != []:
2001
+ player_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
2002
+ query_conditions = []
2003
+
2004
+ for player in player_var2:
2005
+ # Create a condition for each player to check if they appear in any column
2006
+ player_condition = {'$or': [{col: player} for col in player_columns]}
2007
+ query_conditions.append(player_condition)
2008
+
2009
+ # Combine all player conditions with $or
2010
+ if query_conditions:
2011
+ filter_query = {'$or': query_conditions}
2012
+ cursor1 = collection.find(filter_query).limit(math.ceil(lineup_num * (prio_mix / 100)))
2013
+ cursor2 = collection.find(filter_query).sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
2014
+ else:
2015
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
2016
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
2017
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
2018
+ else:
2019
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
2020
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
2021
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
2022
+ else:
2023
+ cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
2024
+ raw_display = pd.DataFrame(list(cursor))
2025
+
2026
+ raw_display = raw_display.drop_duplicates(subset=['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'])
2027
+
2028
+ raw_display = raw_display[['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']]
2029
+ dict_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
2030
+ # Map names
2031
+ raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
2032
+
2033
+ FD_seed = raw_display.to_numpy()
2034
+
2035
  return FD_seed