James McCool
Adding MMA functionality to Dockerfile as well as adding any Go executables, change the database to grab from the MMA database, change the Streamlit app and the MMA_functions to add functionality.
61b5f4b
| import streamlit as st | |
| import time | |
| # Numpy | |
| from numpy import nan as np_nan | |
| from numpy import inf as np_inf | |
| # Pandas | |
| from pandas import DataFrame | |
| from pandas import concat as pd_concat | |
| from pandas import options as pd_options | |
| from pandas import errors as pd_errors | |
| from pandas import options as poptions | |
| from pandas import set_option | |
| # Time | |
| from time import sleep as time_sleep | |
| from datetime import datetime, date | |
| from pytz import timezone as pytz_timezone | |
| # Database and configuration - imported globally | |
| from database import * | |
| # Streamlit UI Configuration | |
| st.set_page_config( | |
| page_title="Paydirt Model Updates", | |
| page_icon="π", | |
| layout="wide" | |
| ) | |
| # Custom CSS for consistent styling | |
| st.markdown(""" | |
| <style> | |
| /* Tab styling */ | |
| .stElementContainer [data-baseweb="button-group"] { | |
| gap: 2.000rem; | |
| padding: 4px; | |
| } | |
| .stElementContainer [kind="segmented_control"] { | |
| height: 2.000rem; | |
| white-space: pre-wrap; | |
| background-color: #DAA520; | |
| color: white; | |
| border-radius: 20px; | |
| gap: 1px; | |
| padding: 10px 20px; | |
| font-weight: bold; | |
| transition: all 0.3s ease; | |
| } | |
| .stElementContainer [kind="segmented_controlActive"] { | |
| height: 3.000rem; | |
| background-color: #DAA520; | |
| border: 3px solid #FFD700; | |
| border-radius: 10px; | |
| color: black; | |
| } | |
| .stElementContainer [kind="segmented_control"]:hover { | |
| background-color: #FFD700; | |
| cursor: pointer; | |
| } | |
| div[data-baseweb="select"] > div { | |
| background-color: #DAA520; | |
| color: white; | |
| } | |
| </style>""", unsafe_allow_html=True) | |
| # Header | |
| st.title("π Paydirt Model Updates") | |
| st.markdown("### Update models and generate seed frames") | |
| st.markdown("---") | |
| # Sport Selection | |
| sport_icons = { | |
| "NHL": "π", | |
| "NFL": "π", | |
| "NBA": "π", | |
| "MLB": "βΎ", | |
| "PGA": "β³", | |
| "MMA": "π₯" | |
| } | |
| selected_tab = st.segmented_control( | |
| "Select Tab", | |
| options=["NHL Updates", "NBA Updates", 'MLB Updates', 'NFL Updates', 'PGA Updates', 'MMA Updates'], | |
| selection_mode='single', | |
| default='NHL Updates', | |
| width='stretch', | |
| label_visibility='collapsed', | |
| key='tab_selector' | |
| ) | |
| # ============================================================================ | |
| # NHL UPDATES TAB | |
| # ============================================================================ | |
| if selected_tab == "NHL Updates": | |
| from sports.nhl_functions import * | |
| st.header("π NHL Model Updates") | |
| if st.button("π Run NHL Updates", type="primary", use_container_width=True): | |
| with st.spinner("Updating NHL models..."): | |
| st.write("Starting prop betting table generation...") | |
| upload_betting_data(nhl_db) | |
| try: | |
| discord.post(content="NHL Prop Betting Table refreshed") | |
| except: | |
| pass | |
| st.write("Starting DraftKings player level basic outcomes generation...") | |
| roo_file, own_dicts = build_dk_player_level_basic_outcomes(slate_info, dk_player_hold, fd_player_hold, nhl_db) | |
| if roo_file is not None and len(roo_file) > 0: | |
| st.write("NHL Draftkings Player Level ROO refreshed") | |
| st.table(roo_file.head(10)) | |
| else: | |
| st.error("NHL Draftkings Player Level ROO generation failed") | |
| st.stop() | |
| st.write("Starting DraftKings stack matrix basic outcomes generation...") | |
| dk_stacks_outcomes = build_dk_stack_matrix_basic_outcomes(slate_info, dk_stacks_hold, own_dicts) | |
| st.write("Starting Fanduel stack matrix basic outcomes generation...") | |
| fd_stacks_outcomes = build_fd_stack_matrix_basic_outcomes(slate_info, fd_stacks_hold) | |
| st.write("Starting DraftKings pp stack matrix basic outcomes generation...") | |
| dk_pp_outcomes = build_dk_pp_stack_matrix_basic_outcomes(slate_info, dk_pp_stacks_hold, own_dicts) | |
| st.write("Starting Fanduel pp stack matrix basic outcomes generation...") | |
| fd_pp_outcomes = build_fd_pp_stack_matrix_basic_outcomes(slate_info, fd_pp_stacks_hold) | |
| final_stacks_Proj = pd_concat([dk_stacks_outcomes, fd_stacks_outcomes]) | |
| final_stacks_Proj.replace([np_nan, np_inf, -np_inf], 0, inplace=True) | |
| sh = gc.open_by_url(NHL_Master_hold) | |
| worksheet = sh.worksheet('Player_Lines_ROO') | |
| worksheet.batch_clear(['A:Z']) | |
| worksheet.update([final_stacks_Proj.columns.values.tolist()] + final_stacks_Proj.values.tolist()) | |
| collection = nhl_db['Player_Lines_ROO'] | |
| final_stacks_Proj.reset_index(inplace=True) | |
| chunk_size = 100000 | |
| collection.drop() | |
| for i in range(0, len(final_stacks_Proj), chunk_size): | |
| for _ in range(5): | |
| try: | |
| df_chunk = final_stacks_Proj.iloc[i:i + chunk_size] | |
| collection.insert_many(df_chunk.to_dict('records'), ordered=False) | |
| break | |
| except Exception as e: | |
| st.write(f"Retry due to error: {e}") | |
| time_sleep(1) | |
| st.write("NHL Stack Matrix refreshed") | |
| final_pp_Proj = pd_concat([dk_pp_outcomes, fd_pp_outcomes]) | |
| final_pp_Proj.replace([np_nan, np_inf, -np_inf], 0, inplace=True) | |
| worksheet = sh.worksheet('Player_PowerPlay_ROO') | |
| worksheet.batch_clear(['A:Z']) | |
| worksheet.update([final_pp_Proj.columns.values.tolist()] + final_pp_Proj.values.tolist()) | |
| collection = nhl_db['Player_Powerplay_ROO'] | |
| final_pp_Proj.reset_index(inplace=True) | |
| chunk_size = 100000 | |
| collection.drop() | |
| for i in range(0, len(final_pp_Proj), chunk_size): | |
| for _ in range(5): | |
| try: | |
| df_chunk = final_pp_Proj.iloc[i:i + chunk_size] | |
| collection.insert_many(df_chunk.to_dict('records'), ordered=False) | |
| break | |
| except Exception as e: | |
| st.write(f"Retry due to error: {e}") | |
| time_sleep(1) | |
| st.write("NHL Powerplay Stack Matrix refreshed") | |
| now = datetime.now() | |
| current_time = now.strftime("%H:%M:%S") | |
| sh = gc.open_by_url(NHL_Master_hold) | |
| worksheet = sh.worksheet('Timestamp') | |
| worksheet.batch_clear(['A:z']) | |
| worksheet.update_cell(1, 1, current_time) | |
| try: | |
| sh = gc.open_by_url(NHL_Master_hold) | |
| worksheet = sh.worksheet('Prop_Frame') | |
| prop_frame = DataFrame(worksheet.get_values()) | |
| except: | |
| sh = gc2.open_by_url(NHL_Master_hold) | |
| worksheet = sh.worksheet('Prop_Frame') | |
| prop_frame = DataFrame(worksheet.get_values()) | |
| prop_frame.columns = prop_frame.iloc[0] | |
| prop_frame = prop_frame[1:] | |
| prop_frame = prop_frame.reset_index(drop=True) | |
| prop_frame = prop_frame.replace('', np_nan) | |
| prop_frame = prop_frame.dropna(subset=['Salary']) | |
| collection = nhl_db['Player_Level_ROO'] | |
| roo_file.reset_index(inplace=True) | |
| chunk_size = 100000 | |
| collection.drop() | |
| for i in range(0, len(roo_file), chunk_size): | |
| for _ in range(5): | |
| try: | |
| df_chunk = roo_file.iloc[i:i + chunk_size] | |
| collection.insert_many(df_chunk.to_dict('records'), ordered=False) | |
| break | |
| except Exception as e: | |
| st.write(f"Retry due to error: {e}") | |
| time_sleep(1) | |
| st.write("Starting DraftKings NHL seed frame generation...") | |
| DK_NHL_seed_frame(nhl_db, roo_file) | |
| st.write("NHL Draftkings Seed Frames refreshed") | |
| st.write("Starting Fanduel NHL seed frame generation...") | |
| FD_NHL_seed_frame(nhl_db, roo_file) | |
| st.write("NHL Fanduel Seed Frames refreshed") | |
| st.success("β NHL updates completed successfully!") | |
| st.balloons() | |
| # ============================================================================ | |
| # NBA UPDATES TAB | |
| # ============================================================================ | |
| elif selected_tab == "NBA Updates": | |
| from sports.nba_functions import * | |
| st.header("π NBA Model Updates") | |
| if st.button("π Run NBA Updates", type="primary", use_container_width=True): | |
| with st.spinner("Updating NBA models..."): | |
| x = 0 | |
| high_end = 1 | |
| while x < high_end: | |
| try: | |
| sh = gc.open_by_url(NBA_Master_hold) | |
| worksheet = sh.worksheet('DK_Projections') | |
| dk_projects_raw = DataFrame(worksheet.get_values()) | |
| except: | |
| sh = gc2.open_by_url(NBA_Master_hold) | |
| worksheet = sh.worksheet('DK_Projections') | |
| dk_projects_raw = DataFrame(worksheet.get_values()) | |
| dk_projects_raw.columns = dk_projects_raw.iloc[0] | |
| dk_projects_raw = dk_projects_raw[1:] | |
| dk_projects_raw = dk_projects_raw.reset_index(drop=True) | |
| dk_projects_raw = dk_projects_raw.replace('', np_nan) | |
| dk_projects_raw = dk_projects_raw.dropna(subset=['Salary']) | |
| try: | |
| sh = gc.open_by_url(NBA_Master_hold) | |
| worksheet = sh.worksheet('FD_Projections') | |
| fd_projects_raw = DataFrame(worksheet.get_values()) | |
| except: | |
| sh = gc2.open_by_url(NBA_Master_hold) | |
| worksheet = sh.worksheet('FD_Projections') | |
| fd_projects_raw = DataFrame(worksheet.get_values()) | |
| fd_projects_raw.columns = fd_projects_raw.iloc[0] | |
| fd_projects_raw = fd_projects_raw[1:] | |
| fd_projects_raw = fd_projects_raw.reset_index(drop=True) | |
| fd_projects_raw = fd_projects_raw.replace('', np_nan) | |
| fd_projects_raw = fd_projects_raw.dropna(subset=['Salary']) | |
| st.write("Starting DraftKings player level basic outcomes generation...") | |
| dk_roo_result = DK_ROO_Structure_Creation(dk_projects_raw, short_team_acro, long_team_acro, team_only_acro) | |
| st.write("NBA Draftkings ROO structure refreshed") | |
| st.write("Starting Fanduel player level basic outcomes generation...") | |
| fd_roo_result = FD_ROO_Structure_Creation(fd_projects_raw, short_team_acro, long_team_acro, team_only_acro) | |
| st.write("NBA Fanduel ROO structure refreshed") | |
| st.write("Starting DraftKings NBA seed frame generation...") | |
| DK_NBA_seed_frame(dk_roo_result, client) | |
| st.write("NBA Draftkings Seed Frames refreshed") | |
| st.write("Starting Fanduel NBA seed frame generation...") | |
| FD_NBA_seed_frame(fd_roo_result, client) | |
| st.write("NBA Fanduel Seed Frames refreshed") | |
| try: | |
| sh = gc.open_by_url(NBA_Master_hold) | |
| worksheet = sh.worksheet('DK_SD_Projections') | |
| dk_sd_projections = DataFrame(worksheet.get_values()) | |
| except: | |
| sh = gc2.open_by_url(NBA_Master_hold) | |
| worksheet = sh.worksheet('DK_SD_Projections') | |
| dk_sd_projections = DataFrame(worksheet.get_values()) | |
| dk_sd_projections.columns = dk_sd_projections.iloc[0] | |
| dk_sd_projections = dk_sd_projections[1:] | |
| dk_sd_projections = dk_sd_projections.reset_index(drop=True) | |
| dk_sd_projections = dk_sd_projections.replace('', np_nan) | |
| dk_sd_projections = dk_sd_projections.dropna(subset=['Salary']) | |
| try: | |
| sh = gc.open_by_url(NBA_Master_hold) | |
| worksheet = sh.worksheet('FD_SD_Projections') | |
| fd_sd_projections = DataFrame(worksheet.get_values()) | |
| except: | |
| sh = gc2.open_by_url(NBA_Master_hold) | |
| worksheet = sh.worksheet('FD_SD_Projections') | |
| fd_sd_projections = DataFrame(worksheet.get_values()) | |
| fd_sd_projections.columns = fd_sd_projections.iloc[0] | |
| fd_sd_projections = fd_sd_projections[1:] | |
| fd_sd_projections = fd_sd_projections.reset_index(drop=True) | |
| fd_sd_projections = fd_sd_projections.replace('', np_nan) | |
| fd_sd_projections = fd_sd_projections.dropna(subset=['Salary']) | |
| dk_showdown_options = list(dk_sd_projections['slate'].unique()) | |
| fd_showdown_options = list(fd_sd_projections['slate'].unique()) | |
| st.write("Starting DraftKings SD ROO structure generation...") | |
| dk_sd_roo_result = DK_SD_ROO(dk_sd_projections, dk_showdown_options) | |
| st.write("NBA Draftkings SD ROO structure refreshed") | |
| st.write("Starting Fanduel SD ROO structure generation...") | |
| fd_sd_roo_result = FD_SD_ROO(fd_sd_projections, fd_showdown_options) | |
| st.write("NBA Fanduel SD ROO structure refreshed") | |
| sd_roo_final = pd_concat([dk_sd_roo_result, fd_sd_roo_result]) | |
| st.write("Starting DraftKings SD seed frame generation...") | |
| DK_NBA_SD_seed_frame(dk_showdown_options, dk_sd_projections) | |
| st.write("NBA Draftkings SD Seed Frames refreshed") | |
| st.write("Starting Fanduel SD seed frame generation...") | |
| FD_NBA_SD_seed_frame(fd_showdown_options, fd_sd_projections) | |
| st.write("NBA Fanduel SD Seed Frames refreshed") | |
| upload_sd_dfs_data(client, sd_roo_final) | |
| st.write("NBA SD DFS database refreshed") | |
| x += 1 | |
| if high_end > 1: | |
| time_sleep(600) | |
| st.success("β NBA updates completed successfully!") | |
| st.balloons() | |
| # ============================================================================ | |
| # NFL UPDATES TAB | |
| # ============================================================================ | |
| elif selected_tab == "NFL Updates": | |
| from sports.nfl_functions import * | |
| st.header("π NFL Model Updates") | |
| if st.button("π Run NFL Updates", type="primary", use_container_width=True): | |
| with st.spinner("Updating NFL models..."): | |
| try: | |
| sh = gc.open_by_url(NFL_Master_hold) | |
| worksheet = sh.worksheet('DK_Projections') | |
| dk_projects_raw = DataFrame(worksheet.get_values()) | |
| except: | |
| sh = gc2.open_by_url(NFL_Master_hold) | |
| worksheet = sh.worksheet('DK_Projections') | |
| dk_projects_raw = DataFrame(worksheet.get_values()) | |
| dk_projects_raw.columns = dk_projects_raw.iloc[0] | |
| dk_projects_raw = dk_projects_raw[1:] | |
| dk_projects_raw = dk_projects_raw.reset_index(drop=True) | |
| dk_projects_raw = dk_projects_raw.replace('', np_nan) | |
| dk_projects_raw = dk_projects_raw.dropna(subset=['Salary']) | |
| try: | |
| sh = gc.open_by_url(NFL_Master_hold) | |
| worksheet = sh.worksheet('FD_Projections') | |
| fd_projects_raw = DataFrame(worksheet.get_values()) | |
| except: | |
| sh = gc2.open_by_url(NFL_Master_hold) | |
| worksheet = sh.worksheet('FD_Projections') | |
| fd_projects_raw = DataFrame(worksheet.get_values()) | |
| fd_projects_raw.columns = fd_projects_raw.iloc[0] | |
| fd_projects_raw = fd_projects_raw[1:] | |
| fd_projects_raw = fd_projects_raw.reset_index(drop=True) | |
| fd_projects_raw = fd_projects_raw.replace('', np_nan) | |
| fd_projects_raw = fd_projects_raw.dropna(subset=['Salary']) | |
| st.write("Starting DraftKings team level stacks generation...") | |
| dk_player_hold = DK_Team_Level_Stacks(dk_projects_raw, team_only_acro, long_team_acro, short_team_acro, client) | |
| st.write("NFL Draftkings Team Level Stacks refreshed") | |
| st.write("Starting Fanduel team level stacks generation...") | |
| fd_player_hold = FD_Team_Level_Stacks(fd_projects_raw, team_only_acro, long_team_acro, short_team_acro, client) | |
| st.write("NFL Fanduel Team Level Stacks refreshed") | |
| st.write("Starting DraftKings ROO structure generation...") | |
| dk_roo_result = DK_ROO_Structure_Creation(dk_player_hold, short_team_acro, long_team_acro, team_only_acro) | |
| st.write("NFL Draftkings ROO structure refreshed") | |
| st.write("Starting Fanduel ROO structure generation...") | |
| fd_roo_result = FD_ROO_Structure_Creation(fd_player_hold, short_team_acro, long_team_acro, team_only_acro) | |
| st.write("NFL Fanduel ROO structure refreshed") | |
| st.write("Starting DraftKings seed frame generation...") | |
| DK_seed_frame(dk_roo_result, seed_team_acro, short_team_acro, client) | |
| st.write("NFL Draftkings Seed Frames refreshed") | |
| st.write("Starting Fanduel seed frame generation...") | |
| FD_seed_frame(fd_roo_result, seed_team_acro, short_team_acro, client) | |
| st.write("NFL Fanduel Seed Frames refreshed") | |
| upload_betting_data(client) | |
| st.write("NFL Player Baselines refreshed") | |
| try: | |
| sh = gc.open_by_url(NFL_Master_hold) | |
| worksheet = sh.worksheet('DK_SD_Projections') | |
| dk_sd_projections = DataFrame(worksheet.get_values()) | |
| except: | |
| sh = gc2.open_by_url(NFL_Master_hold) | |
| worksheet = sh.worksheet('DK_SD_Projections') | |
| dk_sd_projections = DataFrame(worksheet.get_values()) | |
| dk_sd_projections.columns = dk_sd_projections.iloc[0] | |
| dk_sd_projections = dk_sd_projections[1:] | |
| dk_sd_projections = dk_sd_projections.reset_index(drop=True) | |
| dk_sd_projections = dk_sd_projections.replace('', np_nan) | |
| dk_sd_projections = dk_sd_projections.dropna(subset=['Salary']) | |
| try: | |
| sh = gc.open_by_url(NFL_Master_hold) | |
| worksheet = sh.worksheet('FD_SD_Projections') | |
| fd_sd_projections = DataFrame(worksheet.get_values()) | |
| except: | |
| sh = gc2.open_by_url(NFL_Master_hold) | |
| worksheet = sh.worksheet('FD_SD_Projections') | |
| fd_sd_projections = DataFrame(worksheet.get_values()) | |
| fd_sd_projections.columns = fd_sd_projections.iloc[0] | |
| fd_sd_projections = fd_sd_projections[1:] | |
| fd_sd_projections = fd_sd_projections.reset_index(drop=True) | |
| fd_sd_projections = fd_sd_projections.replace('', np_nan) | |
| fd_sd_projections = fd_sd_projections.dropna(subset=['Salary']) | |
| dk_showdown_options = list(dk_sd_projections['slate'].unique()) | |
| fd_showdown_options = list(fd_sd_projections['slate'].unique()) | |
| st.write("Starting DraftKings SD ROO structure generation...") | |
| dk_sd_roo_result = DK_SD_ROO(dk_sd_projections, team_only_acro, long_team_acro, dk_showdown_options) | |
| st.write("NFL Draftkings SD ROO structure refreshed") | |
| st.write("Starting Fanduel SD ROO structure generation...") | |
| fd_sd_roo_result = FD_SD_ROO(fd_sd_projections, team_only_acro, long_team_acro, fd_showdown_options) | |
| st.write("NFL Fanduel SD ROO structure refreshed") | |
| for slate in dk_showdown_options: | |
| st.write(f"Processing DraftKings Showdown slate: {slate}") | |
| DK_SD_seed_frame(dk_sd_roo_result, team_only_acro, long_team_acro, client, dk_showdown_options, dk_sd_projections) | |
| for slate in fd_showdown_options: | |
| st.write(f"Processing Fanduel Showdown slate: {slate}") | |
| FD_SD_seed_frame(fd_sd_roo_result, team_only_acro, long_team_acro, client, fd_showdown_options, fd_sd_projections) | |
| st.success("β NFL updates completed successfully!") | |
| st.balloons() | |
| # ============================================================================ | |
| # PGA UPDATES TAB | |
| # ============================================================================ | |
| elif selected_tab == "PGA Updates": | |
| from sports.pga_functions import * | |
| st.header("β³ PGA Model Updates") | |
| # Column definitions | |
| str_columns = ['Name', 'Roster Position', 'Site', 'Type'] | |
| float_columns = ['Cut%', 'Win Odds', 'T5 Odds', 'T10 Odds', 'T20 Odds', 'CeilingVar', 'Fantasy', 'Own%'] | |
| int_columns = ['Salary', 'ID'] | |
| stat_columns = float_columns + int_columns | |
| if st.button("π Run PGA Updates", type="primary", use_container_width=True): | |
| with st.spinner("Updating PGA models..."): | |
| st.write("Loading PGA data from Google Sheets...") | |
| try: | |
| sh = gc.open_by_url(PGA_Master_hold) | |
| worksheet = sh.worksheet('Export') | |
| projects_raw = DataFrame(worksheet.get_values()) | |
| except: | |
| sh = gc2.open_by_url(PGA_Master_hold) | |
| worksheet = sh.worksheet('Export') | |
| projects_raw = DataFrame(worksheet.get_values()) | |
| projects_raw.columns = projects_raw.iloc[0] | |
| projects_raw = projects_raw[1:] | |
| projects_raw = projects_raw.reset_index(drop=True) | |
| projects_raw = projects_raw.replace('', np_nan) | |
| projects_raw = projects_raw.dropna(subset=['Salary']) | |
| projects_raw['Roster Position'] = 'FLEX' | |
| for col in str_columns: | |
| projects_raw[col] = projects_raw[col].astype(str) | |
| for col in float_columns: | |
| projects_raw[col] = projects_raw[col].str.replace('%', '').astype(float) / 100 | |
| for col in int_columns: | |
| projects_raw[col] = projects_raw[col].str.replace('%', '').astype(int) | |
| projects_raw = projects_raw[projects_raw['Fantasy'] > 0] | |
| projects_raw['Fantasy'] = projects_raw['Fantasy'] * 100 | |
| projects_raw['Own%'] = projects_raw['Own%'] * 100 | |
| projects_raw['Cut%'] = projects_raw['Cut%'] * 100 | |
| classic_proj = projects_raw[projects_raw['Type'] == 'Classic'] | |
| showdown_proj = projects_raw[projects_raw['Type'] == 'Showdown'] | |
| classic_stat_dicts = {} | |
| showdown_stat_dicts = {} | |
| for col in stat_columns: | |
| classic_stat_dicts[col] = dict(zip(classic_proj['Name'], classic_proj[col])) | |
| showdown_stat_dicts[col] = dict(zip(showdown_proj['Name'], showdown_proj[col])) | |
| classic_working_proj = classic_proj[['Name', 'Roster Position', 'Site', 'Type', 'Salary', 'ID', 'Cut%', 'Win Odds', 'T5 Odds', 'T10 Odds', 'T20 Odds', 'CeilingVar', 'Fantasy', 'Own%']] | |
| classic_working_proj = classic_working_proj.rename(columns={"Name": "Player", "Roster Position": "Position", "Fantasy": "Median", "Own%": "Own", "Cut%": "Cut_Odds", "Win Odds": "Win_Odds", "T5 Odds": "T5_Odds", "T10 Odds": "T10_Odds", "T20 Odds": "T20_Odds", "CeilingVar": "ceiling_avg"}) | |
| showdown_working_proj = showdown_proj[['Name', 'Roster Position', 'Site', 'Type', 'Salary', 'ID', 'Cut%', 'Win Odds', 'T5 Odds', 'T10 Odds', 'T20 Odds', 'CeilingVar', 'Fantasy', 'Own%']] | |
| showdown_working_proj = showdown_working_proj.rename(columns={"Name": "Player", "Roster Position": "Position", "Fantasy": "Median", "Own%": "Own", "Cut%": "Cut_Odds", "Win Odds": "Win_Odds", "T5 Odds": "T5_Odds", "T10 Odds": "T10_Odds", "T20 Odds": "T20_Odds", "CeilingVar": "ceiling_avg"}) | |
| st.write("PGA data loaded successfully!") | |
| st.write("Generating Classic PGA ROO structure...") | |
| classic_roo = player_level_classic_roo(classic_working_proj, classic_stat_dicts, client) | |
| st.write("PGA Draftkings Classic ROO structure refreshed") | |
| st.write("Generating Classic PGA seed frames...") | |
| DK_seed_frame(classic_roo, classic_stat_dicts, client, "Classic") | |
| st.write("PGA Draftkings Classic Seed Frames refreshed") | |
| st.write("Generating Showdown PGA ROO structure...") | |
| showdown_roo = player_level_showdown_roo(showdown_working_proj, showdown_stat_dicts, client) | |
| st.write("PGA Draftkings Showdown ROO structure refreshed") | |
| st.write("Generating Showdown PGA seed frames...") | |
| DK_seed_frame(showdown_roo, showdown_stat_dicts, client, "Showdown") | |
| st.write("PGA Draftkings Showdown Seed Frames refreshed") | |
| st.success("β PGA updates completed successfully!") | |
| st.balloons() | |
| # ============================================================================ | |
| # MLB UPDATES TAB | |
| # ============================================================================ | |
| elif selected_tab == "MLB Updates": | |
| from sports.mlb_functions import * | |
| st.header("βΎ MLB Model Updates") | |
| st.info("MLB updates coming soon!") | |
| st.write("MLB functionality will be added in a future update.") | |
| # ============================================================================ | |
| # MMA UPDATES TAB | |
| # ============================================================================ | |
| elif selected_tab == "MMA Updates": | |
| from sports.mma_functions import * | |
| st.header("π₯ MMA Model Updates") | |
| # Column definitions | |
| str_columns = ['Fighter1', 'Opp'] | |
| float_columns = ['Avg Win', 'Avg Loss', 'Avg Draw', 'ToWin', 'To Win By KO/TKO/DQ', 'To Win By Submission', 'To Win By Decision', 'Draw', 'Round 1', 'Round 2', 'Round 3', 'Round 4', 'Round 5', | |
| 'By Decision', 'Average', 'OddsProj', 'SalaryProj', 'DeviationVar', 'FloorProj', 'AggProj', 'CeilingProj', 'OwnRaw', 'OwnAdj', 'Own'] | |
| int_columns = ['Salary', 'player_id'] | |
| if st.button("π Run MMA Updates", type="primary", use_container_width=True): | |
| with st.spinner("Updating MMA models..."): | |
| st.write("Loading MMA data from Google Sheets...") | |
| try: | |
| sh = gc.open_by_url(MMA_Master_hold) | |
| worksheet = sh.worksheet('Export') | |
| projects_raw = DataFrame(worksheet.get_values()) | |
| except: | |
| sh = gc2.open_by_url(MMA_Master_hold) | |
| worksheet = sh.worksheet('Export') | |
| projects_raw = DataFrame(worksheet.get_values()) | |
| projects_raw.columns = projects_raw.iloc[0] | |
| projects_raw = projects_raw[1:] | |
| projects_raw = projects_raw.reset_index(drop=True) | |
| projects_raw = projects_raw.replace('', np_nan) | |
| projects_raw = projects_raw.dropna(subset=['Salary']) | |
| projects_raw['Position'] = 'FLEX' | |
| st.write("MMA data loaded successfully!") | |
| st.table(projects_raw.head(10)) | |
| for col in str_columns: | |
| projects_raw[col] = projects_raw[col].astype(str) | |
| for col in float_columns: | |
| projects_raw[col] = projects_raw[col].astype(float) | |
| for col in int_columns: | |
| projects_raw[col] = projects_raw[col].astype(int) | |
| fighter_dicts = {} | |
| for col in float_columns: | |
| fighter_dicts[col] = dict(zip(projects_raw['Fighter1'], projects_raw[col])) | |
| fighter_dicts['Opp'] = dict(zip(projects_raw['Fighter1'], projects_raw['Opp'])) | |
| fighter_dicts['player_id'] = dict(zip(projects_raw['Fighter1'], projects_raw['player_id'])) | |
| working_proj = projects_raw[['Fighter1', 'Position', 'Opp', 'Salary', 'FloorProj', 'AggProj', 'CeilingProj', 'Own']] | |
| working_proj = working_proj.rename(columns={"Fighter1": "Player", "FloorProj": "Floor", "AggProj": "Median", "CeilingProj": "Ceiling", "Own": "Own"}) | |
| st.write("Generating MMA ROO structure...") | |
| Overall_Proj = player_level_roo(working_proj, fighter_dicts, client) | |
| st.write("MMA Draftkings ROO structure refreshed") | |
| st.table(Overall_Proj.head(10)) | |
| try: | |
| discord.post(content="MMA Draftkings ROO structure refreshed") | |
| except: | |
| pass | |
| # Upload to database | |
| collection = mma_db['Player_Level_ROO'] | |
| Overall_Proj_copy = Overall_Proj.reset_index(drop=True) | |
| chunk_size = 100000 | |
| collection.drop() | |
| for i in range(0, len(Overall_Proj_copy), chunk_size): | |
| for _ in range(5): | |
| try: | |
| df_chunk = Overall_Proj_copy.iloc[i:i + chunk_size] | |
| collection.insert_many(df_chunk.to_dict('records'), ordered=False) | |
| break | |
| except Exception as e: | |
| st.write(f"Retry due to error: {e}") | |
| time_sleep(1) | |
| st.write("Generating MMA seed frames...") | |
| DK_seed_frame(Overall_Proj, fighter_dicts, client) | |
| st.write("MMA Draftkings Seed Frames refreshed") | |
| st.success("β MMA updates completed successfully!") | |
| st.balloons() | |