TrueDFS/NBA_DFS_ROO_origin
0
1import streamlit as st2import numpy as np3import pandas as pd4import streamlit as st5import gspread6import pymongo7 8st.set_page_config(layout="wide")9 10@st.cache_resource11def init_conn():12 13 uri = st.secrets['mongo_uri']14 client = pymongo.MongoClient(uri, retryWrites=True, serverSelectionTimeoutMS=500000)15 db = client["NBA_DFS"]16 wnba_db = client["WNBA_DFS"]17 18 return db, wnba_db19 20db, wnba_db = init_conn()21 22dk_nba_columns = ['PG', 'SG', 'SF', 'PF', 'C', 'G', 'F', 'FLEX', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']23dk_nba_sd_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']24fd_nba_columns = ['PG1', 'PG2', 'SG1', 'SG2', 'SF1', 'SF2', 'PF1', 'PF2', 'C1', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']25fd_nba_sd_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']26 27dk_wnba_columns = ['G1', 'G2', 'F1', 'F2', 'F3', 'UTIL', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']28dk_wnba_sd_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']29fd_wnba_columns = ['G1', 'G2', 'G3', 'F1', 'F2', 'F3', 'F4', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']30fd_wnba_sd_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']31 32roo_format = {'Top_finish': '{:.2%}', 'Top_5_finish': '{:.2%}', 'Top_10_finish': '{:.2%}', '20+%': '{:.2%}', '4x%': '{:.2%}', '5x%': '{:.2%}', '6x%': '{:.2%}', 'GPP%': '{:.2%}'}33 34@st.cache_data(ttl=60)35def load_overall_stats(league: str):36 if league == 'NBA':37 collection = db["DK_Player_Stats"] 38 elif league == 'WNBA':39 collection = wnba_db["DK_Player_Stats"] 40 cursor = collection.find()41 42 raw_display = pd.DataFrame(list(cursor))43 if league == 'NBA':44 raw_display = raw_display[['Name', 'Salary', 'Position', 'Team', 'Opp', 'Minutes', 'FGM', 'FGA', 'FG2M', 'FG2A', 'Threes', 'FG3A', 'FTM', 'FTA', 'TRB', 'AST', 'STL', 'BLK', 'TOV', '2P', '3P', 'FT',45 'Points', 'Rebounds', 'Assists', 'PRA', 'PR', 'PA', 'RA', 'Steals', 'Blocks', 'Turnovers', 'Fantasy', 'Raw', 'Own']]46 raw_display = raw_display.rename(columns={"Name": "Player", "Nickname": "Player", "Fantasy": "Median"})47 elif league == 'WNBA':48 raw_display = raw_display.rename(columns={"Name": "Player", "Nickname": "Player", "DK_Proj": "Median", "DK_ID": "ID", "DK_Pos": "Position", "DK_Salary": "Salary", "DK_Own": "Own"})49 raw_display = raw_display.loc[raw_display['Median'] > 0]50 raw_display = raw_display.apply(pd.to_numeric, errors='ignore')51 dk_raw = raw_display.sort_values(by='Median', ascending=False)52 53 if league == 'NBA':54 collection = db["FD_Player_Stats"] 55 elif league == 'WNBA':56 collection = wnba_db["FD_Player_Stats"] 57 cursor = collection.find()58 59 raw_display = pd.DataFrame(list(cursor))60 if league == 'NBA':61 raw_display = raw_display[['Nickname', 'Salary', 'Position', 'Team', 'Opp', 'Minutes', 'FGM', 'FGA', 'FG2M', 'FG2A', 'Threes', 'FG3A', 'FTM', 'FTA', 'TRB', 'AST', 'STL', 'BLK', 'TOV', '2P', '3P', 'FT',62 'Points', 'Rebounds', 'Assists', 'PRA', 'PR', 'PA', 'RA', 'Steals', 'Blocks', 'Turnovers', 'Fantasy', 'Raw', 'Own']]63 raw_display = raw_display.rename(columns={"Name": "Player", "Nickname": "Player", "Fantasy": "Median"})64 elif league == 'WNBA':65 raw_display = raw_display.rename(columns={"Name": "Player", "Nickname": "Player", "FD_Proj": "Median", "FD_ID": "ID", "FD_Pos": "Position", "FD_Salary": "Salary", "FD_Own": "Own"})66 raw_display = raw_display.loc[raw_display['Median'] > 0]67 raw_display = raw_display.apply(pd.to_numeric, errors='ignore')68 fd_raw = raw_display.sort_values(by='Median', ascending=False)69 70 if league == 'NBA':71 collection = db["Secondary_DK_Player_Stats"] 72 elif league == 'WNBA':73 collection = wnba_db["Secondary_DK_Player_Stats"] 74 cursor = collection.find()75 76 raw_display = pd.DataFrame(list(cursor))77 if league == 'NBA':78 raw_display = raw_display[['Name', 'Salary', 'Position', 'Team', 'Opp', 'Minutes', 'FGM', 'FGA', 'FG2M', 'FG2A', 'Threes', 'FG3A', 'FTM', 'FTA', 'TRB', 'AST', 'STL', 'BLK', 'TOV', '2P', '3P', 'FT',79 'Points', 'Rebounds', 'Assists', 'PRA', 'PR', 'PA', 'RA', 'Steals', 'Blocks', 'Turnovers', 'Fantasy', 'Raw', 'Own']]80 raw_display = raw_display.rename(columns={"Name": "Player", "Nickname": "Player", "Fantasy": "Median"})81 elif league == 'WNBA':82 raw_display = raw_display.rename(columns={"Name": "Player", "Nickname": "Player", "DK_Proj": "Median", "DK_ID": "ID", "DK_Pos": "Position", "DK_Salary": "Salary", "DK_Own": "Own"})83 raw_display = raw_display.loc[raw_display['Median'] > 0]84 raw_display = raw_display.apply(pd.to_numeric, errors='ignore')85 dk_raw_sec = raw_display.sort_values(by='Median', ascending=False)86 87 if league == 'NBA':88 collection = db["Secondary_FD_Player_Stats"] 89 elif league == 'WNBA':90 collection = wnba_db["Secondary_FD_Player_Stats"] 91 cursor = collection.find()92 93 raw_display = pd.DataFrame(list(cursor))94 if league == 'NBA':95 raw_display = raw_display[['Nickname', 'Salary', 'Position', 'Team', 'Opp', 'Minutes', 'FGM', 'FGA', 'FG2M', 'FG2A', 'Threes', 'FG3A', 'FTM', 'FTA', 'TRB', 'AST', 'STL', 'BLK', 'TOV', '2P', '3P', 'FT',96 'Points', 'Rebounds', 'Assists', 'PRA', 'PR', 'PA', 'RA', 'Steals', 'Blocks', 'Turnovers', 'Fantasy', 'Raw', 'Own']]97 raw_display = raw_display.rename(columns={"Name": "Player", "Nickname": "Player", "Fantasy": "Median"})98 elif league == 'WNBA':99 raw_display = raw_display.rename(columns={"Name": "Player", "Nickname": "Player", "FD_Proj": "Median", "FD_ID": "ID", "FD_Pos": "Position", "FD_Salary": "Salary", "FD_Own": "Own"})100 raw_display = raw_display.loc[raw_display['Median'] > 0]101 raw_display = raw_display.apply(pd.to_numeric, errors='ignore')102 fd_raw_sec = raw_display.sort_values(by='Median', ascending=False)103 104 if league == 'NBA':105 collection = db["Player_SD_Range_Of_Outcomes"] 106 elif league == 'WNBA':107 collection = wnba_db["Player_SD_Range_Of_Outcomes"] 108 cursor = collection.find()109 110 raw_display = pd.DataFrame(list(cursor))111 raw_display = raw_display[['Player', 'Minutes Proj', 'Position', 'Team', 'Opp', 'Salary', 'Floor', 'Median', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '20+%', '4x%', '5x%', '6x%', 'GPP%',112 'Own', 'Small_Own', 'Large_Own', 'Cash_Own', 'CPT_Own', 'LevX', 'ValX', 'site', 'version', 'slate', 'timestamp', 'player_id']]113 raw_display['Median'] = raw_display['Median'].replace('', 0).astype(float)114 raw_display = raw_display.rename(columns={"player_id": "player_ID"})115 raw_display = raw_display.loc[raw_display['Median'] > 0]116 raw_display = raw_display.apply(pd.to_numeric, errors='ignore')117 sd_raw = raw_display.sort_values(by='Median', ascending=False)118 dk_sd_raw = sd_raw[sd_raw['site'] == 'Draftkings']119 fd_sd_raw = sd_raw[sd_raw['site'] == 'Fanduel']120 fd_sd_raw['player_ID'] = fd_sd_raw['player_ID'].astype(str)121 fd_sd_raw['player_ID'] = fd_sd_raw['player_ID'].str.rsplit('-', n=1).str[0].astype(str)122 123 print(sd_raw.head(10))124 125 if league == 'NBA':126 collection = db["Player_Range_Of_Outcomes"] 127 elif league == 'WNBA':128 collection = wnba_db["Player_Range_Of_Outcomes"] 129 cursor = collection.find()130 131 raw_display = pd.DataFrame(list(cursor))132 try:133 raw_display = raw_display[['Player', 'Minutes Proj', 'Position', 'Team', 'Opp', 'Salary', 'Floor', 'Median', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '20+%', '4x%', '5x%', '6x%', 'GPP%',134 'Own', 'Small_Own', 'Large_Own', 'Cash_Own', 'CPT_Own', 'LevX', 'ValX', 'site', 'version', 'slate', 'timestamp', 'player_ID']]135 except:136 raw_display = raw_display[['Player', 'Minutes Proj', 'Position', 'Team', 'Opp', 'Salary', 'Floor', 'Median', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '20+%', '4x%', '5x%', '6x%', 'GPP%',137 'Own', 'Small_Own', 'Large_Own', 'Cash_Own', 'CPT_Own', 'LevX', 'ValX', 'site', 'version', 'slate', 'timestamp', 'player_id']]138 raw_display = raw_display.rename(columns={"player_id": "player_ID"})139 raw_display['Median'] = raw_display['Median'].replace('', 0).astype(float)140 raw_display = raw_display.loc[raw_display['Median'] > 0]141 raw_display = raw_display.apply(pd.to_numeric, errors='ignore')142 roo_raw = raw_display.sort_values(by='Median', ascending=False)143 144 timestamp = raw_display['timestamp'].values[0]145 146 return dk_raw, fd_raw, dk_raw_sec, fd_raw_sec, roo_raw, sd_raw, dk_sd_raw, fd_sd_raw, timestamp147 148@st.cache_data(ttl = 60)149def init_DK_lineups(slate_desig: str, league: str): 150 151 if slate_desig == 'Main Slate':152 if league == 'NBA':153 collection = db['DK_NBA_name_map']154 elif league == 'WNBA':155 collection = wnba_db['DK_WNBA_name_map']156 cursor = collection.find()157 raw_data = pd.DataFrame(list(cursor))158 names_dict = dict(zip(raw_data['key'], raw_data['value']))159 160 if league == 'NBA':161 collection = db["DK_NBA_seed_frame"] 162 elif league == 'WNBA':163 collection = wnba_db["DK_WNBA_seed_frame"] 164 cursor = collection.find().limit(10000)165 elif slate_desig == 'Secondary':166 if league == 'NBA':167 collection = db['DK_NBA_Secondary_name_map']168 elif league == 'WNBA':169 collection = wnba_db['DK_WNBA_Secondary_name_map']170 cursor = collection.find()171 raw_data = pd.DataFrame(list(cursor))172 names_dict = dict(zip(raw_data['key'], raw_data['value']))173 174 if league == 'NBA':175 collection = db["DK_NBA_Secondary_seed_frame"] 176 elif league == 'WNBA':177 collection = wnba_db["DK_WNBA_Secondary_seed_frame"] 178 cursor = collection.find().limit(10000)179 elif slate_desig == 'Auxiliary':180 collection = db['DK_NBA_Auxiliary_name_map']181 cursor = collection.find()182 raw_data = pd.DataFrame(list(cursor))183 names_dict = dict(zip(raw_data['key'], raw_data['value']))184 185 collection = db["DK_NBA_Auxiliary_seed_frame"] 186 cursor = collection.find().limit(10000) 187 188 raw_display = pd.DataFrame(list(cursor))189 if league == 'NBA':190 raw_display = raw_display[['PG', 'SG', 'SF', 'PF', 'C', 'G', 'F', 'FLEX', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]191 dict_columns = ['PG', 'SG', 'SF', 'PF', 'C', 'G', 'F', 'FLEX']192 elif league == 'WNBA':193 raw_display = raw_display[['G1', 'G2', 'F1', 'F2', 'F3', 'UTIL', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]194 dict_columns = ['G1', 'G2', 'F1', 'F2', 'F3', 'UTIL']195 196 for col in dict_columns:197 raw_display[col] = raw_display[col].map(names_dict)198 DK_seed = raw_display.to_numpy()199 200 return DK_seed201 202@st.cache_data(ttl = 60)203def init_DK_SD_lineups(slate_desig: str, league: str):204 205 if slate_desig == 'Main Slate':206 if league == 'NBA':207 collection = db["DK_NBA_SD_seed_frame"] 208 elif league == 'WNBA':209 collection = wnba_db["DK_WNBA_SD_seed_frame"] 210 elif slate_desig == 'Secondary':211 if league == 'NBA':212 collection = db["DK_NBA_Secondary_SD_seed_frame"] 213 elif league == 'WNBA':214 collection = wnba_db["DK_WNBA_Secondary_SD_seed_frame"] 215 elif slate_desig == 'Auxiliary':216 collection = db["DK_NBA_Auxiliary_SD_seed_frame"] 217 218 cursor = collection.find({"Team_count": {"$lt": 6}}).limit(10000)219 220 raw_display = pd.DataFrame(list(cursor))221 raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]222 DK_seed = raw_display.to_numpy()223 224 return DK_seed225 226@st.cache_data(ttl = 60)227def init_FD_lineups(slate_desig: str, league: str): 228 229 if slate_desig == 'Main Slate':230 if league == 'NBA':231 collection = db['FD_NBA_name_map']232 elif league == 'WNBA':233 collection = wnba_db['FD_WNBA_name_map']234 cursor = collection.find()235 raw_data = pd.DataFrame(list(cursor))236 names_dict = dict(zip(raw_data['key'], raw_data['value']))237 238 if league == 'NBA':239 collection = db["FD_NBA_seed_frame"] 240 elif league == 'WNBA':241 collection = wnba_db["FD_WNBA_seed_frame"] 242 cursor = collection.find().limit(10000)243 elif slate_desig == 'Secondary':244 if league == 'NBA':245 collection = db['FD_NBA_Secondary_name_map']246 elif league == 'WNBA':247 collection = wnba_db['FD_WNBA_Secondary_name_map']248 cursor = collection.find()249 raw_data = pd.DataFrame(list(cursor))250 names_dict = dict(zip(raw_data['key'], raw_data['value']))251 252 if league == 'NBA':253 collection = db["FD_NBA_Secondary_seed_frame"] 254 elif league == 'WNBA':255 collection = wnba_db["FD_WNBA_Secondary_seed_frame"] 256 cursor = collection.find().limit(10000)257 elif slate_desig == 'Auxiliary':258 collection = db['FD_NBA_Auxiliary_name_map']259 cursor = collection.find()260 raw_data = pd.DataFrame(list(cursor))261 names_dict = dict(zip(raw_data['key'], raw_data['value']))262 263 collection = db["FD_NBA_Auxiliary_seed_frame"] 264 cursor = collection.find().limit(10000) 265 266 raw_display = pd.DataFrame(list(cursor))267 if league == 'NBA':268 raw_display = raw_display[['PG1', 'PG2', 'SG1', 'SG2', 'SF1', 'SF2', 'PF1', 'PF2', 'C1', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]269 dict_columns = ['PG1', 'PG2', 'SG1', 'SG2', 'SF1', 'SF2', 'PF1', 'PF2', 'C1']270 elif league == 'WNBA':271 raw_display = raw_display[['G1', 'G2', 'G3', 'F1', 'F2', 'F3', 'F4', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]272 dict_columns = ['G1', 'G2', 'G3', 'F1', 'F2', 'F3', 'F4']273 for col in dict_columns:274 raw_display[col] = raw_display[col].map(names_dict)275 FD_seed = raw_display.to_numpy()276 277 return FD_seed278 279@st.cache_data(ttl = 60)280def init_FD_SD_lineups(slate_desig: str, league: str):281 282 if slate_desig == 'Main Slate':283 if league == 'NBA':284 collection = db["FD_NBA_SD_seed_frame"] 285 elif league == 'WNBA':286 collection = wnba_db["FD_WNBA_SD_seed_frame"] 287 elif slate_desig == 'Secondary':288 if league == 'NBA':289 collection = db["FD_NBA_Secondary_SD_seed_frame"] 290 elif league == 'WNBA':291 collection = wnba_db["FD_WNBA_Secondary_SD_seed_frame"] 292 elif slate_desig == 'Auxiliary':293 collection = db["FD_NBA_Auxiliary_SD_seed_frame"] 294 295 cursor = collection.find({"Team_count": {"$lt": 6}}).limit(10000)296 297 raw_display = pd.DataFrame(list(cursor))298 raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]299 DK_seed = raw_display.to_numpy()300 301 return DK_seed302 303def convert_df_to_csv(df):304 return df.to_csv().encode('utf-8')305 306@st.cache_data307def convert_df(array):308 array = pd.DataFrame(array, columns=column_names)309 return array.to_csv().encode('utf-8')310 311@st.cache_data312def convert_pm_df(array):313 array = pd.DataFrame(array)314 return array.to_csv().encode('utf-8')315 316dk_raw, fd_raw, dk_raw_sec, fd_raw_sec, roo_raw, sd_raw, dk_sd_raw, fd_sd_raw, timestamp = load_overall_stats('NBA')317salary_dict = dict(zip(roo_raw.Player, roo_raw.Salary))318id_dict = dict(zip(roo_raw.Player, roo_raw.player_ID))319salary_dict_sd = dict(zip(sd_raw.Player, sd_raw.Salary))320dk_id_dict_sd = dict(zip(dk_sd_raw.Player, dk_sd_raw.player_ID))321fd_id_dict_sd = dict(zip(fd_sd_raw.Player, fd_sd_raw.player_ID))322 323dk_nba_lineups = pd.DataFrame(columns=dk_nba_columns)324dk_nba_sd_lineups = pd.DataFrame(columns=dk_nba_sd_columns)325fd_nba_lineups = pd.DataFrame(columns=fd_nba_columns)326fd_nba_sd_lineups = pd.DataFrame(columns=fd_nba_sd_columns)327 328dk_wnba_lineups = pd.DataFrame(columns=dk_wnba_columns)329dk_wnba_sd_lineups = pd.DataFrame(columns=dk_wnba_sd_columns)330fd_wnba_lineups = pd.DataFrame(columns=fd_wnba_columns)331fd_wnba_sd_lineups = pd.DataFrame(columns=fd_wnba_sd_columns)332 333t_stamp = f"Last Update: " + str(timestamp) + f" CST"334 335with st.container():336 st.info("Advanced view includes all stats and thresholds, simple includes just basic columns for ease of use on mobile")337reset_col, view_col, site_col, league_col = st.columns(4)338with reset_col:339 # First row - timestamp and reset button340 col1, col2 = st.columns([3, 3])341 with col1:342 st.info(t_stamp)343 with col2:344 if st.button("Load/Reset Data", key='reset1'):345 st.cache_data.clear()346 dk_raw, fd_raw, dk_raw_sec, fd_raw_sec, roo_raw, sd_raw, dk_sd_raw, fd_sd_raw, timestamp = load_overall_stats('NBA')347 salary_dict = dict(zip(roo_raw.Player, roo_raw.Salary))348 id_dict = dict(zip(roo_raw.Player, roo_raw.player_ID))349 salary_dict_sd = dict(zip(sd_raw.Player, sd_raw.Salary))350 dk_id_dict_sd = dict(zip(dk_sd_raw.Player, dk_sd_raw.player_ID))351 fd_id_dict_sd = dict(zip(fd_sd_raw.Player, fd_sd_raw.player_ID))352 dk_nba_lineups = pd.DataFrame(columns=dk_nba_columns)353 dk_nba_sd_lineups = pd.DataFrame(columns=dk_nba_sd_columns)354 fd_nba_lineups = pd.DataFrame(columns=fd_nba_columns)355 fd_nba_sd_lineups = pd.DataFrame(columns=fd_nba_sd_columns)356 357 dk_wnba_lineups = pd.DataFrame(columns=dk_wnba_columns)358 dk_wnba_sd_lineups = pd.DataFrame(columns=dk_wnba_sd_columns)359 fd_wnba_lineups = pd.DataFrame(columns=fd_wnba_columns)360 fd_wnba_sd_lineups = pd.DataFrame(columns=fd_wnba_sd_columns)361 t_stamp = f"Last Update: " + str(timestamp) + f" CST"362 for key in st.session_state.keys():363 del st.session_state[key]364with view_col:365 view_var2 = st.radio("View Type", ('Simple', 'Advanced'), key='view_var2')366with site_col:367 site_var2 = st.radio("Site", ('Draftkings', 'Fanduel'), key='site_var2')368with league_col:369 league_var = st.radio("What League to load:", ('WNBA', 'NBA'), key='league_var')370 dk_raw, fd_raw, dk_raw_sec, fd_raw_sec, roo_raw, sd_raw, dk_sd_raw, fd_sd_raw, timestamp = load_overall_stats(league_var)371 372tab1, tab2 = st.tabs(['Range of Outcomes', 'Optimals'])373with tab1:374 375 with st.expander("Info and Filters"):376 col1, col2, col3 = st.columns(3)377 378 with col1:379 slate_type_var2 = st.radio("What slate type are you working with?", ('Regular', 'Showdown'), key='slate_type_var2')380 with col2:381 slate_split = st.radio("Slate Type", ('Main Slate', 'Secondary'), key='slate_split')382 383 if slate_split == 'Main Slate':384 if site_var2 == 'Draftkings':385 if slate_type_var2 == 'Regular':386 site_baselines = roo_raw[roo_raw['site'] == 'Draftkings']387 raw_baselines = site_baselines[site_baselines['slate'] == 'Main Slate']388 elif slate_type_var2 == 'Showdown':389 site_baselines = sd_raw[sd_raw['site'] == 'Draftkings']390 raw_baselines = site_baselines[site_baselines['slate'] == 'Showdown #1']391 elif site_var2 == 'Fanduel':392 if slate_type_var2 == 'Regular':393 site_baselines = roo_raw[roo_raw['site'] == 'Fanduel']394 raw_baselines = site_baselines[site_baselines['slate'] == 'Main Slate']395 elif slate_type_var2 == 'Showdown':396 site_baselines = sd_raw[sd_raw['site'] == 'Fanduel']397 raw_baselines = site_baselines[site_baselines['slate'] == 'Showdown #1']398 elif slate_split == 'Secondary':399 if site_var2 == 'Draftkings':400 if slate_type_var2 == 'Regular':401 site_baselines = roo_raw[roo_raw['site'] == 'Draftkings']402 raw_baselines = site_baselines[site_baselines['slate'] == 'Secondary Slate']403 elif slate_type_var2 == 'Showdown':404 site_baselines = sd_raw[sd_raw['site'] == 'Draftkings']405 raw_baselines = site_baselines[site_baselines['slate'] == 'Showdown #2']406 elif site_var2 == 'Fanduel':407 if slate_type_var2 == 'Regular':408 site_baselines = roo_raw[roo_raw['site'] == 'Fanduel']409 raw_baselines = site_baselines[site_baselines['slate'] == 'Secondary Slate']410 elif slate_type_var2 == 'Showdown':411 site_baselines = sd_raw[sd_raw['site'] == 'Fanduel']412 raw_baselines = site_baselines[site_baselines['slate'] == 'Showdown #2']413 414 with col3:415 split_var2 = st.radio("Slate Range", ('Full Slate Run', 'Specific Games'), key='split_var2')416 if split_var2 == 'Specific Games':417 team_var2 = st.multiselect('Select teams for ROO', options=raw_baselines['Team'].unique(), key='team_var2')418 else:419 team_var2 = raw_baselines.Team.values.tolist()420 421 pos_var2 = st.selectbox('Position Filter', options=['All', 'PG', 'SG', 'SF', 'PF', 'C'], key='pos_var2')422 col1, col2 = st.columns(2)423 with col1:424 low_salary = st.number_input('Enter Lowest Salary', min_value=300, max_value=15000, value=300, step=100, key='low_salary')425 with col2:426 high_salary = st.number_input('Enter Highest Salary', min_value=300, max_value=25000, value=25000, step=100, key='high_salary')427 428 display_container_1 = st.empty()429 display_dl_container_1 = st.empty()430 display_proj = raw_baselines[raw_baselines['Team'].isin(team_var2)]431 display_proj = display_proj[display_proj['Salary'].between(low_salary, high_salary)]432 if view_var2 == 'Advanced':433 display_proj = display_proj[['Player', 'Minutes Proj', 'Position', 'Team', 'Opp', 'Salary', 'Floor', 'Median', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '20+%', '4x%', '5x%', '6x%', 'GPP%',434 'Own', 'Small_Own', 'Large_Own', 'Cash_Own', 'CPT_Own', 'LevX', 'ValX']]435 elif view_var2 == 'Simple':436 display_proj = display_proj[['Player', 'Position', 'Salary', 'Median', 'GPP%', 'Own']]437 export_data = raw_baselines.copy()438 export_data_pm = raw_baselines[['Player', 'Position', 'Team', 'Salary', 'Median', 'Own', 'CPT_Own']]439 export_data_pm = export_data_pm.rename(columns={'Own': 'ownership', 'Median': 'median', 'Player': 'player_names', 'Position': 'position', 'Team': 'team', 'Salary': 'salary', 'CPT_Own': 'captain ownership'})440 441 # display_proj = display_proj.set_index('Player')442 st.session_state.display_proj = display_proj.set_index('Player', drop=True)443 444 reg_dl_col, pm_dl_col, blank_col = st.columns([2, 2, 6])445 with reg_dl_col:446 st.download_button(447 label="Export ROO (Regular)",448 data=convert_df_to_csv(export_data),449 file_name='NBA_ROO_export.csv',450 mime='text/csv',451 )452 with pm_dl_col:453 st.download_button(454 label="Export ROO (Portfolio Manager)",455 data=convert_df_to_csv(export_data_pm),456 file_name='NBA_ROO_export.csv',457 mime='text/csv',458 )459 460 if 'display_proj' in st.session_state:461 if pos_var2 == 'All':462 st.session_state.display_proj = st.session_state.display_proj463 elif pos_var2 != 'All':464 st.session_state.display_proj = st.session_state.display_proj[st.session_state.display_proj['Position'].str.contains(pos_var2)]465 st.dataframe(st.session_state.display_proj.style.set_properties(**{'font-size': '6pt'}).background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(roo_format, precision=2),466 height=1000, use_container_width = True)467 468 469 470with tab2:471 with st.expander("Info and Filters"):472 if st.button("Load/Reset Data", key='reset2'):473 st.cache_data.clear()474 dk_raw, fd_raw, dk_raw_sec, fd_raw_sec, roo_raw, sd_raw, dk_sd_raw, fd_sd_raw, timestamp = load_overall_stats('NBA')475 salary_dict = dict(zip(roo_raw.Player, roo_raw.Salary))476 id_dict = dict(zip(roo_raw.Player, roo_raw.player_ID))477 salary_dict_sd = dict(zip(sd_raw.Player, sd_raw.Salary))478 dk_id_dict_sd = dict(zip(dk_sd_raw.Player, dk_sd_raw.player_ID))479 fd_id_dict_sd = dict(zip(fd_sd_raw.Player, fd_sd_raw.player_ID))480 dk_nba_lineups = pd.DataFrame(columns=dk_nba_columns)481 dk_nba_sd_lineups = pd.DataFrame(columns=dk_nba_sd_columns)482 fd_nba_lineups = pd.DataFrame(columns=fd_nba_columns)483 fd_nba_sd_lineups = pd.DataFrame(columns=fd_nba_sd_columns)484 485 dk_wnba_lineups = pd.DataFrame(columns=dk_wnba_columns)486 dk_wnba_sd_lineups = pd.DataFrame(columns=dk_wnba_sd_columns)487 fd_wnba_lineups = pd.DataFrame(columns=fd_wnba_columns)488 fd_wnba_sd_lineups = pd.DataFrame(columns=fd_wnba_sd_columns)489 t_stamp = f"Last Update: " + str(timestamp) + f" CST"490 for key in st.session_state.keys():491 del st.session_state[key]492 493 col1, col2, col3, col4, col5 = st.columns(5)494 with col1:495 slate_var1 = st.radio("Which data are you loading?", ('Main Slate', 'Secondary'))496 with col2:497 slate_type_var1 = st.radio("What slate type are you working with?", ('Regular', 'Showdown'))498 with col3:499 lineup_num_var = st.number_input("How many lineups do you want to display?", min_value=1, max_value=1000, value=150, step=1)500 with col4:501 if site_var2 == 'Draftkings':502 if league_var == 'NBA':503 if slate_type_var1 == 'Regular':504 column_names = dk_nba_columns505 elif slate_type_var1 == 'Showdown':506 column_names = dk_nba_sd_columns507 elif league_var == 'WNBA':508 if slate_type_var1 == 'Regular':509 column_names = dk_wnba_columns510 elif slate_type_var1 == 'Showdown':511 column_names = dk_wnba_sd_columns512 513 player_var1 = st.radio("Do you want a frame with specific Players?", ('Full Slate', 'Specific Players'), key='player_var1')514 if player_var1 == 'Specific Players':515 player_var2 = st.multiselect('Which players do you want?', options = dk_raw['Player'].unique())516 elif player_var1 == 'Full Slate':517 player_var2 = dk_raw.Player.values.tolist()518 519 elif site_var2 == 'Fanduel':520 if league_var == 'NBA':521 if slate_type_var1 == 'Regular':522 column_names = fd_nba_columns523 elif slate_type_var1 == 'Showdown':524 column_names = fd_nba_sd_columns525 elif league_var == 'WNBA':526 if slate_type_var1 == 'Regular':527 column_names = fd_wnba_columns528 elif slate_type_var1 == 'Showdown':529 column_names = fd_wnba_sd_columns530 531 player_var1 = st.radio("Do you want a frame with specific Players?", ('Full Slate', 'Specific Players'), key='player_var1')532 if player_var1 == 'Specific Players':533 player_var2 = st.multiselect('Which players do you want?', options = fd_raw['Player'].unique())534 elif player_var1 == 'Full Slate':535 player_var2 = fd_raw.Player.values.tolist()536 with col5:537 if site_var2 == 'Draftkings':538 salary_min_var = st.number_input("Minimum salary used", min_value = 0, max_value = 50000, value = 49000, step = 100, key = 'salary_min_var')539 salary_max_var = st.number_input("Maximum salary used", min_value = 0, max_value = 50000, value = 50000, step = 100, key = 'salary_max_var')540 elif site_var2 == 'Fanduel':541 salary_min_var = st.number_input("Minimum salary used", min_value = 0, max_value = 40000, value = 39000, step = 100, key = 'salary_min_var')542 salary_max_var = st.number_input("Maximum salary used", min_value = 0, max_value = 40000, value = 40000, step = 100, key = 'salary_max_var')543 544 reg_dl_col, filtered_dl_col, blank_dl_col = st.columns([2, 2, 6])545 with reg_dl_col:546 if st.button("Prepare full data export", key='data_export'):547 name_export = pd.DataFrame(st.session_state.working_seed.copy(), columns=column_names)548 data_export = pd.DataFrame(st.session_state.working_seed.copy(), columns=column_names)549 if site_var2 == 'Draftkings':550 if slate_type_var1 == 'Regular':551 if league_var == 'NBA':552 map_columns = ['PG', 'SG', 'SF', 'PF', 'C', 'G', 'F', 'FLEX']553 elif league_var == 'WNBA':554 map_columns = ['G1', 'G2', 'F1', 'F2', 'F3', 'UTIL']555 elif slate_type_var1 == 'Showdown':556 map_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']557 for col_idx in map_columns:558 if slate_type_var1 == 'Regular':559 data_export[col_idx] = data_export[col_idx].map(id_dict)560 elif slate_type_var1 == 'Showdown':561 data_export[col_idx] = data_export[col_idx].map(dk_id_dict_sd)562 elif site_var2 == 'Fanduel':563 if slate_type_var1 == 'Regular':564 if league_var == 'NBA':565 map_columns = ['PG1', 'PG2', 'SG1', 'SG2', 'SF1', 'SF2', 'PF1', 'PF2', 'C1', 'C2', 'UTIL']566 elif league_var == 'WNBA':567 map_columns = ['G1', 'G2', 'G3', 'F1', 'F2', 'F3', 'F4']568 elif slate_type_var1 == 'Showdown':569 map_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4']570 for col_idx in map_columns:571 if slate_type_var1 == 'Regular':572 data_export[col_idx] = data_export[col_idx].map(id_dict)573 elif slate_type_var1 == 'Showdown':574 data_export[col_idx] = data_export[col_idx].map(fd_id_dict_sd)575 reg_opt_col, pm_opt_col = st.columns(2)576 with reg_opt_col:577 st.download_button(578 label="Export optimals set (IDs)",579 data=convert_df(data_export),580 file_name='NBA_optimals_export.csv',581 mime='text/csv',582 )583 st.download_button(584 label="Export optimals set (Names)",585 data=convert_df(name_export),586 file_name='NBA_optimals_export.csv',587 mime='text/csv',588 )589 with pm_opt_col:590 if site_var2 == 'Draftkings':591 if slate_type_var1 == 'Regular':592 if league_var == 'NBA':593 data_export = data_export.set_index('PG').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)594 elif league_var == 'WNBA':595 data_export = data_export.set_index('G1').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)596 elif slate_type_var1 == 'Showdown':597 data_export = data_export.set_index('CPT').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)598 elif site_var2 == 'Fanduel':599 if slate_type_var1 == 'Regular':600 if league_var == 'NBA':601 data_export = data_export.set_index('PG1').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)602 elif league_var == 'WNBA':603 data_export = data_export.set_index('G1').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)604 elif slate_type_var1 == 'Showdown':605 data_export = data_export.set_index('CPT').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)606 st.download_button(607 label="Portfolio Manager Export (IDs)",608 data=convert_pm_df(data_export),609 file_name='NBA_optimals_export.csv',610 mime='text/csv',611 )612 613 if site_var2 == 'Draftkings':614 if slate_type_var1 == 'Regular':615 if league_var == 'NBA':616 name_export = name_export.set_index('PG').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)617 elif league_var == 'WNBA':618 name_export = name_export.set_index('G1').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)619 elif slate_type_var1 == 'Showdown':620 name_export = name_export.set_index('CPT').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)621 elif site_var2 == 'Fanduel':622 if slate_type_var1 == 'Regular':623 if league_var == 'NBA':624 name_export = name_export.set_index('PG1').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)625 elif league_var == 'WNBA':626 name_export = name_export.set_index('G1').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)627 elif slate_type_var1 == 'Showdown':628 name_export = name_export.set_index('CPT').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)629 st.download_button(630 label="Portfolio Manager Export (Names)",631 data=convert_pm_df(name_export),632 file_name='NBA_optimals_export.csv',633 mime='text/csv',634 )635 with filtered_dl_col:636 if st.button("Prepare full data export (Filtered)", key='data_export_filtered'):637 name_export = pd.DataFrame(st.session_state.working_seed.copy(), columns=column_names)638 data_export = pd.DataFrame(st.session_state.working_seed.copy(), columns=column_names)639 if site_var2 == 'Draftkings':640 if slate_type_var1 == 'Regular':641 if league_var == 'NBA':642 map_columns = ['PG', 'SG', 'SF', 'PF', 'C', 'G', 'F', 'FLEX']643 elif league_var == 'WNBA':644 map_columns = ['G1', 'G2', 'F1', 'F2', 'F3', 'UTIL']645 elif slate_type_var1 == 'Showdown':646 map_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']647 for col_idx in map_columns:648 if slate_type_var1 == 'Regular':649 data_export[col_idx] = data_export[col_idx].map(id_dict)650 elif slate_type_var1 == 'Showdown':651 data_export[col_idx] = data_export[col_idx].map(dk_id_dict_sd)652 elif site_var2 == 'Fanduel':653 if slate_type_var1 == 'Regular':654 if league_var == 'NBA':655 map_columns = ['PG1', 'PG2', 'SG1', 'SG2', 'SF1', 'SF2', 'PF1', 'PF2', 'C1', 'C2', 'UTIL']656 elif league_var == 'WNBA':657 map_columns = ['G1', 'G2', 'G3', 'F1', 'F2', 'F3', 'F4']658 elif slate_type_var1 == 'Showdown':659 map_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4']660 for col_idx in map_columns:661 if slate_type_var1 == 'Regular':662 data_export[col_idx] = data_export[col_idx].map(id_dict)663 elif slate_type_var1 == 'Showdown':664 data_export[col_idx] = data_export[col_idx].map(fd_id_dict_sd)665 data_export = data_export[data_export['salary'] >= salary_min_var]666 data_export = data_export[data_export['salary'] <= salary_max_var]667 668 name_export = name_export[name_export['salary'] >= salary_min_var]669 name_export = name_export[name_export['salary'] <= salary_max_var]670 671 reg_opt_col, pm_opt_col = st.columns(2)672 with reg_opt_col:673 st.download_button(674 label="Export optimals set (IDs)",675 data=convert_df(data_export),676 file_name='NBA_optimals_export.csv',677 mime='text/csv',678 )679 st.download_button(680 label="Export optimals set (Names)",681 data=convert_df(name_export),682 file_name='NBA_optimals_export.csv',683 mime='text/csv',684 )685 with pm_opt_col:686 if site_var2 == 'Draftkings':687 if slate_type_var1 == 'Regular':688 if league_var == 'NBA':689 data_export = data_export.set_index('PG').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)690 elif league_var == 'WNBA':691 data_export = data_export.set_index('G1').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)692 elif slate_type_var1 == 'Showdown':693 data_export = data_export.set_index('CPT').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)694 elif site_var2 == 'Fanduel':695 if slate_type_var1 == 'Regular':696 if league_var == 'NBA':697 data_export = data_export.set_index('PG1').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)698 elif league_var == 'WNBA':699 data_export = data_export.set_index('G1').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)700 elif slate_type_var1 == 'Showdown':701 data_export = data_export.set_index('CPT').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)702 st.download_button(703 label="Portfolio Manager Export (IDs)",704 data=convert_pm_df(data_export),705 file_name='NBA_optimals_export.csv',706 mime='text/csv',707 )708 709 if site_var2 == 'Draftkings':710 if slate_type_var1 == 'Regular':711 if league_var == 'NBA':712 name_export = name_export.set_index('PG').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)713 elif league_var == 'WNBA':714 name_export = name_export.set_index('G1').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)715 elif slate_type_var1 == 'Showdown':716 name_export = name_export.set_index('CPT').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)717 elif site_var2 == 'Fanduel':718 if slate_type_var1 == 'Regular':719 if league_var == 'NBA':720 name_export = name_export.set_index('PG1').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)721 elif league_var == 'WNBA':722 name_export = name_export.set_index('G1').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)723 elif slate_type_var1 == 'Showdown':724 name_export = name_export.set_index('CPT').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)725 st.download_button(726 label="Portfolio Manager Export (Names)",727 data=convert_pm_df(name_export),728 file_name='NBA_optimals_export.csv',729 mime='text/csv',730 )731 732 733 if site_var2 == 'Draftkings':734 if 'working_seed' in st.session_state:735 st.session_state.working_seed = st.session_state.working_seed736 if player_var1 == 'Specific Players':737 st.session_state.working_seed = st.session_state.working_seed[np.equal.outer(st.session_state.working_seed, player_var2).any(axis=1).all(axis=1)]738 elif player_var1 == 'Full Slate':739 st.session_state.working_seed = st.session_state.working_seed740 st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)741 742 elif 'working_seed' not in st.session_state:743 if slate_type_var1 == 'Regular':744 st.session_state.working_seed = init_DK_lineups(slate_var1, league_var)745 elif slate_type_var1 == 'Showdown':746 st.session_state.working_seed = init_DK_SD_lineups(slate_var1, league_var)747 st.session_state.working_seed = st.session_state.working_seed748 if player_var1 == 'Specific Players':749 st.session_state.working_seed = st.session_state.working_seed[np.equal.outer(st.session_state.working_seed, player_var2).any(axis=1).all(axis=1)]750 elif player_var1 == 'Full Slate':751 if slate_type_var1 == 'Regular':752 st.session_state.working_seed = init_DK_lineups(slate_var1, league_var)753 elif slate_type_var1 == 'Showdown':754 st.session_state.working_seed = init_DK_SD_lineups(slate_var1, league_var)755 st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)756 757 elif site_var2 == 'Fanduel':758 if 'working_seed' in st.session_state:759 st.session_state.working_seed = st.session_state.working_seed760 if player_var1 == 'Specific Players':761 st.session_state.working_seed = st.session_state.working_seed[np.equal.outer(st.session_state.working_seed, player_var2).any(axis=1).all(axis=1)]762 elif player_var1 == 'Full Slate':763 st.session_state.working_seed = st.session_state.working_seed764 st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)765 766 elif 'working_seed' not in st.session_state:767 if slate_type_var1 == 'Regular':768 st.session_state.working_seed = init_FD_lineups(slate_var1, league_var)769 elif slate_type_var1 == 'Showdown':770 st.session_state.working_seed = init_FD_SD_lineups(slate_var1, league_var)771 st.session_state.working_seed = st.session_state.working_seed772 if player_var1 == 'Specific Players':773 st.session_state.working_seed = st.session_state.working_seed[np.equal.outer(st.session_state.working_seed, player_var2).any(axis=1).all(axis=1)]774 elif player_var1 == 'Full Slate':775 if slate_type_var1 == 'Regular':776 st.session_state.working_seed = init_FD_lineups(slate_var1, league_var)777 elif slate_type_var1 == 'Showdown':778 st.session_state.working_seed = init_FD_SD_lineups(slate_var1, league_var)779 st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)780 st.session_state.data_export_display = st.session_state.data_export_display[st.session_state.data_export_display['salary'].between(salary_min_var, salary_max_var)]781 export_file = st.session_state.data_export_display.copy()782 if site_var2 == 'Draftkings':783 if slate_type_var1 == 'Regular':784 for col_idx in range(8):785 export_file.iloc[:, col_idx] = export_file.iloc[:, col_idx].map(id_dict)786 elif slate_type_var1 == 'Showdown':787 for col_idx in range(6):788 export_file.iloc[:, col_idx] = export_file.iloc[:, col_idx].map(dk_id_dict_sd)789 elif site_var2 == 'Fanduel':790 if slate_type_var1 == 'Regular':791 for col_idx in range(9):792 export_file.iloc[:, col_idx] = export_file.iloc[:, col_idx].map(id_dict)793 elif slate_type_var1 == 'Showdown':794 for col_idx in range(6):795 export_file.iloc[:, col_idx] = export_file.iloc[:, col_idx].map(fd_id_dict_sd)796 797 with st.container():798 if st.button("Reset Optimals", key='reset3'):799 for key in st.session_state.keys():800 del st.session_state[key]801 if site_var2 == 'Draftkings':802 if league_var == 'NBA':803 if slate_type_var1 == 'Regular':804 st.session_state.working_seed = dk_nba_lineups.copy()805 elif slate_type_var1 == 'Showdown':806 st.session_state.working_seed = dk_nba_sd_lineups.copy()807 elif league_var == 'WNBA':808 if slate_type_var1 == 'Regular':809 st.session_state.working_seed = dk_wnba_lineups.copy()810 elif slate_type_var1 == 'Showdown':811 st.session_state.working_seed = dk_wnba_sd_lineups.copy()812 elif site_var2 == 'Fanduel':813 if league_var == 'NBA':814 if slate_type_var1 == 'Regular':815 st.session_state.working_seed = fd_nba_lineups.copy()816 elif slate_type_var1 == 'Showdown':817 st.session_state.working_seed = fd_nba_sd_lineups.copy()818 elif league_var == 'WNBA':819 if slate_type_var1 == 'Regular':820 st.session_state.working_seed = fd_wnba_lineups.copy()821 elif slate_type_var1 == 'Showdown':822 st.session_state.working_seed = fd_wnba_sd_lineups.copy()823 if 'data_export_display' in st.session_state:824 st.dataframe(st.session_state.data_export_display.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(precision=2), height=500, use_container_width = True)825 st.download_button(826 label="Export display optimals",827 data=convert_df(export_file),828 file_name='NBA_display_optimals.csv',829 mime='text/csv',830 )831 832 with st.container():833 if 'working_seed' in st.session_state:834 # Create a new dataframe with summary statistics835 if site_var2 == 'Draftkings':836 if league_var == 'NBA':837 if slate_type_var1 == 'Regular':838 summary_df = pd.DataFrame({839 'Metric': ['Min', 'Average', 'Max', 'STDdev'],840 'Salary': [841 np.min(st.session_state.working_seed[:,8]),842 np.mean(st.session_state.working_seed[:,8]),843 np.max(st.session_state.working_seed[:,8]),844 np.std(st.session_state.working_seed[:,8])845 ],846 'Proj': [847 np.min(st.session_state.working_seed[:,9]),848 np.mean(st.session_state.working_seed[:,9]),849 np.max(st.session_state.working_seed[:,9]),850 np.std(st.session_state.working_seed[:,9])851 ],852 'Own': [853 np.min(st.session_state.working_seed[:,14]),854 np.mean(st.session_state.working_seed[:,14]),855 np.max(st.session_state.working_seed[:,14]),856 np.std(st.session_state.working_seed[:,14])857 ]858 })859 elif slate_type_var1 == 'Showdown':860 summary_df = pd.DataFrame({861 'Metric': ['Min', 'Average', 'Max', 'STDdev'],862 'Salary': [863 np.min(st.session_state.working_seed[:,6]),864 np.mean(st.session_state.working_seed[:,6]),865 np.max(st.session_state.working_seed[:,6]),866 np.std(st.session_state.working_seed[:,6])867 ],868 'Proj': [869 np.min(st.session_state.working_seed[:,7]),870 np.mean(st.session_state.working_seed[:,7]),871 np.max(st.session_state.working_seed[:,7]),872 np.std(st.session_state.working_seed[:,7])873 ],874 'Own': [875 np.min(st.session_state.working_seed[:,12]),876 np.mean(st.session_state.working_seed[:,12]),877 np.max(st.session_state.working_seed[:,12]),878 np.std(st.session_state.working_seed[:,12])879 ]880 })881 elif league_var == 'WNBA':882 if slate_type_var1 == 'Regular':883 summary_df = pd.DataFrame({884 'Metric': ['Min', 'Average', 'Max', 'STDdev'],885 'Salary': [886 np.min(st.session_state.working_seed[:,6]),887 np.mean(st.session_state.working_seed[:,6]),888 np.max(st.session_state.working_seed[:,6]),889 np.std(st.session_state.working_seed[:,6])890 ],891 'Proj': [892 np.min(st.session_state.working_seed[:,7]),893 np.mean(st.session_state.working_seed[:,7]),894 np.max(st.session_state.working_seed[:,7]),895 np.std(st.session_state.working_seed[:,7])896 ],897 'Own': [898 np.min(st.session_state.working_seed[:,12]),899 np.mean(st.session_state.working_seed[:,12]),900 np.max(st.session_state.working_seed[:,12]),901 np.std(st.session_state.working_seed[:,12])902 ]903 })904 elif slate_type_var1 == 'Showdown':905 summary_df = pd.DataFrame({906 'Metric': ['Min', 'Average', 'Max', 'STDdev'],907 'Salary': [908 np.min(st.session_state.working_seed[:,6]),909 np.mean(st.session_state.working_seed[:,6]),910 np.max(st.session_state.working_seed[:,6]),911 np.std(st.session_state.working_seed[:,6])912 ],913 'Proj': [914 np.min(st.session_state.working_seed[:,7]),915 np.mean(st.session_state.working_seed[:,7]),916 np.max(st.session_state.working_seed[:,7]),917 np.std(st.session_state.working_seed[:,7])918 ],919 'Own': [920 np.min(st.session_state.working_seed[:,12]),921 np.mean(st.session_state.working_seed[:,12]),922 np.max(st.session_state.working_seed[:,12]),923 np.std(st.session_state.working_seed[:,12])924 ]925 })926 927 elif site_var2 == 'Fanduel':928 if league_var == 'NBA':929 if slate_type_var1 == 'Regular':930 summary_df = pd.DataFrame({931 'Metric': ['Min', 'Average', 'Max', 'STDdev'],932 'Salary': [933 np.min(st.session_state.working_seed[:,9]),934 np.mean(st.session_state.working_seed[:,9]),935 np.max(st.session_state.working_seed[:,9]),936 np.std(st.session_state.working_seed[:,9])937 ],938 'Proj': [939 np.min(st.session_state.working_seed[:,10]),940 np.mean(st.session_state.working_seed[:,10]),941 np.max(st.session_state.working_seed[:,10]),942 np.std(st.session_state.working_seed[:,10])943 ],944 'Own': [945 np.min(st.session_state.working_seed[:,15]),946 np.mean(st.session_state.working_seed[:,15]),947 np.max(st.session_state.working_seed[:,15]),948 np.std(st.session_state.working_seed[:,15])949 ]950 })951 elif slate_type_var1 == 'Showdown':952 summary_df = pd.DataFrame({953 'Metric': ['Min', 'Average', 'Max', 'STDdev'],954 'Salary': [955 np.min(st.session_state.working_seed[:,6]),956 np.mean(st.session_state.working_seed[:,6]),957 np.max(st.session_state.working_seed[:,6]),958 np.std(st.session_state.working_seed[:,6])959 ],960 'Proj': [961 np.min(st.session_state.working_seed[:,7]),962 np.mean(st.session_state.working_seed[:,7]),963 np.max(st.session_state.working_seed[:,7]),964 np.std(st.session_state.working_seed[:,7])965 ],966 'Own': [967 np.min(st.session_state.working_seed[:,12]),968 np.mean(st.session_state.working_seed[:,12]),969 np.max(st.session_state.working_seed[:,12]),970 np.std(st.session_state.working_seed[:,12])971 ]972 })973 elif league_var == 'WNBA':974 if slate_type_var1 == 'Regular':975 summary_df = pd.DataFrame({976 'Metric': ['Min', 'Average', 'Max', 'STDdev'],977 'Salary': [978 np.min(st.session_state.working_seed[:,7]),979 np.mean(st.session_state.working_seed[:,7]),980 np.max(st.session_state.working_seed[:,7]),981 np.std(st.session_state.working_seed[:,7])982 ],983 'Proj': [984 np.min(st.session_state.working_seed[:,8]),985 np.mean(st.session_state.working_seed[:,8]),986 np.max(st.session_state.working_seed[:,8]),987 np.std(st.session_state.working_seed[:,8])988 ],989 'Own': [990 np.min(st.session_state.working_seed[:,13]),991 np.mean(st.session_state.working_seed[:,13]),992 np.max(st.session_state.working_seed[:,13]),993 np.std(st.session_state.working_seed[:,13])994 ]995 })996 elif slate_type_var1 == 'Showdown':997 summary_df = pd.DataFrame({998 'Metric': ['Min', 'Average', 'Max', 'STDdev'],999 'Salary': [1000 np.min(st.session_state.working_seed[:,6]),1001 np.mean(st.session_state.working_seed[:,6]),1002 np.max(st.session_state.working_seed[:,6]),1003 np.std(st.session_state.working_seed[:,6])1004 ],1005 'Proj': [1006 np.min(st.session_state.working_seed[:,7]),1007 np.mean(st.session_state.working_seed[:,7]),1008 np.max(st.session_state.working_seed[:,7]),1009 np.std(st.session_state.working_seed[:,7])1010 ],1011 'Own': [1012 np.min(st.session_state.working_seed[:,12]),1013 np.mean(st.session_state.working_seed[:,12]),1014 np.max(st.session_state.working_seed[:,12]),1015 np.std(st.session_state.working_seed[:,12])1016 ]1017 })1018 1019 # Set the index of the summary dataframe as the "Metric" column1020 summary_df = summary_df.set_index('Metric')1021 1022 # Display the summary dataframe1023 st.subheader("Optimal Statistics")1024 st.dataframe(summary_df.style.format({1025 'Salary': '{:.2f}',1026 'Proj': '{:.2f}',1027 'Own': '{:.2f}'1028 }).background_gradient(cmap='RdYlGn', axis=0, subset=['Salary', 'Proj', 'Own']), use_container_width=True)1029 1030 with st.container():1031 tab1, tab2 = st.tabs(["Display Frequency", "Seed Frame Frequency"])1032 with tab1:1033 if 'data_export_display' in st.session_state:1034 if league_var == 'NBA':1035 if slate_type_var1 == 'Regular':1036 if site_var2 == 'Draftkings':1037 player_columns = st.session_state.data_export_display.iloc[:, :8]1038 elif site_var2 == 'Fanduel':1039 player_columns = st.session_state.data_export_display.iloc[:, :9]1040 elif slate_type_var1 == 'Showdown':1041 if site_var2 == 'Draftkings':1042 player_columns = st.session_state.data_export_display.iloc[:, :5]1043 elif site_var2 == 'Fanduel':1044 player_columns = st.session_state.data_export_display.iloc[:, :5]1045 elif league_var == 'WNBA':1046 if slate_type_var1 == 'Regular':1047 if site_var2 == 'Draftkings':1048 player_columns = st.session_state.data_export_display.iloc[:, :6]1049 elif site_var2 == 'Fanduel':1050 player_columns = st.session_state.data_export_display.iloc[:, :7]1051 elif slate_type_var1 == 'Showdown':1052 if site_var2 == 'Draftkings':1053 player_columns = st.session_state.data_export_display.iloc[:, :5]1054 elif site_var2 == 'Fanduel':1055 player_columns = st.session_state.data_export_display.iloc[:, :5]1056 1057 1058 # Flatten the DataFrame and count unique values1059 value_counts = player_columns.values.flatten().tolist()1060 value_counts = pd.Series(value_counts).value_counts()1061 1062 percentages = (value_counts / lineup_num_var * 100).round(2)1063 1064 # Create a DataFrame with the results1065 summary_df = pd.DataFrame({1066 'Player': value_counts.index,1067 'Salary': [salary_dict.get(player, player) for player in value_counts.index],1068 'Frequency': value_counts.values,1069 'Percentage': percentages.values 1070 })1071 1072 # Sort by frequency in descending order1073 summary_df = summary_df.sort_values('Frequency', ascending=False)1074 1075 # Display the table1076 st.write("Player Frequency Table:")1077 st.dataframe(summary_df.style.format({'Percentage': '{:.2f}%'}, precision=2), height=500, use_container_width=True)1078 1079 st.download_button(1080 label="Export player frequency",1081 data=convert_df_to_csv(summary_df),1082 file_name='NBA_player_frequency.csv',1083 mime='text/csv',1084 )1085 with tab2:1086 if 'working_seed' in st.session_state:1087 if league_var == 'NBA':1088 if slate_type_var1 == 'Regular':1089 if site_var2 == 'Draftkings':1090 player_columns = st.session_state.working_seed[:, :8]1091 elif site_var2 == 'Fanduel':1092 player_columns = st.session_state.working_seed[:, :9]1093 elif slate_type_var1 == 'Showdown':1094 if site_var2 == 'Draftkings':1095 player_columns = st.session_state.working_seed[:, :5]1096 elif site_var2 == 'Fanduel':1097 player_columns = st.session_state.working_seed[:, :5]1098 elif league_var == 'WNBA':1099 if slate_type_var1 == 'Regular':1100 if site_var2 == 'Draftkings':1101 player_columns = st.session_state.working_seed[:, :6]1102 elif site_var2 == 'Fanduel':1103 player_columns = st.session_state.working_seed[:, :7]1104 elif slate_type_var1 == 'Showdown':1105 if site_var2 == 'Draftkings':1106 player_columns = st.session_state.working_seed[:, :5]1107 elif site_var2 == 'Fanduel':1108 player_columns = st.session_state.working_seed[:, :5]1109 1110 # Flatten the DataFrame and count unique values1111 value_counts = player_columns.flatten().tolist()1112 value_counts = pd.Series(value_counts).value_counts()1113 1114 percentages = (value_counts / len(st.session_state.working_seed) * 100).round(2)1115 # Create a DataFrame with the results1116 summary_df = pd.DataFrame({1117 'Player': value_counts.index,1118 'Salary': [salary_dict.get(player, player) for player in value_counts.index],1119 'Frequency': value_counts.values,1120 'Percentage': percentages.values 1121 })1122 1123 # Sort by frequency in descending order1124 summary_df = summary_df.sort_values('Frequency', ascending=False)1125 1126 # Display the table1127 st.write("Seed Frame Frequency Table:")1128 st.dataframe(summary_df.style.format({'Percentage': '{:.2f}%'}, precision=2), height=500, use_container_width=True)1129 1130 st.download_button(1131 label="Export seed frame frequency",1132 data=convert_df_to_csv(summary_df),1133 file_name='NBA_seed_frame_frequency.csv',1134 mime='text/csv',1135 )1136 