Enhance list with sort key and summary

This commit is contained in:
2022-02-10 11:57:13 +01:00
parent 6d8afa4993
commit 2e9f73309d
3 changed files with 37 additions and 10 deletions

View File

@@ -700,14 +700,22 @@ class Summary:
self.datasets[result] = report.lines self.datasets[result] = report.lines
self.data.append(entry) 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""" """Print the list of results"""
data = self.data.copy() data = self.data.copy() if input_data is None else input_data
if score: if score:
data = [x for x in data if x["score"] == score] data = [x for x in data if x["score"] == score]
if model: if model:
data = [x for x in data if x["model"] == 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_file = max(len(x["file"]) for x in data)
max_title = max(len(x["title"]) for x in data) max_title = max(len(x["title"]) for x in data)
print(TextColor.LINE1, end="") print(TextColor.LINE1, end="")
@@ -776,9 +784,7 @@ class Summary:
print("*" + whites(length - 2)) print("*" + whites(length - 2))
print("*" * length) print("*" * length)
def best_result( def best_results(self, criterion=None, value=None, score="accuracy", n=10):
self, criterion=None, value=None, score="accuracy"
) -> dict:
# First filter the same score results (accuracy, f1, ...) # First filter the same score results (accuracy, f1, ...)
haystack = [x for x in self.data if x["score"] == score] haystack = [x for x in self.data if x["score"] == score]
haystack = ( haystack = (
@@ -791,11 +797,16 @@ class Summary:
haystack, haystack,
key=lambda x: -1.0 if math.isnan(x["metric"]) else x["metric"], key=lambda x: -1.0 if math.isnan(x["metric"]) else x["metric"],
reverse=True, reverse=True,
)[0] )[:n]
if len(haystack) > 0 if len(haystack) > 0
else {} 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: def best_results_datasets(self, score="accuracy") -> dict:
"""Get the best results for each dataset""" """Get the best results for each dataset"""
dt = Datasets() dt = Datasets()
@@ -814,3 +825,10 @@ class Summary:
entry["title"], entry["title"],
) )
return best_results 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",
)

View File

@@ -29,13 +29,21 @@ def parse_arguments():
required=False, required=False,
help="model used in experiment", 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() 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 = Summary()
data.acquire() data.acquire()
data.list_results(score, model) data.list_results(score=score, model=model, sort_key=key)

View File

@@ -60,5 +60,6 @@ for metric in metrics:
summary.show_result( summary.show_result(
summary.best_result(score=metric), title=f"BEST RESULT of {metric}" summary.best_result(score=metric), title=f"BEST RESULT of {metric}"
) )
summary.show_top(score=metric, n=10)
if list_results: if list_results:
summary.list_results() summary.list_results()