From cc34fbf69e5ea91b0e7954a34bed83af0659ffe1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Montan=CC=83ana?= Date: Wed, 2 Jun 2021 23:34:07 +0200 Subject: [PATCH] Add excel write to analysis_mysql --- analysis_mysql.py | 58 +++++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 1 + 2 files changed, 59 insertions(+) diff --git a/analysis_mysql.py b/analysis_mysql.py index daf55de..9b6738b 100644 --- a/analysis_mysql.py +++ b/analysis_mysql.py @@ -1,6 +1,7 @@ import argparse from typing import Tuple import numpy as np +import xlsxwriter from experimentation.Sets import Datasets from experimentation.Utils import TextColor from experimentation.Database import MySQL @@ -71,6 +72,14 @@ def parse_arguments() -> Tuple[str, str, str, bool, bool]: required=False, default=False, ) + ap.add_argument( + "-x", + "--excel", + type=str, + default="", + required=False, + help="generate excel file", + ) args = ap.parse_args() return ( args.experiment, @@ -79,9 +88,45 @@ def parse_arguments() -> Tuple[str, str, str, bool, bool]: args.tex_output, args.compare, args.time, + args.excel, ) +def excel_write_header(book, sheet): + header = book.add_format() + header.set_font_size(18) + subheader = book.add_format() + subheader.set_font_size(16) + bold = book.add_format({"bold": True, "font_size": 14}) + sheet.write(0, 0, "Dataset", bold) + sheet.set_column(0, 0, 30) + i = 1 + lengths = [10, 10, 10, 10, 10, 10, 10] + for item, length in zip(models_tree, lengths): + sheet.write(0, i, item, bold) + sheet.set_column(i, i, length) + i += 1 + + +def excel_write_line(book, sheet, dataset, line): + try: + excel_write_line.row += 1 + except AttributeError: + excel_write_line.row = 1 + size_n = 14 + decimal = book.add_format({"num_format": "0.000000", "font_size": size_n}) + normal = book.add_format({"font_size": size_n}) + col = 0 + excel_ws.write(excel_write_line.row, col, dataset, normal) + for item in line.values(): + sheet.write(excel_write_line.row, col + 1, item, decimal) + col += 1 + + +def excel_write_footer(book): + book.close() + + def print_header_tex(file_tex, second=False): # old_header = ( # "\\begin{table}[ht]\n" @@ -209,6 +254,7 @@ def report_footer(agg): tex_output, compare, time_info, + excel, ) = parse_arguments() dbh = MySQL() database = dbh.get_connection() @@ -240,6 +286,11 @@ for item in models: fields += (f"{item}",) report_header(title, experiment, model_type) color = TextColor.LINE1 +if excel != "": + file_name = f"{excel}.xlsx" + excel_wb = xlsxwriter.Workbook(file_name) + excel_ws = excel_wb.add_worksheet("exreport") + excel_write_header(excel_wb, excel_ws) agg = {} for item in [ "better", @@ -266,6 +317,7 @@ for number, dataset in enumerate(dt): line["leaves"] = 0.0 line["depth"] = 0.0 line_tex = line.copy() + line_excel = {} for column, model in enumerate(models): record = dbh.find_best(dataset[0], model, experiment) if record is None: @@ -291,6 +343,10 @@ for number, dataset in enumerate(dt): line[model] = color + item if csv_output: print(f"{dataset[0]}, {model}, {accuracy}", file=file_csv) + if excel != "": + line_excel[model] = accuracy + if excel != "": + excel_write_line(excel_wb, excel_ws, dataset[0], line_excel) if tex_output: print_line_tex(number + 1, dataset[0], line_tex, file_tex) if number == 24: @@ -303,6 +359,8 @@ for number, dataset in enumerate(dt): TextColor.LINE2 if color == TextColor.LINE1 else TextColor.LINE1 ) print(report_line(line)) +if excel != "": + excel_write_footer(excel_wb) report_footer(agg) if csv_output: file_csv.close() diff --git a/requirements.txt b/requirements.txt index ad28742..d4cd83a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,3 +5,4 @@ ipympl mysql-client mysql-connector sshtunnel +xslxwriter