James McCool commited on
Commit
337c221
·
1 Parent(s): bf78c1d

Refactor app.py to remove Google Sheets integration and streamline database connections. Update seed frame functions to utilize MongoDB collections for player name mapping, enhancing data retrieval for DraftKings and FanDuel simulations. Improve overall code clarity and maintainability.

Browse files
Files changed (1) hide show
  1. app.py +42 -39
app.py CHANGED
@@ -2,52 +2,19 @@ import streamlit as st
2
  st.set_page_config(layout="wide")
3
  import numpy as np
4
  import pandas as pd
5
- import gspread
6
  import pymongo
7
  import time
8
 
9
  @st.cache_resource
10
  def init_conn():
11
- scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
12
-
13
- credentials = {
14
- "type": "service_account",
15
- "project_id": "model-sheets-connect",
16
- "private_key_id": st.secrets['model_sheets_connect_pk'],
17
- "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",
18
- "client_email": "[email protected]",
19
- "client_id": "100369174533302798535",
20
- "auth_uri": "https://accounts.google.com/o/oauth2/auth",
21
- "token_uri": "https://oauth2.googleapis.com/token",
22
- "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
23
- "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/gspread-connection%40model-sheets-connect.iam.gserviceaccount.com"
24
- }
25
-
26
- credentials2 = {
27
- "type": "service_account",
28
- "project_id": "sheets-api-connect-378620",
29
- "private_key_id": st.secrets['sheets_api_connect_pk'],
30
- "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",
31
- "client_email": "gspread-connection@sheets-api-connect-378620.iam.gserviceaccount.com",
32
- "client_id": "106625872877651920064",
33
- "auth_uri": "https://accounts.google.com/o/oauth2/auth",
34
- "token_uri": "https://oauth2.googleapis.com/token",
35
- "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
36
- "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/gspread-connection%40sheets-api-connect-378620.iam.gserviceaccount.com"
37
- }
38
 
39
  uri = st.secrets['mongo_uri']
40
  client = pymongo.MongoClient(uri, retryWrites=True, serverSelectionTimeoutMS=500000)
41
  db = client["NFL_Database"]
42
-
43
- NFL_Data = st.secrets['NFL_Data']
44
-
45
- gc = gspread.service_account_from_dict(credentials)
46
- gc2 = gspread.service_account_from_dict(credentials2)
47
 
48
- return gc, gc2, db, NFL_Data
49
 
50
- gcservice_account, gcservice_account2, db, NFL_Data = init_conn()
51
 
52
  percentages_format = {'Exposure': '{:.2%}'}
53
  freq_format = {'Exposure': '{:.2%}', 'Proj Own': '{:.2%}', 'Edge': '{:.2%}'}
@@ -55,49 +22,85 @@ dk_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'sal
55
  fd_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
56
 
57
  @st.cache_data(ttl = 600)
58
- def init_DK_seed_frames(sharp_split):
 
 
 
 
 
59
 
60
  collection = db["DK_NFL_seed_frame"]
61
  cursor = collection.find().limit(sharp_split)
62
 
63
  raw_display = pd.DataFrame(list(cursor))
64
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
 
 
 
 
65
  DK_seed = raw_display.to_numpy()
66
 
67
  return DK_seed
68
 
69
  @st.cache_data(ttl = 600)
70
  def init_DK_Secondary_seed_frames(sharp_split):
 
 
 
 
 
71
 
72
  collection = db["DK_NFL_Secondary_seed_frame"]
73
  cursor = collection.find().limit(sharp_split)
74
 
75
  raw_display = pd.DataFrame(list(cursor))
76
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
 
 
 
 
77
  DK_seed = raw_display.to_numpy()
78
 
79
  return DK_seed
80
 
81
  @st.cache_data(ttl = 599)
82
- def init_FD_seed_frames(sharp_split):
 
 
 
 
 
83
 
84
  collection = db["FD_NFL_seed_frame"]
85
  cursor = collection.find().limit(sharp_split)
86
 
87
  raw_display = pd.DataFrame(list(cursor))
88
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
 
 
 
 
89
  FD_seed = raw_display.to_numpy()
90
 
91
  return FD_seed
92
 
93
  @st.cache_data(ttl = 599)
94
  def init_FD_Secondary_seed_frames(sharp_split):
 
 
 
 
 
95
 
96
  collection = db["FD_NFL_Secondary_seed_frame"]
97
  cursor = collection.find().limit(sharp_split)
98
 
99
  raw_display = pd.DataFrame(list(cursor))
100
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
 
 
 
 
101
  FD_seed = raw_display.to_numpy()
102
 
103
  return FD_seed
@@ -359,11 +362,10 @@ with tab1:
359
  'Team_map':dict(zip(raw_baselines.Player,raw_baselines.Team)),
360
  'STDev_map':dict(zip(raw_baselines.Player,raw_baselines.STDev))
361
  }
 
362
  Sim_Winners = sim_contest(1000, st.session_state.working_seed, st.session_state.maps_dict, Contest_Size)
363
  Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners))
364
 
365
- #st.table(Sim_Winner_Frame)
366
-
367
  # Initial setup
368
  Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners), columns=column_names + ['Fantasy'])
