Update app.py
Browse files
app.py
CHANGED
|
@@ -65,6 +65,8 @@ def load_leaderboard_data(csv_file_path):
|
|
| 65 |
numeric_columns = df.select_dtypes(include=[np.number]).columns
|
| 66 |
for col in numeric_columns:
|
| 67 |
df[col] = df[col].apply(lambda x: None if pd.isna(x) else round(x, 3))
|
|
|
|
|
|
|
| 68 |
|
| 69 |
return df
|
| 70 |
except Exception as e:
|
|
@@ -460,9 +462,20 @@ columnDefs = [
|
|
| 460 |
"wrapHeaderText": True,
|
| 461 |
"autoHeaderHeight": True
|
| 462 |
},
|
| 463 |
-
|
| 464 |
-
"
|
| 465 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 466 |
create_numeric_column("W/10 π", width=130, filterParams={
|
| 467 |
"defaultOption": "greaterThanOrEqual",
|
| 468 |
"filterOptions": ['equals', 'notEqual', 'greaterThan', 'greaterThanOrEqual', 'lessThan', 'lessThanOrEqual', 'inRange']
|
|
@@ -660,8 +673,8 @@ dashGridOptions = {
|
|
| 660 |
"suppressCellFocus": True,
|
| 661 |
"getRowId": "params => params.data.Model_Display",
|
| 662 |
"pinnedTopRowData": [],
|
| 663 |
-
"sortingOrder": ['desc', 'asc'],
|
| 664 |
"suppressMaintainUnsortedOrder": True,
|
|
|
|
| 665 |
"rowBuffer": 10,
|
| 666 |
"maxBlocksInCache": 2,
|
| 667 |
"onGridReady": {
|
|
@@ -911,10 +924,10 @@ def debug_callback(value):
|
|
| 911 |
@app.callback(
|
| 912 |
[Output('leaderboard-grid', 'rowData'),
|
| 913 |
Output('model-type-filter', 'value'),
|
| 914 |
-
Output('pinned-models-store', 'data')],
|
| 915 |
[Input('model-type-filter', 'value'),
|
| 916 |
Input('na-model-filter', 'value'),
|
| 917 |
-
Input('leaderboard-grid', 'pinnedTopRowData')],
|
| 918 |
prevent_initial_call=False
|
| 919 |
)
|
| 920 |
def update_grid(selected_types, show_na, pinned_rows):
|
|
@@ -926,6 +939,9 @@ def update_grid(selected_types, show_na, pinned_rows):
|
|
| 926 |
|
| 927 |
filtered_df = df.copy()
|
| 928 |
|
|
|
|
|
|
|
|
|
|
| 929 |
# Get pinned model IDs
|
| 930 |
pinned_models = []
|
| 931 |
if pinned_rows:
|
|
@@ -958,7 +974,7 @@ def update_grid(selected_types, show_na, pinned_rows):
|
|
| 958 |
if show_na is None or not show_na:
|
| 959 |
filtered_df = filtered_df[~has_na]
|
| 960 |
|
| 961 |
-
#
|
| 962 |
filtered_df = filtered_df.sort_values('UGI π', ascending=False)
|
| 963 |
|
| 964 |
records = filtered_df.to_dict('records')
|
|
@@ -970,12 +986,12 @@ def update_grid(selected_types, show_na, pinned_rows):
|
|
| 970 |
[Input('additional-columns-filter', 'value')]
|
| 971 |
)
|
| 972 |
def update_columns(additional_columns):
|
| 973 |
-
# Start with base columns up to UGI
|
| 974 |
current_columns = columnDefs[:7] # Include up to UGI column
|
| 975 |
|
| 976 |
# Add UGI category columns if selected
|
| 977 |
if 'ugi_categories' in additional_columns:
|
| 978 |
-
current_columns.extend(ugi_category_columns)
|
| 979 |
|
| 980 |
# Add remaining base columns (W/10, NatInt, Coding, Political Lean)
|
| 981 |
current_columns.extend(columnDefs[7:11])
|
|
|
|
| 65 |
numeric_columns = df.select_dtypes(include=[np.number]).columns
|
| 66 |
for col in numeric_columns:
|
| 67 |
df[col] = df[col].apply(lambda x: None if pd.isna(x) else round(x, 3))
|
| 68 |
+
|
| 69 |
+
df = df.sort_values('UGI π', ascending=False)
|
| 70 |
|
| 71 |
return df
|
| 72 |
except Exception as e:
|
|
|
|
| 462 |
"wrapHeaderText": True,
|
| 463 |
"autoHeaderHeight": True
|
| 464 |
},
|
| 465 |
+
{
|
| 466 |
+
"field": "UGI π",
|
| 467 |
+
"width": 120,
|
| 468 |
+
"filter": "agNumberColumnFilter",
|
| 469 |
+
"filterParams": {
|
| 470 |
+
"defaultOption": "greaterThanOrEqual"
|
| 471 |
+
},
|
| 472 |
+
"headerClass": "ag-left-aligned-header wrap-text",
|
| 473 |
+
"cellClass": "ag-left-aligned-cell",
|
| 474 |
+
"wrapHeaderText": True,
|
| 475 |
+
"autoHeaderHeight": True,
|
| 476 |
+
"suppressSizeToFit": True,
|
| 477 |
+
"sortingOrder": ['desc', 'asc']
|
| 478 |
+
},
|
| 479 |
create_numeric_column("W/10 π", width=130, filterParams={
|
| 480 |
"defaultOption": "greaterThanOrEqual",
|
| 481 |
"filterOptions": ['equals', 'notEqual', 'greaterThan', 'greaterThanOrEqual', 'lessThan', 'lessThanOrEqual', 'inRange']
|
|
|
|
| 673 |
"suppressCellFocus": True,
|
| 674 |
"getRowId": "params => params.data.Model_Display",
|
| 675 |
"pinnedTopRowData": [],
|
|
|
|
| 676 |
"suppressMaintainUnsortedOrder": True,
|
| 677 |
+
"suppressMultiSort": True,
|
| 678 |
"rowBuffer": 10,
|
| 679 |
"maxBlocksInCache": 2,
|
| 680 |
"onGridReady": {
|
|
|
|
| 924 |
@app.callback(
|
| 925 |
[Output('leaderboard-grid', 'rowData'),
|
| 926 |
Output('model-type-filter', 'value'),
|
| 927 |
+
Output('pinned-models-store', 'data')],
|
| 928 |
[Input('model-type-filter', 'value'),
|
| 929 |
Input('na-model-filter', 'value'),
|
| 930 |
+
Input('leaderboard-grid', 'pinnedTopRowData')],
|
| 931 |
prevent_initial_call=False
|
| 932 |
)
|
| 933 |
def update_grid(selected_types, show_na, pinned_rows):
|
|
|
|
| 939 |
|
| 940 |
filtered_df = df.copy()
|
| 941 |
|
| 942 |
+
# Sort by UGI initially
|
| 943 |
+
filtered_df = filtered_df.sort_values('UGI π', ascending=False)
|
| 944 |
+
|
| 945 |
# Get pinned model IDs
|
| 946 |
pinned_models = []
|
| 947 |
if pinned_rows:
|
|
|
|
| 974 |
if show_na is None or not show_na:
|
| 975 |
filtered_df = filtered_df[~has_na]
|
| 976 |
|
| 977 |
+
# Always sort by UGI descending
|
| 978 |
filtered_df = filtered_df.sort_values('UGI π', ascending=False)
|
| 979 |
|
| 980 |
records = filtered_df.to_dict('records')
|
|
|
|
| 986 |
[Input('additional-columns-filter', 'value')]
|
| 987 |
)
|
| 988 |
def update_columns(additional_columns):
|
| 989 |
+
# Start with base columns up to UGI column
|
| 990 |
current_columns = columnDefs[:7] # Include up to UGI column
|
| 991 |
|
| 992 |
# Add UGI category columns if selected
|
| 993 |
if 'ugi_categories' in additional_columns:
|
| 994 |
+
current_columns.extend(ugi_category_columns) # Use the pre-defined ugi_category_columns
|
| 995 |
|
| 996 |
# Add remaining base columns (W/10, NatInt, Coding, Political Lean)
|
| 997 |
current_columns.extend(columnDefs[7:11])
|