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() |