aboutsummaryrefslogtreecommitdiff
path: root/frontend/src/app/experiment
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/app/experiment')
-rw-r--r--frontend/src/app/experiment/experiment.component.css5
-rw-r--r--frontend/src/app/experiment/experiment.component.html355
-rw-r--r--frontend/src/app/experiment/experiment.component.ts50
3 files changed, 225 insertions, 185 deletions
diff --git a/frontend/src/app/experiment/experiment.component.css b/frontend/src/app/experiment/experiment.component.css
index 4a3d7741..d84a897e 100644
--- a/frontend/src/app/experiment/experiment.component.css
+++ b/frontend/src/app/experiment/experiment.component.css
@@ -40,4 +40,9 @@ ul li:hover {
h2 {
color: #003459;
+}
+
+.boldClass {
+ font-weight: bold;
+ font-size: 125%;
} \ No newline at end of file
diff --git a/frontend/src/app/experiment/experiment.component.html b/frontend/src/app/experiment/experiment.component.html
index e46f5bd9..4bdd79b2 100644
--- a/frontend/src/app/experiment/experiment.component.html
+++ b/frontend/src/app/experiment/experiment.component.html
@@ -4,159 +4,147 @@
<div id="wrapper">
<div id="container" class="container p-5" style="background-color: white; min-height: 100%;">
- <div class="d-flex flex-row justify-content-center align-items-center my-3">
- <a href="#" data-bs-target="#carouselExampleControls" data-bs-slide-to="0">Izvor podataka</a>
+ <div class="d-flex flex-row justify-content-center align-items-center my-3 links">
+ <a id="firstStep" href="#" data-bs-target="#carouselExampleControls" data-bs-slide-to="0" (click)="updateCarouselIndex(0);" [ngClass]="{'boldClass' : carouselIndex == 0}" style="text-decoration: none">Izvor podataka</a>
<mat-icon>arrow_forward</mat-icon>
- <a href="#" data-bs-target="#carouselExampleControls" data-bs-slide-to="1">Preprocesiranje</a>
+ <a href="#" data-bs-target="#carouselExampleControls" data-bs-slide-to="1" (click)="updateCarouselIndex(1)" [ngClass]="{'boldClass' : carouselIndex == 1}" style="text-decoration: none">Preprocesiranje</a>
<mat-icon>arrow_forward</mat-icon>
- <a href="#" data-bs-target="#carouselExampleControls" data-bs-slide-to="2">Dodaj eksperiment</a>
+ <a href="#" data-bs-target="#carouselExampleControls" data-bs-slide-to="2" (click)="updateCarouselIndex(2)" [ngClass]="{'boldClass' : carouselIndex == 2}" style="text-decoration: none">Dodaj eksperiment</a>
</div>
- <div id="carouselExampleControls" class="carousel slide px-5 mt-5" data-bs-wrap="false" data-bs-ride="carousel" data-bs-interval="false">
- <div class="carousel-inner">
- <div class="carousel-item active mt-2">
- <h2 class="mb-5">1. Izvor podataka</h2>
- <app-dataset-load (selectedDatasetChangeEvent)="updateDataset($event)"></app-dataset-load>
- </div>
+ <div id="carouselExampleControls" class="carousel px-5 mt-5" data-bs-wrap="false" data-bs-ride="carousel" data-bs-interval="false">
+ <div class="carousel-inner">
+ <div class="carousel-item active mt-2">
+ <h2 class="mb-5">1. Izvor podataka</h2>
+ <app-dataset-load (selectedDatasetChangeEvent)="updateDataset($event)"></app-dataset-load>
+ </div>
- <div class="carousel-item mt-2">
- <h2 class="mb-4">2. Preprocesiranje</h2>
+ <div class="carousel-item mt-2">
+ <h2 class="mb-4">2. Preprocesiranje</h2>
- <div class="px-5">
- <h3>Biranje ulaznih i izlaznih kolona:</h3>
- <div *ngIf="selectedDataset">
- <div class="row">
- <div class="col d-flex justify-content-center">
- <h3>Izaberite ulazne kolone:</h3>
- <div id="divInputs" class="form-check mt-2">
- <br>
- <div *ngFor="let item of selectedDataset.columnInfo; let i = index">
- <input class="form-check-input" type="checkbox" value="{{item.columnName}}"
- id="cb_{{item.columnName}}" name="cbsNew"
- [checked]="experiment.outputColumn != item.columnName"
- [disabled]="experiment.outputColumn == item.columnName"
- (click)="checkedColumnsChanged(item, 0)">&nbsp;
- <label class="form-check-label" for="cb_{{item.columnName}}">
+ <div class="px-5">
+ <h3>Biranje ulaznih i izlaznih kolona:</h3>
+ <div *ngIf="selectedDataset">
+ <div class="row">
+ <div class="col d-flex justify-content-center">
+ <h3>Izaberite ulazne kolone:</h3>
+ <div id="divInputs" class="form-check mt-2">
+ <br>
+ <div *ngFor="let item of selectedDataset.columnInfo; let i = index">
+ <input class="form-check-input" type="checkbox" value="{{item.columnName}}" id="cb_{{item.columnName}}" name="cbsNew" [checked]="experiment.outputColumn != item.columnName" [disabled]="experiment.outputColumn == item.columnName" (change)="checkedColumnsChanged(item, 0); resetColumnEncodings();">&nbsp;
+ <label class="form-check-label" for="cb_{{item.columnName}}">
{{item.columnName}}
</label>
+ </div>
</div>
</div>
- </div>
- <div class="col d-flex justify-content-left">
- <h3>Izaberite izlaznu kolonu:</h3>
- <div id="divOutputs" class="form-check mt-2">
- <br>
- <div *ngFor="let item of selectedDataset.columnInfo; let i = index">
- <input class="form-check-input" type="radio" value="{{item.columnName}}"
- id="rb_{{item.columnName}}" name="rbsNew"
- [(ngModel)]="this.experiment.outputColumn"
- (change)="experiment.outputColumn = item.columnName"
- (click)="checkedColumnsChanged(item, 1);">&nbsp;
- <label class="form-check-label" for="rb_{{item.columnName}}">
+ <div class="col d-flex justify-content-left">
+ <h3>Izaberite izlaznu kolonu:</h3>
+ <div id="divOutputs" class="form-check mt-2">
+ <br>
+ <div *ngFor="let item of selectedDataset.columnInfo; let i = index">
+ <input class="form-check-input" type="radio" value="{{item.columnName}}" id="rb_{{item.columnName}}" name="rbsNew" [(ngModel)]="this.experiment.outputColumn" (change)="experiment.outputColumn = item.columnName; checkedColumnsChanged(item, 1); resetColumnEncodings();"
+ checked>&nbsp;
+ <label class="form-check-label" for="rb_{{item.columnName}}">
{{item.columnName}}
</label>
+ </div>
</div>
</div>
</div>
</div>
- </div>
-
- <h3 class="mt-5">Popunjavanje nedostajućih vrednosti:</h3>
- <div class="form-check" *ngIf="selectedDataset">
- <input type="radio" [(ngModel)]="experiment.nullValues" [value]="NullValueOptions.DeleteRows"
- class="form-check-input" value="deleteRows" name="fillMissing" id="delRows" checked
- data-bs-toggle="collapse" data-bs-target="#fillMissingCustom.show">
- <label for="delRows" class="form-check-label">Obriši sve
- redove sa nedostajućim vrednostima ({{selectedDataset.nullRows}} od {{selectedDataset.rowCount}})</label><br>
- <input type="radio" [(ngModel)]="experiment.nullValues" [value]="NullValueOptions.DeleteColumns"
- class="form-check-input" value="deleteCols" name="fillMissing" id="delCols" data-bs-toggle="collapse"
- data-bs-target="#fillMissingCustom.show">
- <label for="delCols" class="form-check-label">Obriši sve
+
+
+ <div class="mt-5 mb-3 mx-3" *ngIf="countSelectedNullCols() == 0">
+ <h3 class="border p-2 text-center"><i>Izabrane kolone nemaju nedostajuće vrednosti koje možete popuniti.</i></h3>
+ </div>
+
+ <div *ngIf="countSelectedNullCols() != 0">
+ <h3 class="mt-5">Popunjavanje nedostajućih vrednosti:</h3>
+ <div class="form-check" *ngIf="selectedDataset">
+ <input type="radio" [(ngModel)]="experiment.nullValues " [value]="NullValueOptions.DeleteRows " class="form-check-input" value="deleteRows" name="fillMissing " id="delRows" checked data-bs-toggle="collapse" data-bs-target="#fillMissingCustom.show">
+ <label *ngIf="selectedColumnsInfoArray.length == selectedDataset.columnInfo.length" for="delRows" class="form-check-label ">Obriši sve
+ redove sa nedostajućim vrednostima ({{selectedDataset.nullRows}} od {{selectedDataset.rowCount}})</label>
+ <label *ngIf="selectedColumnsInfoArray.length != selectedDataset.columnInfo.length" for="delRows" class="form-check-label ">Obriši sve
+ redove sa nedostajućim vrednostima</label><br>
+ <input type="radio" [(ngModel)]="experiment.nullValues " [value]="NullValueOptions.DeleteColumns " class="form-check-input" value="deleteCols" name="fillMissing " id="delCols" data-bs-toggle="collapse" data-bs-target="#fillMissingCustom.show">
+ <label for="delCols" class="form-check-label ">Obriši sve
kolone sa nedostajućim vrednostima ({{countSelectedNullCols()}} od {{selectedDataset.columnInfo.length}})</label><br>
- <input type="radio" [(ngModel)]="experiment.nullValues" [value]="NullValueOptions.Replace"
- class="form-check-input" name="fillMissing" id="replace" data-bs-toggle="collapse"
- data-bs-target="#fillMissingCustom:not(.show)">
- <label for="replace" class="form-check-label">Izabraću
+ <input type="radio" [(ngModel)]="experiment.nullValues " [value]="NullValueOptions.Replace " class="form-check-input" name="fillMissing" id="replace" data-bs-toggle="collapse" data-bs-target="#fillMissingCustom:not(.show)">
+ <label for="replace" class="form-check-label">Izabraću
vrednosti koje će da zamene nedostajuće vrednosti za svaku kolonu...</label><br><br>
- <div class="collapse" id="fillMissingCustom">
- <div>
- <label for="columnReplacers" class="form-label">Unesite zamenu za svaku kolonu:</label>
- <div class="my-3" *ngIf="getSelectedColumnsArrayWithoutNullVals().length > 0" >
- <label class="text-center form-control mx-3 text-secondary">
+ <div class="collapse" id="fillMissingCustom">
+ <div>
+ <label for="columnReplacers" class="form-label">Unesite zamenu za svaku kolonu:</label>
+ <div class="my-3 " *ngIf="getSelectedColumnsArrayWithoutNullVals().length> 0">
+ <label class="text-center form-control mx-3 text-secondary">
Kolone <span style="font-style: italic;" *ngFor="let colname of getSelectedColumnsArrayWithoutNullVals(); let i = index">
<span *ngIf="i != getSelectedColumnsArrayWithoutNullVals().length - 1">{{colname}}, </span>
<span *ngIf="i == getSelectedColumnsArrayWithoutNullVals().length - 1">{{colname}} </span>
</span>
nemaju nedostajućih vrednosti za popunjavanje.
</label>
- </div>
- <div id="columnReplacers">
- <div *ngFor="let column of selectedColumnsInfoArray; let i = index" class="my-3">
- <div *ngIf="column.numNulls > 0">
- <span class="w-20 mx-3">
- {{column.columnName}}&nbsp;<span class="small" style="color:gray;">({{column.numNulls}} null)
- </span>
- </span>
-
- <label *ngIf="column.numNulls <= 0"
- class="text-center form-control mx-3 text-secondary">
- Ova kolona nema
- nedostajućih
- vrednosti.
- </label>
-
- <div *ngIf="column.numNulls > 0" class="d-flex flex-row justify-content-end">
- <div class="flex-grow-3 mx-3 me-auto">
- <div class="input-group">
- <div class="input-group-prepend">
- <label [for]="'fillCol_'+column.columnName" class="form-control">
+ </div>
+ <div id="columnReplacers">
+ <div *ngFor="let column of selectedColumnsInfoArray; let i = index" class="my-3">
+ <div *ngIf="column.numNulls > 0">
+ <span class="w-20 mx-3">
+ {{column.columnName}}&nbsp;
+ <span class="small" style="color:gray;">({{column.numNulls}} null)</span>
+ </span>
+
+ <div class="d-flex flex-row justify-content-end">
+ <div class="flex-grow-3 mx-3 me-auto">
+ <div class="input-group">
+ <div class="input-group-prepend">
+ <label [for]="'fillCol_'+column.columnName" class="form-control">
Zameni
<input type="radio" [id]="'fillCol_'+column.columnName"
[name]="'delOp_'+column.columnName">
</label>
- </div>
- <input type="text" class="form-control" [id]="'fillText_'+column.columnName"
- (keyup)="checkFillColRadio(column.columnName)"
- placeholder="Unesi vrednost...">
-
- <div class="input-group-append">
- <select [id]="'replaceOptions'+i" class="form-control btn-primary"
- *ngIf="column.isNumber" (change)="replace($event, column); checkFillColRadio(column.columnName);">
+ </div>
+ <input type="text" class="form-control" [id]="'fillText_'+column.columnName" (keyup)="checkFillColRadio(column.columnName)" placeholder="Unesi vrednost...">
+
+ <div class="input-group-append">
+ <select [id]="'replaceOptions'+i" class="form-control btn-primary" *ngIf="column.isNumber" (change)="replace($event, column); checkFillColRadio(column.columnName);">
<option
*ngFor="let option of Object.keys(ReplaceWith); let optionName of Object.values(ReplaceWith)"
[value]="option">
{{ optionName }}
</option>
</select>
- <select [id]="'replaceOptions'+i"
- class="form-control btn-outline-primary"
- *ngIf="!column.isNumber && column.numNulls > 0"
- (change)="replace($event, column); checkFillColRadio(column.columnName);">
+ <select [id]="'replaceOptions'+i" class="form-control btn-outline-primary" *ngIf="!column.isNumber && column.numNulls > 0" (change)="replace($event, column); checkFillColRadio(column.columnName);">
<option *ngFor="let option of column.uniqueValues" [value]="option">
{{ option }}
</option>
</select>
+ </div>
+ </div>
</div>
- </div>
- </div>
-
- <div class="flex-shrink-1 mx-3">
- <div class="input-group">
- <label class="form-control" [for]="'delCol_'+column.columnName">Izbriši
- kolonu
- <input type="radio" [id]="'delCol_'+column.columnName"
+
+ <div class="flex-shrink-1 mx-3">
+ <div class="input-group" *ngIf="column.columnName != this.experiment.outputColumn">
+ <label class="form-control" [for]="'delCol_'+column.columnName">Izbriši
+ kolonu
+ <input type="radio" [id]="'delCol_'+column.columnName"
[name]="'delOp_'+column.columnName"
- (change)="emptyFillTextInput(column.columnName)"></label>
- </div>
- </div>
-
- <div class="flex-shrink-1 mx-3">
- <div class="input-group">
- <label class="form-control" [for]="'delRows_'+column.columnName">Izbriši
+ (change)="emptyFillTextInput(column.columnName)">
+ </label>
+ </div>
+ <label class="form-control text-secondary" role="alert" *ngIf="column.columnName == this.experiment.outputColumn">
+ (Izlazna kolona)
+ </label>
+ </div>
+
+ <div class="flex-shrink-1 mx-3">
+ <div class="input-group">
+ <label class="form-control" [for]="'delRows_'+column.columnName">Izbriši
redove
<input type="radio" [id]="'delRows_'+column.columnName"
[name]="'delOp_'+column.columnName" checked
(change)="emptyFillTextInput(column.columnName)"></label>
+ </div>
+ </div>
</div>
</div>
</div>
@@ -165,96 +153,109 @@
</div>
</div>
</div>
- </div>
-
- <div id="randomOptions" class="mt-5">
- <div class="p-2 m-2">
- <label for="type" class="form-check-label">Želite li da redosled podataka bude nasumičan?</label>
- <input class="mx-3 form-check-input" type="checkbox" [(ngModel)]="experiment.randomOrder"
- type="checkbox" value="" checked>
- </div>
- <div class="border m-3">
- <div class="row p-2 m-2">
- <div class="col-4">
- <label for="splitYesNo" class="form-check-label">
+
+ <div id="randomOptions" class="mt-5">
+ <div class="p-2 m-2">
+ <label for="type" class="form-check-label">Želite li da redosled podataka bude nasumičan?</label>
+ <input class="mx-3 form-check-input" type="checkbox" [(ngModel)]="experiment.randomOrder" type="checkbox" value="" checked>
+ </div>
+ <div class="border m-3">
+ <div class="row p-2 m-2">
+ <div class="col-4">
+ <label for="splitYesNo" class="form-check-label">
<h3>Podela test skupa:&nbsp;&nbsp;
<input id="splitYesNo" class="form-check-input" type="checkbox"
[checked]="experiment.randomTestSet"
(change)="experiment.randomTestSet = !experiment.randomTestSet">
</h3>
</label>
+ </div>
+ <div class="col-8">
+ trening
+ <mat-slider style="width: 85%;" min="10" max="90" step="10" value="10" name="randomTestSetDistribution" thumbLabel [disabled]="!experiment.randomTestSet" [(ngModel)]="tempTestSetDistribution">
+ </mat-slider>
+ test
+ </div>
</div>
- <div class="col-8">
- trening
- <mat-slider style="width: 85%;" min="10" max="90" step="10" value="10"
- name="randomTestSetDistribution" thumbLabel [disabled]="!experiment.randomTestSet"
- [(ngModel)]="tempTestSetDistribution">
- </mat-slider>
- test
- </div>
- </div>
-
- <div class="row p-2 m-2">
- <label for="percentage" class="form-label">Procenat podataka koji se uzima za trening
+
+ <div class="row p-2 m-2">
+ <label for="percentage" class="form-label">Procenat podataka koji se uzima za trening
skup:</label>
- <input id="percentage" type="number" class="form-control mx-3" style=" max-width: 15%" min="10" max="90" step="10" value="90"
- [(ngModel)]="tempTestSetDistribution" [disabled]="!experiment.randomTestSet">
+ <input id="percentage" type="number" class="form-control mx-3" style=" max-width: 15%" min="10" max="90" step="10" value="90" [(ngModel)]="tempTestSetDistribution" [disabled]="!experiment.randomTestSet">
+ </div>
</div>
</div>
- </div>
-
- <div id="encodingForColumns" class="row px-3 my-5">
- <div class="col-1">
- <label for="encoding" class="col-form-label">Enkoding: </label>
- </div>
- <div class="col-2">
- <select id=encodingOptions class="form-control" name="encoding" [(ngModel)]="experiment.encoding">
- <option *ngFor="let option of Object.keys(Encoding); let optionName of Object.values(Encoding)"
- [value]="option">
- {{ optionName }}
- </option>
- </select>
+
+ <div id="encodingsForColumns" class="px-3 my-5">
+ <label for="encoding" class="col-form-label mb-2">Enkoding za izabrane kolone:</label>
+
+ <div class="row d-flex flex-row justify-content-between align-items-center">
+ <div class="col-5" *ngFor="let item of [].constructor(selectedColumnsInfoArray.length); let i = index">
+ <div class="input-group mb-2">
+ <div class="input-group-prepend">
+ <span class="input-group-text">{{selectedColumnsInfoArray[i].columnName}}</span>
+ </div>
+ <select [id]="'encodingOption_'+i" class="form-select" [(ngModel)]="experiment.encodings[i].encoding">
+ <option
+ *ngFor="let option of Object.keys(Encoding); let optionName of Object.values(Encoding)"
+ [value]="option">
+ {{ optionName }}
+ </option>
+ </select>
+ </div>
+ </div>
+ </div>
</div>
+
</div>
-
- </div>
- </div>
+ </div>
- <div class="carousel-item mt-2">
- <h2 class="mb-4">3. Dodaj eskperiment</h2>
+ <div class="carousel-item mt-2">
+ <h2 class="mb-4">3. Dodaj eksperiment</h2>
- <div class="row">
- <div class="col"></div>
- <div class="col-8">
- <label for="name" class="col-form-label">Naziv eksperimenta:</label>
- <input type="text" class="form-control mb-3" name="name" placeholder="Naziv..." [(ngModel)]="experiment.name">
-
- <label for="desc" class="col-sm-2 col-form-label">Opis:</label>
- <div>
- <textarea class="form-control" name="desc" rows="3" [(ngModel)]="experiment.description"></textarea>
- </div>
- <div class="form-group row mt-5 mb-3">
- <div class="col"></div>
- <button class="btn btn-lg col-4" style="background-color:#003459; color:white;" (click)="saveExperiment();">Sačuvaj
+ <div class="row">
+ <div class="col"></div>
+ <div class="col-8">
+ <label for="name" class="col-form-label">Naziv eksperimenta:</label>
+ <input type="text" class="form-control mb-3" name="name" placeholder="Naziv..." [(ngModel)]="experiment.name">
+
+ <label for="desc" class="col-sm-2 col-form-label">Opis:</label>
+ <div>
+ <textarea class="form-control" name="desc" rows="3" [(ngModel)]="experiment.description"></textarea>
+ </div>
+ <label for="desc" class="col-sm-2 col-form-label mt-3">Tip problema:</label>
+ <div class="col-4">
+ <select id="typeOptions" class="form-select" name="type" [(ngModel)]="experiment.type">
+ <option
+ *ngFor="let option of Object.keys(ProblemType); let optionName of Object.values(ProblemType)"
+ [value]="option">
+ {{ optionName }}
+ </option>
+ </select>
+ </div>
+ <div class="form-group row mt-5 mb-3">
+ <div class="col"></div>
+ <button class="btn btn-lg col-4" style="background-color:#003459; color:white;" (click)="saveExperiment();">Sačuvaj
eksperiment</button>
- <div class="col"></div>
+ <div class="col"></div>
+ </div>
</div>
+ <div class="col"></div>
</div>
- <div class="col"></div>
</div>
+
</div>
- </div>
- <div class="m-3 d-flex flex-row justify-content-between align-items-center" style=" margin-left: auto;">
- <button mat-fab color="primary" data-bs-target="#carouselExampleControls" data-bs-slide="prev">
- <mat-icon>arrow_backward</mat-icon>
- </button>
- <button mat-fab color="primary" data-bs-target="#carouselExampleControls" data-bs-slide="next">
- <mat-icon>arrow_forward</mat-icon>
- </button>
- </div>
+ <div class="m-3 d-flex flex-row align-items-center" style=" margin-left: auto;">
+ <button class="me-auto" *ngIf="carouselIndex != 0" mat-fab color="primary" data-bs-target="#carouselExampleControls" data-bs-slide="prev" (click)="updateCarouselIndex(carouselIndex - 1)">
+ <mat-icon>arrow_backward</mat-icon>
+ </button>
+ <button class="ms-auto" *ngIf="carouselIndex != 2" mat-fab color="primary" data-bs-target="#carouselExampleControls" data-bs-slide="next" (click)="updateCarouselIndex(carouselIndex + 1)">
+ <mat-icon>arrow_forward</mat-icon>
+ </button>
+ </div>
</div>
</div>
</div> \ No newline at end of file
diff --git a/frontend/src/app/experiment/experiment.component.ts b/frontend/src/app/experiment/experiment.component.ts
index b5e1d1f4..64adce3f 100644
--- a/frontend/src/app/experiment/experiment.component.ts
+++ b/frontend/src/app/experiment/experiment.component.ts
@@ -1,10 +1,14 @@
import { Component, OnInit } from '@angular/core';
import Experiment, { NullValReplacer, NullValueOptions, ReplaceWith, Encoding } from '../_data/Experiment';
-import Model from '../_data/Model';
+import Model,{ProblemType} from '../_data/Model';
import Dataset, { ColumnInfo } from '../_data/Dataset';
import { ModelsService } from '../_services/models.service';
import Shared from '../Shared';
import { ExperimentsService } from '../_services/experiments.service';
+import { ColumnEncoding } from '../_data/Experiment';
+import { Router } from '@angular/router';
+import { TrainingComponent } from '../training/training.component';
+import { NEVER, retryWhen } from 'rxjs';
@Component({
selector: 'app-experiment',
@@ -21,14 +25,16 @@ export class ExperimentComponent implements OnInit {
NullValueOptions = NullValueOptions;
ReplaceWith = ReplaceWith;
Encoding = Encoding;
+ ColumnEncoding = ColumnEncoding;
Object = Object;
-
+ ProblemType=ProblemType;
selectedColumnsInfoArray: ColumnInfo[] = [];
selectedNotNullColumnsArray: string[] = [];
tempTestSetDistribution = 90;
+ carouselIndex: number = 0;
- constructor(private modelsService: ModelsService, private experimentsService: ExperimentsService) {
+ constructor(private experimentsService: ExperimentsService, private router: Router) {
}
ngOnInit(): void {
@@ -38,6 +44,16 @@ export class ExperimentComponent implements OnInit {
this.selectedDataset = dataset;
this.selectedColumnsInfoArray = this.selectedDataset.columnInfo;
this.selectedNotNullColumnsArray = [];
+ this.experiment.outputColumn = this.selectedDataset.columnInfo[this.selectedDataset.columnInfo.length - 1].columnName;
+
+ this.resetColumnEncodings();
+ }
+
+ resetColumnEncodings() {
+ this.experiment.encodings = [];
+ for (let i = 0; i < this.selectedColumnsInfoArray.length; i++) {
+ this.experiment.encodings.push(new ColumnEncoding(this.selectedColumnsInfoArray[i].columnName, Encoding.Label));
+ }
}
getInputById(id: string): HTMLInputElement {
@@ -153,7 +169,7 @@ export class ExperimentComponent implements OnInit {
}
saveExperiment() {
- if (this.selectedDataset == undefined) {
+ if (this.selectedDataset == undefined) {
Shared.openDialog("Greška", "Izvor podataka nije izabran!");
return;
}
@@ -184,10 +200,9 @@ export class ExperimentComponent implements OnInit {
this.experimentsService.addExperiment(this.experiment).subscribe((response) => {
this.experiment = response;
- this.selectedColumnsInfoArray = [];
- this.selectedNotNullColumnsArray = [];
-
- Shared.openDialog("Obaveštenje", "Eksperiment je uspešno kreiran.");
+ Shared.openYesNoDialog("Obaveštenje", "Eksperiment je uspešno kreiran. Da li želite da pređete na treniranje modela?", () => {
+ this.router.navigate(['/training', this.experiment._id]);
+ });
}, (error) => {
if (error.error == "Experiment with this name exists") {
Shared.openDialog("Greška", "Eksperiment sa unetim nazivom već postoji u Vašoj kolekciji. Unesite neki drugi naziv.");
@@ -205,4 +220,23 @@ export class ExperimentComponent implements OnInit {
}
return counter;
}
+
+ updateCarouselIndex(newIndex: number) {
+ if (newIndex > 2)
+ newIndex = 2;
+ else if (newIndex < 0)
+ newIndex = 0;
+
+ if (this.carouselIndex == 0 && (newIndex == 1 || newIndex == 2))
+ this.checkRequiredData();
+ this.carouselIndex = newIndex;
+ }
+
+ checkRequiredData() {
+ if (this.selectedDataset == undefined) {
+ (<HTMLAnchorElement>document.getElementById("firstStep")).click();
+ Shared.openDialog("Pažnja", "Potrebno je da dodate ili izabere izvor podataka kako biste prešli na naredni korak (preprocesiranje).");
+ return;
+ }
+ }
}