James McCool commited on
Commit
6a12985
·
1 Parent(s): c4807f3

Enhance find_name_mismatches function and app.py session state management

Browse files

- Updated the find_name_mismatches function to include a new parameter for calc_toggle, allowing for better tracking of calculation states.
- Modified app.py to ensure calc_toggle is properly managed within session state, improving the overall functionality and user experience during name matching processes.
- Streamlined the handling of data frames by removing unnecessary columns, focusing on relevant metrics for clearer data presentation.

Files changed (2) hide show
  1. app.py +7 -8
  2. global_func/find_name_mismatches.py +6 -6
app.py CHANGED
@@ -18,11 +18,13 @@ from global_func.load_csv import load_csv
18
  from global_func.find_csv_mismatches import find_csv_mismatches
19
 
20
  player_exposure_format = {'Exposure Overall': '{:.2%}', 'Exposure Top 1%': '{:.2%}', 'Exposure Top 5%': '{:.2%}', 'Exposure Top 10%': '{:.2%}', 'Exposure Top 20%': '{:.2%}'}
 
21
 
22
  tab1, tab2 = st.tabs(["Data Load", "Contest Analysis"])
23
  with tab1:
24
  if st.button('Clear data', key='reset1'):
25
  st.session_state.clear()
 
26
  sport_select = st.selectbox("Select Sport", ['MLB', 'NBA', 'NFL'])
27
  # Add file uploaders to your app
28
  col1, col2 = st.columns(2)
@@ -71,15 +73,15 @@ with tab1:
71
  st.success('Projections file loaded successfully!')
72
  st.dataframe(st.session_state['projections_df'].head(10))
73
 
 
 
74
  if Contest_file and projections_file:
75
  st.subheader("Name Matching functions")
76
- st.session_state['Contest'], st.session_state['projections_df'], st.session_state['ownership_dict'], st.session_state['actual_dict'] = find_name_mismatches(st.session_state['Contest'], st.session_state['projections_df'], st.session_state['ownership_dict'], st.session_state['actual_dict'])
77
  st.session_state['projections_df']['salary'] = (st.session_state['projections_df']['salary'].astype(str).str.replace(',', '').astype(float).astype(int))
78
  st.session_state['ownership_dict'] = dict(zip(st.session_state['ownership_dict']['Player'], st.session_state['ownership_dict']['Own']))
79
  st.session_state['actual_dict'] = dict(zip(st.session_state['actual_dict']['Player'], st.session_state['actual_dict']['FPTS']))
80
 
81
-
82
- with tab2:
83
  if 'Contest' in st.session_state and 'projections_df' in st.session_state:
84
  col1, col2 = st.columns([1, 8])
85
  excluded_cols = ['BaseName', 'EntryCount']
@@ -251,8 +253,7 @@ with tab2:
251
  for each_set in each_frame_set:
252
  set_frame = each_set.to_frame().reset_index().rename(columns={'index': 'Player', 'count': 'Count'})
253
  set_frame['Percent'] = set_frame['Count'] / each_len_set[player_count_var]
254
- set_frame = set_frame[['Player', 'Count', 'Percent']]
255
- set_frame = set_frame.rename(columns={'Count': f'Count {each_set_name[player_count_var]}'})
256
  set_frame = set_frame.rename(columns={'Percent': f'Exposure {each_set_name[player_count_var]}'})
257
  if 'player_frame' not in st.session_state:
258
  st.session_state['player_frame'] = set_frame
@@ -313,9 +314,7 @@ with tab2:
313
  for each_stack in each_stacks_set:
314
  stack_frame = each_stack.to_frame().reset_index().rename(columns={'index': 'Stack', 'count': 'Count'})
315
  stack_frame['Percent'] = stack_frame['Count'] / each_stacks_len_set[stack_count_var]
316
- stack_frame = stack_frame[['Stack', 'Count', 'Percent']]
317
- st.write(stack_frame['Count'])
318
- stack_frame = stack_frame.rename(columns={'Count': f'Count {each_set_name[stack_count_var]}'})
319
  stack_frame = stack_frame.rename(columns={'Percent': f'Exposure {each_set_name[stack_count_var]}'})
320
  if 'stack_frame' not in st.session_state:
321
  st.session_state['stack_frame'] = stack_frame
 
18
  from global_func.find_csv_mismatches import find_csv_mismatches
19
 
20
  player_exposure_format = {'Exposure Overall': '{:.2%}', 'Exposure Top 1%': '{:.2%}', 'Exposure Top 5%': '{:.2%}', 'Exposure Top 10%': '{:.2%}', 'Exposure Top 20%': '{:.2%}'}
21
+ st.session_state['calc_toggle'] = False
22
 
23
  tab1, tab2 = st.tabs(["Data Load", "Contest Analysis"])
24
  with tab1:
25
  if st.button('Clear data', key='reset1'):
26
  st.session_state.clear()
27
+ st.session_state['calc_toggle'] = False
28
  sport_select = st.selectbox("Select Sport", ['MLB', 'NBA', 'NFL'])
