File size: 6,559 Bytes
d963711
a02aab5
 
d963711
0e1f732
a02aab5
 
 
 
ac4124a
a02aab5
 
bfe3be9
0e1f732
 
 
a02aab5
0e1f732
 
 
bfe3be9
0e1f732
 
 
 
 
 
 
 
 
bfe3be9
0e1f732
a37f146
 
a02aab5
d72caf0
 
 
6e72f6a
a4a6839
bfe3be9
d72caf0
0c6b2bb
a02aab5
d72caf0
 
 
a02aab5
 
 
 
c90aafb
 
d963711
 
 
a02aab5
c90aafb
a02aab5
 
c90aafb
 
d72caf0
 
 
a02aab5
 
 
ac4124a
c90aafb
a02aab5
d72caf0
 
 
 
 
 
 
a02aab5
bfe3be9
 
 
a02aab5
a37f146
 
 
 
a02aab5
 
 
 
1eb15c8
6f13a14
 
 
1eb15c8
a02aab5
 
d72caf0
a02aab5
d72caf0
 
 
 
 
 
 
 
a02aab5
0c6b2bb
 
1eb15c8
6e72f6a
a4a6839
 
0c6b2bb
d72caf0
 
 
 
 
 
6f13a14
 
 
bfe3be9
 
 
d72caf0
 
 
 
 
6f13a14
d72caf0
 
 
 
 
 
a02aab5
 
 
bfe3be9
a37f146
 
a02aab5
 
d72caf0
 
 
6e72f6a
a4a6839
bfe3be9
d72caf0
0c6b2bb
a02aab5
d72caf0
 
 
a02aab5
 
 
 
0324026
 
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
from pathlib import Path

import gradio as gr

import match_parser as mp


def usatt_rating_analyzer(file_obj):
    # Load data.
    df, is_tournament = mp.load_match_df(Path(file_obj.name))

    # Create outputs.
    # player_name = mp.get_player_name(Path(file_obj.orig_name).stem)
    current_rating = mp.get_current_rating(df)
    peak_rating = mp.get_max_rating(df)
    n_competitions_played = mp.get_num_competitions_played(df, is_tournament)
    n_matches_played = len(df)
    matches_per_competition_fig = mp.get_matches_per_competition_fig(df, is_tournament)
    opponent_name_word_cloud_fig = mp.get_opponent_name_word_cloud_fig(df)
    competition_name_word_cloud_fig = mp.get_competition_name_word_cloud_fig(df, is_tournament)
    best_competitions = mp.make_df_columns_readable(mp.get_best_competitions(df, is_tournament), is_tournament)
    most_frequent_opponents = mp.make_df_columns_readable(mp.get_most_frequent_opponents(df), is_tournament)
    best_wins = mp.make_df_columns_readable(mp.get_best_wins(df), is_tournament)
    biggest_upsets = mp.make_df_columns_readable(mp.get_biggest_upsets(df), is_tournament)
    highest_rated_opponent = mp.make_df_columns_readable(mp.get_highest_rated_opponent(df), is_tournament)
    rating_over_time_fig = mp.get_rating_over_time_fig(df, is_tournament)
    match_with_longest_game = mp.make_df_columns_readable(mp.get_match_with_longest_game(df, is_tournament), is_tournament)
    opponent_rating_distr_fig = mp.get_opponent_rating_distr_fig(df)
    opponent_rating_dist_over_time_fig = mp.get_opponent_rating_dist_over_time_fig(df, is_tournament)

    return (#player_name,
            current_rating,
            peak_rating,
            n_competitions_played,
            n_matches_played,
            rating_over_time_fig,
            opponent_rating_distr_fig,
            opponent_rating_dist_over_time_fig,
            best_wins,
            biggest_upsets,
            best_competitions,
            most_frequent_opponents,
            highest_rated_opponent,
            match_with_longest_game,
            opponent_name_word_cloud_fig,
            competition_name_word_cloud_fig,
            matches_per_competition_fig,
            )


