James McCool commited on
Commit
b49ec26
·
1 Parent(s): 4314382

Aiming to add grid exclusion option for NASCAR.

Browse files
Files changed (2) hide show
  1. app.py +47 -1
  2. database_queries.py +15 -7
app.py CHANGED
@@ -1276,7 +1276,7 @@ with st.container():
1276
  elif site_var == 'Fanduel':
1277
  min_stacks_var = st.number_input("Minimum stacks used", min_value = 0, max_value = 4, value = 1, step = 1, key = 'min_stacks_var_fd')
1278
  max_stacks_var = st.number_input("Maximum stacks used", min_value = 0, max_value = 4, value = 4, step = 1, key = 'max_stacks_var_fd')
1279
-
1280
  try:
1281
  nfl_reg_salaries = grab_nfl_reg_salaries(slate_var3)
1282
  except:
@@ -1681,6 +1681,19 @@ if selected_tab == 'Data Load':
1681
  projections_file = init_pga_baselines(type_var, site_var, slate_var3)[1]
1682
  elif type_var == 'Showdown':
1683
  projections_file = init_pga_baselines(type_var, site_var, slate_var3)[3]
 
 
 
 
 
 
 
 
 
 
 
 
 
1684
  st.session_state['db_projections_file'] = projections_file
1685
  st.session_state['projections_loaded'] = True
1686
  if 'projections_df' in st.session_state:
@@ -1803,6 +1816,8 @@ if selected_tab == 'Data Load':
1803
 
1804
  if sport_var == 'MMA':
1805
  st.session_state['map_dict']['opp_map'] = opp_map
 
 
1806
  else:
1807
  st.session_state['map_dict']['opp_map'] = None
1808
 
@@ -2211,6 +2226,10 @@ if selected_tab == 'Manage Portfolio':
2211
  qb_force = st.selectbox("Force QB Stacks?", options=['No', 'Yes'], index=0)
2212
  else:
2213
  qb_force = 'No'
 
 
 
 
2214
 
2215
  submitted_col, export_col = st.columns(2)
2216
  st.info("Portfolio Button applies to your overall Portfolio, Export button applies to your Custom Export")
@@ -2343,6 +2362,15 @@ if selected_tab == 'Manage Portfolio':
2343
  # Create mask where the first player's team matches the Stack column
2344
  include_mask = team_frame == parsed_frame['Stack']
2345
  parsed_frame = parsed_frame[include_mask]
 
 
 
 
 
 
 
 
 
2346
  st.session_state['working_frame'] = parsed_frame.sort_values(by='median', ascending=False).reset_index(drop=True)
2347
  st.session_state['export_merge'] = st.session_state['working_frame'].copy()
2348
  elif exp_submitted:
@@ -2460,6 +2488,24 @@ if selected_tab == 'Manage Portfolio':
2460
 
2461
  if size_include:
2462
  parsed_frame = parsed_frame[parsed_frame['Size'].isin(size_include)]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2463
  st.session_state['export_base'] = parsed_frame.sort_values(by='median', ascending=False).reset_index(drop=True)
2464
  st.session_state['export_merge'] = st.session_state['export_base'].copy()
2465
 
 
1276
  elif site_var == 'Fanduel':
1277
  min_stacks_var = st.number_input("Minimum stacks used", min_value = 0, max_value = 4, value = 1, step = 1, key = 'min_stacks_var_fd')
1278
  max_stacks_var = st.number_input("Maximum stacks used", min_value = 0, max_value = 4, value = 4, step = 1, key = 'max_stacks_var_fd')
1279
+ ## FIX: There's also gotta be a better way to handle this
1280
  try:
1281
  nfl_reg_salaries = grab_nfl_reg_salaries(slate_var3)
1282
  except:
 
1681
  projections_file = init_pga_baselines(type_var, site_var, slate_var3)[1]
1682
  elif type_var == 'Showdown':
1683
  projections_file = init_pga_baselines(type_var, site_var, slate_var3)[3]
1684
+ elif sport_var == 'NASCAR':
1685
+ if site_var == 'Draftkings':
1686
+ if type_var == 'Classic':
1687
+ projections_file = init_nascar_baselines(type_var, site_var, slate_var3)[0]
1688
+ grid_map = init_nascar_baselines(type_var, site_var, slate_var3)[8]
1689
+ elif type_var == 'Showdown':
1690
+ projections_file = init_nascar_baselines(type_var, site_var, slate_var3)[2]
1691
+ elif site_var == 'Fanduel':
1692
+ if type_var == 'Classic':
1693
+ projections_file = init_nascar_baselines(type_var, site_var, slate_var3)[1]
1694
+ grid_map = init_nascar_baselines(type_var, site_var, slate_var3)[8]
1695
+ elif type_var == 'Showdown':
1696
+ projections_file = init_nascar_baselines(type_var, site_var, slate_var3)[3]
1697
  st.session_state['db_projections_file'] = projections_file
1698
  st.session_state['projections_loaded'] = True
1699
  if 'projections_df' in st.session_state:
 
1816
 
1817
  if sport_var == 'MMA':
1818
  st.session_state['map_dict']['opp_map'] = opp_map
