Source code for cacp.result

import typing
from pathlib import Path

import pandas as pd

from cacp.comparison import DEFAULT_METRICS
from cacp.util import to_latex


[docs]def process_comparison_results(result_dir: Path, metrics: typing.Sequence[typing.Tuple[str, typing.Callable]] = DEFAULT_METRICS): """ Processes comparison results, computes mean values for all metrics. :param result_dir: results directory :param metrics: metrics collection """ df = pd.read_csv(result_dir.joinpath('comparison.csv')) gb = ['Algorithm'] dfg = df.groupby(gb) df = dfg.mean(numeric_only=True) dfg_std = dfg.std(numeric_only=True) metrics_names = [name for name, _ in metrics] df_csv = df.copy(deep=True) for metric in metrics_names: df_csv.insert(list(df_csv.columns).index(metric) + 1, f'{metric} +/-', dfg_std[metric]) columns = [] for metric in metrics_names: columns.append(metric) columns.append(f'{metric} +/-') df_csv = df_csv[columns] df_csv = df_csv.sort_values(by=metrics_names, ascending=False) df_csv.reset_index(inplace=True) df_csv.index += 1 df_csv.to_csv(result_dir.joinpath('comparison_result.csv')) df_tex = df_csv.copy(deep=True) for metric in metrics_names: metric_pm = f'{metric} +/-' df_tex[metric] = df_tex[metric].apply(lambda x: "{:1.3f}".format(x)) df_tex[metric_pm] = df_tex[metric_pm].apply(lambda x: "{:1.3f}".format(x)) df_tex[metric] = df_tex[metric].astype(str) + r'$\pm$' + df_tex[metric_pm].astype(str) del df_tex[metric_pm] f = result_dir.joinpath('comparison_result.tex').open('w') tex = to_latex( df_tex, caption='Results of comparison', label='tab:comparison', ) f.write(tex)