prediction_postprocessing_scripts/CSVfy_JSONs.py (51 lines of code) (raw):

import pandas as pd import json import os import argparse rows = [] def parse_args(): parser = argparse.ArgumentParser() parser.add_argument( "-i", "--input-directory", help="Path of results input directory", required=True, ) parser.add_argument( "-o", "--output-file", help="Path of results output file", required=True, ) return parser.parse_args() def process_signature(root, sig_path): sig = sig_path.split('_')[1].split('.')[0] sig_summary_path = os.path.join(root, sig_path) with open(sig_summary_path, 'r') as file: data = json.load(file) dataset = data['dataset'] annotations = data['annotations']['1'] results = data['results'] for cpd in results: for conf in results[cpd]: if conf['status'] == 'SUCCESS': row = dict() row['dataset'] = dataset row['cpd_method'] = cpd row['args'] = conf['args'] row['precision'] = conf['scores']['precision'] row['recall'] = conf['scores']['recall'] row['f1'] = conf['scores']['f1'] row['predicted_cplocations'] = conf['cplocations'] row['actual_cplocations'] = annotations rows.append(row) def main(): args = parse_args() root = args.input_directory dest = args.output_file for signature_path in os.listdir(root): process_signature(root, signature_path) df = pd.DataFrame(rows) df.to_csv(dest) if __name__ == "__main__": main()