File size: 9,949 Bytes
30c3d8b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
118ea5f
30c3d8b
 
 
 
 
45a2bd5
 
e85ca48
 
b855174
45a2bd5
e239116
 
 
45a2bd5
 
 
 
 
 
 
 
 
 
 
7e61f4f
45a2bd5
 
 
e85ca48
 
b855174
45a2bd5
e239116
 
 
45a2bd5
 
 
 
 
 
 
 
 
 
 
7e61f4f
45a2bd5
 
 
e85ca48
 
b855174
45a2bd5
e239116
 
 
45a2bd5
 
 
 
 
 
 
 
 
 
 
7e61f4f
45a2bd5
a667a07
30c3d8b
e85ca48
 
b855174
a3c3cc3
e239116
 
 
a3c3cc3
f2193e9
30c3d8b
9a45b8f
 
c8a4d47
 
 
 
 
 
7e61f4f
45a2bd5
 
30c3d8b
 
 
 
 
45a2bd5
 
 
30c3d8b
45a2bd5
 
118ea5f
45a2bd5
 
 
118ea5f
45a2bd5
 
 
 
118ea5f
45a2bd5
 
 
118ea5f
45a2bd5
 
 
 
118ea5f
45a2bd5
 
 
118ea5f
45a2bd5
 
 
 
118ea5f
45a2bd5
 
 
118ea5f
45a2bd5
 
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
import pulp
import numpy as np
import pandas as pd
import streamlit as st
import gspread
from itertools import combinations

scope = ['https://www.googleapis.com/auth/spreadsheets',
          "https://www.googleapis.com/auth/drive"]

credentials = {
  "type": "service_account",
  "project_id": "sheets-api-connect-378620",
  "private_key_id": "1005124050c80d085e2c5b344345715978dd9cc9",
  "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCtKa01beXwc88R\nnPZVQTNPVQuBnbwoOfc66gW3547ja/UEyIGAF112dt/VqHprRafkKGmlg55jqJNt\na4zceLKV+wTm7vBu7lDISTJfGzCf2TrxQYNqwMKE2LOjI69dBM8u4Dcb4k0wcp9v\ntW1ZzLVVuwTvmrg7JBHjiSaB+x5wxm/r3FOiJDXdlAgFlytzqgcyeZMJVKKBQHyJ\njEGg/1720A0numuOCt71w/2G0bDmijuj1e6tH32MwRWcvRNZ19K9ssyDz2S9p68s\nYDhIxX69OWxwScTIHLY6J2t8txf/XMivL/636fPlDADvBEVTdlT606n8CcKUVQeq\npUVdG+lfAgMBAAECggEAP38SUA7B69eTfRpo658ycOs3Amr0JW4H/bb1rNeAul0K\nZhwd/HnU4E07y81xQmey5kN5ZeNrD5EvqkZvSyMJHV0EEahZStwhjCfnDB/cxyix\nZ+kFhv4y9eK+kFpUAhBy5nX6T0O+2T6WvzAwbmbVsZ+X8kJyPuF9m8ldcPlD0sce\ntj8NwVq1ys52eosqs7zi2vjt+eMcaY393l4ls+vNq8Yf27cfyFw45W45CH/97/Nu\n5AmuzlCOAfFF+z4OC5g4rei4E/Qgpxa7/uom+BVfv9G0DIGW/tU6Sne0+37uoGKt\nW6DzhgtebUtoYkG7ZJ05BTXGp2lwgVcNRoPwnKJDxQKBgQDT5wYPUBDW+FHbvZSp\nd1m1UQuXyerqOTA9smFaM8sr/UraeH85DJPEIEk8qsntMBVMhvD3Pw8uIUeFNMYj\naLmZFObsL+WctepXrVo5NB6RtLB/jZYxiKMatMLUJIYtcKIp+2z/YtKiWcLnwotB\nWdCjVnPTxpkurmF2fWP/eewZ+wKBgQDRMtJg7etjvKyjYNQ5fARnCc+XsI3gkBe1\nX9oeXfhyfZFeBXWnZzN1ITgFHplDznmBdxAyYGiQdbbkdKQSghviUQ0igBvoDMYy\n1rWcy+a17Mj98uyNEfmb3X2cC6WpvOZaGHwg9+GY67BThwI3FqHIbyk6Ko09WlTX\nQpRQjMzU7QKBgAfi1iflu+q0LR+3a3vvFCiaToskmZiD7latd9AKk2ocsBd3Woy9\n+hXXecJHPOKV4oUJlJgvAZqe5HGBqEoTEK0wyPNLSQlO/9ypd+0fEnArwFHO7CMF\nycQprAKHJXM1eOOFFuZeQCaInqdPZy1UcV5Szla4UmUZWkk1m24blHzXAoGBAMcA\nyH4qdbxX9AYrC1dvsSRvgcnzytMvX05LU0uF6tzGtG0zVlub4ahvpEHCfNuy44UT\nxRWW/oFFaWjjyFxO5sWggpUqNuHEnRopg3QXx22SRRTGbN45li/+QAocTkgsiRh1\nqEcYZsO4mPCsQqAy6E2p6RcK+Xa+omxvSnVhq0x1AoGAKr8GdkCl4CF6rieLMAQ7\nLNBuuoYGaHoh8l5E2uOQpzwxVy/nMBcAv+2+KqHEzHryUv1owOi6pMLv7A9mTFoS\n18B0QRLuz5fSOsVnmldfC9fpUc6H8cH1SINZpzajqQA74bPwELJjnzrCnH79TnHG\nJuElxA33rFEjbgbzdyrE768=\n-----END PRIVATE KEY-----\n",
  "client_email": "gspread-connection@sheets-api-connect-378620.iam.gserviceaccount.com",
  "client_id": "106625872877651920064",
  "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%40sheets-api-connect-378620.iam.gserviceaccount.com"
}

