File size: 7,212 Bytes
be4a56a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1e9c6b7
be4a56a
1e9c6b7
 
be4a56a
2218cec
be4a56a
1e9c6b7
be4a56a
ed7d6a0
 
 
 
 
 
 
 
 
 
1e9c6b7
be4a56a
 
 
 
107d40e
 
 
1e9c6b7
be3ac19
49e84d7
be4a56a
1e9c6b7
be4a56a
 
 
 
86c06f6
1e9c6b7
 
 
be3ac19
49e84d7
be4a56a
ed7d6a0
be4a56a
 
 
 
ed7d6a0
be4a56a
 
 
 
 
ed7d6a0
1e9c6b7
ed7d6a0
 
 
 
 
 
1e9c6b7
be4a56a
 
1e9c6b7
be3ac19
1e9c6b7
 
 
 
 
 
 
 
1be8c76
49e84d7
1e9c6b7
 
 
 
 
 
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
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
import gc

@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": "0e0bc2fdef04e771172fe5807392b9d6639d945e",
          "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 = 'https://docs.google.com/spreadsheets/d/1NmKa-b-2D3w7rRxwMPSchh31GKfJ1XcDI2GU8rXWnHI/edit#gid=811139250'

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%}'}

@st.cache_resource(ttl = 599)
def init_baselines():
    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']]
    data_cols = matchups.columns.drop(['Team', 'Opp'])
    matchups[data_cols] = matchups[data_cols].apply(pd.to_numeric, errors='coerce')
    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']]
    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 = overall_ms.sort_values(by='Shots', ascending=False)

    return matchups, overall_ms, team_list, team_dict

def convert_df_to_csv(df):
    return df.to_csv().encode('utf-8')

matchups, overall_ms, 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_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_list
        elif team_var == "Specific Teams":
            team_split = st.multiselect('Which teams would you like to include in the tables?', options = team_list, key='team_var1')
    
with col2:
    if split_var1 == 'Slate Matchups':
        display_table = matchups
        st.dataframe(display_table.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(precision=2), use_container_width = True)
        st.download_button(
            label="Export Matchups",
            data=convert_df_to_csv(display_table),
            file_name='Matchups_export.csv',
            mime='text/csv',
        )
    elif split_var1 == 'Line Marketshares':
        display_table = overall_ms
        display_parsed = display_table[display_table['Line'].str.contains(team_split)]
        st.dataframe(display_table.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(percentages_format, precision=2), use_container_width = True)
        st.download_button(
            label="Export Marketshares",
            data=convert_df_to_csv(display_table),
            file_name='Marketshares_export.csv',
            mime='text/csv',
        )