Spaces:
Sleeping
Sleeping
File size: 8,615 Bytes
be4a56a 3421080 be4a56a 3421080 be4a56a 1e9c6b7 fb77958 be4a56a eed2a00 2218cec be4a56a ddd4ee7 1e9c6b7 be4a56a ed7d6a0 1e9c6b7 be4a56a 107d40e f53ed74 1e9c6b7 be3ac19 fc27e23 49e84d7 be4a56a 1e9c6b7 be4a56a 86c06f6 1e9c6b7 701b56f fb77958 7da07a1 7cab575 7da07a1 898fd7b 7cab575 488c0d1 8751601 be4a56a 8751601 be4a56a 8751601 1e9c6b7 ed7d6a0 8751601 ed7d6a0 8751601 1e9c6b7 be4a56a 1e9c6b7 def2aed 1e9c6b7 64fa655 bb617b3 def2aed c9d235d 9402543 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
import streamlit as st
st.set_page_config(layout="wide")
for name in dir():
if not name.startswith('_'):
del globals()[name]
import numpy as np
import pandas as pd
import streamlit as st
import gspread
@st.cache_resource
def init_conn():
scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
credentials = {
"type": "service_account",
"project_id": "model-sheets-connect",
"private_key_id": st.secrets['model_sheets_connect_pk'],
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDiu1v/e6KBKOcK\ncx0KQ23nZK3ZVvADYy8u/RUn/EDI82QKxTd/DizRLIV81JiNQxDJXSzgkbwKYEDm\n48E8zGvupU8+Nk76xNPakrQKy2Y8+VJlq5psBtGchJTuUSHcXU5Mg2JhQsB376PJ\nsCw552K6Pw8fpeMDJDZuxpKSkaJR6k9G5Dhf5q8HDXnC5Rh/PRFuKJ2GGRpX7n+2\nhT/sCax0J8jfdTy/MDGiDfJqfQrOPrMKELtsGHR9Iv6F4vKiDqXpKfqH+02E9ptz\nBk+MNcbZ3m90M8ShfRu28ebebsASfarNMzc3dk7tb3utHOGXKCf4tF8yYKo7x8BZ\noO9X4gSfAgMBAAECggEAU8ByyMpSKlTCF32TJhXnVJi/kS+IhC/Qn5JUDMuk4LXr\naAEWsWO6kV/ZRVXArjmuSzuUVrXumISapM9Ps5Ytbl95CJmGDiLDwRL815nvv6k3\nUyAS8EGKjz74RpoIoH6E7EWCAzxlnUgTn+5oP9Flije97epYk3H+e2f1f5e1Nn1d\nYNe8U+1HqJgILcxA1TAUsARBfoD7+K3z/8DVPHI8IpzAh6kTHqhqC23Rram4XoQ6\nzj/ZdVBjvnKuazETfsD+Vl3jGLQA8cKQVV70xdz3xwLcNeHsbPbpGBpZUoF73c65\nkAXOrjYl0JD5yAk+hmYhXr6H9c6z5AieuZGDrhmlFQKBgQDzV6LRXmjn4854DP/J\nI82oX2GcI4eioDZPRukhiQLzYerMQBmyqZIRC+/LTCAhYQSjNgMa+ZKyvLqv48M0\n/x398op/+n3xTs+8L49SPI48/iV+mnH7k0WI/ycd4OOKh8rrmhl/0EWb9iitwJYe\nMjTV/QxNEpPBEXfR1/mvrN/lVQKBgQDuhomOxUhWVRVH6x03slmyRBn0Oiw4MW+r\nrt1hlNgtVmTc5Mu+4G0USMZwYuOB7F8xG4Foc7rIlwS7Ic83jMJxemtqAelwOLdV\nXRLrLWJfX8+O1z/UE15l2q3SUEnQ4esPHbQnZowHLm0mdL14qSVMl1mu1XfsoZ3z\nJZTQb48CIwKBgEWbzQRtKD8lKDupJEYqSrseRbK/ax43DDITS77/DWwHl33D3FYC\nMblUm8ygwxQpR4VUfwDpYXBlklWcJovzamXpSnsfcYVkkQH47NuOXPXPkXQsw+w+\nDYcJzeu7F/vZqk9I7oBkWHUrrik9zPNoUzrfPvSRGtkAoTDSwibhoc5dAoGBAMHE\nK0T/ANeZQLNuzQps6S7G4eqjwz5W8qeeYxsdZkvWThOgDd/ewt3ijMnJm5X05hOn\ni4XF1euTuvUl7wbqYx76Wv3/1ZojiNNgy7ie4rYlyB/6vlBS97F4ZxJdxMlabbCW\n6b3EMWa4EVVXKoA1sCY7IVDE+yoQ1JYsZmq45YzPAoGBANWWHuVueFGZRDZlkNlK\nh5OmySmA0NdNug3G1upaTthyaTZ+CxGliwBqMHAwpkIRPwxUJpUwBTSEGztGTAxs\nWsUOVWlD2/1JaKSmHE8JbNg6sxLilcG6WEDzxjC5dLL1OrGOXj9WhC9KX3sq6qb6\nF/j9eUXfXjAlb042MphoF3ZC\n-----END PRIVATE KEY-----\n",
"client_email": "[email protected]",
"client_id": "100369174533302798535",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/gspread-connection%40model-sheets-connect.iam.gserviceaccount.com"
}
gc_con = gspread.service_account_from_dict(credentials, scope)
return gc_con
gcservice_account = init_conn()
NHL_data = st.secrets['NHL_Data']
percentages_format = {'Shots': '{:.2%}', 'HDCF': '{:.2%}', 'Goals': '{:.2%}', 'Assists': '{:.2%}', 'Blocks': '{:.2%}',
'L14_Shots': '{:.2%}', 'L14_HDCF': '{:.2%}', 'L14_Goals': '{:.2%}', 'L14_Assists': '{:.2%}',
'L14_Blocks': '{:.2%}', 'Max Goal%': '{:.2%}', 'L14 Max Goal%': '{:.2%}'}
matchups_format = {'HDCF%': '{:.2%}', 'o_HDCA%': '{:.2%}', 'HDCF_m%': '{:.2%}'}
@st.cache_resource(ttl = 599)
def init_baselines():
parse_hold = pd.DataFrame(columns=['Line', 'SK1', 'SK2', 'SK3', 'Cost', 'Team Total', 'Shots', 'HDCF', 'Goals', 'Assists', 'Blocks',
'L14_Shots', 'L14_HDCF', 'L14_Goals', 'L14_Assists', 'L14_Blocks', 'Max Goal%'])
sh = gcservice_account.open_by_url(NHL_data)
worksheet = sh.worksheet('Player_Level_ROO')
raw_display = pd.DataFrame(worksheet.get_values())
raw_display.columns = raw_display.iloc[0]
raw_display = raw_display[1:]
raw_display = raw_display.reset_index(drop=True)
raw_display = raw_display[raw_display['Opp'] != ""]
team_frame = raw_display[['Team', 'Opp']]
team_list = team_frame['Team'].unique()
team_dict = dict(zip(team_frame['Team'], team_frame['Opp']))
worksheet = sh.worksheet('Matchups')
raw_display = pd.DataFrame(worksheet.get_values())
raw_display.columns = raw_display.iloc[0]
raw_display = raw_display[1:]
raw_display = raw_display.reset_index(drop=True)
raw_display = raw_display[raw_display['Opp'] != ""]
matchups = raw_display[['Team', 'Opp', 'FL1$', 'FL2$', 'FL3$', 'Team Total', 'Game Pace', 'SF', 'o_SA', 'SF_m', 'HDCF',
'o_HDCA', 'HDCF_m', 'HDCF%', 'o_HDCA%', 'HDCF_m%', 'HDSF+']]
data_cols = matchups.columns.drop(['Team', 'Opp'])
matchups[data_cols] = matchups[data_cols].apply(pd.to_numeric, errors='coerce')
matchups = matchups.dropna(subset='HDSF+')
matchups = matchups.sort_values(by='HDCF_m', ascending=False)
worksheet = sh.worksheet('Marketshares')
raw_display = pd.DataFrame(worksheet.get_values())
raw_display.columns = raw_display.iloc[0]
raw_display = raw_display[1:]
raw_display = raw_display.reset_index(drop=True)
# raw_display = raw_display[raw_display['Line'] != ""]
overall_ms = raw_display[['Line', 'SK1', 'SK2', 'SK3', 'Cost', 'Team Total', 'Shots', 'HDCF', 'Goals', 'Assists', 'Blocks',
'L14_Shots', 'L14_HDCF', 'L14_Goals', 'L14_Assists', 'L14_Blocks']]
pat = '|'.join(team_list)
s = overall_ms['Line'].str.extract('('+ pat + ')', expand=False)
overall_ms['Max Goal%'] = overall_ms.groupby(s)['Goals'].transform('max')
overall_ms['L14 Max Goal%'] = overall_ms.groupby(s)['L14_Goals'].transform('max')
data_cols = overall_ms.columns.drop(['Line', 'SK1', 'SK2', 'SK3'])
overall_ms[data_cols] = overall_ms[data_cols].apply(pd.to_numeric, errors='coerce')
overall_ms['Proj Goal'] = overall_ms['Goals'] * overall_ms['Team Total']
overall_ms['L14 Proj Goal'] = overall_ms['L14_Goals'] * overall_ms['Team Total']
overall_ms = overall_ms[['Line', 'SK1', 'SK2', 'SK3', 'Cost', 'Team Total', 'Shots', 'HDCF', 'Goals', 'Max Goal%', 'Proj Goal',
'Assists', 'Blocks', 'L14_Shots', 'L14_HDCF', 'L14_Goals', 'L14 Max Goal%', 'L14 Proj Goal', 'L14_Assists', 'L14_Blocks']]
overall_ms = overall_ms.sort_values(by='Shots', ascending=False)
return matchups, overall_ms, team_frame, team_list, team_dict
def convert_df_to_csv(df):
return df.to_csv().encode('utf-8')
matchups, overall_ms, team_frame, team_list, team_dict = init_baselines()
col1, col2 = st.columns([1, 9])
with col1:
if st.button("Reset Data", key='reset1'):
st.cache_data.clear()
matchups, overall_ms, team_frame, team_list, team_dict = init_baselines()
split_var1 = st.radio("View matchups or line marketshares?", ('Slate Matchups', 'Line Marketshares'), key='split_var1')
if split_var1 == "Line Marketshares":
team_var = st.radio("View all teams or specific teams?", ('All Teams', 'Specific Teams'), key='team_var')
if team_var == "All Teams":
team_split = team_frame.Team.values.tolist()
elif team_var == "Specific Teams":
team_split = st.multiselect('Which teams would you like to include in the tables?', options = team_frame['Team'].unique(), key='team_var1')
with col2:
if split_var1 == 'Slate Matchups':
display_table = matchups
display_table = display_table.set_index('Team')
st.dataframe(display_table.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(matchups_format, precision=2), height=500, use_container_width = True)
elif split_var1 == 'Line Marketshares':
display_table = overall_ms
display_parsed = display_table[display_table['Line'].str.contains('|'.join(team_split))]
# display_parsed = display_parsed.set_index('Line')
st.dataframe(display_parsed.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(percentages_format, precision=2), height=500, use_container_width = True)
if split_var1 == 'Line Marketshares':
st.download_button(
label="Export Marketshares (CSV)",
data=convert_df_to_csv(display_table),
file_name='Marketshares_export.csv',
mime='text/csv',
)
elif split_var1 == 'Slate Matchups':
st.download_button(
label="Export Matchups (CSV)",
data=convert_df_to_csv(display_table),
file_name='Matchups_export.csv',
mime='text/csv',
)
|