gc = gspread.service_account_from_dict(credentials)

st.set_page_config(layout="wide")

american_format = {'OwnAvg': '{:.2%}'}
mma_format = {'ML_perc': '{:.2%}', 'Min_%': '{:.2%}', 'Med_%': '{:.2%}', }

@st.cache_resource(ttl = 600)
def init_baselines():
    sh = gc.open_by_url("https://docs.google.com/spreadsheets/d/17OAf4OAfW92-loMNUFvIubNmgF9111dsObybo6xhtYY/edit?gid=1468336051#gid=1468336051")
    worksheet = sh.worksheet('QB')
    all_values = worksheet.get_all_values()
    cell_vals = [row[0:11] for row in all_values[2:500]]
    frame_hold = pd.DataFrame(cell_vals, columns=['Player', 'Team', 'Salary', 'OwnAvg', 'PointsAvg', 'Points per $', 'blank', 'drop', 'drop2', 'drop3', 'GPP Rank'])
    frame_hold['PointsAvg'] = frame_hold['PointsAvg'].astype(float)
    frame_hold['OwnAvg'] = frame_hold['OwnAvg'].str.replace('%', '').astype(float)/100
    frame_hold['Floor'] = frame_hold['PointsAvg'] * .15
    frame_hold['Ceiling'] = frame_hold['PointsAvg'] * 1.85
    qb_frame = frame_hold[['Player', 'Team', 'Salary', 'OwnAvg', 'Floor', 'PointsAvg', 'Ceiling', 'Points per $', 'GPP Rank']]
    string_cols = ['Team']
    qb_frame = qb_frame.drop_duplicates(subset='Player')
    qb_frame = qb_frame.set_index('Player')
    
    for col in qb_frame.columns:
        if col not in string_cols:
            try:
                qb_frame[col] = pd.to_numeric(qb_frame[col], errors='coerce')
            except ValueError:
                pass  # Ignore columns that cannot be converted
                
    qb_frame = qb_frame.sort_values(by='GPP Rank', ascending=False)
    
    worksheet = sh.worksheet('RB')
    all_values = worksheet.get_all_values()
    cell_vals = [row[0:11] for row in all_values[2:500]]
    frame_hold = pd.DataFrame(cell_vals, columns=['Player', 'Team', 'Salary', 'OwnAvg', 'PointsAvg', 'Points per $', 'blank', 'drop', 'drop2', 'drop3', 'GPP Rank'])
    frame_hold['PointsAvg'] = frame_hold['PointsAvg'].astype(float)
    frame_hold['OwnAvg'] = frame_hold['OwnAvg'].str.replace('%', '').astype(float)/100
    frame_hold['Floor'] = frame_hold['PointsAvg'] * .15
    frame_hold['Ceiling'] = frame_hold['PointsAvg'] * 1.85
    rb_frame = frame_hold[['Player', 'Team', 'Salary', 'OwnAvg', 'Floor', 'PointsAvg', 'Ceiling', 'Points per $', 'GPP Rank']]
    string_cols = ['Team']
    rb_frame = rb_frame.drop_duplicates(subset='Player')
    rb_frame = rb_frame.set_index('Player')
    
    for col in rb_frame.columns:
        if col not in string_cols:
            try:
                rb_frame[col] = pd.to_numeric(rb_frame[col], errors='coerce')
            except ValueError:
                pass  # Ignore columns that cannot be converted
                
    rb_frame = rb_frame.sort_values(by='GPP Rank', ascending=False)
    
    worksheet = sh.worksheet('WR')
    all_values = worksheet.get_all_values()
    cell_vals = [row[0:11] for row in all_values[2:500]]
    frame_hold = pd.DataFrame(cell_vals, columns=['Player', 'Team', 'Salary', 'OwnAvg', 'PointsAvg', 'Points per $', 'blank', 'drop', 'drop2', 'drop3', 'GPP Rank'])
    frame_hold['PointsAvg'] = frame_hold['PointsAvg'].astype(float)
    frame_hold['OwnAvg'] = frame_hold['OwnAvg'].str.replace('%', '').astype(float)/100
    frame_hold['Floor'] = frame_hold['PointsAvg'] * .15
    frame_hold['Ceiling'] = frame_hold['PointsAvg'] * 1.85
    wr_frame = frame_hold[['Player', 'Team', 'Salary', 'OwnAvg', 'Floor', 'PointsAvg', 'Ceiling', 'Points per $', 'GPP Rank']]
    string_cols = ['Team']
    wr_frame = wr_frame.drop_duplicates(subset='Player')
    wr_frame = wr_frame.set_index('Player')
    
    for col in wr_frame.columns:
        if col not in string_cols:
            try:
                wr_frame[col] = pd.to_numeric(wr_frame[col], errors='coerce')
            except ValueError:
                pass  # Ignore columns that cannot be converted
                
    wr_frame = wr_frame.sort_values(by='GPP Rank', ascending=False)
    
    worksheet = sh.worksheet('Flex')
    all_values = worksheet.get_all_values()
    cell_vals = [row[0:11] for row in all_values[2:500]]
    frame_hold = pd.DataFrame(cell_vals, columns=['Player', 'Team', 'Salary', 'OwnAvg', 'PointsAvg', 'Points per $', 'blank', 'drop', 'drop2', 'drop3', 'GPP Rank'])
    frame_hold['PointsAvg'] = frame_hold['PointsAvg'].astype(float)
    frame_hold['OwnAvg'] = frame_hold['OwnAvg'].str.replace('%', '').astype(float)/100
    frame_hold['Floor'] = frame_hold['PointsAvg'] * .15
    frame_hold['Ceiling'] = frame_hold['PointsAvg'] * 1.85
    flex_frame = frame_hold[['Player', 'Team', 'Salary', 'OwnAvg', 'Floor', 'PointsAvg', 'Ceiling', 'Points per $', 'GPP Rank']]
    string_cols = ['Team']
    flex_frame = flex_frame.drop_duplicates(subset='Player')
    flex_frame = flex_frame.set_index('Player')
    
    for col in flex_frame.columns:
        if col not in string_cols:
            try:
                flex_frame[col] = pd.to_numeric(flex_frame[col], errors='coerce')
            except ValueError:
                pass  # Ignore columns that cannot be converted
                
    flex_frame = flex_frame.sort_values(by='GPP Rank', ascending=False)
    
    return qb_frame, rb_frame, wr_frame, flex_frame

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

