Add results files affected in best results excel

This commit is contained in:
Ricardo Montañana Gómez 2023-10-24 16:18:52 +02:00
parent 130139f644
commit 84cec0c1e0
Signed by: rmontanana
GPG Key ID: 46064262FD9A7ADE
8 changed files with 57 additions and 20 deletions

View File

@ -1,9 +1,23 @@
#include <sstream> #include <sstream>
#include "BestResultsExcel.h" #include "BestResultsExcel.h"
#include "Paths.h" #include "Paths.h"
#include <map>
#include <nlohmann/json.hpp>
#include "Statistics.h" #include "Statistics.h"
#include "ReportExcel.h"
namespace platform { namespace platform {
json loadResultData(const string& fileName)
{
json data;
ifstream resultData(fileName);
if (resultData.is_open()) {
data = json::parse(resultData);
} else {
throw invalid_argument("Unable to open result file. [" + fileName + "]");
}
return data;
}
string getColumnName(int colNum) string getColumnName(int colNum)
{ {
string columnName = ""; string columnName = "";
@ -47,13 +61,8 @@ namespace platform {
cerr << "File " << fileName << " doesn't exist." << endl; cerr << "File " << fileName << " doesn't exist." << endl;
exit(1); exit(1);
} }
json data; json data = loadResultData(fileName);
ifstream resultData(fileName);
if (resultData.is_open()) {
data = json::parse(resultData);
} else {
throw invalid_argument("Unable to open result file. [" + fileName + "]");
}
string title = "Best results for " + model; string title = "Best results for " + model;
worksheet_merge_range(worksheet, 0, 0, 0, 4, title.c_str(), styles["headerFirst"]); worksheet_merge_range(worksheet, 0, 0, 0, 4, title.c_str(), styles["headerFirst"]);
// Body header // Body header
@ -67,12 +76,29 @@ namespace platform {
auto i = 0; auto i = 0;
string hyperparameters; string hyperparameters;
int hypSize = 0; int hypSize = 0;
map<string, string> files; // map of files imported and their tabs
for (auto const& item : data.items()) { for (auto const& item : data.items()) {
row++; row++;
writeInt(row, 0, i++, "ints"); writeInt(row, 0, i++, "ints");
writeString(row, 1, item.key().c_str(), "text"); writeString(row, 1, item.key().c_str(), "text");
writeDouble(row, 2, item.value().at(0).get<double>(), "result"); writeDouble(row, 2, item.value().at(0).get<double>(), "result");
writeString(row, 3, item.value().at(2).get<string>(), "text"); auto fileName = item.value().at(2).get<string>();
string hyperlink = "";
try {
hyperlink = files.at(fileName);
}
catch (const out_of_range& oor) {
auto tabName = "table_" + to_string(i);
auto worksheetNew = workbook_add_worksheet(workbook, tabName.c_str());
json data = loadResultData(Paths::results() + fileName);
auto report = ReportExcel(data, false, workbook, worksheetNew);
report.show();
hyperlink = "#table_" + to_string(i);
files[fileName] = hyperlink;
}
hyperlink += "!H" + to_string(i + 6);
string fileNameText = "=HYPERLINK(\"" + hyperlink + "\",\"" + fileName + "\")";
worksheet_write_formula(worksheet, row, 3, fileNameText.c_str(), efectiveStyle("text"));
hyperparameters = item.value().at(1).dump(); hyperparameters = item.value().at(1).dump();
if (hyperparameters.size() > hypSize) { if (hyperparameters.size() > hypSize) {
hypSize = hyperparameters.size(); hypSize = hyperparameters.size();
@ -85,7 +111,6 @@ namespace platform {
stringstream oss; stringstream oss;
auto colName = getColumnName(2); auto colName = getColumnName(2);
oss << "=sum(" << colName << "5:" << colName << row << ")"; oss << "=sum(" << colName << "5:" << colName << row << ")";
cout << "[" << oss.str() << "]" << endl;
worksheet_write_formula(worksheet, row, 2, oss.str().c_str(), styles["bodyHeader_odd"]); worksheet_write_formula(worksheet, row, 2, oss.str().c_str(), styles["bodyHeader_odd"]);
// Set format // Set format
worksheet_freeze_panes(worksheet, 4, 2); worksheet_freeze_panes(worksheet, 4, 2);

View File

@ -9,9 +9,9 @@ include_directories(${BayesNet_SOURCE_DIR}/lib/libxlsxwriter/include)
add_executable(b_main b_main.cc Folding.cc Experiment.cc Datasets.cc Dataset.cc Models.cc ReportConsole.cc ReportBase.cc) add_executable(b_main b_main.cc Folding.cc Experiment.cc Datasets.cc Dataset.cc Models.cc ReportConsole.cc ReportBase.cc)
add_executable(b_manage b_manage.cc Results.cc ManageResults.cc CommandParser.cc Result.cc ReportConsole.cc ReportExcel.cc ReportBase.cc Datasets.cc Dataset.cc ExcelFile.cc) add_executable(b_manage b_manage.cc Results.cc ManageResults.cc CommandParser.cc Result.cc ReportConsole.cc ReportExcel.cc ReportBase.cc Datasets.cc Dataset.cc ExcelFile.cc)
add_executable(b_list b_list.cc Datasets.cc Dataset.cc) add_executable(b_list b_list.cc Datasets.cc Dataset.cc)
add_executable(b_best b_best.cc BestResults.cc Result.cc Statistics.cc BestResultsExcel.cc ExcelFile.cc) add_executable(b_best b_best.cc BestResults.cc Result.cc Statistics.cc BestResultsExcel.cc ReportExcel.cc ReportBase.cc Datasets.cc Dataset.cc ExcelFile.cc)
target_link_libraries(b_main BayesNet ArffFiles mdlp "${TORCH_LIBRARIES}") target_link_libraries(b_main BayesNet ArffFiles mdlp "${TORCH_LIBRARIES}")
target_link_libraries(b_manage "${TORCH_LIBRARIES}" "${XLSXWRITER_LIB}" ArffFiles mdlp) target_link_libraries(b_manage "${TORCH_LIBRARIES}" "${XLSXWRITER_LIB}" ArffFiles mdlp)
target_link_libraries(b_best Boost::boost "${XLSXWRITER_LIB}") target_link_libraries(b_best Boost::boost "${XLSXWRITER_LIB}" "${TORCH_LIBRARIES}" ArffFiles mdlp)
target_link_libraries(b_list ArffFiles mdlp "${TORCH_LIBRARIES}") target_link_libraries(b_list ArffFiles mdlp "${TORCH_LIBRARIES}")

View File

@ -9,6 +9,10 @@ namespace platform {
{ {
setDefault(); setDefault();
} }
ExcelFile::ExcelFile(lxw_workbook* workbook, lxw_worksheet* worksheet) : workbook(workbook), worksheet(worksheet)
{
setDefault();
}
void ExcelFile::setDefault() void ExcelFile::setDefault()
{ {
normalSize = 14; //font size for report body normalSize = 14; //font size for report body

View File

@ -18,6 +18,7 @@ namespace platform {
public: public:
ExcelFile(); ExcelFile();
ExcelFile(lxw_workbook* workbook); ExcelFile(lxw_workbook* workbook);
ExcelFile(lxw_workbook* workbook, lxw_worksheet* worksheet);
lxw_workbook* getWorkbook(); lxw_workbook* getWorkbook();
protected: protected:
void setProperties(string title); void setProperties(string title);

View File

@ -93,6 +93,7 @@ namespace platform {
reporter.show(); reporter.show();
openExcel = true; openExcel = true;
workbook = reporter.getWorkbook(); workbook = reporter.getWorkbook();
cout << "Adding sheet to " << Paths::excel() + Paths::excelResults() << endl;
} else { } else {
ReportConsole reporter(data, compare); ReportConsole reporter(data, compare);
reporter.show(); reporter.show();

View File

@ -14,6 +14,7 @@ namespace platform {
auto env = platform::DotEnv(); auto env = platform::DotEnv();
return env.get("source_data"); return env.get("source_data");
} }
static std::string excelResults() { return "some_results.xlsx"; }
}; };
} }
#endif #endif

View File

@ -6,7 +6,7 @@
namespace platform { namespace platform {
ReportExcel::ReportExcel(json data_, bool compare, lxw_workbook* workbook) : ReportBase(data_, compare), ExcelFile(workbook) ReportExcel::ReportExcel(json data_, bool compare, lxw_workbook* workbook, lxw_worksheet* worksheet) : ReportBase(data_, compare), ExcelFile(workbook, worksheet)
{ {
createFile(); createFile();
} }
@ -19,12 +19,8 @@ namespace platform {
worksheet_set_column(worksheet, i, i, columns_sizes.at(i), NULL); worksheet_set_column(worksheet, i, i, columns_sizes.at(i), NULL);
} }
} }
void ReportExcel::createWorksheet()
void ReportExcel::createFile()
{ {
if (workbook == NULL) {
workbook = workbook_new((Paths::excel() + fileName).c_str());
}
const string name = data["model"].get<string>(); const string name = data["model"].get<string>();
string suffix = ""; string suffix = "";
string efectiveName; string efectiveName;
@ -42,7 +38,16 @@ namespace platform {
throw invalid_argument("Couldn't create sheet " + efectiveName); throw invalid_argument("Couldn't create sheet " + efectiveName);
} }
} }
cout << "Adding sheet " << efectiveName << " to " << Paths::excel() + fileName << endl; }
void ReportExcel::createFile()
{
if (workbook == NULL) {
workbook = workbook_new((Paths::excel() + Paths::excelResults()).c_str());
}
if (worksheet == NULL) {
createWorksheet();
}
setProperties(data["title"].get<string>()); setProperties(data["title"].get<string>());
createFormats(); createFormats();
formatColumns(); formatColumns();

View File

@ -9,11 +9,11 @@ namespace platform {
using namespace std; using namespace std;
class ReportExcel : public ReportBase, public ExcelFile { class ReportExcel : public ReportBase, public ExcelFile {
public: public:
explicit ReportExcel(json data_, bool compare, lxw_workbook* workbook); explicit ReportExcel(json data_, bool compare, lxw_workbook* workbook, lxw_worksheet* worksheet = NULL);
private: private:
const string fileName = "some_results.xlsx";
void formatColumns(); void formatColumns();
void createFile(); void createFile();
void createWorksheet();
void closeFile(); void closeFile();
void header() override; void header() override;
void body() override; void body() override;