From 4921fd48c358c11aa5d16d08bea4d0ab3f41272a Mon Sep 17 00:00:00 2001 From: Sonja Galovic Date: Tue, 29 Mar 2022 23:01:29 +0200 Subject: Add-model - popunjavanje nedostajucih vrednosti (medijana/srednja vrednost/rucni unos). Prikaz broja null vrednosti za izabrane kolone. Izlazna kolona dodata medju kolone za popunjavanje. --- .../app/_pages/add-model/add-model.component.html | 46 +++++++- .../app/_pages/add-model/add-model.component.ts | 119 +++++++++++++++++++-- 2 files changed, 154 insertions(+), 11 deletions(-) (limited to 'frontend/src/app/_pages') 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 @@ -
+

Izaberite ulazne kolone:

@@ -118,12 +118,15 @@
+
- {{column}} + {{column}} ({{calculateSumOfNullValuesInCol(column)}} null) - + + + + + + + +
+
+
@@ -348,4 +384,6 @@
-
\ No newline at end of file + + + \ 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 = 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"); (document.getElementById("selectInAndOuts")).scrollIntoView({ behavior: "smooth", block: "start", @@ -292,12 +293,116 @@ export class AddModelComponent implements OnInit { }); } + refreshThreeNullValueRadioOptions() { + //console.log((document.getElementById("delRows")).checked); + const input = document.getElementById('delRows'); + console.log(input); // 👉️ input#subscribe + +// ✅ Works + //input.checked = true; + (document.getElementById("delRows")).checked = true; + (document.getElementById("delCols")).checked = false; + (document.getElementById("replace")).checked = false; + } + + isChecked(someId: string) { //proveri ako je element sa datim ID-em cekiran + //console.log(someId); + //console.log((document.getElementById(someId)).checked); + return (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 ((document.getElementById("delRows")).checked) { //obrisi sve redove + this.newModel.nullValues = NullValueOptions.DeleteRows; + } + else if ((document.getElementById("delCols")).checked) { + this.newModel.nullValues = NullValueOptions.DeleteColumns; + } + else if ((document.getElementById("replace")).checked) { + this.newModel.nullValues = NullValueOptions.Replace;*/ + + //for petlje + + //} + + //proveri ova prva tri rba, ako je 3. cekiran, ide for petlja + //if ((document.getElementById("delCol_" + column)).checked) + + //for (let i = 0; i < this.datasetFile[0].length; i++) { //svi hederi + //let column = this.datasetFile[0][i]; + + //if ((document.getElementById("delCol_" + column)).checked) //obrisi celu kolonu + //var e = (document.getElementById("organization")).value; + //} + //} + + + return []; + } + getInputById(id: string): HTMLInputElement { return document.getElementById(id) as HTMLInputElement; } -- cgit v1.2.3 From bb76ad16528692c45585a6402ef6b6bca5864202 Mon Sep 17 00:00:00 2001 From: TAMARA JERINIC Date: Tue, 29 Mar 2022 23:40:25 +0200 Subject: Omogućen je grafički prikaz veštačke neuronske mreže za sve unete modele. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/app/_elements/annvisual/annvisual.component.ts | 13 ++++++++----- frontend/src/app/_pages/my-models/my-models.component.html | 1 + frontend/src/app/app.module.ts | 4 +++- 3 files changed, 12 insertions(+), 6 deletions(-) (limited to 'frontend/src/app/_pages') diff --git a/frontend/src/app/_elements/annvisual/annvisual.component.ts b/frontend/src/app/_elements/annvisual/annvisual.component.ts index ff5b45d6..8588537e 100644 --- a/frontend/src/app/_elements/annvisual/annvisual.component.ts +++ b/frontend/src/app/_elements/annvisual/annvisual.component.ts @@ -19,13 +19,13 @@ export class AnnvisualComponent implements OnInit { let hiddenlayerstring:string=''; let digraphstring:string='digraph {'; - for(let i=0;i'; + digraphstring=digraphstring+inputlayerstring+'->'; for(let j=0;j'; hiddenlayerstring=''; } digraphstring=digraphstring+'o}'; - alert(digraphstring); + graphviz('#graph').renderDot(digraphstring); } - + //'digraph {i0,i1,i2->h1,h2,h3->h21,h22,h23->o}' } + + + diff --git a/frontend/src/app/_pages/my-models/my-models.component.html b/frontend/src/app/_pages/my-models/my-models.component.html index b6926771..e2533d89 100644 --- a/frontend/src/app/_pages/my-models/my-models.component.html +++ b/frontend/src/app/_pages/my-models/my-models.component.html @@ -8,6 +8,7 @@
+
diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts index 5d7af9d2..4efab17e 100644 --- a/frontend/src/app/app.module.ts +++ b/frontend/src/app/app.module.ts @@ -38,6 +38,7 @@ import { DatatableComponent } from './_elements/datatable/datatable.component'; import { FilterDatasetsComponent } from './_pages/filter-datasets/filter-datasets.component'; import { ReactiveBackgroundComponent } from './_elements/reactive-background/reactive-background.component'; import { ItemModelComponent } from './_elements/item-model/item-model.component'; +import { AnnvisualComponent } from './_elements/annvisual/annvisual.component'; @NgModule({ declarations: [ @@ -65,7 +66,8 @@ import { ItemModelComponent } from './_elements/item-model/item-model.component' DatatableComponent, FilterDatasetsComponent, ReactiveBackgroundComponent, - ItemModelComponent + ItemModelComponent, + AnnvisualComponent ], imports: [ BrowserModule, -- cgit v1.2.3 From 476393d1530b261b8a145db2533262979558e064 Mon Sep 17 00:00:00 2001 From: Ognjen Cirkovic Date: Wed, 30 Mar 2022 12:10:29 +0200 Subject: Prilikom dodavanja javnom data seta omogucena promena imena i obavestenje u slucaju greske. --- .../src/app/_pages/filter-datasets/filter-datasets.component.ts | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'frontend/src/app/_pages') diff --git a/frontend/src/app/_pages/filter-datasets/filter-datasets.component.ts b/frontend/src/app/_pages/filter-datasets/filter-datasets.component.ts index f6b78ded..b75decf2 100644 --- a/frontend/src/app/_pages/filter-datasets/filter-datasets.component.ts +++ b/frontend/src/app/_pages/filter-datasets/filter-datasets.component.ts @@ -32,9 +32,18 @@ export class FilterDatasetsComponent implements OnInit { newDataset.isPublic = false; newDataset.lastUpdated = new Date(); newDataset.username = decodedToken.name; + let name=prompt("Unesite naziv dataset-a",newDataset.name); + newDataset.name=name as string; + if(name!=null && name!="") this.datasets.addDataset(newDataset).subscribe((response:string)=>{ console.log(response); + alert("Uspenso ste dodali dataset sa imenom "+newDataset.name); + },(error)=>{ + alert("Vec imate dataset sa istim imenom molim vas unesite drugo ime"); + + }); + }; } -- cgit v1.2.3