qb_frame, rb_frame, wr_frame, flex_frame = init_baselines()

tab1, tab2, tab3, tab4 = st.tabs(['QB data', 'RB data', 'WR data', 'Flex data'])

with tab1:
    with st.container():
              st.dataframe(qb_frame.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(american_format, precision=2), height = 1000, use_container_width = True)
              st.download_button(
                      label="Export Tables",
                      data=convert_df_to_csv(qb_frame),
                      file_name='NCAAF_QB_model_export.csv',
                      mime='text/csv',
              )
with tab2:
    with st.container():
              st.dataframe(rb_frame.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(american_format, precision=2), height = 1000, use_container_width = True)
              st.download_button(
                      label="Export Tables",
                      data=convert_df_to_csv(rb_frame),
                      file_name='NCAAF_RB_model_export.csv',
                      mime='text/csv',
              )
with tab3:
    with st.container():
              st.dataframe(wr_frame.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(american_format, precision=2), height = 1000, use_container_width = True)
              st.download_button(
                      label="Export Tables",
                      data=convert_df_to_csv(wr_frame),
                      file_name='NCAAF_WR_model_export.csv',
                      mime='text/csv',
              )
with tab4:
    with st.container():
              st.dataframe(flex_frame.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(american_format, precision=2), height = 1000, use_container_width = True)
              st.download_button(
                      label="Export Tables",
                      data=convert_df_to_csv(flex_frame),
                      file_name='NCAAF_Flex_model_export.csv',
                      mime='text/csv',
              )