AnonymousUser20's picture
Upload 1314 files
178d33b verified
import csv
import os
import numpy as np
def make_args_list(benchmarks, methods, metrics, benchmark_dict):
args_list = []
for metric in metrics:
for benchmark in set(benchmarks) & set(benchmark_dict[metric]):
for method in methods:
args_list.append([benchmark, method, metric])
return args_list
def write_metric(args, folder_list, save_line_dict, benchmark_dict):
metric_list = [
'fpr95', 'auroc', 'aupr_in', 'aupr_out', 'ccr_4', 'ccr_3', 'ccr_2',
'ccr_1', 'acc'
]
save_list = []
for metric in args.metric2save:
save_list.append(metric_list.index(metric) + 1)
for metric in args.metrics:
if metric == 'ood':
for benchmark in set(args.benchmarks) & set(
benchmark_dict[metric]):
args_list = make_args_list([benchmark], args.methods, ['ood'],
benchmark_dict)
sub_form_content = []
for key_param in args_list:
for folder in folder_list:
key_folder = folder.split('_')
if all(key in key_folder for key in key_param):
target_folder = folder
break
else:
print("No respective folder path, something's wrong.")
raise FileNotFoundError
# quit()
with open(
os.path.join(args.output_dir, target_folder,
'ood.csv'), 'r') as f:
lines = f.readlines()[save_line_dict[key_param[-1]]:]
sub_line_content = {}
sub_line_content['method/{}'.format(
args.metric2save)] = key_param[1]
for line in lines:
split = line.split(',')
content = ''
for metric in save_list:
content = content + '{:.2f}'.format(
float(split[metric])) + ' / '
else:
content = content[:-3]
# use method name as key
sub_line_content[split[0]] = content
sub_form_content.append(sub_line_content)
csv_path = os.path.join(args.output_dir,
'{}_ood.csv'.format(key_param[0]))
with open(csv_path, 'w', newline='') as csvfile:
fieldnames = order_fieldnames(
list(sub_form_content[0].keys()), args)
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for sub_line_content in sub_form_content:
writer.writerow(sub_line_content)
elif metric == 'osr':
sub_form_content = []
for method in args.methods:
args_list = make_args_list(args.benchmarks, [method], ['osr'],
benchmark_dict)
sub_line_content = {}
for key_param in args_list:
sub_line_content['method/{}'.format(
args.metric2save)] = key_param[1]
target_folder = []
seeds = ['seed1', 'seed2', 'seed3', 'seed4', 'seed5']
for seed in seeds:
key_param.append(seed)
for folder in folder_list:
key_folder = folder.split('_')
if all(key in key_folder for key in key_param):
target_folder.append(folder)
break
else:
print(
"No respective folder path, something's wrong."
)
raise FileNotFoundError
# quit()
key_param.pop(-1)
temp = np.ndarray(shape=(len(seeds), len(save_list)))
for i, folder in enumerate(target_folder):
with open(
os.path.join(args.output_dir, folder,
'ood.csv'), 'r') as f:
lines = f.readlines(
)[save_line_dict[key_param[-1]]:]
for line in lines:
split = line.split(',')
for j, metric_index in enumerate(save_list):
temp[i][j] = split[metric_index]
content = ''
for item in np.mean(temp, axis=0):
content = content + '{:.2f}'.format(item) + ' / '
else:
content = content[:-3]
sub_line_content[key_param[0]] = content
sub_form_content.append(sub_line_content)
csv_path = os.path.join(args.output_dir, 'total_osr.csv')
with open(csv_path, 'w', newline='') as csvfile:
fieldnames = order_fieldnames(list(sub_form_content[0].keys()),
args)
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for sub_line_content in sub_form_content:
writer.writerow(sub_line_content)
def write_total(args, folder_list, save_line_dict, benchmark_dict,
main_content_extract_dict):
main_form_content = []
for method in args.methods:
main_line_content = {}
for metric in args.metrics:
args_list = make_args_list(args.benchmarks, [method], [metric],
benchmark_dict)
for key_param in args_list:
main_line_content['method --> auroc'] = key_param[1]
if metric == 'ood':
for folder in folder_list:
key_folder = folder.split('_')
if all(key in key_folder for key in key_param):
target_folder = folder
break
else:
print("No respective folder path, something's wrong.")
# quit()
with open(
os.path.join(args.output_dir, target_folder,
'ood.csv'), 'r') as f:
lines = f.readlines()[save_line_dict[key_param[-1]]:]
content = ''
for line in lines:
if line.split(',')[0] in main_content_extract_dict[
key_param[-1]]:
# take auroc only
content = content + '{:.2f}'.format(
float(line.split(',')[2])) + ' / '
else:
content = content[:-3]
# use benchmark name as key
main_line_content[key_param[0]] = content
if metric == 'osr':
target_folder = []
seeds = ['seed1', 'seed2', 'seed3', 'seed4', 'seed5']
for seed in seeds:
key_param.append(seed)
for folder in folder_list:
key_folder = folder.split('_')
if all(key in key_folder for key in key_param):
target_folder.append(folder)
break
else:
print(
"No respective folder path, something's wrong."
)
# quit()
key_param.pop(-1)
temp = np.ndarray(shape=(len(seeds), 1))
for i, folder in enumerate(target_folder):
with open(
os.path.join(args.output_dir, folder,
'ood.csv'), 'r') as f:
lines = f.readlines(
)[save_line_dict[key_param[-1]]:]
for line in lines:
split = line.split(',')
temp[i] = split[2]
content = '{:.2f}'.format(np.mean(temp, axis=0).item())
main_line_content[key_param[0]] = content
main_form_content.append(main_line_content)
csv_path = os.path.join(args.output_dir, 'total_result.csv')
with open(csv_path, 'w', newline='') as csvfile:
fieldnames = order_fieldnames(list(main_form_content[0].keys()), args)
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for main_line_content in main_form_content:
writer.writerow(main_line_content)
verify_dir = './results/total'
for folder in os.listdir(verify_dir):
if os.path.isdir(os.path.join(verify_dir, folder)):
if 'ood.csv' not in os.listdir(os.path.join(verify_dir, folder)):
# if 'seed1' in folder.split('_'):
print(folder)
def order_fieldnames(keys, args):
ordered_keys = []
ordered_keys.append(keys[0])
for item in args.benchmarks:
if item in keys:
ordered_keys.append(item)
return ordered_keys