#initial imports import streamlit as st st.set_page_config(layout="wide") import numpy as np import pandas as pd import time from fuzzywuzzy import process # Bring in numpy reqs from numpy import nan as np_nan from numpy import where as np_where from numpy import random as np_random from numpy import zeros as np_zeros from numpy import array as np_array from pandas import concat as pd_concat from pandas import merge as pd_merge from pandas import DataFrame #bring in functions from function_hold.NBA_functions import DK_NBA_ROO_Build, FD_NBA_ROO_Build def load_file(upload): if upload is not None: try: if upload.name.endswith('.csv'): df = pd.read_csv(upload) elif upload.name.endswith(('.xls', '.xlsx')): df = pd.read_excel(upload) else: st.error('Please upload either a CSV or Excel file') return None export_df = df.copy() return export_df, df except Exception as e: st.error(f'Error loading file: {str(e)}') return None return None tab1, tab2 = st.tabs(["Data Load", "Manage Portfolio"]) with tab1: if st.button('Clear data', key='reset1'): st.session_state.clear() sport_var = st.selectbox("Select Sport", ["NBA", "NFL", "MLB"]) st.subheader("Projections File") if sport_var == "NBA": st.info("upload a projections file that has Data oriented in the following format: 'Player', 'Team', 'Opp', 'Position', 'Salary', 'Median', 'Minutes', 'Own'") elif sport_var == "NFL": st.info("upload a projections file that has Data oriented in the following format: 'Player', 'Team', 'Opp', 'Position', 'Salary', 'Median', 'Minutes', 'Own'") elif sport_var == "MLB": st.info("upload a projections file that has Data oriented in the following format: 'Player', 'Team', 'Opp', 'Position', 'Salary', 'Median', 'Minutes', 'Own'") # Create two columns for the uploader and template button upload_col, template_col = st.columns([3, 1]) with upload_col: projections_file = st.file_uploader("Upload Projections File (CSV or Excel)", type=['csv', 'xlsx', 'xls']) with template_col: if sport_var == "NBA": template_df = pd.DataFrame(columns=['Player', 'Team', 'Opp', 'Position', 'Salary', 'Median', 'Minutes', 'Own']) elif sport_var == "NFL": template_df = pd.DataFrame(columns=['Player', 'Team', 'Opp', 'Position', 'Salary', 'Median', 'Minutes', 'Own']) elif sport_var == "MLB": template_df = pd.DataFrame(columns=['Player', 'Team', 'Opp', 'Position', 'Salary', 'Median', 'Minutes', 'Own']) # Add download button for template st.download_button( label="Template", data=template_df.to_csv(index=False), file_name="projections_template.csv", mime="text/csv" ) if projections_file: export_projections, projections = load_file(projections_file) if projections is not None: st.success('Projections file loaded successfully!') st.dataframe(projections) with tab2: if st.button('Clear data', key='reset2'): st.session_state.clear() with st.sidebar: site_var_sb = st.selectbox("Select Site", ["Draftkings", "Fanduel"]) distribution_type_sb = st.selectbox("Select Distribution Type", ['normal', 'poisson', 'bimodal']) floor_var_sb = st.number_input("Floor (low end multiplier)", min_value=0.00, max_value=.50, value=.25, step=.01) ceiling_var_sb = st.number_input("Ceiling (high end multiplier)", min_value=1.50, max_value=3.00, value=2.00, step=.01) std_var_sb = st.number_input("Standard Deviation (variance within distribution)", min_value=1.00, max_value=5.00, value=4.00, step=.01) if projections_file: if st.button('Build ROO'): if sport_var == "NBA": if site_var_sb == "Draftkings": disp_file = DK_NBA_ROO_Build(projections, floor_var_sb, ceiling_var_sb, std_var_sb, distribution_type_sb) elif site_var_sb == "Fanduel": disp_file = FD_NBA_ROO_Build(projections, floor_var_sb, ceiling_var_sb, std_var_sb, distribution_type_sb) elif sport_var == "NFL": if site_var_sb == "Draftkings": disp_file = DK_NFL_ROO_Build(projections, floor_var_sb, ceiling_var_sb, std_var_sb, distribution_type_sb) elif site_var_sb == "Fanduel": disp_file = FD_NFL_ROO_Build(projections, floor_var_sb, ceiling_var_sb, std_var_sb, distribution_type_sb) elif sport_var == "MLB": if site_var_sb == "Draftkings": disp_file = DK_MLB_ROO_Build(projections, floor_var_sb, ceiling_var_sb, std_var_sb, distribution_type_sb) elif site_var_sb == "Fanduel": disp_file = FD_MLB_ROO_Build(projections, floor_var_sb, ceiling_var_sb, std_var_sb, distribution_type_sb) if disp_file is not None: st.dataframe(disp_file.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(precision=2), height=1000, use_container_width = True)