29
  # Add file uploaders to your app
30
  col1, col2 = st.columns(2)
 
73
  st.success('Projections file loaded successfully!')
74
  st.dataframe(st.session_state['projections_df'].head(10))
75
 
76
+
77
+ with tab2:
78
  if Contest_file and projections_file:
79
  st.subheader("Name Matching functions")
80
+ st.session_state['Contest'], st.session_state['projections_df'], st.session_state['ownership_dict'], st.session_state['actual_dict'], st.session_state['calc_toggle'] = find_name_mismatches(st.session_state['Contest'], st.session_state['projections_df'], st.session_state['ownership_dict'], st.session_state['actual_dict'], st.session_state['calc_toggle'])
81
  st.session_state['projections_df']['salary'] = (st.session_state['projections_df']['salary'].astype(str).str.replace(',', '').astype(float).astype(int))
82
  st.session_state['ownership_dict'] = dict(zip(st.session_state['ownership_dict']['Player'], st.session_state['ownership_dict']['Own']))
83
  st.session_state['actual_dict'] = dict(zip(st.session_state['actual_dict']['Player'], st.session_state['actual_dict']['FPTS']))
84
 
 
 
85
  if 'Contest' in st.session_state and 'projections_df' in st.session_state:
86
  col1, col2 = st.columns([1, 8])
87
  excluded_cols = ['BaseName', 'EntryCount']
 
253
  for each_set in each_frame_set:
254
  set_frame = each_set.to_frame().reset_index().rename(columns={'index': 'Player', 'count': 'Count'})
255
  set_frame['Percent'] = set_frame['Count'] / each_len_set[player_count_var]
256
+ set_frame = set_frame[['Player', 'Percent']]
 
257
  set_frame = set_frame.rename(columns={'Percent': f'Exposure {each_set_name[player_count_var]}'})
258
  if 'player_frame' not in st.session_state:
259
  st.session_state['player_frame'] = set_frame
 
314
  for each_stack in each_stacks_set:
315
  stack_frame = each_stack.to_frame().reset_index().rename(columns={'index': 'Stack', 'count': 'Count'})
316
  stack_frame['Percent'] = stack_frame['Count'] / each_stacks_len_set[stack_count_var]
317
+ stack_frame = stack_frame[['Stack', 'Percent']]
 
 
318
  stack_frame = stack_frame.rename(columns={'Percent': f'Exposure {each_set_name[stack_count_var]}'})
319
  if 'stack_frame' not in st.session_state:
320
  st.session_state['stack_frame'] = stack_frame
global_func/find_name_mismatches.py CHANGED
@@ -4,7 +4,7 @@ import pandas as pd
4
  import time
5
  from fuzzywuzzy import process
6
 
7
- def find_name_mismatches(contest_df, projections_df, ownership_df, fpts_df):
8
 
9
  name_columns = [col for col in contest_df.columns if not col in ['BaseName', 'EntryCount']]
10
 
@@ -90,11 +90,10 @@ def find_name_mismatches(contest_df, projections_df, ownership_df, fpts_df):
90
  st.write(contest_name + ' ' + projection_name)
91
  st.success(f"Replaced '{selected_name}' with '{projection_name}'")
92
 
 
 
93
  st.success("All changes applied successfully!")
94
- return contest_df, projections_df, ownership_df, fpts_df
95
- else:
96
- st.success("No changes applied")
97
- return contest_df, projections_df, ownership_df, fpts_df
98
  else:
99
  st.success("All players have been automatically matched!")
100
  # Apply automatic matches
@@ -104,4 +103,5 @@ def find_name_mismatches(contest_df, projections_df, ownership_df, fpts_df):
104
  ownership_df['Player'] = ownership_df['Player'].replace(contest_name, projection_name)
105
  fpts_df['Player'] = fpts_df['Player'].replace(contest_name, projection_name)
106
  st.write(contest_name + ' ' + projection_name)
107
- return contest_df, projections_df, ownership_df, fpts_df
 
 
4
  import time
5
  from fuzzywuzzy import process
6
 
7
+ def find_name_mismatches(contest_df, projections_df, ownership_df, fpts_df, calc_toggle):
8
 
9
  name_columns = [col for col in contest_df.columns if not col in ['BaseName', 'EntryCount']]
10
 
 
90
  st.write(contest_name + ' ' + projection_name)
91
  st.success(f"Replaced '{selected_name}' with '{projection_name}'")
92
 
93
+ calc_toggle = True
94
+
95
  st.success("All changes applied successfully!")
96
+ return contest_df, projections_df, ownership_df, fpts_df, calc_toggle
 
 
 
97
  else:
98
  st.success("All players have been automatically matched!")
99
  # Apply automatic matches
 
103
  ownership_df['Player'] = ownership_df['Player'].replace(contest_name, projection_name)
104
  fpts_df['Player'] = fpts_df['Player'].replace(contest_name, projection_name)
105
  st.write(contest_name + ' ' + projection_name)
106
+ calc_toggle = True
107
+ return contest_df, projections_df, ownership_df, fpts_df, calc_toggle