Add dataset report

This commit is contained in:
2023-06-07 13:54:36 +02:00
parent 404f7ada4a
commit 61d76a8651
10 changed files with 128 additions and 35 deletions

6
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,6 @@
{
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter"
},
"python.formatting.provider": "none"
}

Binary file not shown.

View File

@@ -15,6 +15,7 @@ from flask import (
send_file, send_file,
url_for, url_for,
) )
from dotenv import dotenv_values
from flask_login import current_user, login_required from flask_login import current_user, login_required
results = Blueprint("results", __name__, template_folder="templates") results = Blueprint("results", __name__, template_folder="templates")
@@ -84,6 +85,7 @@ def best(file_name):
message=f"This best results file ({file_name}) has not been " message=f"This best results file ({file_name}) has not been "
"created yet! or...", "created yet! or...",
error=str(e), error=str(e),
back=url_for("results.select"),
) )
info = file_name.split("_") info = file_name.split("_")
model = info[3].split(".")[0] model = info[3].split(".")[0]
@@ -103,14 +105,22 @@ def set_compare():
def report(file_name): def report(file_name):
os.chdir(current_user.benchmark.folder) os.chdir(current_user.benchmark.folder)
back = request.args.get("url") or "" back = request.args.get("url") or ""
back_name = request.args.get("url_name") or ""
with open(os.path.join(Folders.results, file_name)) as f: with open(os.path.join(Folders.results, file_name)) as f:
data = json.load(f) data = json.load(f)
try: try:
summary = process_data(file_name, current_app.config["COMPARE"], data) summary = process_data(file_name, current_app.config["COMPARE"], data)
except Exception as e: except Exception as e:
return render_template("error.html", message=str(e)) return render_template(
"error.html", message=str(e), back=url_for("results.select")
)
return render_template( return render_template(
"report.html", data=data, file=file_name, summary=summary, back=back "report.html",
data=data,
file=file_name,
summary=summary,
back=back,
back_name=back_name,
) )
@@ -177,3 +187,35 @@ def download(file_name):
os.chdir(current_app.root_path) os.chdir(current_app.root_path)
shutil.copyfile(src, dest) shutil.copyfile(src, dest)
return send_file(dest, as_attachment=True) return send_file(dest, as_attachment=True)
@results.route("/dataset_report/<dataset>")
@login_required
def dataset_report(dataset):
# Get info of the results obtained for a dataset
os.chdir(current_user.benchmark.folder)
app_config = dotenv_values(".env")
dt = Datasets()
data = dt.get_attributes(dataset)
names = Files.get_all_results(hidden=False)
results = {}
for name in names:
try:
with open(os.path.join(Folders.results, name)) as f:
data = json.load(f)
for result in data["results"]:
if dataset == result["dataset"]:
results[name] = result
except Exception as e:
return render_template(
"error.html",
message=f"Couldn't process file ({name})",
error=str(e),
back=url_for("results.dataset_report", dataset=dataset),
)
return render_template(
"dataset.html",
dataset_name=dataset,
results=results,
app_config=app_config,
)

View File

@@ -4,9 +4,9 @@
<button type="button" <button type="button"
class="btn btn-primary position-relative" class="btn btn-primary position-relative"
onclick="location.href='{{ back }}'"> onclick="location.href='{{ back }}'">
Back to Best Results Report Back to {{ back_name }}
<span class="position-absolute top-0 start-100 translate-middle p-2 bg-danger border border-light rounded-circle"> <span class="position-absolute top-0 start-100 translate-middle p-2 bg-danger border border-light rounded-circle">
<span class="visually-hidden">Back to Best Results Report</span> <span class="visually-hidden">Back to {{ back_name }}</span>
</span> </span>
</button> </button>
{% endif %} {% endif %}
@@ -85,7 +85,7 @@
data-field="time" data-field="time"
data-sortable="true" data-sortable="true"
data-sorter="remove_plus">Time</th> data-sorter="remove_plus">Time</th>
<th class="text-center" data-field="hyperparameters" data-sortable="true">hyperparameters</th> <th class="text-center" data-field="hyperparameters" data-sortable="true">Hyperparameters</th>
</tr> </tr>
</thead> </thead>
<script> <script>
@@ -103,7 +103,9 @@
<tbody> <tbody>
{% for item in data.results %} {% for item in data.results %}
<tr> <tr>
<td>{{ item.dataset }}</td> <td class="text-left">
<a href="{{ url_for("results.dataset_report", dataset=item.dataset) }}">{{ item.dataset }}</a>
</td>
<td class="text-end">{{ '{:,}'.format(item.samples) }}</td> <td class="text-end">{{ '{:,}'.format(item.samples) }}</td>
<td class="text-end">{{"%d" % item.features}}</td> <td class="text-end">{{"%d" % item.features}}</td>
<td class="text-end">{{"%d" % item.classes}}</td> <td class="text-end">{{"%d" % item.classes}}</td>

