James McCool commited on
Commit
548fe2e
·
1 Parent(s): 6a823c5

Adding MMA support

Browse files
Files changed (3) hide show
  1. app.py +137 -3
  2. database.py +3 -2
  3. database_queries.py +396 -0
app.py CHANGED
@@ -51,6 +51,12 @@ dk_db_nhl_showdown_selections = ['DK_NHL_SD_seed_frame_Showdown #1', 'DK_NHL_SD_
51
  fd_db_nhl_showdown_selections = ['FD_NHL_SD_seed_frame_Showdown #1', 'FD_NHL_SD_seed_frame_Showdown #2', 'FD_NHL_SD_seed_frame_Showdown #3', 'FD_NHL_SD_seed_frame_Showdown #4', 'FD_NHL_SD_seed_frame_Showdown #5', 'FD_NHL_SD_seed_frame_Showdown #6',
52
  'FD_NHL_SD_seed_frame_Showdown #7', 'FD_NHL_SD_seed_frame_Showdown #8', 'FD_NHL_SD_seed_frame_Showdown #9', 'FD_NHL_SD_seed_frame_Showdown #10', 'FD_NHL_SD_seed_frame_Showdown #11', 'FD_NHL_SD_seed_frame_Showdown #12', 'FD_NHL_SD_seed_frame_Showdown #13',
53
  'FD_NHL_SD_seed_frame_Showdown #14', 'FD_NHL_SD_seed_frame_Showdown #15']
 
 
 
 
 
 
54
 
55
  dk_nfl_showdown_db_translation = dict(zip(showdown_selections, dk_db_nfl_showdown_selections))
56
  fd_nfl_showdown_db_translation = dict(zip(showdown_selections, fd_db_nfl_showdown_selections))
@@ -58,6 +64,8 @@ dk_nba_showdown_db_translation = dict(zip(showdown_selections, dk_db_nba_showdow
58
  fd_nba_showdown_db_translation = dict(zip(showdown_selections, fd_db_nba_showdown_selections))
59
  dk_nhl_showdown_db_translation = dict(zip(showdown_selections, dk_db_nhl_showdown_selections))
60
  fd_nhl_showdown_db_translation = dict(zip(showdown_selections, fd_db_nhl_showdown_selections))
 
 
61
 
62
  freq_format = {'Finish_percentile': '{:.2%}', 'Lineup Edge': '{:.2%}', 'Lineup Edge_Raw': '{:.2%}', 'Win%': '{:.2%}'}
63
  stacking_sports = ['MLB', 'NHL', 'NFL', 'LOL', 'NCAAF']
@@ -311,6 +319,49 @@ def grab_nhl_showdown_salaries():
311
  records = records.rename(columns={'Display Name': 'Name', 'draftableId': 'ID', 'Position': 'Roster Position'})
312
  return records
313
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
314
  def define_dk_nfl_showdown_slates():
315
  collection = nfl_db["DK_SD_NFL_ROO"]
316
  cursor = collection.find()
@@ -447,6 +498,52 @@ except:
447
  nhl_slate_names_fd = []
448
  nhl_slate_name_lookup_fd = {}
449
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
450
  # Memory optimization helper functions
451
  def chunk_name_matching(portfolio_names, csv_names, chunk_size=1000):
452
  """Process name matching in chunks to reduce memory usage"""
@@ -826,6 +923,8 @@ with st.container():
826
  slate_var3 = st.radio("Which slate data are you loading?", (nfl_slate_names_dk if type_var == 'Showdown' else ['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
827
  elif sport_var == 'NHL':
828
  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')
 
 
829
  else:
830
  slate_var3 = st.radio("Which slate data are you loading?", (['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
831
  elif site_var == 'Fanduel':
@@ -835,6 +934,8 @@ with st.container():
835
  slate_var3 = st.radio("Which slate data are you loading?", (nfl_slate_names_fd if type_var == 'Showdown' else ['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
836
  elif sport_var == 'NHL':
837
  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')
 
 
838
  else:
839
  slate_var3 = st.radio("Which slate data are you loading?", (['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
840
 
@@ -881,6 +982,14 @@ with st.container():
881
  nhl_showdown_salaries = grab_nhl_showdown_salaries()
882
  except:
883
  nhl_showdown_salaries = None
 
 
 
 
 
 
 
 
884
 
885
  try:
886
  selected_tab = st.segmented_control(
@@ -935,6 +1044,11 @@ if selected_tab == 'Data Load':
935
  st.session_state['csv_file'] = load_csv(nhl_reg_salaries)
936
  elif type_var == 'Showdown':
937
  st.session_state['csv_file'] = load_csv(nhl_showdown_salaries)
 
 
 
 
 
938
  st.session_state['pricing_loaded'] = True
939
 
940
  try:
@@ -994,7 +1108,7 @@ if selected_tab == 'Data Load':
994
  with col2:
995
  st.subheader("Portfolio File")
996
  st.info("Go ahead and upload a portfolio file here. Only include player columns.")
997
- st.warning("Database load is active and in testing for NBA and NFL, both Classic and Regular")
998
 
999
  upload_toggle = st.selectbox("What source are you uploading from?", options=['Paydirt DB', 'SaberSim (Just IDs)', 'Draftkings/Fanduel (Names + IDs)', 'Other (Just Names)'])
1000
  if 'portfolio' not in st.session_state:
@@ -1009,6 +1123,8 @@ if selected_tab == 'Data Load':
1009
  portfolio_load = init_DK_NFL_lineups(type_var, slate_var3, prio_var, 50, dk_nfl_showdown_db_translation, lineup_num_var, [])
1010
  elif sport_var == 'NHL':
1011
  portfolio_load = init_DK_NHL_lineups(type_var, slate_var3, prio_var, 50, dk_nhl_showdown_db_translation, lineup_num_var, [])
 
 
1012
  else:
1013
  if sport_var == 'NBA':
1014
  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, [])
@@ -1016,6 +1132,9 @@ if selected_tab == 'Data Load':
1016
  portfolio_load = init_DK_NFL_lineups(type_var, nfl_slate_name_lookup_dk[slate_var3], prio_var, 50, dk_nfl_showdown_db_translation, lineup_num_var, [])
1017
  elif sport_var == 'NHL':
1018
  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, [])
 
 
 
1019
  st.session_state['db_portfolio_file'] = pd.DataFrame(portfolio_load)
1020
  st.session_state['portfolio_loaded'] = True
1021
  if 'portfolio' in st.session_state:
@@ -1030,6 +1149,8 @@ if selected_tab == 'Data Load':
1030
  portfolio_load = init_FD_NFL_lineups(type_var, slate_var3, prio_var, 50, fd_nfl_showdown_db_translation, lineup_num_var, [])
1031
  elif sport_var == 'NHL':
1032
  portfolio_load = init_FD_NHL_lineups(type_var, slate_var3, prio_var, 50, fd_nhl_showdown_db_translation, lineup_num_var, [])
 
 
1033
  else:
1034
  if sport_var == 'NBA':
1035
  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, [])
@@ -1037,6 +1158,9 @@ if selected_tab == 'Data Load':
1037
  portfolio_load = init_FD_NFL_lineups(type_var, nfl_slate_name_lookup_fd[slate_var3], prio_var, 50, fd_nfl_showdown_db_translation, lineup_num_var, [])
1038
  elif sport_var == 'NHL':
1039
  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, [])
 
 
 
1040
  st.session_state['db_portfolio_file'] = pd.DataFrame(portfolio_load)
1041
  st.session_state['portfolio_loaded'] = True
1042
  if 'portfolio' in st.session_state:
@@ -1122,10 +1246,9 @@ if selected_tab == 'Data Load':
1122
  with col3:
1123
  st.subheader("Projections File")
1124
  st.info("upload a projections file that has 'player_names', 'salary', 'median', 'ownership', and 'captain ownership' columns. Note that the salary for showdown needs to be the FLEX salary, not the captain salary.")
1125
- st.warning("Database load is active and in testing for NBA and NFL, both Classic and Regular")
1126
  proj_options = st.selectbox("Select a projections source", options=['Paydirt DB', 'User Upload'])
1127
 
1128
-
1129
  # Create two columns for the uploader and template button
1130
  upload_col, template_col = st.columns([3, 1])
1131
 
@@ -1171,6 +1294,17 @@ if selected_tab == 'Data Load':
1171
  projections_file = init_nhl_baselines(type_var, site_var, slate_var3)[1]
1172
  elif type_var == 'Showdown':
1173
  projections_file = init_nhl_baselines(type_var, site_var, slate_var3)[3]
 
 
 
 
 
 
 
 
 
 
 
1174
  st.session_state['db_projections_file'] = projections_file
1175
  st.session_state['projections_loaded'] = True
1176
  if 'projections_df' in st.session_state:
 
51
  fd_db_nhl_showdown_selections = ['FD_NHL_SD_seed_frame_Showdown #1', 'FD_NHL_SD_seed_frame_Showdown #2', 'FD_NHL_SD_seed_frame_Showdown #3', 'FD_NHL_SD_seed_frame_Showdown #4', 'FD_NHL_SD_seed_frame_Showdown #5', 'FD_NHL_SD_seed_frame_Showdown #6',
52
  'FD_NHL_SD_seed_frame_Showdown #7', 'FD_NHL_SD_seed_frame_Showdown #8', 'FD_NHL_SD_seed_frame_Showdown #9', 'FD_NHL_SD_seed_frame_Showdown #10', 'FD_NHL_SD_seed_frame_Showdown #11', 'FD_NHL_SD_seed_frame_Showdown #12', 'FD_NHL_SD_seed_frame_Showdown #13',
53
  'FD_NHL_SD_seed_frame_Showdown #14', 'FD_NHL_SD_seed_frame_Showdown #15']
54
+ dk_db_mma_showdown_selections = ['DK_MMA_SD_seed_frame_Showdown #1', 'DK_MMA_SD_seed_frame_Showdown #2', 'DK_MMA_SD_seed_frame_Showdown #3', 'DK_MMA_SD_seed_frame_Showdown #4', 'DK_MMA_SD_seed_frame_Showdown #5', 'DK_MMA_SD_seed_frame_Showdown #6',
55
+ 'DK_MMA_SD_seed_frame_Showdown #7', 'DK_MMA_SD_seed_frame_Showdown #8', 'DK_MMA_SD_seed_frame_Showdown #9', 'DK_MMA_SD_seed_frame_Showdown #10', 'DK_MMA_SD_seed_frame_Showdown #11', 'DK_MMA_SD_seed_frame_Showdown #12', 'DK_MMA_SD_seed_frame_Showdown #13',
56
+ 'DK_MMA_SD_seed_frame_Showdown #14', 'DK_MMA_SD_seed_frame_Showdown #15']
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))
 
64
  fd_nba_showdown_db_translation = dict(zip(showdown_selections, fd_db_nba_showdown_selections))
65
  dk_nhl_showdown_db_translation = dict(zip(showdown_selections, dk_db_nhl_showdown_selections))
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']
 
319
  records = records.rename(columns={'Display Name': 'Name', 'draftableId': 'ID', 'Position': 'Roster Position'})
320
  return records
321
 
322
+ def grab_mma_reg_salaries(slate_var: str):
323
+ collection = salaries_db["MMA_reg_player_info"]
324
+ eastern = pytz.timezone('US/Eastern')
325
+ today_str = datetime.now(eastern).strftime("%Y%m%d")
326
+ records = pd.DataFrame(list(collection.find({'Date': {'$gte': today_str}})))
327
+ records = records[['Display Name', 'draftableId', 'Position', 'Salary']]
328
+ records = records.rename(columns={'Display Name': 'Name', 'draftableId': 'ID', 'Position': 'Roster Position'})
329
+ if slate_var == 'Main':
330
+ records = records.sort_values(by='ID', ascending=True)
331
+ records = records.drop_duplicates(subset=['Name'], keep='first')
332
+ elif slate_var == 'Secondary':
333
+ records = records.sort_values(by='ID', ascending=True)
334
+ # Keep middle occurrence: drop first and last, keep middle
335
+ grouped = records.groupby('Name')
336
+ middle_records = []
337
+ for name, group in grouped:
338
+ if len(group) == 1:
339
+ # Only one record, keep it
340
+ middle_records.append(group)
341
+ elif len(group) == 2:
342
+ # Two records, keep the second one (last)
343
+ middle_records.append(group.iloc[1:2])
344
+ else:
345
+ # Three or more records, keep the middle one(s)
346
+ # For odd number of records, keep the true middle
347
+ # For even number of records, keep the record at index len//2
348
+ middle_idx = len(group) // 2
349
+ middle_records.append(group.iloc[middle_idx:middle_idx+1])
350
+ records = pd.concat(middle_records, ignore_index=True)
351
+ elif slate_var == 'Auxiliary':
352
+ records = records.sort_values(by='ID', ascending=True)
353
+ records = records.drop_duplicates(subset=['Name'], keep='last')
354
+ return records
355
+
356
+ 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
364
+
365
  def define_dk_nfl_showdown_slates():
366
  collection = nfl_db["DK_SD_NFL_ROO"]
367
  cursor = collection.find()
 
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"""
 
923
  slate_var3 = st.radio("Which slate data are you loading?", (nfl_slate_names_dk if type_var == 'Showdown' else ['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
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':
 
934
  slate_var3 = st.radio("Which slate data are you loading?", (nfl_slate_names_fd if type_var == 'Showdown' else ['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
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
 
 
982
  nhl_showdown_salaries = grab_nhl_showdown_salaries()
983
  except:
984
  nhl_showdown_salaries = None
985
+ try:
986
+ mma_reg_salaries = grab_mma_reg_salaries(slate_var3)
987
+ except:
988
+ mma_reg_salaries = None
989
+ try:
990
+ mma_showdown_salaries = grab_mma_showdown_salaries()
991
+ except:
992
+ mma_showdown_salaries = None
993
 
994
  try:
995
  selected_tab = st.segmented_control(
 
1044
  st.session_state['csv_file'] = load_csv(nhl_reg_salaries)
1045
  elif type_var == 'Showdown':
1046
  st.session_state['csv_file'] = load_csv(nhl_showdown_salaries)
1047
+ elif sport_var == 'MMA':
1048
+ if type_var == 'Classic':
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:
 
1108
  with col2:
1109
  st.subheader("Portfolio File")
1110
  st.info("Go ahead and upload a portfolio file here. Only include player columns.")
1111
+ st.warning("Database load is active and in testing for NBA, NFL, NHL, and MMA, both Classic and Regular")
1112
 
1113
  upload_toggle = st.selectbox("What source are you uploading from?", options=['Paydirt DB', 'SaberSim (Just IDs)', 'Draftkings/Fanduel (Names + IDs)', 'Other (Just Names)'])
1114
  if 'portfolio' not in st.session_state:
 
1123
  portfolio_load = init_DK_NFL_lineups(type_var, slate_var3, prio_var, 50, dk_nfl_showdown_db_translation, lineup_num_var, [])
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, [])
 
1132
  portfolio_load = init_DK_NFL_lineups(type_var, nfl_slate_name_lookup_dk[slate_var3], prio_var, 50, dk_nfl_showdown_db_translation, lineup_num_var, [])
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
1140
  if 'portfolio' in st.session_state:
 
1149
  portfolio_load = init_FD_NFL_lineups(type_var, slate_var3, prio_var, 50, fd_nfl_showdown_db_translation, lineup_num_var, [])
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, [])
 
1158
  portfolio_load = init_FD_NFL_lineups(type_var, nfl_slate_name_lookup_fd[slate_var3], prio_var, 50, fd_nfl_showdown_db_translation, lineup_num_var, [])
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
1166
  if 'portfolio' in st.session_state:
 
1246
  with col3:
1247
  st.subheader("Projections File")
1248
  st.info("upload a projections file that has 'player_names', 'salary', 'median', 'ownership', and 'captain ownership' columns. Note that the salary for showdown needs to be the FLEX salary, not the captain salary.")
1249
+ st.warning("Database load is active and in testing for NBA, NFL, NHL, and MMA, both Classic and Regular")
1250
  proj_options = st.selectbox("Select a projections source", options=['Paydirt DB', 'User Upload'])
1251
 
 
1252
  # Create two columns for the uploader and template button
1253
  upload_col, template_col = st.columns([3, 1])
1254
 
 
1294
  projections_file = init_nhl_baselines(type_var, site_var, slate_var3)[1]
1295
  elif type_var == 'Showdown':
1296
  projections_file = init_nhl_baselines(type_var, site_var, slate_var3)[3]
1297
+ elif sport_var == 'MMA':
1298
+ if site_var == 'Draftkings':
1299
+ if type_var == 'Classic':
1300
+ projections_file = init_mma_baselines(type_var, site_var, slate_var3)[0]
1301
+ elif type_var == 'Showdown':
1302
+ projections_file = init_mma_baselines(type_var, site_var, slate_var3)[2]
1303
+ elif site_var == 'Fanduel':
1304
+ if type_var == 'Classic':
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:
database.py CHANGED
@@ -14,7 +14,8 @@ def init_conn():
14
  nba_db = client["NBA_Database"]
15
  mlb_db = client["MLB_Database"]
16
  nhl_db = client["NHL_Database"]
 
17
 
18
- return nfl_db, salaries_db, nba_db, mlb_db, nhl_db
19
 
20
- nfl_db, salaries_db, nba_db, mlb_db, nhl_db = init_conn()
 
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()
database_queries.py CHANGED
@@ -1226,4 +1226,400 @@ def init_FD_NHL_lineups(type_var, slate_var, prio_var, prio_mix, nhl_db_translat
1226
 
1227
  FD_seed = raw_display.to_numpy()
1228
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1229
  return FD_seed
 
1226
 
1227
  FD_seed = raw_display.to_numpy()
1228
 
1229
+ return FD_seed
1230
+
1231
+ def init_mma_baselines(type_var: str, site_var: str, slate_var: str):
1232
+
1233
+ if slate_var == 'Main':
1234
+ slate_var = 'Main Slate'
1235
+ elif slate_var == 'Secondary':
1236
+ slate_var = 'Secondary Slate'
1237
+ elif slate_var == 'Auxiliary':
1238
+ slate_var = 'Late Slate'
1239
+
1240
+ if type_var == 'Showdown':
1241
+ collection = nhl_db["Player_Level_SD_ROO"]
1242
+ cursor = collection.find()
1243
+
1244
+ raw_display = pd.DataFrame(list(cursor))
1245
+ raw_display = raw_display[['Player', 'Position', 'Team', 'Salary', 'Median', 'Own', 'CPT_Own', 'player_id', 'slate', 'site', 'version', 'timestamp']]
1246
+ raw_display['Median'] = raw_display['Median'].replace('', 0).astype(float)
1247
+ raw_display = raw_display.rename(columns={"player_id": "player_ID"})
1248
+ raw_display = raw_display.loc[raw_display['Median'] > 0]
1249
+ raw_display = raw_display.apply(pd.to_numeric, errors='ignore')
1250
+ sd_raw = raw_display.sort_values(by='Median', ascending=False)
1251
+ dk_sd_roo_raw = sd_raw[sd_raw['site'] == 'Draftkings']
1252
+ dk_sd_id_map = dict(zip(dk_sd_roo_raw['Player'], dk_sd_roo_raw['player_ID']))
1253
+ fd_sd_roo_raw = sd_raw[sd_raw['site'] == 'Fanduel']
1254
+ fd_sd_id_map = dict(zip(fd_sd_roo_raw['Player'], fd_sd_roo_raw['player_ID']))
1255
+ fd_sd_roo_raw['player_ID'] = fd_sd_roo_raw['player_ID'].astype(str)
1256
+ fd_sd_roo_raw['player_ID'] = fd_sd_roo_raw['player_ID'].str.rsplit('-', n=1).str[0].astype(str)
1257
+
1258
+ dk_sd_roo_raw = dk_sd_roo_raw.drop(columns=['player_ID', 'slate', 'version', 'timestamp', 'site'])
1259
+ fd_sd_roo_raw = fd_sd_roo_raw.drop(columns=['player_ID', 'slate', 'version', 'timestamp', 'site'])
1260
+
1261
+ 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'})
1262
+ 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'})
1263
+
1264
+ dk_roo_raw = None
1265
+ fd_roo_raw = None
1266
+ dk_id_map = None
1267
+ fd_id_map = None
1268
+
1269
+ else:
1270
+ collection = nhl_db["Player_Level_ROO"]
1271
+ cursor = collection.find()
1272
+
1273
+ raw_display = pd.DataFrame(list(cursor))
1274
+ raw_display = raw_display[['Player', 'Position', 'Salary', 'Median', 'Own', 'player_id']]
1275
+ raw_display['Team'] = 'MMA'
1276
+ raw_display['Site'] = site_var
1277
+ raw_display = raw_display.rename(columns={"player_id": "player_ID"})
1278
+ raw_display['Median'] = raw_display['Median'].replace('', 0).astype(float)
1279
+ raw_display = raw_display.loc[raw_display['Median'] > 0]
1280
+ dk_roo_raw = raw_display[raw_display['Site'] == 'Draftkings']
1281
+ fd_roo_raw = raw_display[raw_display['Site'] == 'Draftkings']
1282
+ dk_id_map = dict(zip(dk_roo_raw['Player'], dk_roo_raw['player_ID']))
1283
+ fd_id_map = dict(zip(fd_roo_raw['Player'], fd_roo_raw['player_ID']))
1284
+ raw_display = raw_display.apply(pd.to_numeric, errors='ignore')
1285
+
1286
+ dk_roo_raw = dk_roo_raw.drop(columns=['player_ID'])
1287
+ fd_roo_raw = fd_roo_raw.drop(columns=['player_ID'])
1288
+
1289
+ 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'})
1290
+ 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'})
1291
+
1292
+ dk_sd_roo_raw = None
1293
+ fd_sd_roo_raw = None
1294
+ dk_sd_id_map = None
1295
+ fd_sd_id_map = 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, mma_db_translation, lineup_num, player_var2):
1300
+
1301
+ if prio_var == 'Mix':
1302
+ prio_var = None
1303
+
1304
+ if type_var == 'Classic':
1305
+ if slate_var == 'Main':
1306
+ collection = nhl_db['DK_MMA_name_map']
1307
+ cursor = collection.find()
1308
+ raw_data = pd.DataFrame(list(cursor))
1309
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
1310
+
1311
+ collection = nhl_db['DK_MMA_seed_frame_Main Slate']
1312
+ if prio_var == None:
1313
+ if player_var2 != []:
1314
+ player_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1315
+ query_conditions = []
1316
+
1317
+ for player in player_var2:
1318
+ # Create a condition for each player to check if they appear in any column
1319
+ player_condition = {'$or': [{col: player} for col in player_columns]}
1320
+ query_conditions.append(player_condition)
1321
+
1322
+ # Combine all player conditions with $or
1323
+ if query_conditions:
1324
+ filter_query = {'$or': query_conditions}
1325
+ cursor1 = collection.find(filter_query).limit(math.ceil(lineup_num * (prio_mix / 100)))
1326
+ cursor2 = collection.find(filter_query).sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1327
+ else:
1328
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1329
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1330
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1331
+ else:
1332
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1333
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1334
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1335
+ else:
1336
+ cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
1337
+ raw_display = pd.DataFrame(list(cursor))
1338
+
1339
+ raw_display = raw_display.drop_duplicates(subset=['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'])
1340
+
1341
+ raw_display = raw_display[['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']]
1342
+ dict_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1343
+ # Map names
1344
+ raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
1345
+ elif slate_var == 'Secondary':
1346
+ collection = nhl_db['DK_MMA_Secondary_name_map']
1347
+ cursor = collection.find()
1348
+ raw_data = pd.DataFrame(list(cursor))
1349
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
1350
+
1351
+ collection = nhl_db['DK_MMA_seed_frame_Secondary Slate']
1352
+ if prio_var == None:
1353
+ if player_var2 != []:
1354
+ player_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1355
+ query_conditions = []
1356
+
1357
+ for player in player_var2:
1358
+ # Create a condition for each player to check if they appear in any column
1359
+ player_condition = {'$or': [{col: player} for col in player_columns]}
1360
+ query_conditions.append(player_condition)
1361
+
1362
+ # Combine all player conditions with $or
1363
+ if query_conditions:
1364
+ filter_query = {'$or': query_conditions}
1365
+ cursor1 = collection.find(filter_query).limit(math.ceil(lineup_num * (prio_mix / 100)))
1366
+ cursor2 = collection.find(filter_query).sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1367
+ else:
1368
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1369
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1370
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1371
+ else:
1372
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1373
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1374
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1375
+ else:
1376
+ cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
1377
+ raw_display = pd.DataFrame(list(cursor))
1378
+
1379
+ raw_display = raw_display.drop_duplicates(subset=['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'])
1380
+
1381
+ raw_display = raw_display[['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']]
1382
+ dict_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1383
+ # Map names
1384
+ raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
1385
+ elif slate_var == 'Auxiliary':
1386
+ collection = nhl_db['DK_MMA_Late_name_map']
1387
+ cursor = collection.find()
1388
+ raw_data = pd.DataFrame(list(cursor))
1389
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
1390
+
1391
+ collection = nhl_db['DK_MMA_seed_frame_Late Slate']
1392
+ if prio_var == None:
1393
+ if player_var2 != []:
1394
+ player_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1395
+ query_conditions = []
1396
+
1397
+ for player in player_var2:
1398
+ # Create a condition for each player to check if they appear in any column
1399
+ player_condition = {'$or': [{col: player} for col in player_columns]}
1400
+ query_conditions.append(player_condition)
1401
+
1402
+ # Combine all player conditions with $or
1403
+ if query_conditions:
1404
+ filter_query = {'$or': query_conditions}
1405
+ cursor1 = collection.find(filter_query).limit(math.ceil(lineup_num * (prio_mix / 100)))
1406
+ cursor2 = collection.find(filter_query).sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1407
+ else:
1408
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1409
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1410
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1411
+ else:
1412
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1413
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1414
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1415
+ else:
1416
+ cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
1417
+ raw_display = pd.DataFrame(list(cursor))
1418
+
1419
+ raw_display = raw_display.drop_duplicates(subset=['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'])
1420
+
1421
+ raw_display = raw_display[['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']]
1422
+ dict_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1423
+ # Map names
1424
+ raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
1425
+ elif type_var == 'Showdown':
1426
+ collection = nhl_db[mma_db_translation[slate_var]]
1427
+ if prio_var == None:
1428
+ if player_var2 != []:
1429
+ player_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']
1430
+ query_conditions = []
1431
+
1432
+ for player in player_var2:
1433
+ # Create a condition for each player to check if they appear in any column
1434
+ player_condition = {'$or': [{col: player} for col in player_columns]}
1435
+ query_conditions.append(player_condition)
1436
+
1437
+ # Combine all player conditions with $or
1438
+ if query_conditions:
1439
+ filter_query = {'$or': query_conditions}
1440
+ cursor1 = collection.find(filter_query).limit(math.ceil(lineup_num * (prio_mix / 100)))
1441
+ cursor2 = collection.find(filter_query).sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1442
+ else:
1443
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1444
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1445
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1446
+ else:
1447
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1448
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1449
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1450
+ else:
1451
+ cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
1452
+ raw_display = pd.DataFrame(list(cursor))
1453
+
1454
+ raw_display = raw_display.drop_duplicates(subset=['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'])
1455
+
1456
+ raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']]
1457
+
1458
+ DK_seed = raw_display.to_numpy()
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
1466
+
1467
+ if type_var == 'Classic':
1468
+ if slate_var == 'Main':
1469
+ collection = nhl_db['FD_MMA_name_map']
1470
+ cursor = collection.find()
1471
+ raw_data = pd.DataFrame(list(cursor))
1472
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
1473
+
1474
+
1475
+ collection = nhl_db['FD_MMA_seed_frame_Main Slate']
1476
+ if prio_var == None:
1477
+ if player_var2 != []:
1478
+ player_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1479
+ query_conditions = []
1480
+
1481
+ for player in player_var2:
1482
+ # Create a condition for each player to check if they appear in any column
1483
+ player_condition = {'$or': [{col: player} for col in player_columns]}
1484
+ query_conditions.append(player_condition)
1485
+
1486
+ # Combine all player conditions with $or
1487
+ if query_conditions:
1488
+ filter_query = {'$or': query_conditions}
1489
+ cursor1 = collection.find(filter_query).limit(math.ceil(lineup_num * (prio_mix / 100)))
1490
+ cursor2 = collection.find(filter_query).sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1491
+ else:
1492
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1493
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1494
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1495
+ else:
1496
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1497
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1498
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1499
+ else:
1500
+ cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
1501
+ raw_display = pd.DataFrame(list(cursor))
1502
+
1503
+ raw_display = raw_display.drop_duplicates(subset=['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'])
1504
+
1505
+ raw_display = raw_display[['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']]
1506
+ dict_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1507
+ # Map names
1508
+ raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
1509
+ elif slate_var == 'Secondary':
1510
+ collection = nhl_db['FD_MMA_Secondary_name_map']
1511
+ cursor = collection.find()
1512
+ raw_data = pd.DataFrame(list(cursor))
1513
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
1514
+
1515
+ collection = nhl_db['FD_MMA_Secondary_seed_frame_Secondary Slate']
1516
+ if prio_var == None:
1517
+ if player_var2 != []:
1518
+ player_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1519
+ query_conditions = []
1520
+
1521
+ for player in player_var2:
1522
+ # Create a condition for each player to check if they appear in any column
1523
+ player_condition = {'$or': [{col: player} for col in player_columns]}
1524
+ query_conditions.append(player_condition)
1525
+
1526
+ # Combine all player conditions with $or
1527
+ if query_conditions:
1528
+ filter_query = {'$or': query_conditions}
1529
+ cursor1 = collection.find(filter_query).limit(math.ceil(lineup_num * (prio_mix / 100)))
1530
+ cursor2 = collection.find(filter_query).sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1531
+ else:
1532
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1533
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1534
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1535
+ else:
1536
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1537
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1538
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1539
+ else:
1540
+ cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
1541
+ raw_display = pd.DataFrame(list(cursor))
1542
+
1543
+ raw_display = raw_display.drop_duplicates(subset=['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'])
1544
+
1545
+ raw_display = raw_display[['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']]
1546
+ dict_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1547
+ # Map names
1548
+ raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
1549
+ elif slate_var == 'Auxiliary':
1550
+ collection = nhl_db['FD_MMA_Late_name_map']
1551
+ cursor = collection.find()
1552
+ raw_data = pd.DataFrame(list(cursor))
1553
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
1554
+
1555
+ collection = nhl_db['FD_MMA_Late_seed_frame_Late Slate']
1556
+ if prio_var == None:
1557
+ if player_var2 != []:
1558
+ player_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1559
+ query_conditions = []
1560
+
1561
+ for player in player_var2:
1562
+ # Create a condition for each player to check if they appear in any column
1563
+ player_condition = {'$or': [{col: player} for col in player_columns]}
1564
+ query_conditions.append(player_condition)
1565
+
1566
+ # Combine all player conditions with $or
1567
+ if query_conditions:
1568
+ filter_query = {'$or': query_conditions}
1569
+ cursor1 = collection.find(filter_query).limit(math.ceil(lineup_num * (prio_mix / 100)))
1570
+ cursor2 = collection.find(filter_query).sort('Own', -1).limit(math.ceil(lineup_num = ((100 - prio_mix) / 100)))
1571
+ else:
1572
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1573
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1574
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1575
+ else:
1576
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1577
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1578
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1579
+ else:
1580
+ cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
1581
+ raw_display = pd.DataFrame(list(cursor))
1582
+
1583
+ raw_display = raw_display.drop_duplicates(subset=['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'])
1584
+
1585
+ raw_display = raw_display[['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']]
1586
+ dict_columns = ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6']
1587
+ # Map names
1588
+ raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
1589
+
1590
+ elif type_var == 'Showdown':
1591
+ collection = nhl_db[mma_db_translation[slate_var]]
1592
+ if prio_var == None:
1593
+ if player_var2 != []:
1594
+ player_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']
1595
+ query_conditions = []
1596
+
1597
+ for player in player_var2:
1598
+ # Create a condition for each player to check if they appear in any column
1599
+ player_condition = {'$or': [{col: player} for col in player_columns]}
1600
+ query_conditions.append(player_condition)
1601
+
1602
+ # Combine all player conditions with $or
1603
+ if query_conditions:
1604
+ filter_query = {'$or': query_conditions}
1605
+ cursor1 = collection.find(filter_query).limit(math.ceil(lineup_num * (prio_mix / 100)))
1606
+ cursor2 = collection.find(filter_query).sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1607
+ else:
1608
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1609
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1610
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1611
+ else:
1612
+ cursor1 = collection.find().limit(math.ceil(lineup_num * (prio_mix / 100)))
1613
+ cursor2 = collection.find().sort('Own', -1).limit(math.ceil(lineup_num * ((100 - prio_mix) / 100)))
1614
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
1615
+ else:
1616
+ cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
1617
+ raw_display = pd.DataFrame(list(cursor))
1618
+
1619
+ raw_display = raw_display.drop_duplicates(subset=['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'])
1620
+
1621
+ raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']]
1622
+
1623
+ FD_seed = raw_display.to_numpy()
1624
+
1625
  return FD_seed