diff --git a/report/charts/chart_argument_parser.py b/report/charts/chart_argument_parser.py new file mode 100644 index 0000000..fd76465 --- /dev/null +++ b/report/charts/chart_argument_parser.py @@ -0,0 +1,7 @@ +from pathlib import Path + +from report.argument_parser import ArgumentParser + + +class ChartArgumentParser(ArgumentParser): + save_path: Path = Path('./data/charts') diff --git a/report/charts/main.py b/report/charts/main.py new file mode 100644 index 0000000..1469d12 --- /dev/null +++ b/report/charts/main.py @@ -0,0 +1,48 @@ +from collections import defaultdict +import json +from typing import Dict, List + +from report.charts.chart_argument_parser import ChartArgumentParser +from report.log_parser import LogParser +from matplotlib import pyplot as plt + + +def select_metric(all_data: Dict[str, List[Dict[str, float]]], metric: str) -> Dict[str, List[float]]: + data = {} + for block_name, block_metrics in all_data.items(): + data[block_name] = [metrics[metric] for metrics in block_metrics] + return data + + +def main() -> None: + args = ChartArgumentParser(underscores_to_dashes=True).parse_args() + with args.config.open() as file: + json_data = json.load(file) + + args.save_path.mkdir(parents=True, exist_ok=True) + + parser = LogParser() + data = defaultdict(list) + for block_name, logs_block in json_data['logs'].items(): + if block_name == 'LKMeans': + continue + for log_path in logs_block.values(): + log_data_dict = parser.parse(log_path) + data[block_name].append(log_data_dict) + + for metric in json_data['plot_metrics']: + config_name = json_data['name'] + chart_name = args.save_path / f'{config_name}_{metric}.png' + prepared_data = select_metric(data, metric) + figure = plt.figure(figsize=(4,4), dpi=800) + axes = figure.gca() + for line_name, values in prepared_data.items(): + axes.plot(values, label=line_name) + axes.legend() + figure.tight_layout() + figure.savefig(chart_name) + plt.close(figure) + + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/report/tables/main.py b/report/tables/main.py index ffa8013..3db9d26 100644 --- a/report/tables/main.py +++ b/report/tables/main.py @@ -10,16 +10,6 @@ from report.tables.table_argument_parser import TableArgumentParser -def get_data_from_config(json_data: Dict) -> pd.DataFrame: - data = [] - parser = LogParser() - for log_name, log_path in json_data['logs'].items(): - log_data_dict = parser.parse(log_path) - log_data_dict = {'log_name': log_name, **log_data_dict} - data.append(log_data_dict) - return data - - def main() -> None: args = TableArgumentParser(underscores_to_dashes=True).parse_args() with args.config.open() as file: @@ -28,7 +18,13 @@ def main() -> None: args.save_path.mkdir(parents=True, exist_ok=True) saver = LatexSaver(args.save_path / json_data['name']) - data = get_data_from_config(json_data) + parser = LogParser() + data = [] + for logs_block in json_data['logs'].values(): + for log_name, log_path in logs_block.items(): + log_data_dict = parser.parse(log_path) + log_data_dict = {'log_name': log_name, **log_data_dict} + data.append(log_data_dict) data_frame = pd.DataFrame(data) rules = get_highlight_rules()