|
- import argparse
- from os import path
- import pandas as pd
-
-
- def build_regret(all, baseline):
- all = all[all.columns.intersection(baseline.index)]
- return baseline - all
-
-
- def write_regret(regret, filename):
- regret.to_csv(filename)
-
-
- def load_result(filename, task_type, metric):
- df = pd.read_csv(filename)
- df = df.loc[
- (df[metric].notnull()) & (df.type == task_type),
- ["task", "fold", "params", metric],
- ]
- df["params"] = df["params"].apply(lambda x: path.splitext(path.basename(eval(x)["_modeljson"]))[0])
- baseline = df.loc[df["task"] == df["params"], ["task", metric]].groupby("task").mean()[metric]
- df = df.pivot_table(index="params", columns="task", values=metric)
- return df, baseline
-
-
- def main():
- parser = argparse.ArgumentParser(description="Build a regret matrix.")
- parser.add_argument("--result_csv", help="File of experiment results")
- parser.add_argument("--task_type", help="Type of task")
- parser.add_argument("--metric", help="Metric for calculating regret", default="result")
- parser.add_argument("--output", help="Location to write regret CSV to")
- args = parser.parse_args()
-
- all, baseline = load_result(args.result_csv, args.task_type, args.metric)
- regret = build_regret(all, baseline)
- write_regret(regret, args.output)
-
-
- if __name__ == "__main__":
- # execute only if run as a script
- main()
|