1819
+ elif sport_var == 'NASCAR':
1820
+ st.session_state['map_dict']['grid_map'] = grid_map
1821
  else:
1822
  st.session_state['map_dict']['opp_map'] = None
1823
 
 
2226
  qb_force = st.selectbox("Force QB Stacks?", options=['No', 'Yes'], index=0)
2227
  else:
2228
  qb_force = 'No'
2229
+ of sport == 'NASCAR':
2230
+ grid_exclude = st.multiselect("Exclude grids?", options=sorted(list(set(st.session_state['working_frame']['Grid'].unique()))), default=[])
2231
+ else:
2232
+ grid_exclude = []
2233
 
2234
  submitted_col, export_col = st.columns(2)
2235
  st.info("Portfolio Button applies to your overall Portfolio, Export button applies to your Custom Export")
 
2362
  # Create mask where the first player's team matches the Stack column
2363
  include_mask = team_frame == parsed_frame['Stack']
2364
  parsed_frame = parsed_frame[include_mask]
2365
+
2366
+ if grid_exclude:
2367
+ grid_frame = parsed_frame[st.session_state['player_columns']].apply(
2368
+ lambda x: x.map(st.session_state['map_dict']['grid_map'])
2369
+ )
2370
+ exclude_mask = grid_frame.apply(
2371
+ lambda row: not any(grid in list(row) for grid in grid_exclude), axis=1
2372
+ )
2373
+ parsed_frame = parsed_frame[exclude_mask]
2374
  st.session_state['working_frame'] = parsed_frame.sort_values(by='median', ascending=False).reset_index(drop=True)
2375
  st.session_state['export_merge'] = st.session_state['working_frame'].copy()
2376
  elif exp_submitted:
 
2488
 
2489
  if size_include:
2490
  parsed_frame = parsed_frame[parsed_frame['Size'].isin(size_include)]
2491
+
2492
+ if qb_force == 'Yes':
2493
+ if type_var == 'Classic':
2494
+ # Get team for the first player column for each lineup
2495
+ team_frame = parsed_frame.iloc[:, 0].map(st.session_state['map_dict']['team_map'])
2496
+
2497
+ # Create mask where the first player's team matches the Stack column
2498
+ include_mask = team_frame == parsed_frame['Stack']
2499
+ parsed_frame = parsed_frame[include_mask]
2500
+
2501
+ if grid_exclude:
2502
+ grid_frame = parsed_frame[st.session_state['player_columns']].apply(
2503
+ lambda x: x.map(st.session_state['map_dict']['grid_map'])
2504
+ )
2505
+ exclude_mask = grid_frame.apply(
2506
+ lambda row: not any(grid in list(row) for grid in grid_exclude), axis=1
2507
+ )
2508
+ parsed_frame = parsed_frame[exclude_mask]
2509
  st.session_state['export_base'] = parsed_frame.sort_values(by='median', ascending=False).reset_index(drop=True)
2510
  st.session_state['export_merge'] = st.session_state['export_base'].copy()
2511
 
database_queries.py CHANGED
@@ -505,10 +505,14 @@ def init_nba_baselines(type_var: str, site_var: str, slate_var: str):
505
 
506
  raw_display = pd.DataFrame(list(cursor))
507
  live_dict = dict(zip(raw_display['Player'], raw_display['Live_Proj']))
 
508
 
509
  dk_roo_raw['median'] = dk_roo_raw['player_names'].map(live_dict)
510
  fd_roo_raw['median'] = fd_roo_raw['player_names'].map(live_dict)
511
 
 
 
 
512
  dk_sd_roo_raw = None
513
  fd_sd_roo_raw = None
514
  dk_sd_id_map = None
@@ -2062,7 +2066,7 @@ def init_nascar_baselines(type_var: str, site_var: str, slate_var: str):
2062
  cursor = collection.find()
2063
 
2064
  raw_display = pd.DataFrame(list(cursor))
2065
- raw_display = raw_display[['Player', 'Position', 'Salary', 'Median', 'Own', 'CPT_Own', 'player_id', 'slate', 'site', 'version']]
2066
  raw_display['Team'] = 'NASCAR'
2067
  raw_display['Median'] = raw_display['Median'].replace('', 0).astype(float)
2068
  raw_display = raw_display.rename(columns={"player_id": "player_ID"})
@@ -2076,8 +2080,10 @@ def init_nascar_baselines(type_var: str, site_var: str, slate_var: str):
2076
  fd_sd_roo_raw['player_ID'] = fd_sd_roo_raw['player_ID'].astype(str)
2077
  fd_sd_roo_raw['player_ID'] = fd_sd_roo_raw['player_ID'].str.rsplit('-', n=1).str[0].astype(str)
2078
 
2079
- dk_sd_roo_raw = dk_sd_roo_raw.drop(columns=['player_ID', 'slate', 'version', 'site'])
2080
- fd_sd_roo_raw = fd_sd_roo_raw.drop(columns=['player_ID', 'slate', 'version', 'site'])
 
 
2081
 
2082
  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'})
2083
  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'})
