From 2e9f73309da4ec3cc11ab87d8f46a17523af0c0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Montan=CC=83ana?= Date: Thu, 10 Feb 2022 11:57:13 +0100 Subject: [PATCH] Enhance list with sort key and summary --- src/Results.py | 32 +++++++++++++++++++++++++------- src/list.py | 14 +++++++++++--- src/summary.py | 1 + 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/src/Results.py b/src/Results.py index 4c8440f..e85812c 100644 --- a/src/Results.py +++ b/src/Results.py @@ -700,14 +700,22 @@ class Summary: self.datasets[result] = report.lines self.data.append(entry) - def list_results(self, score=None, model=None) -> None: + def list_results( + self, score=None, model=None, input_data=None, sort_key="date" + ) -> None: """Print the list of results""" - data = self.data.copy() + data = self.data.copy() if input_data is None else input_data if score: data = [x for x in data if x["score"] == score] if model: data = [x for x in data if x["model"] == model] - data = sorted(data, key=lambda x: x["date"], reverse=True) + data = sorted( + data, + key=lambda x: 0.0 + if type(x[sort_key]) is float and math.isnan(x[sort_key]) + else x[sort_key], + reverse=True, + ) max_file = max(len(x["file"]) for x in data) max_title = max(len(x["title"]) for x in data) print(TextColor.LINE1, end="") @@ -776,9 +784,7 @@ class Summary: print("*" + whites(length - 2)) print("*" * length) - def best_result( - self, criterion=None, value=None, score="accuracy" - ) -> dict: + def best_results(self, criterion=None, value=None, score="accuracy", n=10): # First filter the same score results (accuracy, f1, ...) haystack = [x for x in self.data if x["score"] == score] haystack = ( @@ -791,11 +797,16 @@ class Summary: haystack, key=lambda x: -1.0 if math.isnan(x["metric"]) else x["metric"], reverse=True, - )[0] + )[:n] if len(haystack) > 0 else {} ) + def best_result( + self, criterion=None, value=None, score="accuracy" + ) -> dict: + return self.best_results(criterion, value, score)[0] + def best_results_datasets(self, score="accuracy") -> dict: """Get the best results for each dataset""" dt = Datasets() @@ -814,3 +825,10 @@ class Summary: entry["title"], ) return best_results + + def show_top(self, score="accuracy", n=10): + self.list_results( + score=score, + input_data=self.best_results(score=score, n=n), + sort_key="metric", + ) diff --git a/src/list.py b/src/list.py index eabcf74..9f118ea 100755 --- a/src/list.py +++ b/src/list.py @@ -29,13 +29,21 @@ def parse_arguments(): required=False, help="model used in experiment", ) + ap.add_argument( + "-k", + "--key", + type=str, + required=False, + default="date", + help="key to sort results", + ) args = ap.parse_args() - return (args.excel, args.score, args.model) + return (args.excel, args.score, args.model, args.key) -(excel, score, model) = parse_arguments() +(excel, score, model, key) = parse_arguments() data = Summary() data.acquire() -data.list_results(score, model) +data.list_results(score=score, model=model, sort_key=key) diff --git a/src/summary.py b/src/summary.py index 3f3e4a7..e78408e 100755 --- a/src/summary.py +++ b/src/summary.py @@ -60,5 +60,6 @@ for metric in metrics: summary.show_result( summary.best_result(score=metric), title=f"BEST RESULT of {metric}" ) + summary.show_top(score=metric, n=10) if list_results: summary.list_results()