View File

@@ -1,4 +1,4 @@
{% extends "base.html" %} {% extends "report_tables.html" %}
{% block content %} {% block content %}
<div class="alert alert-primary" role="alert"> <div class="alert alert-primary" role="alert">
<h3>{{ title }}</h3> <h3>{{ title }}</h3>
@@ -15,12 +15,14 @@
<tbody> <tbody>
{% for dataset, info in data.items() %} {% for dataset, info in data.items() %}
<tr> <tr>
<td>{{ dataset }}</td> <td class="text-left">
<a href="{{ url_for("results.dataset_report", dataset=dataset) }}">{{ dataset }}</a>
</td>
<td class="text-end">{{ '%9.7f' % info[0] }}</td> <td class="text-end">{{ '%9.7f' % info[0] }}</td>
<td class="text-center">{{ info[1] }}</td> <td class="text-center">{{ info[1] }}</td>
<td> <td>
{% set url = url_for(request.endpoint, **request.view_args)|urlencode %} {% set url = url_for(request.endpoint, **request.view_args)|urlencode %}
<a href="{{ url_for('results.report', file_name = info[2]) }}?url={{ url }}">{{ info[2] }}</a> <a href="{{ url_for('results.report', file_name = info[2]) }}?url={{ url }}&url_name=Best Results Report">{{ info[2] }}</a>
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}

View File

@@ -0,0 +1,46 @@
{% extends "report_tables.html" %}
{% block content %}
<div class="alert alert-primary" role="alert">
<h3>Results for {{ dataset_name }}</h3>
</div>
<table id="files-table"
class="table table-striped table-hover table-bordered bg-light"
data-toggle="table"
data-sticky-header="true"
data-sticky-header-offset-y="50"
data-sortable="true">
<thead>
<tr class="bg-primary text-white">
<th class="text-center" data-field="file" data-sortable="true">File Name</th>
<th class="text-center" data-field="samples" data-sortable="true">Samples</th>
<th class="text-center" data-field="features" data-sortable="true">Features</th>
<th class="text-center" data-field="classes" data-sortable="true">Classes</th>
<th class="text-center" data-field="nodes" data-sortable="true">{{ app_config.nodes }}</th>
<th class="text-center" data-field="leaves" data-sortable="true">{{ app_config.leaves }}</th>
<th class="text-center" data-field="depth" data-sortable="true">{{ app_config.depth }}</th>
<th class="text-center" data-field="score" data-sortable="true">Score</th>
<th class="text-center" data-field="time" data-sortable="true">Time</th>
<th class="text-center" data-field="hyperparameters" data-sortable="true">Hyperparameters</th>
</tr>
</thead>
<tbody>
{% for file_name, item in results.items() %}
<tr>
<td class="text-left">
{% set url = url_for(request.endpoint, **request.view_args)|urlencode %}
<a href="{{ url_for('results.report', file_name=file_name) }}?url={{ url }}&url_name={{ dataset_name }} report">{{ file_name }}</a>
</td>
<td class="text-end">{{ '{:,}'.format(item.samples) }}</td>
<td class="text-end">{{"%d" % item.features}}</td>
<td class="text-end">{{"%d" % item.classes}}</td>
<td class="text-end">{{ '{:,.2f}'.format(item.nodes) }}</td>
<td class="text-end">{{ '{:,}'.format(item.leaves) }}</td>
<td class="text-end">{{ '{:,}'.format(item.depth) }}</td>
<td class="text-end">{{"%.6f±%.4f" % (item.score, item.score_std)}}</td>
<td class="text-end">{{"%.6f±%.4f" % (item.time, item.time_std)}}</td>
<td class="text-left">{{ item.hyperparameters }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}

View File

