File size: 5,563 Bytes
58cea02
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d04558f
58cea02
 
 
 
 
 
1689df1
5db8a23
 
 
 
 
 
 
9e80538
5db8a23
 
 
 
 
58cea02
1689df1
58cea02
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5db8a23
 
 
 
 
 
 
58cea02
5db8a23
 
 
 
 
 
 
 
 
 
 
 
 
 
58cea02
5db8a23
 
 
 
 
 
58cea02
5db8a23
 
 
58cea02
 
 
 
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
import streamlit as st
st.set_page_config(layout="wide")
import numpy as np
import pandas as pd
import time
from fuzzywuzzy import process
import random

## import global functions
from global_func.clean_player_name import clean_player_name
from global_func.load_file import load_file
from global_func.load_ss_file import load_ss_file
from global_func.find_name_mismatches import find_name_mismatches
from global_func.predict_dupes import predict_dupes
from global_func.highlight_rows import highlight_changes, highlight_changes_winners, highlight_changes_losers
from global_func.load_csv import load_csv
from global_func.find_csv_mismatches import find_csv_mismatches

tab1, tab2 = st.tabs(["Data Load", "Contest Analysis"])
with tab1:
    if st.button('Clear data', key='reset1'):
        st.session_state.clear()
    # Add file uploaders to your app
    col1, col2, col3 = st.columns(3)
    
    with col1:
        st.subheader("Contest File")
        st.info("Go ahead and upload a Contest file here. Only include player columns and an optional 'Stack' column if you are playing MLB.")
        Contest_file = st.file_uploader("Upload Contest File (CSV or Excel)", type=['csv', 'xlsx', 'xls'])
        if 'Contest' in st.session_state:
            del st.session_state['Contest']

        if Contest_file:
            st.session_state['Contest'], st.session_state['position_dict'], st.session_state['ownership_dict'], st.session_state['entry_list'] = load_file(Contest_file)
            st.session_state['Contest'] = st.session_state['Contest'].dropna(how='all')
            st.session_state['Contest'] = st.session_state['Contest'].reset_index(drop=True)
            if st.session_state['Contest'] is not None:
                st.success('Contest file loaded successfully!')
                st.dataframe(st.session_state['Contest'].head(10))

    with col2:
        st.subheader("Projections File")
        st.info("upload a projections file that has 'player_names', 'salary', 'median', 'ownership', and 'captain ownership' (Needed for Showdown) columns. Note that the salary for showdown needs to be the FLEX salary, not the captain salary.")
        
        # Create two columns for the uploader and template button
        upload_col, template_col = st.columns([3, 1])
        
        with upload_col:
            projections_file = st.file_uploader("Upload Projections File (CSV or Excel)", type=['csv', 'xlsx', 'xls'])
            if 'projections_df' in st.session_state:
                del st.session_state['projections_df']
        
        with template_col:
            # Create empty DataFrame with required columns
            template_df = pd.DataFrame(columns=['player_names', 'position', 'team', 'salary', 'median', 'ownership', 'captain ownership'])
            # Add download button for template
            st.download_button(
                label="Template",
                data=template_df.to_csv(index=False),
                file_name="projections_template.csv",
                mime="text/csv"
            )
            
        if projections_file:
            export_projections, projections = load_file(projections_file)
            if projections is not None:
                st.success('Projections file loaded successfully!')
                st.dataframe(projections.head(10))

    # if Contest_file and projections_file:
    #     if st.session_state['Contest'] is not None and projections is not None:
    #         st.subheader("Name Matching Analysis")
    #         # Initialize projections_df in session state if it doesn't exist
    #         if 'projections_df' not in st.session_state:
    #             st.session_state['projections_df'] = projections.copy()
    #             st.session_state['projections_df']['salary'] = (st.session_state['projections_df']['salary'].astype(str).str.replace(',', '').astype(float).astype(int))
            
    #         # Update projections_df with any new matches
    #         st.session_state['projections_df'] = find_name_mismatches(st.session_state['Contest'], st.session_state['projections_df'])
    #         if csv_file is not None and 'export_dict' not in st.session_state:
    #                 # Create a dictionary of Name to Name+ID from csv_file
    #                 try:
    #                     name_id_map = dict(zip(
    #                         st.session_state['csv_file']['Name'], 
    #                         st.session_state['csv_file']['Name + ID']
    #                     ))
    #                 except:
    #                     name_id_map = dict(zip(
    #                         st.session_state['csv_file']['Nickname'], 
    #                         st.session_state['csv_file']['Id']
    #                     ))
                    
    #                 # Function to find best match
    #                 def find_best_match(name):
    #                     best_match = process.extractOne(name, name_id_map.keys())
    #                     if best_match and best_match[1] >= 85:  # 85% match threshold
    #                         return name_id_map[best_match[0]]
    #                     return name  # Return original name if no good match found
                    
    #                 # Apply the matching
    #                 projections['upload_match'] = projections['player_names'].apply(find_best_match)
    #                 st.session_state['export_dict'] = dict(zip(projections['player_names'], projections['upload_match']))

with tab2:
    if st.button('Clear data', key='reset3'):
        st.session_state.clear()