Paydirt_model_updates / src /streamlit_app.py
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()