mirror of
https://github.com/Doctorado-ML/beflask.git
synced 2025-08-18 08:35:52 +00:00
Complete experiment
This commit is contained in:
@@ -16,6 +16,7 @@ class BenchmarkDatasetForm(FlaskForm):
|
|||||||
discretize = BooleanField("Discretize")
|
discretize = BooleanField("Discretize")
|
||||||
stratified = BooleanField("Stratified")
|
stratified = BooleanField("Stratified")
|
||||||
ignore_nan = BooleanField("Ignore NaN")
|
ignore_nan = BooleanField("Ignore NaN")
|
||||||
|
fit_features = BooleanField("Fit Features")
|
||||||
n_folds = IntegerField("# Folds")
|
n_folds = IntegerField("# Folds")
|
||||||
hyperparameters = TextAreaField("Hyperparameters")
|
hyperparameters = TextAreaField("Hyperparameters")
|
||||||
submit = SubmitField("Do Experiment!")
|
submit = SubmitField("Do Experiment!")
|
||||||
|
@@ -1,15 +1,19 @@
|
|||||||
import os
|
import os
|
||||||
|
import json
|
||||||
import shutil
|
import shutil
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
import dotenv
|
import dotenv
|
||||||
from benchmark.Datasets import Datasets
|
from benchmark.Datasets import Datasets
|
||||||
|
from benchmark.Experiments import Experiment
|
||||||
from benchmark.Models import Models
|
from benchmark.Models import Models
|
||||||
from benchmark.ResultsFiles import Benchmark
|
from benchmark.ResultsFiles import Benchmark
|
||||||
|
from benchmark.Utils import Folders
|
||||||
from flask import Blueprint, current_app, render_template, url_for
|
from flask import Blueprint, current_app, render_template, url_for
|
||||||
from flask_login import current_user, login_required
|
from flask_login import current_user, login_required
|
||||||
|
|
||||||
from .forms import BenchmarkDatasetForm
|
from .forms import BenchmarkDatasetForm
|
||||||
|
from ..results.main_results import prepare_report
|
||||||
|
|
||||||
interactive = Blueprint("interactive", __name__, template_folder="templates")
|
interactive = Blueprint("interactive", __name__, template_folder="templates")
|
||||||
|
|
||||||
@@ -38,13 +42,79 @@ def experiment():
|
|||||||
stratified = "1" if form.stratified.data else "0"
|
stratified = "1" if form.stratified.data else "0"
|
||||||
discretize = "1" if form.discretize.data else "0"
|
discretize = "1" if form.discretize.data else "0"
|
||||||
ignore_nan = "1" if form.ignore_nan.data else "0"
|
ignore_nan = "1" if form.ignore_nan.data else "0"
|
||||||
hyperparameters = form.hyperparameters.data
|
fit_features = "1" if form.fit_features.data else "0"
|
||||||
else:
|
hyperparameters = form.hyperparameters.data or "{}"
|
||||||
form.model.data = env.get("model")
|
back = url_for("interactive.experiment")
|
||||||
form.score.data = env.get("score")
|
try:
|
||||||
form.n_folds.data = env.get("n_folds", 5)
|
json.loads(hyperparameters)
|
||||||
form.stratified.data = env.get("stratified", "0") == "1"
|
except json.JSONDecodeError as e:
|
||||||
form.discretize.data = env.get("discretize", "0") == "1"
|
return render_template(
|
||||||
|
"error.html",
|
||||||
|
message="Hyperparameters has to be a valid JSON",
|
||||||
|
error=str(e),
|
||||||
|
back=back,
|
||||||
|
)
|
||||||
|
try:
|
||||||
|
job = Experiment(
|
||||||
|
score_name=score,
|
||||||
|
model_name=model,
|
||||||
|
stratified=stratified,
|
||||||
|
datasets=Datasets(dataset_name=dataset, discretize=discretize),
|
||||||
|
hyperparams_dict=hyperparameters,
|
||||||
|
hyperparams_file=None,
|
||||||
|
grid_paramfile=None,
|
||||||
|
progress_bar=False,
|
||||||
|
platform="BeFlask",
|
||||||
|
ignore_nan=ignore_nan,
|
||||||
|
title="Created by the web interface",
|
||||||
|
folds=n_folds,
|
||||||
|
fit_features=fit_features,
|
||||||
|
discretize=discretize,
|
||||||
|
)
|
||||||
|
job.do_experiment()
|
||||||
|
except ValueError as e:
|
||||||
|
breakpoint()
|
||||||
|
return render_template(
|
||||||
|
"error.html",
|
||||||
|
message=f"Couldn't complete the experiment!!",
|
||||||
|
error=str(e),
|
||||||
|
back=back,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
file_name = str(Path(job.get_output_file()).name)
|
||||||
|
try:
|
||||||
|
result = prepare_report(file_name)
|
||||||
|
except FileNotFoundError as e:
|
||||||
|
return render_template(
|
||||||
|
"error.html",
|
||||||
|
message=f"This results file ({file_name}) "
|
||||||
|
"has not been found!",
|
||||||
|
error=str(e),
|
||||||
|
back=back,
|
||||||
|
)
|
||||||
|
except ValueError as e:
|
||||||
|
return render_template(
|
||||||
|
"error.html",
|
||||||
|
message=str(e),
|
||||||
|
back=url_for("results.select"),
|
||||||
|
)
|
||||||
|
os.remove(os.path.join(Folders.results, file_name))
|
||||||
|
return render_template(
|
||||||
|
"report.html",
|
||||||
|
data=result["data"],
|
||||||
|
file=file_name,
|
||||||
|
summary=result["summary"],
|
||||||
|
back=back,
|
||||||
|
back_name="Experiment",
|
||||||
|
app_config=result["app_config"],
|
||||||
|
excel=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
form.model.data = env.get("model")
|
||||||
|
form.score.data = env.get("score")
|
||||||
|
form.n_folds.data = env.get("n_folds", 5)
|
||||||
|
form.stratified.data = env.get("stratified", "0") == "1"
|
||||||
|
form.discretize.data = env.get("discretize", "0") == "1"
|
||||||
return render_template("experiment.html", form=form, title="Experiment")
|
return render_template("experiment.html", form=form, title="Experiment")
|
||||||
|
|
||||||
|
|
||||||
|
@@ -100,39 +100,41 @@ def set_compare():
|
|||||||
return AjaxResponse(True, "Ok").to_string()
|
return AjaxResponse(True, "Ok").to_string()
|
||||||
|
|
||||||
|
|
||||||
|
def prepare_report(file_name):
|
||||||
|
app_config = dotenv_values(".env")
|
||||||
|
with open(os.path.join(Folders.results, file_name)) as f:
|
||||||
|
data = json.load(f)
|
||||||
|
summary = process_data(file_name, current_app.config["COMPARE"], data)
|
||||||
|
return dict(app_config=app_config, data=data, summary=summary)
|
||||||
|
|
||||||
|
|
||||||
@results.route("/report/<file_name>")
|
@results.route("/report/<file_name>")
|
||||||
@login_required
|
@login_required
|
||||||
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 ""
|
back_name = request.args.get("url_name") or ""
|
||||||
app_config = dotenv_values(".env")
|
|
||||||
try:
|
try:
|
||||||
with open(os.path.join(Folders.results, file_name)) as f:
|
result = prepare_report(file_name)
|
||||||
data = json.load(f)
|
except FileNotFoundError as e:
|
||||||
try:
|
|
||||||
summary = process_data(
|
|
||||||
file_name, current_app.config["COMPARE"], data
|
|
||||||
)
|
|
||||||
except Exception as e:
|
|
||||||
return render_template(
|
|
||||||
"error.html", message=str(e), back=url_for("results.select")
|
|
||||||
)
|
|
||||||
except Exception as e:
|
|
||||||
return render_template(
|
return render_template(
|
||||||
"error.html",
|
"error.html",
|
||||||
message=f"This results file ({file_name}) has not been found!",
|
message=f"This results file ({file_name}) has not been found!",
|
||||||
error=str(e),
|
error=str(e),
|
||||||
back=url_for("results.select"),
|
back=url_for("results.select"),
|
||||||
)
|
)
|
||||||
|
except ValueError as e:
|
||||||
|
return render_template(
|
||||||
|
"error.html", message=str(e), back=url_for("results.select")
|
||||||
|
)
|
||||||
return render_template(
|
return render_template(
|
||||||
"report.html",
|
"report.html",
|
||||||
data=data,
|
data=result["data"],
|
||||||
file=file_name,
|
file=file_name,
|
||||||
summary=summary,
|
summary=result["summary"],
|
||||||
back=back,
|
back=back,
|
||||||
back_name=back_name,
|
back_name=back_name,
|
||||||
app_config=app_config,
|
app_config=result["app_config"],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@@ -50,7 +50,8 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
</table>
|
</table>
|
||||||
<div>{{ excel_button([ file ]) }}</div>
|
{% set show_excel = excel| default(True) %}
|
||||||
|
{% if show_excel %}<div>{{ excel_button([ file ]) }}</div>{% endif %}
|
||||||
<table class="table table-striped table-hover table-bordered bg-light"
|
<table class="table table-striped table-hover table-bordered bg-light"
|
||||||
id="report-table"
|
id="report-table"
|
||||||
data-toggle="table"
|
data-toggle="table"
|
||||||
|
Reference in New Issue
Block a user