zhaorui-nb
commited on
Commit
•
f9d3528
1
Parent(s):
f3ddcb4
add leaderboard filter
Browse files- README.md +5 -0
- app.py +7 -2
- utils/filterable_dataframe.py +37 -0
README.md
CHANGED
@@ -16,6 +16,11 @@ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-
|
|
16 |
|
17 |
|
18 |
# de-identification-leaderboard
|
|
|
|
|
|
|
|
|
|
|
19 |
|
20 |
## leaderboard data
|
21 |
score wil save to huggingface dataset
|
|
|
16 |
|
17 |
|
18 |
# de-identification-leaderboard
|
19 |
+
## run web
|
20 |
+
```
|
21 |
+
streamlit run app.py
|
22 |
+
```
|
23 |
+
|
24 |
|
25 |
## leaderboard data
|
26 |
score wil save to huggingface dataset
|
app.py
CHANGED
@@ -12,6 +12,7 @@ from huggingface_hub import hf_hub_download
|
|
12 |
from utils.upload_hub import upload_scores_to_hub, file_name_decode
|
13 |
from utils.Evaluation_answer_txt import Evaluation_answer_txt
|
14 |
from utils.hub_info import get_model_size
|
|
|
15 |
|
16 |
# st.set_page_config(layout="wide")
|
17 |
st.set_page_config(layout="centered")
|
@@ -78,10 +79,14 @@ try:
|
|
78 |
df = get_leaderboard_df()
|
79 |
|
80 |
# remove the detail result column
|
81 |
-
default_columns = [c for c in df.columns if c not in ['MICRO precision', 'MICRO recall', 'MACRO precision', 'MACRO recall', 'detail result']]
|
82 |
selected_columns = st.multiselect('Select columns to display', df.columns, default=default_columns)
|
83 |
|
84 |
-
|
|
|
|
|
|
|
|
|
85 |
|
86 |
st.subheader("Detail Result")
|
87 |
det_ind = st.session_state.leaderboard['selection']['rows']
|
|
|
12 |
from utils.upload_hub import upload_scores_to_hub, file_name_decode
|
13 |
from utils.Evaluation_answer_txt import Evaluation_answer_txt
|
14 |
from utils.hub_info import get_model_size
|
15 |
+
from utils.filterable_dataframe import filterable_dataframe
|
16 |
|
17 |
# st.set_page_config(layout="wide")
|
18 |
st.set_page_config(layout="centered")
|
|
|
79 |
df = get_leaderboard_df()
|
80 |
|
81 |
# remove the detail result column
|
82 |
+
default_columns = [c for c in df.columns if c not in ['file name', 'submitter', 'MICRO precision', 'MICRO recall', 'MACRO precision', 'MACRO recall', 'detail result']]
|
83 |
selected_columns = st.multiselect('Select columns to display', df.columns, default=default_columns)
|
84 |
|
85 |
+
# add filterable dataframe
|
86 |
+
filtered_df = filterable_dataframe(df)
|
87 |
+
|
88 |
+
leaderboard_df = st.dataframe(filtered_df[selected_columns], selection_mode='multi-row', on_select='rerun', key='leaderboard')
|
89 |
+
|
90 |
|
91 |
st.subheader("Detail Result")
|
92 |
det_ind = st.session_state.leaderboard['selection']['rows']
|
utils/filterable_dataframe.py
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
|
3 |
+
|
4 |
+
|
5 |
+
|
6 |
+
def filterable_dataframe(df):
|
7 |
+
# 多選框選擇需要篩選的列
|
8 |
+
selected_columns = st.multiselect('Select columns to filter', options=df.columns)
|
9 |
+
|
10 |
+
filters = {}
|
11 |
+
|
12 |
+
# 動態生成篩選條件
|
13 |
+
for column in selected_columns:
|
14 |
+
with st.expander(f'Filter by {column}', expanded=True):
|
15 |
+
if df[column].dtype == 'object':
|
16 |
+
unique_values = df[column].unique()
|
17 |
+
selected_values = st.multiselect(f'Select values for {column}', options=list(unique_values))
|
18 |
+
search_text = st.text_input(f'Search in {column}')
|
19 |
+
if search_text:
|
20 |
+
selected_values = [value for value in selected_values if search_text.lower() in value.lower()]
|
21 |
+
if selected_values:
|
22 |
+
filters[column] = selected_values
|
23 |
+
else:
|
24 |
+
min_value, max_value = df[column].min(), df[column].max()
|
25 |
+
selected_range = st.slider(f'Select range for {column}', min_value, max_value, (min_value, max_value))
|
26 |
+
if selected_range != (min_value, max_value):
|
27 |
+
filters[column] = selected_range
|
28 |
+
|
29 |
+
# 根據篩選條件過濾數據框
|
30 |
+
filtered_df = df
|
31 |
+
for column, value in filters.items():
|
32 |
+
if isinstance(value, list):
|
33 |
+
filtered_df = filtered_df[filtered_df[column].isin(value)]
|
34 |
+
elif isinstance(value, tuple):
|
35 |
+
filtered_df = filtered_df[(filtered_df[column] >= value[0]) & (filtered_df[column] <= value[1])]
|
36 |
+
|
37 |
+
return filtered_df
|