@@ -240,7 +240,8 @@
<hr> <hr>
<div class='_1'>{{ message }}</div> <div class='_1'>{{ message }}</div>
<div class='_2'>{{ error }}</div> <div class='_2'>{{ error }}</div>
<a class='btn' href='/'>Go Back</a> {% set back_url = back | default('/') %}
<a class='btn' href='{{ back_url }}'>Go Back</a>
</div> </div>
</body> </body>
</html> </html>

View File

@@ -1,20 +1,9 @@
{% extends "base.html" %} {% extends "report_tables.html" %}
{% block styles %}
{{ super() }}
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.2/font/bootstrap-icons.css">
<link rel="stylesheet"
href="https://unpkg.com/bootstrap-table@1.21.4/dist/bootstrap-table.min.css">
<link href="https://unpkg.com/bootstrap-table@1.21.4/dist/extensions/sticky-header/bootstrap-table-sticky-header.css"
rel="stylesheet">
{% endblock %}
{% block content %} {% block content %}
{% include "_table_report.html" %} {% include "_table_report.html" %}
{% endblock %} {% endblock %}
{% block jscript %} {% block jscript %}
{{ super() }} {{ super() }}
<script src="https://unpkg.com/bootstrap-table@1.21.4/dist/bootstrap-table.min.js"></script>
<script src="https://unpkg.com/bootstrap-table@1.21.4/dist/extensions/sticky-header/bootstrap-table-sticky-header.min.js"></script>
<script src="{{ url_for('static', filename="js/report.js") }}"></script> <script src="{{ url_for('static', filename="js/report.js") }}"></script>
<script src="{{ url_for('static', filename="js/excelFiles.js") }}"></script> <script src="{{ url_for('static', filename="js/excelFiles.js") }}"></script>
{% endblock %} {% endblock %}

View File

@@ -0,0 +1,17 @@
{% extends "base.html" %}
{% block styles %}
{{ super() }}
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.2/font/bootstrap-icons.css">
<link rel="stylesheet"
href="https://unpkg.com/bootstrap-table@1.21.4/dist/bootstrap-table.min.css">
<link href="https://unpkg.com/bootstrap-table@1.21.4/dist/extensions/sticky-header/bootstrap-table-sticky-header.css"
rel="stylesheet">
{% endblock %}
{% block content %}{% endblock %}
{% block jscript %}
{{ super() }}
<script src="https://unpkg.com/bootstrap-table@1.21.4/dist/bootstrap-table.min.js"></script>
<script src="https://unpkg.com/bootstrap-table@1.21.4/dist/extensions/sticky-header/bootstrap-table-sticky-header.min.js"></script>
<script src="https://unpkg.com/bootstrap-table@1.21.4/dist/extensions/multiple-sort/bootstrap-table-multiple-sort.js"></script>
{% endblock %}

View File

@@ -1,21 +1,9 @@
{% extends "base.html" %} {% extends "report_tables.html" %}
{% block styles %}
{{ super() }}
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.2/font/bootstrap-icons.css">
<link rel="stylesheet"
href="https://unpkg.com/bootstrap-table@1.21.4/dist/bootstrap-table.min.css">
<link href="https://unpkg.com/bootstrap-table@1.21.4/dist/extensions/sticky-header/bootstrap-table-sticky-header.css"
rel="stylesheet">
{% endblock %}
{% block content %} {% block content %}
{% include "_table_select.html" %} {% include "_table_select.html" %}
{% endblock %} {% endblock %}
{% block jscript %} {% block jscript %}
{{ super() }} {{ super() }}
<script src="https://unpkg.com/bootstrap-table@1.21.4/dist/bootstrap-table.min.js"></script>
<script src="https://unpkg.com/bootstrap-table@1.21.4/dist/extensions/sticky-header/bootstrap-table-sticky-header.min.js"></script>
<script src="https://unpkg.com/bootstrap-table@1.21.4/dist/extensions/multiple-sort/bootstrap-table-multiple-sort.js"></script>
<script src="{{ url_for('static', filename="js/select.js") }}"></script> <script src="{{ url_for('static', filename="js/select.js") }}"></script>
<script src="{{ url_for('static', filename="js/excelFiles.js") }}"></script> <script src="{{ url_for('static', filename="js/excelFiles.js") }}"></script>
{% endblock %} {% endblock %}