Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -41,6 +41,7 @@ def init_baselines():
|
|
| 41 |
load_display.replace('', np.nan, inplace=True)
|
| 42 |
load_display = load_display.dropna(subset=['PA'])
|
| 43 |
load_display = load_display.drop_duplicates(subset=['Player'], keep='first')
|
|
|
|
| 44 |
|
| 45 |
hitter_rhp = load_display.copy()
|
| 46 |
|
|
@@ -51,6 +52,7 @@ def init_baselines():
|
|
| 51 |
load_display.replace('', np.nan, inplace=True)
|
| 52 |
load_display = load_display.dropna(subset=['PA'])
|
| 53 |
load_display = load_display.drop_duplicates(subset=['Player'], keep='first')
|
|
|
|
| 54 |
|
| 55 |
hitter_lhp = load_display.copy()
|
| 56 |
|
|
@@ -60,6 +62,7 @@ def init_baselines():
|
|
| 60 |
load_display = pd.DataFrame(worksheet.get_all_records())
|
| 61 |
load_display.replace('', np.nan, inplace=True)
|
| 62 |
load_display = load_display.dropna(subset=['True AVG'])
|
|
|
|
| 63 |
|
| 64 |
pitcher_rhh = load_display.copy()
|
| 65 |
|
|
@@ -69,17 +72,28 @@ def init_baselines():
|
|
| 69 |
load_display = pd.DataFrame(worksheet.get_all_records())
|
| 70 |
load_display.replace('', np.nan, inplace=True)
|
| 71 |
load_display = load_display.dropna(subset=['True AVG'])
|
|
|
|
| 72 |
|
| 73 |
pitcher_lhh = load_display.copy()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 74 |
|
| 75 |
-
return hitter_rhp, hitter_lhp, pitcher_rhh, pitcher_lhh
|
| 76 |
|
| 77 |
@st.cache_resource
|
| 78 |
-
def calc_poisson(hitter_val, sp_val, sp_count, bp_count):
|
| 79 |
base_val = hitter_val
|
| 80 |
opp_val = sp_val
|
| 81 |
sp_combo_val = sum([base_val, opp_val]) / 2
|
| 82 |
-
bp_combo_val = sum([base_val,
|
| 83 |
sp_instances = sp_count
|
| 84 |
bp_instances = bp_count
|
| 85 |
sp_mean = sp_combo_val * sp_instances
|
|
@@ -97,14 +111,14 @@ def calc_poisson(hitter_val, sp_val, sp_count, bp_count):
|
|
| 97 |
|
| 98 |
return sp_outcome, bp_outcome, mean_outcome
|
| 99 |
|
| 100 |
-
hitter_rhp, hitter_lhp, pitcher_rhh, pitcher_lhh = init_baselines()
|
| 101 |
|
| 102 |
col1, col2 = st.columns([1, 7])
|
| 103 |
|
| 104 |
with col1:
|
| 105 |
if st.button("Load/Reset Data", key='reset1'):
|
| 106 |
st.cache_data.clear()
|
| 107 |
-
hitter_rhp, hitter_lhp, pitcher_rhh, pitcher_lhh = init_baselines()
|
| 108 |
|
| 109 |
pitcher_var1 = st.selectbox("Which pitcher are you looking at?", options = pitcher_rhh['Names'].unique())
|
| 110 |
working_pitcher = pitcher_rhh.copy()
|
|
@@ -118,13 +132,27 @@ with col1:
|
|
| 118 |
hitter_var1 = st.selectbox("What hitter are you looking at?", options = hitter_lhp['Player'].unique())
|
| 119 |
working_hitters = hitter_lhp.copy()
|
| 120 |
hitter_check = working_hitters[working_hitters['Player'] == hitter_var1]
|
|
|
|
|
|
|
|
|
|
| 121 |
sp_count = st.number_input("How many PA against the Pitcher?")
|
| 122 |
bp_count = st.number_input("How many PA against the Bullpen?")
|
|
|
|
| 123 |
|
| 124 |
with col2:
|
| 125 |
if st.button('calculate theoretical means'):
|
| 126 |
-
|
| 127 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 128 |
value = calc_poisson(hitter_val, sp_val, sp_count, bp_count)
|
| 129 |
st.write(f"Theoretical mean of the SP instances: {value[0]}")
|
| 130 |
st.write(f"Theoretical mean of the BP instances: {value[1]}")
|
|
|
|
| 41 |
load_display.replace('', np.nan, inplace=True)
|
| 42 |
load_display = load_display.dropna(subset=['PA'])
|
| 43 |
load_display = load_display.drop_duplicates(subset=['Player'], keep='first')
|
| 44 |
+
load_display= load_display.sort_values(by='Player', ascending=False)
|
| 45 |
|
| 46 |
hitter_rhp = load_display.copy()
|
| 47 |
|
|
|
|
| 52 |
load_display.replace('', np.nan, inplace=True)
|
| 53 |
load_display = load_display.dropna(subset=['PA'])
|
| 54 |
load_display = load_display.drop_duplicates(subset=['Player'], keep='first')
|
| 55 |
+
load_display= load_display.sort_values(by='Player', ascending=False)
|
| 56 |
|
| 57 |
hitter_lhp = load_display.copy()
|
| 58 |
|
|
|
|
| 62 |
load_display = pd.DataFrame(worksheet.get_all_records())
|
| 63 |
load_display.replace('', np.nan, inplace=True)
|
| 64 |
load_display = load_display.dropna(subset=['True AVG'])
|
| 65 |
+
load_display= load_display.sort_values(by='Names', ascending=False)
|
| 66 |
|
| 67 |
pitcher_rhh = load_display.copy()
|
| 68 |
|
|
|
|
| 72 |
load_display = pd.DataFrame(worksheet.get_all_records())
|
| 73 |
load_display.replace('', np.nan, inplace=True)
|
| 74 |
load_display = load_display.dropna(subset=['True AVG'])
|
| 75 |
+
load_display= load_display.sort_values(by='Names', ascending=False)
|
| 76 |
|
| 77 |
pitcher_lhh = load_display.copy()
|
| 78 |
+
|
| 79 |
+
time.sleep(.5)
|
| 80 |
+
|
| 81 |
+
worksheet = sh.worksheet('Bullpen_xData')
|
| 82 |
+
load_display = pd.DataFrame(worksheet.get_all_records())
|
| 83 |
+
load_display.replace('', np.nan, inplace=True)
|
| 84 |
+
load_display = load_display.dropna(subset=['HWS Ratio'])
|
| 85 |
+
load_display= load_display.sort_values(by='Names', ascending=False)
|
| 86 |
+
|
| 87 |
+
bullpen_data = load_display.copy()
|
| 88 |
|
| 89 |
+
return hitter_rhp, hitter_lhp, pitcher_rhh, pitcher_lhh, bullpen_data
|
| 90 |
|
| 91 |
@st.cache_resource
|
| 92 |
+
def calc_poisson(hitter_val, sp_val, bp_val, sp_count, bp_count):
|
| 93 |
base_val = hitter_val
|
| 94 |
opp_val = sp_val
|
| 95 |
sp_combo_val = sum([base_val, opp_val]) / 2
|
| 96 |
+
bp_combo_val = sum([base_val, bp_val]) / 2
|
| 97 |
sp_instances = sp_count
|
| 98 |
bp_instances = bp_count
|
| 99 |
sp_mean = sp_combo_val * sp_instances
|
|
|
|
| 111 |
|
| 112 |
return sp_outcome, bp_outcome, mean_outcome
|
| 113 |
|
| 114 |
+
hitter_rhp, hitter_lhp, pitcher_rhh, pitcher_lhh, bullpen_data = init_baselines()
|
| 115 |
|
| 116 |
col1, col2 = st.columns([1, 7])
|
| 117 |
|
| 118 |
with col1:
|
| 119 |
if st.button("Load/Reset Data", key='reset1'):
|
| 120 |
st.cache_data.clear()
|
| 121 |
+
hitter_rhp, hitter_lhp, pitcher_rhh, pitcher_lhh, bullpen_data = init_baselines()
|
| 122 |
|
| 123 |
pitcher_var1 = st.selectbox("Which pitcher are you looking at?", options = pitcher_rhh['Names'].unique())
|
| 124 |
working_pitcher = pitcher_rhh.copy()
|
|
|
|
| 132 |
hitter_var1 = st.selectbox("What hitter are you looking at?", options = hitter_lhp['Player'].unique())
|
| 133 |
working_hitters = hitter_lhp.copy()
|
| 134 |
hitter_check = working_hitters[working_hitters['Player'] == hitter_var1]
|
| 135 |
+
bullpen_var1 = st.selectbox("Which Bullpen are you looking at?", options = bullpen_data['Names'].unique())
|
| 136 |
+
working_bullpen = bullpen_data.copy()
|
| 137 |
+
bullpen_check = working_bullpen[working_bullpen['Names'] == bullpen_var1]
|
| 138 |
sp_count = st.number_input("How many PA against the Pitcher?")
|
| 139 |
bp_count = st.number_input("How many PA against the Bullpen?")
|
| 140 |
+
stat_var1 = st.selectbox("What Stat are you looking at?", options = ['Projected Walks', 'Projected Strikeouts', 'Projected HRs'])
|
| 141 |
|
| 142 |
with col2:
|
| 143 |
if st.button('calculate theoretical means'):
|
| 144 |
+
if stat_var1 == 'Projected Walks':
|
| 145 |
+
hitter_val = hitter_check['BB%'].iloc[0]
|
| 146 |
+
sp_val = pitcher_check['BB%'].iloc[0]
|
| 147 |
+
bp_val = bullpen_check['Walkper'].iloc[0] / 100
|
| 148 |
+
elif stat_var1 == 'Projected Strikeouts':
|
| 149 |
+
hitter_val = hitter_check['K%'].iloc[0]
|
| 150 |
+
sp_val = pitcher_check['K%'].iloc[0]
|
| 151 |
+
bp_val = bullpen_check['Strikeoutper'].iloc[0] / 100
|
| 152 |
+
elif stat_var1 == 'Projected HRs':
|
| 153 |
+
hitter_val = hitter_check['xHRs'].iloc[0] / hitter_check['PA'].iloc[0]
|
| 154 |
+
sp_val = pitcher_check['xHRs'].iloc[0] / pitcher_check['PA'].iloc[0]
|
| 155 |
+
bp_val = bullpen_check['Homeruns'].iloc[0] / bullpen_check['PA'].iloc[0]
|
| 156 |
value = calc_poisson(hitter_val, sp_val, sp_count, bp_count)
|
| 157 |
st.write(f"Theoretical mean of the SP instances: {value[0]}")
|
| 158 |
st.write(f"Theoretical mean of the BP instances: {value[1]}")
|