James McCool commited on
Commit
525cd79
·
1 Parent(s): e2fd337

Add user-configurable options for lineup generation in Data Load tab

Browse files

Introduced 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.

Files changed (2) hide show
  1. app.py +34 -2
  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', 'proj', 50, dk_nfl_showdown_db_translation, 1000, [])
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', 'proj', 50, fd_nfl_showdown_db_translation, 1000, [])
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':