Spaces:
Sleeping
Sleeping
James McCool
commited on
Commit
·
b49ec26
1
Parent(s):
4314382
Aiming to add grid exclusion option for NASCAR.
Browse files- app.py +47 -1
- 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 |
-
|
| 2080 |
-
|
|
|
|
|
|
|
| 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 |
-
|
| 2108 |
-
|
|
|
|
|
|
|
| 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 |
|