CoolFace
Apppublic

TrueDFS/NBA_DFS_ROO_origin

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes
app.py1136 linesDownload Raw Back to root
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