lschlessinger commited on
Commit
d963711
·
1 Parent(s): c67c9bd

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +28 -14
app.py CHANGED
@@ -1,12 +1,14 @@
 
1
  from typing import Optional, Tuple
2
 
3
  import gradio as gr
 
 
4
  import pandas as pd
5
- from pathlib import Path
6
  import seaborn as sns
7
- import matplotlib.pyplot as plt
8
  from wordcloud import WordCloud
9
- import numpy as np
10
 
11
  def _rename_columns(df: pd.DataFrame, is_tournament: bool) -> pd.DataFrame:
12
  columns = {
@@ -49,6 +51,9 @@ def _fix_dtypes(df: pd.DataFrame, is_tournament: bool) -> pd.DataFrame:
49
 
50
  return df
51
 
 
 
 
52
  def make_df_columns_readable(df: Optional[pd.DataFrame], is_tournament: bool) -> Optional[pd.DataFrame]:
53
  """Make a data frame's columns human-readable."""
54
  if df is None:
@@ -83,7 +88,7 @@ def make_df_columns_readable(df: Optional[pd.DataFrame], is_tournament: bool) ->
83
  df['event_date'] = df['event_date'].dt.date.astype(str).apply(nat_to_none)
84
  df = df.rename(columns={"league_name": "league"})
85
 
86
- df = df.rename(columns=lambda c: " ".join(c.capitalize().split("_")))
87
  return df
88
 
89
  def _check_match_type(match_type: str) -> str:
@@ -125,15 +130,21 @@ def get_opponent_name_word_cloud_fig(df: pd.DataFrame):
125
 
126
 
127
  def get_rating_over_time_fig(df: pd.DataFrame, is_tournament: bool):
128
- fig = plt.figure()
129
- plt.title('Rating over time')
130
- sns.lineplot(data=df,
131
- x="tournament_end_date" if is_tournament else "event_date",
132
- y="rating",
133
- marker='.',
134
- markersize=10)
135
- plt.xlabel('Competition date')
136
- plt.ylabel('Rating')
 
 
 
 
 
 
137
  return fig
138
 
139
 
@@ -208,6 +219,7 @@ def get_opponent_rating_dist_over_time_fig(df: pd.DataFrame, is_tournament: bool
208
  inner='points',
209
  cut=1,
210
  ax=ax)
 
211
  plt.xlabel('Competition year')
212
  plt.ylabel('Opponent rating')
213
  return fig
@@ -262,7 +274,9 @@ def usatt_rating_analyzer(file_obj):
262
  with gr.Blocks() as demo:
263
  analyze_btn_title = "Analyze"
264
  gr.Markdown(f"""# USATT rating analyzer
265
- Analyze [USA table tennis](https://www.teamusa.org/usa-table-tennis) tournament and league results.
 
 
266
  ## Downloading match results
267
  1. Make sure you are [logged in](https://usatt.simplycompete.com/login/auth) to your USATT account.
268
  2. Find the *active* player you wish to analyze (e.g., [Kanak Jha](https://usatt.simplycompete.com/userAccount/up/3431)).
 
1
+ from pathlib import Path
2
  from typing import Optional, Tuple
3
 
4
  import gradio as gr
5
+ import matplotlib.pyplot as plt
6
+ import numpy as np
7
  import pandas as pd
8
+ import plotly.graph_objects as go
9
  import seaborn as sns
 
10
  from wordcloud import WordCloud
11
+
12
 
13
  def _rename_columns(df: pd.DataFrame, is_tournament: bool) -> pd.DataFrame:
14
  columns = {
 
51
 
52
  return df
53
 
54
+ def snake_case_to_human_readable(s: str) -> str:
55
+ return " ".join(s.capitalize().split("_"))
56
+
57
  def make_df_columns_readable(df: Optional[pd.DataFrame], is_tournament: bool) -> Optional[pd.DataFrame]:
58
  """Make a data frame's columns human-readable."""
59
  if df is None:
 
88
  df['event_date'] = df['event_date'].dt.date.astype(str).apply(nat_to_none)
89
  df = df.rename(columns={"league_name": "league"})
90
 
91
+ df = df.rename(columns=lambda c: snake_case_to_human_readable(c))
92
  return df
93
 
94
  def _check_match_type(match_type: str) -> str:
 
130
 
131
 
132
  def get_rating_over_time_fig(df: pd.DataFrame, is_tournament: bool):
133
+ fig = go.Figure()
134
+ fig.add_trace(go.Scatter(x=df["tournament_end_date" if is_tournament else "event_date"],
135
+ y=df["rating"],
136
+ mode='lines+markers',
137
+ line=dict( width=0.9),
138
+ marker=dict(size=4))),
139
+
140
+ fig.update_layout(
141
+ title='Rating over time',
142
+ xaxis_title='Competition date',
143
+ yaxis_title='Rating',
144
+ showlegend=False,
145
+ template="plotly_white",
146
+ )
147
+
148
  return fig
149
 
150
 
 
219
  inner='points',
220
  cut=1,
221
  ax=ax)
222
+ plt.xticks(rotation=30)
223
  plt.xlabel('Competition year')
224
  plt.ylabel('Opponent rating')
225
  return fig
 
274
  with gr.Blocks() as demo:
275
  analyze_btn_title = "Analyze"
276
  gr.Markdown(f"""# USATT rating analyzer
277
+ Analyze [USA table tennis](https://www.teamusa.org/usa-table-tennis) tournament and league results. The more matches
278
+ and competitions you have played, the better the tool works. Additionally, due to limitations on the available
279
+ data, ratings are always displayed as the rating received *after* the competition has been played.
280
  ## Downloading match results
281
  1. Make sure you are [logged in](https://usatt.simplycompete.com/login/auth) to your USATT account.
282
  2. Find the *active* player you wish to analyze (e.g., [Kanak Jha](https://usatt.simplycompete.com/userAccount/up/3431)).