Add datasets and enhance select

This commit is contained in:
2023-06-05 20:04:12 +02:00
parent 11bef3d7f4
commit 97677b185f
7 changed files with 136 additions and 11 deletions

Binary file not shown.

View File

@@ -1,17 +1,26 @@
import os
from dotenv import load_dotenv
dotenv_file = ".env"
basedir = os.path.abspath(os.path.dirname(__file__))
load_dotenv(os.path.join(basedir, ".env"))
load_dotenv(os.path.join(basedir, dotenv_file))
class Config(object):
FRAMEWORKS = ["bootstrap", "bulma"]
FRAMEWORK = os.environ.get("FRAMEWORK") or FRAMEWORKS[0]
OUTPUT = os.environ.get("OUTPUT") or "local" # local or docker
COMPARE = os.environ.get("COMPARE") == "True" or False
TEMPLATES_AUTO_RELOAD = True
SECRET_KEY = os.environ.get("SECRET_KEY") or "really-hard-to-guess-key"
SQLALCHEMY_DATABASE_URI = os.environ.get(
"DATABASE_URL"
) or "sqlite:///" + os.path.join(basedir, "app.db")
SQLALCHEMY_TRACK_MODIFICATIONS = False
@staticmethod
def save():
with open(dotenv_file, "w") as f:
f.write("FRAMEWORK=" + Config.FRAMEWORK + "\n")
f.write("OUTPUT=" + Config.OUTPUT + "\n")
f.write("COMPARE=" + str(Config.COMPARE) + "\n")

3
app/env.dist Normal file
View File

@@ -0,0 +1,3 @@
OUTPUT="local"
FRAMEWORK="bulma"
COMPARE="True"

View File

@@ -1,16 +1,16 @@
import os
import json
from benchmark.Utils import Files, Folders
from benchmark.ResultsBase import StubReport
from benchmark.Datasets import Datasets
from flask_login import current_user
from flask import Blueprint, current_app, send_file
from flask import render_template, current_app, request, redirect, url_for
from flask_login import login_required
# import json
# import shutil
# import xlsxwriter
# from benchmark.ResultsFiles import Excel, ReportDatasets
# from benchmark.Datasets import Datasets
results = Blueprint("results", __name__, template_folder="templates")
@@ -43,5 +43,59 @@ def select(compare="False"):
@results.route("/datasets")
@login_required
def datasets(compare="False"):
return render_template("test.html")
def datasets():
os.chdir(current_user.benchmark.folder)
dt = Datasets()
datos = []
for dataset in dt:
datos.append(dt.get_attributes(dataset))
return render_template("datasets.html", datasets=datos)
@results.route("/best/<file_name>")
@login_required
def best(file_name):
os.chdir(current_user.benchmark.folder)
dt = Datasets()
datos = []
for dataset in dt:
datos.append(dt.get_attributes(dataset))
return render_template("datasets.html", datasets=datos)
@results.route("/report/<file_name>")
@login_required
def report(file_name):
os.chdir(current_user.benchmark.folder)
with open(os.path.join(Folders.results, file_name)) as f:
data = json.load(f)
try:
compare = current_app.config["COMPARE"]
summary = process_data(file_name, compare, data)
except Exception as e:
return render_template("error.html", message=str(e), compare=compare)
return render_template(
"report.html",
data=data,
file=file_name,
summary=summary,
framework=current_app.config["FRAMEWORK"],
back=back,
)
def process_data(file_name, compare, data):
report = StubReport(
os.path.join(Folders.results, file_name), compare=compare
)
new_list = []
for result in data["results"]:
symbol = report._compute_status(result["dataset"], result["score"])
result["symbol"] = symbol if symbol != " " else "&nbsp;"
new_list.append(result)
data["results"] = new_list
# Compute summary with explanation of symbols
summary = {}
for key, value in report._compare_totals.items():
summary[key] = (report._status_meaning(key), value)
return summary

View File

@@ -0,0 +1,25 @@
<table id="file-table"
class="table table-striped table-hover table-bordered bg-light">
<thead>
<tr class="bg-primary text-white">
<th class="text-center">Dataset</th>
<th class="text-center">Samples</th>
<th class="text-center">Features</th>
<th class="text-center">Cont. Feat.</th>
<th class="text-center">Classes</th>
<th class="text-center">Balance</th>
</tr>
</thead>
<tbody>
{% for dataset in datasets %}
<tr>
<td>{{ dataset.dataset }}</td>
<td class="text-end">{{ "{:,}".format(dataset.samples) }}</td>
<td class="text-end">{{ "{:,}".format(dataset.features) }}</td>
<td class="text-end">{{ dataset.cont_features }}</td>
<td class="text-end">{{ dataset.classes }}</td>
<td>{{ dataset.balance }}</td>
</tr>
{% endfor %}
</tbody>
</table>

View File

@@ -1,7 +1,7 @@
{%- macro get_button_tag(icon_name, method, visible=True, name="") -%}
<button class="btn btn-primary btn-small" onclick="{{ method }}" {{ "" if visible else "hidden='true'" }} {{ "" if name=="" else "name='" + name +"'"}}><i class="mdi mdi-{{ icon_name }}"></i>
</button>
{%- endmacro -%}
<div class="float-right">
<input type="checkbox" id="compare" name="compare" {% if config["COMPARE"] %}{{ "checked" }}{% endif %}>
<span class="badge bg-info bg-small" onclick="$('#compare').click()">Comparing with best results</span>
</div>
<table id="file-table"
class="table table-striped table-hover table-bordered">
<thead>
@@ -39,9 +39,17 @@
<td>{{ "%s" % data["title"] }}</td>
<td class="text-end">{{ "%.6f" % data["score"] }}</td>
<td>
{{ get_button_tag("table-eye", "showFile('" ~ file ~ "') ") | safe }}
{% set file_best = "best_results_" ~ parts[1] ~ "_" ~ parts[2] ~ ".json" %}
{{ get_button_tag("star-circle-outline", "redirectDouble('best_results', '" ~ file_best ~ "') ", visible=False, name="best_buttons") | safe }}
<button class="btn btn-primary btn-small"
onclick="{{ url_for("results.report", file_name=file) }}">
<i class="mdi mdi-table-eye"></i>
</button>
<button class="btn btn-primary btn-small"
onclick="{{ url_for("results.best", file_name=file_best) }}"
hidden="true"
name="best_buttons">
<i class="mdi mdi-star-circle-outline"></i>
</button>
<input type="checkbox" name="selected_files" value="{{ file }}" />
</td>
</tr>

View File

@@ -0,0 +1,26 @@
{% extends "base.html" %}
{% block content %}
{% include "_table_datasets.html" %}
{% endblock %}
{% block jscript %}
{{ super() }}
<script>
$(document).ready(function () {
$(document).ajaxStart(function(){
$("body").addClass('ajaxLoading');
});
$(document).ajaxStop(function(){
$("body").removeClass('ajaxLoading');
});
});
// Check if row is selected
$('#file-table tbody').on('click', 'tr', function () {
if ($(this).hasClass('selected')) {
$(this).removeClass('selected');
} else {
$('#file-table tbody tr.selected').removeClass("selected")
$(this).addClass('selected');
}
});
</script>
{% endblock %}