Add excel write to analysis_mysql

This commit is contained in:
2021-06-02 23:34:07 +02:00
parent d592aaee19
commit cc34fbf69e
2 changed files with 59 additions and 0 deletions

View File

@@ -1,6 +1,7 @@
import argparse import argparse
from typing import Tuple from typing import Tuple
import numpy as np import numpy as np
import xlsxwriter
from experimentation.Sets import Datasets from experimentation.Sets import Datasets
from experimentation.Utils import TextColor from experimentation.Utils import TextColor
from experimentation.Database import MySQL from experimentation.Database import MySQL
@@ -71,6 +72,14 @@ def parse_arguments() -> Tuple[str, str, str, bool, bool]:
required=False, required=False,
default=False, default=False,
) )
ap.add_argument(
"-x",
"--excel",
type=str,
default="",
required=False,
help="generate excel file",
)
args = ap.parse_args() args = ap.parse_args()
return ( return (
args.experiment, args.experiment,
@@ -79,9 +88,45 @@ def parse_arguments() -> Tuple[str, str, str, bool, bool]:
args.tex_output, args.tex_output,
args.compare, args.compare,
args.time, 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): def print_header_tex(file_tex, second=False):
# old_header = ( # old_header = (
# "\\begin{table}[ht]\n" # "\\begin{table}[ht]\n"
@@ -209,6 +254,7 @@ def report_footer(agg):
tex_output, tex_output,
compare, compare,
time_info, time_info,
excel,
) = parse_arguments() ) = parse_arguments()
dbh = MySQL() dbh = MySQL()
database = dbh.get_connection() database = dbh.get_connection()
@@ -240,6 +286,11 @@ for item in models:
fields += (f"{item}",) fields += (f"{item}",)
report_header(title, experiment, model_type) report_header(title, experiment, model_type)
color = TextColor.LINE1 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 = {} agg = {}
for item in [ for item in [
"better", "better",
@@ -266,6 +317,7 @@ for number, dataset in enumerate(dt):
line["leaves"] = 0.0 line["leaves"] = 0.0
line["depth"] = 0.0 line["depth"] = 0.0
line_tex = line.copy() line_tex = line.copy()
line_excel = {}
for column, model in enumerate(models): for column, model in enumerate(models):
record = dbh.find_best(dataset[0], model, experiment) record = dbh.find_best(dataset[0], model, experiment)
if record is None: if record is None:
@@ -291,6 +343,10 @@ for number, dataset in enumerate(dt):
line[model] = color + item line[model] = color + item
if csv_output: if csv_output:
print(f"{dataset[0]}, {model}, {accuracy}", file=file_csv) 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: if tex_output:
print_line_tex(number + 1, dataset[0], line_tex, file_tex) print_line_tex(number + 1, dataset[0], line_tex, file_tex)
if number == 24: if number == 24:
@@ -303,6 +359,8 @@ for number, dataset in enumerate(dt):
TextColor.LINE2 if color == TextColor.LINE1 else TextColor.LINE1 TextColor.LINE2 if color == TextColor.LINE1 else TextColor.LINE1
) )
print(report_line(line)) print(report_line(line))
if excel != "":
excel_write_footer(excel_wb)
report_footer(agg) report_footer(agg)
if csv_output: if csv_output:
file_csv.close() file_csv.close()

View File

@@ -5,3 +5,4 @@ ipympl
mysql-client mysql-client
mysql-connector mysql-connector
sshtunnel sshtunnel
xslxwriter