with gr.Blocks() as demo:
    analyze_btn_title = "Analyze"
    gr.Markdown(f"""# USATT rating analyzer
    Analyze [USA table tennis](https://www.teamusa.org/usa-table-tennis) tournament and league results. The more matches
     and competitions you have played, the better the tool works. Additionally, due to limitations on the available 
    data, ratings are always displayed as the rating received *after* the competition has been played.
    ## Downloading match results
    1. Make sure you are [logged in](https://usatt.simplycompete.com/login/auth) to your USATT account.
    2. Find the *active* player you wish to analyze (e.g.,  [Kanak Jha](https://usatt.simplycompete.com/userAccount/up/3431)).
    3. Under 'Tournaments' or 'Leagues', click *Download Tournament/League Match History*.
    ## Usage
    1. Simply add your tournament/league match history CSV file and click the "{analyze_btn_title}" button.
    
    ---
    
    """)
    with gr.Row():
        with gr.Column():
            input_file = gr.File(label='USATT Results File', file_types=['file'])
            btn = gr.Button(analyze_btn_title)

    gr.Markdown("""<br />
    
    ## Overview
    
    <br />
    """)

    with gr.Group():
        # with gr.Row():
        #     with gr.Column():
        #         player_name_box = gr.Textbox(lines=1, label="Player name")
        with gr.Row():
            with gr.Column():
                current_rating_box = gr.Textbox(lines=1, label="Current rating")
            with gr.Column():
                peak_rating_box = gr.Textbox(lines=1, label="Highest rating")
            with gr.Column():
                num_comps_box = gr.Textbox(lines=1, label="Number of competitions (tournaments/leagues) played")
            with gr.Column():
                num_matches_box = gr.Textbox(lines=1, label="Number of matches played")

        with gr.Row():
            with gr.Column():
                rating_over_time_plot = gr.Plot(show_label=False)

        with gr.Row():
            with gr.Column():
                opponent_rating_dist_plot = gr.Plot(show_label=False)
            with gr.Column():
                opponent_rating_dist_over_time_plot = gr.Plot(show_label=False)

        gr.Markdown("""<br />

        ## Best Matches

        <br />
        """)

        with gr.Row():
            with gr.Column():
                best_wins_gdf = gr.Dataframe(label="Best wins (matches won sorted by opponent post-competition rating)",
                                             max_rows=5)
                biggest_upsets_gdf = gr.Dataframe(label="Biggest upsets (matches won sorted by rating - opponent post-competition rating)",
                                                  max_rows=5)

        gr.Markdown("""<br />
        
        ## Fun Facts
        
        <br />
        """)

        with gr.Row():
            with gr.Column():
                best_competitions_gdf = gr.Dataframe(
                    label="Best competitions (those having the largest increase in rating)",
                    max_rows=5)
                most_frequent_opponents_gdf = gr.Dataframe(label="Most frequent opponents", max_rows=5)
                highest_rated_opponent_gdf = gr.Dataframe(label="Best opponent", max_rows=1)
                match_longest_game_gdf = gr.Dataframe(label="Match with longest game", max_rows=1)

        with gr.Row():
            with gr.Column():
                opponent_names_plot = gr.Plot(label="Opponent names")
            with gr.Column():
                comp_names_plot = gr.Plot(label="Competition names")
            with gr.Column():
                matches_per_comp_plot = gr.Plot(show_label=False)


    inputs = [input_file]
    outputs = [
        # player_name_box,
        current_rating_box,
        peak_rating_box,
        num_comps_box,
        num_matches_box,
        rating_over_time_plot,
        opponent_rating_dist_plot,
        opponent_rating_dist_over_time_plot,
        best_wins_gdf,
        biggest_upsets_gdf,
        best_competitions_gdf,
        most_frequent_opponents_gdf,
        highest_rated_opponent_gdf,
        match_longest_game_gdf,
        opponent_names_plot,
        comp_names_plot,
        matches_per_comp_plot,
    ]

    btn.click(usatt_rating_analyzer, inputs=inputs, outputs=outputs)

if __name__ == "__main__":
    demo.launch()