Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -58,15 +58,17 @@ def pull_baselines():
|
|
| 58 |
raw_display.replace('', np.nan, inplace=True)
|
| 59 |
prop_trends = raw_display.dropna(subset='Player')
|
| 60 |
|
|
|
|
|
|
|
| 61 |
worksheet = sh.worksheet('Timestamp')
|
| 62 |
timestamp = worksheet.acell('A1').value
|
| 63 |
|
| 64 |
-
return prop_table, prop_trends, timestamp
|
| 65 |
|
| 66 |
def convert_df_to_csv(df):
|
| 67 |
return df.to_csv().encode('utf-8')
|
| 68 |
|
| 69 |
-
prop_display, prop_trends, timestamp = pull_baselines()
|
| 70 |
t_stamp = f"Last Update: " + str(timestamp) + f" CST"
|
| 71 |
|
| 72 |
tab1, tab2, tab3 = st.tabs(["Player Stat Table", 'Prop Trend Table', 'Stat Specific Simulations'])
|
|
@@ -75,7 +77,7 @@ with tab1:
|
|
| 75 |
st.info(t_stamp)
|
| 76 |
if st.button("Reset Data", key='reset1'):
|
| 77 |
st.cache_data.clear()
|
| 78 |
-
prop_display, prop_trends, timestamp = pull_baselines()
|
| 79 |
prop_frame = prop_display
|
| 80 |
st.dataframe(prop_frame.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(precision=2), use_container_width = True)
|
| 81 |
|
|
@@ -91,7 +93,7 @@ with tab2:
|
|
| 91 |
st.info(t_stamp)
|
| 92 |
if st.button("Reset Data", key='reset3'):
|
| 93 |
st.cache_data.clear()
|
| 94 |
-
prop_display, prop_trends, timestamp = pull_baselines()
|
| 95 |
t_stamp = f"Last Update: " + str(timestamp) + f" CST"
|
| 96 |
split_var5 = st.radio("Would you like to view all teams or specific ones?", ('All', 'Specific Teams'), key='split_var5')
|
| 97 |
if split_var5 == 'Specific Teams':
|
|
@@ -116,7 +118,7 @@ with tab3:
|
|
| 116 |
st.info('The Over and Under percentages are a composite percentage based on simulations, historical performance, and implied probabilities, and may be different than you would expect based purely on the median projection. Likewise, the Edge of a bet is not the only indicator of if you should make the bet or not as the suggestion is using a base acceptable threshold to determine how much edge you should have for each stat category.')
|
| 117 |
if st.button("Reset Data/Load Data", key='reset5'):
|
| 118 |
st.cache_data.clear()
|
| 119 |
-
prop_display, prop_trends, timestamp = pull_baselines()
|
| 120 |
t_stamp = f"Last Update: " + str(timestamp) + f" CST"
|
| 121 |
col1, col2 = st.columns([1, 5])
|
| 122 |
|
|
@@ -215,8 +217,9 @@ with tab3:
|
|
| 215 |
players_only['Prop type'] = prop
|
| 216 |
|
| 217 |
players_only['Player'] = hold_file[['Player']]
|
|
|
|
| 218 |
|
| 219 |
-
leg_outcomes = players_only[['Player', 'Prop type', 'Prop', 'Mean_Outcome', 'Imp Over', 'Over%', 'Imp Under', 'Under%', 'Bet?', 'Edge']]
|
| 220 |
|
| 221 |
sim_all_hold = pd.concat([sim_all_hold, leg_outcomes], ignore_index=True)
|
| 222 |
|
|
@@ -331,8 +334,9 @@ with tab3:
|
|
| 331 |
players_only['Edge'] = players_only['Bet_check']
|
| 332 |
|
| 333 |
players_only['Player'] = hold_file[['Player']]
|
|
|
|
| 334 |
|
| 335 |
-
final_outcomes = players_only[['Player', 'Prop', 'Mean_Outcome', 'Imp Over', 'Over%', 'Imp Under', 'Under%', 'Bet?', 'Edge']]
|
| 336 |
|
| 337 |
final_outcomes = final_outcomes[final_outcomes['Prop'] > 0]
|
| 338 |
final_outcomes = final_outcomes.sort_values(by='Edge', ascending=False)
|
|
|
|
| 58 |
raw_display.replace('', np.nan, inplace=True)
|
| 59 |
prop_trends = raw_display.dropna(subset='Player')
|
| 60 |
|
| 61 |
+
team_dict = dict(zip(prop_table['Player'], prop_table['Team']))
|
| 62 |
+
|
| 63 |
worksheet = sh.worksheet('Timestamp')
|
| 64 |
timestamp = worksheet.acell('A1').value
|
| 65 |
|
| 66 |
+
return prop_table, prop_trends, timestamp, team_dict
|
| 67 |
|
| 68 |
def convert_df_to_csv(df):
|
| 69 |
return df.to_csv().encode('utf-8')
|
| 70 |
|
| 71 |
+
prop_display, prop_trends, timestamp, team_dict = pull_baselines()
|
| 72 |
t_stamp = f"Last Update: " + str(timestamp) + f" CST"
|
| 73 |
|
| 74 |
tab1, tab2, tab3 = st.tabs(["Player Stat Table", 'Prop Trend Table', 'Stat Specific Simulations'])
|
|
|
|
| 77 |
st.info(t_stamp)
|
| 78 |
if st.button("Reset Data", key='reset1'):
|
| 79 |
st.cache_data.clear()
|
| 80 |
+
prop_display, prop_trends, timestamp, team_dict = pull_baselines()
|
| 81 |
prop_frame = prop_display
|
| 82 |
st.dataframe(prop_frame.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(precision=2), use_container_width = True)
|
| 83 |
|
|
|
|
| 93 |
st.info(t_stamp)
|
| 94 |
if st.button("Reset Data", key='reset3'):
|
| 95 |
st.cache_data.clear()
|
| 96 |
+
prop_display, prop_trends, timestamp, team_dict = pull_baselines()
|
| 97 |
t_stamp = f"Last Update: " + str(timestamp) + f" CST"
|
| 98 |
split_var5 = st.radio("Would you like to view all teams or specific ones?", ('All', 'Specific Teams'), key='split_var5')
|
| 99 |
if split_var5 == 'Specific Teams':
|
|
|
|
| 118 |
st.info('The Over and Under percentages are a composite percentage based on simulations, historical performance, and implied probabilities, and may be different than you would expect based purely on the median projection. Likewise, the Edge of a bet is not the only indicator of if you should make the bet or not as the suggestion is using a base acceptable threshold to determine how much edge you should have for each stat category.')
|
| 119 |
if st.button("Reset Data/Load Data", key='reset5'):
|
| 120 |
st.cache_data.clear()
|
| 121 |
+
prop_display, prop_trends, timestamp, team_dict = pull_baselines()
|
| 122 |
t_stamp = f"Last Update: " + str(timestamp) + f" CST"
|
| 123 |
col1, col2 = st.columns([1, 5])
|
| 124 |
|
|
|
|
| 217 |
players_only['Prop type'] = prop
|
| 218 |
|
| 219 |
players_only['Player'] = hold_file[['Player']]
|
| 220 |
+
players_only['Team'] = players_only['Player'].map(team_dict)
|
| 221 |
|
| 222 |
+
leg_outcomes = players_only[['Player', 'Team', 'Prop type', 'Prop', 'Mean_Outcome', 'Imp Over', 'Over%', 'Imp Under', 'Under%', 'Bet?', 'Edge']]
|
| 223 |
|
| 224 |
sim_all_hold = pd.concat([sim_all_hold, leg_outcomes], ignore_index=True)
|
| 225 |
|
|
|
|
| 334 |
players_only['Edge'] = players_only['Bet_check']
|
| 335 |
|
| 336 |
players_only['Player'] = hold_file[['Player']]
|
| 337 |
+
players_only['Team'] = players_only['Player'].map(team_dict)
|
| 338 |
|
| 339 |
+
final_outcomes = players_only[['Player', 'Team', 'Prop', 'Mean_Outcome', 'Imp Over', 'Over%', 'Imp Under', 'Under%', 'Bet?', 'Edge']]
|
| 340 |
|
| 341 |
final_outcomes = final_outcomes[final_outcomes['Prop'] > 0]
|
| 342 |
final_outcomes = final_outcomes.sort_values(by='Edge', ascending=False)
|