Spaces:
Build error
Build error
James McCool commited on
Commit ·
68a1d9b
1
Parent(s): aa2e2bd
Adding PGA functionality
Browse files- app.py +102 -61
- database.py +4 -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?", (
|
|
|
|
|
|
|
| 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?", (
|
|
|
|
|
|
|
| 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,
|
|
|
|
|
|
|
| 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,
|
|
|
|
|
|
|
| 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,
|
|
|
|
|
|
|
| 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,
|
|
|
|
|
|
|
| 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,
|
| 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,
|
| 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
|