@@ -2092,7 +2098,7 @@ def init_nascar_baselines(type_var: str, site_var: str, slate_var: str):
2092
  cursor = collection.find()
2093
 
2094
  raw_display = pd.DataFrame(list(cursor))
2095
- raw_display = raw_display[['Player', 'Position', 'Salary', 'Median', 'Own', 'CPT_Own', 'player_id']]
2096
  raw_display['Team'] = 'NASCAR'
2097
  raw_display['Site'] = site_var
2098
  raw_display = raw_display.rename(columns={"player_id": "player_ID"})
@@ -2104,8 +2110,10 @@ def init_nascar_baselines(type_var: str, site_var: str, slate_var: str):
2104
  fd_id_map = dict(zip(fd_roo_raw['Player'], fd_roo_raw['player_ID']))
2105
  raw_display = raw_display.apply(pd.to_numeric, errors='ignore')
2106
 
2107
- dk_roo_raw = dk_roo_raw.drop(columns=['player_ID'])
2108
- fd_roo_raw = fd_roo_raw.drop(columns=['player_ID'])
 
 
2109
 
2110
  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'})
2111
  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'})
@@ -2115,7 +2123,7 @@ def init_nascar_baselines(type_var: str, site_var: str, slate_var: str):
2115
  dk_sd_id_map = None
2116
  fd_sd_id_map = None
2117
 
2118
- 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
2119
 
2120
  def init_DK_NASCAR_lineups(type_var, slate_var, prio_var, prio_mix, lineup_num, salary_min, salary_max, player_var2):
2121
 
 
505
 
506
  raw_display = pd.DataFrame(list(cursor))
507
  live_dict = dict(zip(raw_display['Player'], raw_display['Live_Proj']))
508
+ live_median_dict = dict(zip(raw_display['Player'], raw_display['Median']))
509
 
510
  dk_roo_raw['median'] = dk_roo_raw['player_names'].map(live_dict)
511
  fd_roo_raw['median'] = fd_roo_raw['player_names'].map(live_dict)
512
 
513
+ dk_roo_raw['median'] = np.where(dk_roo_raw['median'] == 0, dk_roo_raw['player_names'].map(live_median_dict), dk_roo_raw['median'])
514
+ fd_roo_raw['median'] = np.where(fd_roo_raw['median'] == 0, fd_roo_raw['player_names'].map(live_median_dict), fd_roo_raw['median'])
515
+
516
  dk_sd_roo_raw = None
517
  fd_sd_roo_raw = None
518
  dk_sd_id_map = None
 
2066
  cursor = collection.find()
2067
 
2068
  raw_display = pd.DataFrame(list(cursor))
2069
+ raw_display = raw_display[['Player', 'Position', 'Grid', 'Salary', 'Median', 'Own', 'CPT_Own', 'player_id', 'slate', 'site', 'version']]
2070
  raw_display['Team'] = 'NASCAR'
2071
  raw_display['Median'] = raw_display['Median'].replace('', 0).astype(float)
2072
  raw_display = raw_display.rename(columns={"player_id": "player_ID"})
 
2080
  fd_sd_roo_raw['player_ID'] = fd_sd_roo_raw['player_ID'].astype(str)
2081
  fd_sd_roo_raw['player_ID'] = fd_sd_roo_raw['player_ID'].str.rsplit('-', n=1).str[0].astype(str)
2082
 
2083
+ grid_map = dict(zip(sd_raw['Player'], sd_raw['Grid']))
2084
+
2085
+ dk_sd_roo_raw = dk_sd_roo_raw.drop(columns=['player_ID', 'slate', 'version', 'site', 'Grid'])
2086
+ fd_sd_roo_raw = fd_sd_roo_raw.drop(columns=['player_ID', 'slate', 'version', 'site', 'Grid'])
2087
 
2088
  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'})
2089
  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'})
 
2098
  cursor = collection.find()
2099
 
2100
  raw_display = pd.DataFrame(list(cursor))
2101
+ raw_display = raw_display[['Player', 'Position', 'Grid', 'Salary', 'Median', 'Own', 'CPT_Own', 'player_id']]
2102
  raw_display['Team'] = 'NASCAR'
2103
  raw_display['Site'] = site_var
2104
  raw_display = raw_display.rename(columns={"player_id": "player_ID"})
 
2110
  fd_id_map = dict(zip(fd_roo_raw['Player'], fd_roo_raw['player_ID']))
2111
  raw_display = raw_display.apply(pd.to_numeric, errors='ignore')
2112
 
2113
+ grid_map = dict(zip(raw_display['Player'], raw_display['Grid']))
2114
+
2115
+ dk_roo_raw = dk_roo_raw.drop(columns=['player_ID', 'Grid'])
2116
+ fd_roo_raw = fd_roo_raw.drop(columns=['player_ID', 'Grid'])
2117
 
2118
  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'})
2119
  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'})
 
2123
  dk_sd_id_map = None
2124
  fd_sd_id_map = None
2125
 
2126
+ 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, grid_map
2127
 
2128
  def init_DK_NASCAR_lineups(type_var, slate_var, prio_var, prio_mix, lineup_num, salary_min, salary_max, player_var2):
2129