369
  Sim_Winner_Frame['GPP_Proj'] = (Sim_Winner_Frame['proj'] + Sim_Winner_Frame['Fantasy']) / 2
@@ -409,6 +411,7 @@ with tab1:
409
  'Team_map':dict(zip(raw_baselines.Player,raw_baselines.Team)),
410
  'STDev_map':dict(zip(raw_baselines.Player,raw_baselines.STDev))
411
  }
 
412
  Sim_Winners = sim_contest(1000, st.session_state.working_seed, st.session_state.maps_dict, Contest_Size)
413
  Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners))
414
 
 
2
  st.set_page_config(layout="wide")
3
  import numpy as np
4
  import pandas as pd
 
5
  import pymongo
6
  import time
7
 
8
  @st.cache_resource
9
  def init_conn():
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
 
11
  uri = st.secrets['mongo_uri']
12
  client = pymongo.MongoClient(uri, retryWrites=True, serverSelectionTimeoutMS=500000)
13
  db = client["NFL_Database"]
 
 
 
 
 
14
 
15
+ return db
16
 
17
+ db = init_conn()
18
 
19
  percentages_format = {'Exposure': '{:.2%}'}
20
  freq_format = {'Exposure': '{:.2%}', 'Proj Own': '{:.2%}', 'Edge': '{:.2%}'}
 
22
  fd_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
23
 
24
  @st.cache_data(ttl = 600)
25
+ def init_DK_seed_frames(sharp_split):
26
+
27
+ collection = db['DK_NFL_name_map']
28
+ cursor = collection.find()
29
+ raw_data = pd.DataFrame(list(cursor))
30
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
31
 
32
  collection = db["DK_NFL_seed_frame"]
33
  cursor = collection.find().limit(sharp_split)
34
 
35
  raw_display = pd.DataFrame(list(cursor))
36
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
37
+ dict_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
38
+ st.write("converting names")
39
+ for col in dict_columns:
40
+ raw_display[col] = raw_display[col].map(names_dict)
41
  DK_seed = raw_display.to_numpy()
42
 
43
  return DK_seed
44
 
45
  @st.cache_data(ttl = 600)
46
  def init_DK_Secondary_seed_frames(sharp_split):
47
+
48
+ collection = db['DK_NFL_Secondary_name_map']
49
+ cursor = collection.find()
50
+ raw_data = pd.DataFrame(list(cursor))
51
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
52
 
53
  collection = db["DK_NFL_Secondary_seed_frame"]
54
  cursor = collection.find().limit(sharp_split)
55
 
56
  raw_display = pd.DataFrame(list(cursor))
57
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
58
+ dict_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
59
+ st.write("converting names")
60
+ for col in dict_columns:
61
+ raw_display[col] = raw_display[col].map(names_dict)
62
  DK_seed = raw_display.to_numpy()
63
 
64
  return DK_seed
65
 
66
  @st.cache_data(ttl = 599)
67
+ def init_FD_seed_frames(sharp_split):
68
+
69
+ collection = db['FD_NFL_name_map']
70
+ cursor = collection.find()
71
+ raw_data = pd.DataFrame(list(cursor))
72
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
73
 
74
  collection = db["FD_NFL_seed_frame"]
75
  cursor = collection.find().limit(sharp_split)
76
 
77
  raw_display = pd.DataFrame(list(cursor))
78
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
79
+ dict_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
80
+ st.write("converting names")
81
+ for col in dict_columns:
82
+ raw_display[col] = raw_display[col].map(names_dict)
83
  FD_seed = raw_display.to_numpy()
84
 
85
  return FD_seed
86
 
87
  @st.cache_data(ttl = 599)
88
  def init_FD_Secondary_seed_frames(sharp_split):
89
+
90
+ collection = db['FD_NFL_Secondary_name_map']
91
+ cursor = collection.find()
92
+ raw_data = pd.DataFrame(list(cursor))
93
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
94
 
95
  collection = db["FD_NFL_Secondary_seed_frame"]
96
  cursor = collection.find().limit(sharp_split)
97
 
98
  raw_display = pd.DataFrame(list(cursor))
99
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
100
+ dict_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
101
+ st.write("converting names")
102
+ for col in dict_columns:
103
+ raw_display[col] = raw_display[col].map(names_dict)
104
  FD_seed = raw_display.to_numpy()
105
 
106
  return FD_seed
 
362
  'Team_map':dict(zip(raw_baselines.Player,raw_baselines.Team)),
363
  'STDev_map':dict(zip(raw_baselines.Player,raw_baselines.STDev))
364
  }
365
+
366
  Sim_Winners = sim_contest(1000, st.session_state.working_seed, st.session_state.maps_dict, Contest_Size)
367
  Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners))
368
 
 
 
369
  # Initial setup
370
  Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners), columns=column_names + ['Fantasy'])
371
  Sim_Winner_Frame['GPP_Proj'] = (Sim_Winner_Frame['proj'] + Sim_Winner_Frame['Fantasy']) / 2
 
411
  'Team_map':dict(zip(raw_baselines.Player,raw_baselines.Team)),
412
  'STDev_map':dict(zip(raw_baselines.Player,raw_baselines.STDev))
413
  }
414
+
415
  Sim_Winners = sim_contest(1000, st.session_state.working_seed, st.session_state.maps_dict, Contest_Size)
416
  Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners))
417