Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
@@ -5,7 +5,7 @@ import pandas as pd
|
|
5 |
import gspread
|
6 |
import pymongo
|
7 |
|
8 |
-
@st.cache_resource
|
9 |
def init_conn():
|
10 |
scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
|
11 |
|
@@ -57,15 +57,17 @@ fd_columns = ['P', 'C_1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3', 'UTIL', 'salar
|
|
57 |
def init_baselines():
|
58 |
sh = gcservice_account.open_by_url(MLB_Data)
|
59 |
|
60 |
-
worksheet = sh.worksheet('
|
61 |
load_display = pd.DataFrame(worksheet.get_all_records())
|
62 |
load_display.replace('', np.nan, inplace=True)
|
|
|
63 |
|
64 |
dk_raw = load_display.dropna(subset=['Median'])
|
65 |
|
66 |
-
worksheet = sh.worksheet('
|
67 |
load_display = pd.DataFrame(worksheet.get_all_records())
|
68 |
load_display.replace('', np.nan, inplace=True)
|
|
|
69 |
|
70 |
fd_raw = load_display.dropna(subset=['Median'])
|
71 |
|
@@ -90,6 +92,38 @@ def calculate_FD_value_frequencies(np_array):
|
|
90 |
combined_array = np.column_stack((unique, frequencies))
|
91 |
return combined_array
|
92 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
93 |
dk_raw, fd_raw = init_baselines()
|
94 |
|
95 |
tab1, tab2 = st.tabs(['Data Export', 'Contest Sims'])
|
@@ -180,7 +214,68 @@ with tab2:
|
|
180 |
st.cache_data.clear()
|
181 |
for key in st.session_state.keys():
|
182 |
del st.session_state[key]
|
183 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
184 |
|
185 |
with col2:
|
186 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
import gspread
|
6 |
import pymongo
|
7 |
|
8 |
+
@st.cache_resource
|
9 |
def init_conn():
|
10 |
scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
|
11 |
|
|
|
57 |
def init_baselines():
|
58 |
sh = gcservice_account.open_by_url(MLB_Data)
|
59 |
|
60 |
+
worksheet = sh.worksheet('Main_ROO')
|
61 |
load_display = pd.DataFrame(worksheet.get_all_records())
|
62 |
load_display.replace('', np.nan, inplace=True)
|
63 |
+
load_display['STDev'] = load_display['Median'] / 3
|
64 |
|
65 |
dk_raw = load_display.dropna(subset=['Median'])
|
66 |
|
67 |
+
worksheet = sh.worksheet('Main_FD_ROO')
|
68 |
load_display = pd.DataFrame(worksheet.get_all_records())
|
69 |
load_display.replace('', np.nan, inplace=True)
|
70 |
+
load_display['STDev'] = load_display['Median'] / 3
|
71 |
|
72 |
fd_raw = load_display.dropna(subset=['Median'])
|
73 |
|
|
|
92 |
combined_array = np.column_stack((unique, frequencies))
|
93 |
return combined_array
|
94 |
|
95 |
+
@st.cache_data
|
96 |
+
def sim_contest(Sim_size, seed_frame, maps_dict):
|
97 |
+
SimVar = 1
|
98 |
+
Sim_Winners = []
|
99 |
+
fp_array = seed_frame
|
100 |
+
|
101 |
+
# Pre-vectorize functions
|
102 |
+
vec_projection_map = np.vectorize(maps_dict['Projection_map'].__getitem__)
|
103 |
+
vec_stdev_map = np.vectorize(maps_dict['STDev_map'].__getitem__)
|
104 |
+
|
105 |
+
st.write('Simulating contest on frames')
|
106 |
+
|
107 |
+
while SimVar <= Sim_size:
|
108 |
+
fp_random = fp_array[np.random.choice(fp_array.shape[0], Contest_Size)]
|
109 |
+
|
110 |
+
sample_arrays1 = np.c_[
|
111 |
+
fp_random,
|
112 |
+
np.sum(np.random.normal(
|
113 |
+
loc=vec_projection_map(fp_random[:, :-4]),
|
114 |
+
scale=vec_stdev_map(fp_random[:, :-4])),
|
115 |
+
axis=1)
|
116 |
+
]
|
117 |
+
|
118 |
+
sample_arrays = sample_arrays1
|
119 |
+
|
120 |
+
final_array = sample_arrays[sample_arrays[:, 10].argsort()[::-1]]
|
121 |
+
best_lineup = final_array[final_array[:, -1].argsort(kind='stable')[::-1][:1]]
|
122 |
+
Sim_Winners.append(best_lineup)
|
123 |
+
SimVar += 1
|
124 |
+
|
125 |
+
return Sim_Winners
|
126 |
+
|
127 |
dk_raw, fd_raw = init_baselines()
|
128 |
|
129 |
tab1, tab2 = st.tabs(['Data Export', 'Contest Sims'])
|
|
|
214 |
st.cache_data.clear()
|
215 |
for key in st.session_state.keys():
|
216 |
del st.session_state[key]
|
217 |
+
dk_raw, fd_raw = init_baselines()
|
218 |
+
sim_slate_var1 = st.radio("Which data are you loading?", ('Main Slate', 'Other Main Slate'), key='sim_slate_var1')
|
219 |
+
sim_site_var1 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'), key='sim_site_var1')
|
220 |
+
if sim_site_var1 == 'Draftkings':
|
221 |
+
raw_baselines = dk_raw
|
222 |
+
elif sim_site_var1 == 'Fanduel':
|
223 |
+
raw_baselines = fd_raw
|
224 |
+
|
225 |
+
contest_var1 = st.selectbox("What contest size are you simulating?", ('Small', 'Medium', 'Large', 'Massive'))
|
226 |
+
if contest_var1 == 'Small':
|
227 |
+
Contest_Size = 1000
|
228 |
+
elif contest_var1 == 'Medium':
|
229 |
+
Contest_Size = 5000
|
230 |
+
elif contest_var1 == 'Large':
|
231 |
+
Contest_Size = 10000
|
232 |
+
elif contest_var1 == 'Massive':
|
233 |
+
Contest_Size = 100000
|
234 |
+
strength_var1 = st.selectbox("How sharp is the field in the contest?", ('Not Very', 'Average', 'Very'))
|
235 |
+
if strength_var1 == 'Not Very':
|
236 |
+
sharp_split = [400000,100000]
|
237 |
+
elif strength_var1 == 'Average':
|
238 |
+
sharp_split = [500000,200000]
|
239 |
+
elif strength_var1 == 'Very':
|
240 |
+
sharp_split = [500000,300000]
|
241 |
+
|
242 |
|
243 |
with col2:
|
244 |
+
maps_dict = {
|
245 |
+
'Floor_map':dict(zip(raw_baselines.Player,raw_baselines.Floor)),
|
246 |
+
'Projection_map':dict(zip(raw_baselines.Player,raw_baselines.Median)),
|
247 |
+
'Ceiling_map':dict(zip(raw_baselines.Player,raw_baselines.Ceiling)),
|
248 |
+
'Salary_map':dict(zip(raw_baselines.Player,raw_baselines.Salary)),
|
249 |
+
'Pos_map':dict(zip(raw_baselines.Player,raw_baselines.Position)),
|
250 |
+
'Own_map':dict(zip(raw_baselines.Player,raw_baselines.Own)),
|
251 |
+
'Small_Own_map':dict(zip(raw_baselines.Player,raw_baselines['Small Field Own%'])),
|
252 |
+
'Large_Own_map':dict(zip(raw_baselines.Player,raw_baselines['Large Field Own%'])),
|
253 |
+
'Team_map':dict(zip(raw_baselines.Player,raw_baselines.Team)),
|
254 |
+
'STDev_map':dict(zip(raw_baselines.Player,raw_baselines.STDev)),
|
255 |
+
'team_check_map':dict(zip(raw_baselines.Player,raw_baselines.Team))
|
256 |
+
}
|
257 |
+
Sim_Winners = sim_contest(500, st.session_state.working_seed)
|
258 |
+
|
259 |
+
st.table(Sim_Winners.head(10))
|
260 |
+
|
261 |
+
# # Initial setup
|
262 |
+
# Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners), columns=FinalPortfolio.columns.tolist() + ['Fantasy'])
|
263 |
+
# Sim_Winner_Frame['GPP_Proj'] = (Sim_Winner_Frame['Projection'] + Sim_Winner_Frame['Fantasy']) / 2
|
264 |
+
# Sim_Winner_Frame['unique_id'] = Sim_Winner_Frame['Projection'].astype(str) + Sim_Winner_Frame['Salary'].astype(str) + Sim_Winner_Frame['Own'].astype(str)
|
265 |
+
# Sim_Winner_Frame = Sim_Winner_Frame.assign(win_count=Sim_Winner_Frame['unique_id'].map(Sim_Winner_Frame['unique_id'].value_counts()))
|
266 |
+
|
267 |
+
# # Type Casting
|
268 |
+
# type_cast_dict = {'Salary': int, 'Projection': np.float16, 'Fantasy': np.float16, 'GPP_Proj': np.float32}
|
269 |
+
# Sim_Winner_Frame = Sim_Winner_Frame.astype(type_cast_dict)
|
270 |
+
|
271 |
+
# del FinalPortfolio, insert_port, type_cast_dict
|
272 |
+
|
273 |
+
# # Sorting
|
274 |
+
# st.session_state.Sim_Winner_Frame = Sim_Winner_Frame.sort_values(by=['win_count', 'GPP_Proj'], ascending= [False, False]).copy().drop_duplicates(subset='unique_id').head(100)
|
275 |
+
# st.session_state.Sim_Winner_Frame.drop(columns='unique_id', inplace=True)
|
276 |
+
|
277 |
+
# # Data Copying
|
278 |
+
# st.session_state.Sim_Winner_Export = Sim_Winner_Frame.copy()
|
279 |
+
|
280 |
+
# # Data Copying
|
281 |
+
# st.session_state.Sim_Winner_Display = Sim_Winner_Frame.copy()
|