James McCool
commited on
Commit
·
525cd79
1
Parent(s):
e2fd337
Add user-configurable options for lineup generation in Data Load tab
Browse filesIntroduced an "Info and Filters" expander that allows users to set priority variables, lineup counts, and salary constraints for both Draftkings and Fanduel. Updated the lineup loading functions to utilize these new parameters, enhancing customization and user experience in lineup generation.
- app.py +34 -2
- database_queries.py +44 -0
app.py
CHANGED
|
@@ -480,6 +480,38 @@ with st.container():
|
|
| 480 |
elif type_var == 'Showdown':
|
| 481 |
salary_max = 60000
|
| 482 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 483 |
try:
|
| 484 |
selected_tab = st.segmented_control(
|
| 485 |
"Select Tab",
|
|
@@ -565,7 +597,7 @@ if selected_tab == 'Data Load':
|
|
| 565 |
if upload_toggle == 'Paydirt DB':
|
| 566 |
if st.button("Load from Database after inserting site CSV"):
|
| 567 |
if site_var == 'Draftkings':
|
| 568 |
-
portfolio_load = init_DK_NFL_lineups(type_var, 'Main',
|
| 569 |
st.session_state['db_portfolio_file'] = pd.DataFrame(portfolio_load)
|
| 570 |
st.session_state['portfolio_loaded'] = True
|
| 571 |
if 'portfolio' in st.session_state:
|
|
@@ -573,7 +605,7 @@ if selected_tab == 'Data Load':
|
|
| 573 |
if 'export_portfolio' in st.session_state:
|
| 574 |
del st.session_state['export_portfolio']
|
| 575 |
else:
|
| 576 |
-
portfolio_load = init_FD_NFL_lineups(type_var, 'Main',
|
| 577 |
st.session_state['db_portfolio_file'] = pd.DataFrame(portfolio_load)
|
| 578 |
st.session_state['portfolio_loaded'] = True
|
| 579 |
if 'portfolio' in st.session_state:
|
|
|
|
| 480 |
elif type_var == 'Showdown':
|
| 481 |
salary_max = 60000
|
| 482 |
|
| 483 |
+
with st.expander("Info and Filters"):
|
| 484 |
+
prio_col, optimals_site_col, optimals_macro_col, optimals_salary_col, optimals_stacks_col = st.columns(5)
|
| 485 |
+
|
| 486 |
+
with prio_col:
|
| 487 |
+
prio_var = st.radio("Which priority variable do you want to use?", ('proj', 'Own', 'Mix'), key='prio_var_radio')
|
| 488 |
+
prio_mix = st.number_input("If Mix, what split of Projection/Ownership to dedicate to Projection?", min_value=0, max_value=100, value=50, step=1)
|
| 489 |
+
lineup_num = st.number_input("How many lineups do you want to work with?", min_value=1000, max_value=50000, value=25000, step=100, key='lineup_download_var_input')
|
| 490 |
+
|
| 491 |
+
with optimals_site_col:
|
| 492 |
+
if site_var == 'Draftkings':
|
| 493 |
+
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')
|
| 494 |
+
elif site_var == 'Fanduel':
|
| 495 |
+
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')
|
| 496 |
+
|
| 497 |
+
with optimals_macro_col:
|
| 498 |
+
lineup_num_var = st.number_input("How many lineups do you want to display?", min_value=1, max_value=1000, value=150, step=1, key='lineup_num_var_input')
|
| 499 |
+
|
| 500 |
+
with optimals_salary_col:
|
| 501 |
+
if site_var == 'Draftkings':
|
| 502 |
+
salary_min_var = st.number_input("Minimum salary used", min_value = 0, max_value = 50000, value = 49000, step = 100, key = 'salary_min_var_dk')
|
| 503 |
+
salary_max_var = st.number_input("Maximum salary used", min_value = 0, max_value = 50000, value = 50000, step = 100, key = 'salary_max_var_dk')
|
| 504 |
+
elif site_var == 'Fanduel':
|
| 505 |
+
salary_min_var = st.number_input("Minimum salary used", min_value = 0, max_value = 60000, value = 59000, step = 100, key = 'salary_min_var_fd')
|
| 506 |
+
salary_max_var = st.number_input("Maximum salary used", min_value = 0, max_value = 60000, value = 60000, step = 100, key = 'salary_max_var_fd')
|
| 507 |
+
with optimals_stacks_col:
|
| 508 |
+
if site_var == 'Draftkings':
|
| 509 |
+
min_stacks_var = st.number_input("Minimum stacks used", min_value = 0, max_value = 5, value = 1, step = 1, key = 'min_stacks_var_dk')
|
| 510 |
+
max_stacks_var = st.number_input("Maximum stacks used", min_value = 0, max_value = 5, value = 5, step = 1, key = 'max_stacks_var_dk')
|
| 511 |
+
elif site_var == 'Fanduel':
|
| 512 |
+
min_stacks_var = st.number_input("Minimum stacks used", min_value = 0, max_value = 4, value = 1, step = 1, key = 'min_stacks_var_fd')
|
| 513 |
+
max_stacks_var = st.number_input("Maximum stacks used", min_value = 0, max_value = 4, value = 4, step = 1, key = 'max_stacks_var_fd')
|
| 514 |
+
|
| 515 |
try:
|
| 516 |
selected_tab = st.segmented_control(
|
| 517 |
"Select Tab",
|
|
|
|
| 597 |
if upload_toggle == 'Paydirt DB':
|
| 598 |
if st.button("Load from Database after inserting site CSV"):
|
| 599 |
if site_var == 'Draftkings':
|
| 600 |
+
portfolio_load = init_DK_NFL_lineups(type_var, 'Main', prio_var, 50, dk_nfl_showdown_db_translation, lineup_num_var, [])
|
| 601 |
st.session_state['db_portfolio_file'] = pd.DataFrame(portfolio_load)
|
| 602 |
st.session_state['portfolio_loaded'] = True
|
| 603 |
if 'portfolio' in st.session_state:
|
|
|
|
| 605 |
if 'export_portfolio' in st.session_state:
|
| 606 |
del st.session_state['export_portfolio']
|
| 607 |
else:
|
| 608 |
+
portfolio_load = init_FD_NFL_lineups(type_var, 'Main', prio_var, 50, fd_nfl_showdown_db_translation, lineup_num_var, [])
|
| 609 |
st.session_state['db_portfolio_file'] = pd.DataFrame(portfolio_load)
|
| 610 |
st.session_state['portfolio_loaded'] = True
|
| 611 |
if 'portfolio' in st.session_state:
|
database_queries.py
CHANGED
|
@@ -13,6 +13,50 @@ right_nfl_name_teams = ['Broncos', 'Commanders', 'Bengals', 'Cardinals', 'Rams',
|
|
| 13 |
'Jets', 'Colts', 'Dolphins', 'Lions', 'Raiders', 'Falcons', 'Seahawks', 'Texans', 'Saints', 'Panthers', 'Giants', 'Browns', 'Titans', 'Eagles', 'Cowboys',
|
| 14 |
'Chiefs', 'Chargers', 'Ravens', 'Bills', 'Vikings', 'Bears']
|
| 15 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
def init_nfl_baselines(type_var: str, site_var: str, slate_var: str):
|
| 17 |
|
| 18 |
if type_var == 'Classic':
|
|
|
|
| 13 |
'Jets', 'Colts', 'Dolphins', 'Lions', 'Raiders', 'Falcons', 'Seahawks', 'Texans', 'Saints', 'Panthers', 'Giants', 'Browns', 'Titans', 'Eagles', 'Cowboys',
|
| 14 |
'Chiefs', 'Chargers', 'Ravens', 'Bills', 'Vikings', 'Bears']
|
| 15 |
|
| 16 |
+
def define_dk_nfl_showdown_slates():
|
| 17 |
+
collection = nfl_db["DK_SD_NFL_ROO"]
|
| 18 |
+
cursor = collection.find()
|
| 19 |
+
raw_display = pd.DataFrame(list(cursor))
|
| 20 |
+
unique_slates = raw_display['slate'].unique()
|
| 21 |
+
|
| 22 |
+
slate_names = []
|
| 23 |
+
|
| 24 |
+
for slate in unique_slates:
|
| 25 |
+
slate_data = raw_display[raw_display['slate'] == slate]
|
| 26 |
+
slate_name = slate_data.iloc[0]['Team'] + ' vs. ' + slate_data.iloc[0]['Opp']
|
| 27 |
+
slate_names.append(slate_name)
|
| 28 |
+
|
| 29 |
+
slate_name_lookup = dict(zip(slate_names, unique_slates))
|
| 30 |
+
return slate_names, slate_name_lookup
|
| 31 |
+
|
| 32 |
+
def define_fd_nfl_showdown_slates():
|
| 33 |
+
collection = nfl_db["FD_SD_NFL_ROO"]
|
| 34 |
+
cursor = collection.find()
|
| 35 |
+
raw_display = pd.DataFrame(list(cursor))
|
| 36 |
+
unique_slates = raw_display['slate'].unique()
|
| 37 |
+
|
| 38 |
+
slate_names = []
|
| 39 |
+
|
| 40 |
+
for slate in unique_slates:
|
| 41 |
+
slate_data = raw_display[raw_display['slate'] == slate]
|
| 42 |
+
slate_name = slate_data.iloc[0]['Team'] + ' vs. ' + slate_data.iloc[0]['Opp']
|
| 43 |
+
slate_names.append(slate_name)
|
| 44 |
+
|
| 45 |
+
slate_name_lookup = dict(zip(slate_names, unique_slates))
|
| 46 |
+
return slate_names, slate_name_lookup
|
| 47 |
+
|
| 48 |
+
try:
|
| 49 |
+
nfl_slate_names_dk, nfl_slate_name_lookup_dk = define_dk_nfl_showdown_slates()
|
| 50 |
+
except:
|
| 51 |
+
nfl_slate_names_dk = []
|
| 52 |
+
nfl_slate_name_lookup_dk = {}
|
| 53 |
+
|
| 54 |
+
try:
|
| 55 |
+
nfl_slate_names_fd, nfl_slate_name_lookup_fd = define_fd_nfl_showdown_slates()
|
| 56 |
+
except:
|
| 57 |
+
nfl_slate_names_fd = []
|
| 58 |
+
nfl_slate_name_lookup_fd = {}
|
| 59 |
+
|
| 60 |
def init_nfl_baselines(type_var: str, site_var: str, slate_var: str):
|
| 61 |
|
| 62 |
if type_var == 'Classic':
|