diff options
Diffstat (limited to 'frontend/src/app/_pages/add-model')
-rw-r--r-- | frontend/src/app/_pages/add-model/add-model.component.html | 46 | ||||
-rw-r--r-- | frontend/src/app/_pages/add-model/add-model.component.ts | 119 |
2 files changed, 154 insertions, 11 deletions
diff --git a/frontend/src/app/_pages/add-model/add-model.component.html b/frontend/src/app/_pages/add-model/add-model.component.html index 662d34de..28c84570 100644 --- a/frontend/src/app/_pages/add-model/add-model.component.html +++ b/frontend/src/app/_pages/add-model/add-model.component.html @@ -65,7 +65,7 @@ <!-- ULAZNE/IZLAZNE KOLONE --> <span id="selectInAndOuts"></span> - <div *ngIf="selectedDataset"> + <div *ngIf="selectedDataset && (showMyDatasets || (!showMyDatasets && datasetLoaded))"> <!--postignuto da se kod newdataseta ucita tabela pa ulazi/izlazi. ostalo srediti to kod mydatasets(dopuna 2. uslova)--> <div class="row"> <div class="col d-flex justify-content-center"> <h3>Izaberite ulazne kolone:</h3> @@ -118,12 +118,15 @@ <div> <label for="columnReplacers" class="form-label">Unesite zamenu za svaku kolonu:</label> <div id="columnReplacers"> + <!--Ulazne kolone - popunjavanje null vrednosti --> <div *ngFor="let column of selectedDataset.header; let i = index" class="my-3"> <div class="input-group row" *ngIf="getInputById('cb_'+column).checked"> <span class="input-group-text col-2 text-center"> - {{column}} + {{column}} <span class="small" style="color:gray;">({{calculateSumOfNullValuesInCol(column)}} null)</span> </span> - <input type="text" class="form-control col-2"> + <input type="text" class="form-control col-1" [id]="'fillText_'+column"> + <input type="radio" [id]="'fillCol_'+column" class="col-1" + [name]="'delOp_'+column"> <!--OVDE SREDI IZGLED--> <select [id]="'replaceOptions'+i" class="form-control col-2" *ngIf="isNumber(datasetFile[1][i])"> <option @@ -147,6 +150,39 @@ checked></label> </div> </div> + <!--Izlazna kolona - popunjavanje null vrednosti --> + <div *ngFor="let column of selectedDataset.header; let i = index" class="my-3"> <!--moze bez for petlje (this.selectedOutputColumnVal je id), al ne moze ova fja array column onda--> + <div class="input-group row" *ngIf="getInputById('rb_'+column).checked"> + <span class="input-group-text col-2 text-center"> + {{column}} <span class="small" style="color:gray;">({{calculateSumOfNullValuesInCol(column)}} null)</span> + </span> + <input type="text" class="form-control col-1" [id]="'fillText_'+column"> + <input type="radio" [id]="'fillCol_'+column" class="col-1" + [name]="'delOp_'+column"> <!--OVDE SREDI IZGLED--> + <select [id]="'replaceOptions'+i" class="form-control col-2" + *ngIf="isNumber(datasetFile[1][i])"> + <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 col-2" + *ngIf="!isNumber(datasetFile[1][i])"> + <option *ngFor="let option of arrayColumn(datasetFile, i)" + [value]="option"> + {{ option }} + </option> + </select> + <label class="form-control col-2" [for]="'delCol_'+column">Izbriši kolonu + <input type="radio" [id]="'delCol_'+column" + [name]="'delOp_'+column"></label> + <label class="form-control col-2" [for]="'delRows_'+column">Izbriši redove + <input type="radio" [id]="'delRows_'+column" [name]="'delOp_'+column" + checked></label> + </div> + </div> + </div> </div> </div> @@ -348,4 +384,6 @@ </div> </div> -</div>
\ No newline at end of file +</div> + +<button (click)="calculateMeanColValue('Age');calculateMedianColValue('Age');">DUGME</button>
\ No newline at end of file diff --git a/frontend/src/app/_pages/add-model/add-model.component.ts b/frontend/src/app/_pages/add-model/add-model.component.ts index 77a506d5..d47e7426 100644 --- a/frontend/src/app/_pages/add-model/add-model.component.ts +++ b/frontend/src/app/_pages/add-model/add-model.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, ViewChild } from '@angular/core'; -import Model, { ReplaceWith } from 'src/app/_data/Model'; +import Model, { NullValReplacer, ReplaceWith } from 'src/app/_data/Model'; import { ProblemType, Encoding, ActivationFunction, LossFunction, Optimizer, NullValueOptions } from 'src/app/_data/Model'; import { DatasetLoadComponent } from 'src/app/_elements/dataset-load/dataset-load.component'; import { ModelsService } from 'src/app/_services/models.service'; @@ -154,6 +154,8 @@ export class AddModelComponent implements OnInit { this.tempTestSetDistribution = 90; this.newModel.username = shared.username; + this.newModel.nullValuesReplacers = this.getNullValuesReplacersArray(); + this.models.addModel(this.newModel).subscribe((response) => { callback(response); }, (error) => { @@ -174,7 +176,7 @@ export class AddModelComponent implements OnInit { for (let i = 0; i < checkboxes.length; i++) { let thatCb = <HTMLInputElement>checkboxes[i]; - if (thatCb.checked == true && thatCb.disabled == false) + if (thatCb.checked == true) // && thatCb.disabled == false ne treba nam ovo vise this.newModel.inputColumns.push(thatCb.value); } //console.log(this.checkedInputCols); @@ -231,22 +233,21 @@ export class AddModelComponent implements OnInit { this.datasets.getDatasetFile(dataset.fileId).subscribe((file: string | undefined) => { if (file) { this.datasetFile = this.csv.csvToArray(file, (dataset.delimiter == "razmak") ? " " : (dataset.delimiter == "") ? "," : dataset.delimiter); - for (let i = this.datasetFile.length - 1; i >= 0; i--) { //moguce da je vise redova na kraju fajla prazno i sl. + /*for (let i = this.datasetFile.length - 1; i >= 0; i--) { //moguce da je vise redova na kraju fajla prazno i sl. if (this.datasetFile[i].length != this.datasetFile[0].length) this.datasetFile[i].pop(); else break; //nema potrebe dalje - } + }*/ console.log(this.datasetFile); + this.resetCbsAndRbs(); + //this.refreshThreeNullValueRadioOptions(); } }); //this.datasetHasHeader = false; - - this.resetCbsAndRbs(); } scrollToNextForm() { - console.log("USAO U SCROLL"); (<HTMLSelectElement>document.getElementById("selectInAndOuts")).scrollIntoView({ behavior: "smooth", block: "start", @@ -292,12 +293,116 @@ export class AddModelComponent implements OnInit { }); } + refreshThreeNullValueRadioOptions() { + //console.log((<HTMLInputElement>document.getElementById("delRows")).checked); + const input = document.getElementById('delRows'); + console.log(input); // 👉️ input#subscribe + +// ✅ Works + //input.checked = true; + (<HTMLInputElement>document.getElementById("delRows")).checked = true; + (<HTMLInputElement>document.getElementById("delCols")).checked = false; + (<HTMLInputElement>document.getElementById("replace")).checked = false; + } + + isChecked(someId: string) { //proveri ako je element sa datim ID-em cekiran + //console.log(someId); + //console.log((<HTMLInputElement>document.getElementById(someId)).checked); + return (<HTMLInputElement>document.getElementById(someId)).checked; + } + isNumber(value: string | number): boolean { return ((value != null) && (value !== '') && !isNaN(Number(value.toString()))); } + findIndexOfCol(colName: string) : number { + if (this.datasetFile) + for (let i = 0; i < this.datasetFile[0].length; i++) + if (colName === this.datasetFile[0][i]) + return i; + return -1; + } + calculateSumOfNullValuesInCol(colName: string): number { + //console.log(this.datasetFile); + if (this.datasetFile) { + let colIndex = this.findIndexOfCol(colName); + let sumOfNulls = 0; + for (let i = 1; i < this.datasetFile.length; i++) + if (this.datasetFile[i][colIndex] == '') + ++sumOfNulls; + //console.log(sumOfNulls); + return sumOfNulls; + } + return -1; + } + calculateMeanColValue(colName: string): number { + if (this.datasetFile) { + let colIndex = this.findIndexOfCol(colName); + let sum = 0; + let n = 0; + for (let i = 1; i < this.datasetFile.length; i++) + if (this.datasetFile[i][colIndex] != '') { + sum += Number(this.datasetFile[i][colIndex]); + ++n; + } + console.log(sum / n); + return sum / n; + } + return 0; + } + calculateMedianColValue(colName: string): number { + if (this.datasetFile) { + let array = []; + let colIndex = this.findIndexOfCol(colName); + for (let i = 1; i < this.datasetFile.length; i++) + if (this.datasetFile[i][colIndex] != '') + array.push(Number(this.datasetFile[i][colIndex])); + + array.sort(); + if (array.length % 2 == 0) + return array[array.length / 2 - 1] / 2; + else + return array[(array.length - 1) / 2]; + } + return 0; + } + + getNullValuesReplacersArray() : NullValReplacer[] { + /*let array: NullValReplacer[] = []; + + //za svaku kolonu + if (this.datasetFile) { + + if ((<HTMLInputElement>document.getElementById("delRows")).checked) { //obrisi sve redove + this.newModel.nullValues = NullValueOptions.DeleteRows; + } + else if ((<HTMLInputElement>document.getElementById("delCols")).checked) { + this.newModel.nullValues = NullValueOptions.DeleteColumns; + } + else if ((<HTMLInputElement>document.getElementById("replace")).checked) { + this.newModel.nullValues = NullValueOptions.Replace;*/ + + //for petlje + + //} + + //proveri ova prva tri rba, ako je 3. cekiran, ide for petlja + //if ((<HTMLInputElement>document.getElementById("delCol_" + column)).checked) + + //for (let i = 0; i < this.datasetFile[0].length; i++) { //svi hederi + //let column = this.datasetFile[0][i]; + + //if ((<HTMLInputElement>document.getElementById("delCol_" + column)).checked) //obrisi celu kolonu + //var e = (<HTMLInputElement>document.getElementById("organization")).value; + //} + //} + + + return []; + } + getInputById(id: string): HTMLInputElement { return document.getElementById(id) as HTMLInputElement; } |