From 50dcb34b7214a1aa370a7eb5349a2a6a1c77749a Mon Sep 17 00:00:00 2001 From: TAMARA JERINIC Date: Thu, 17 Mar 2022 14:51:53 +0100 Subject: Izmenjena je funkcija za obradu rezultata metrika na kraju svake epohe. --- backend/microservice/mlservice.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'backend/microservice/mlservice.py') diff --git a/backend/microservice/mlservice.py b/backend/microservice/mlservice.py index 01a79c1a..0a5f7db1 100644 --- a/backend/microservice/mlservice.py +++ b/backend/microservice/mlservice.py @@ -3,7 +3,7 @@ import pandas as pd import tensorflow as tf import keras import numpy as np - +import matplotlib.pyplot as plt from copyreg import constructor import flask from flask import request, jsonify, render_template @@ -31,8 +31,8 @@ class fCallback(tf.keras.callbacks.Callback): def on_epoch_end(self, epoch, logs=None): - print('Evaluation: ', self.model.evaluate(self.x_test)) - + print('Evaluation: ', self.model.evaluate(self.x_test,self.y_test),"\n")#broj parametara zavisi od izabranih metrika loss je default + def obuka(dataunos,params): import numpy as np @@ -208,7 +208,7 @@ def obuka(dataunos,params): classifier.add(tf.keras.layers.Dense(units=brojnu,activation=aktivacijau,input_dim=x_train.shape[1])) - ### 11)Dodavanje drugog, skrivenog sloja + ### 11)Dodavanje drugog, skrivenog sloja ###PART2### #aktivacijas=input("UNETI ŽELJENU AKTIVACIONU FUNKCIJU SKRIVENOG SLOJA ") #brojns=int(input("UNETI BROJ NEURONA SKRIVENOG SLOJA ")) @@ -234,7 +234,8 @@ def obuka(dataunos,params): optimizator=params["optimizer"] ### 13.1)Izbor metrike za kompajler PART2 - metrike=['mae','mse'] + metrike=['mae','mse','accuracy'] + #metrike=[] lossf=params["lossFunction"] ''' while(1): @@ -243,7 +244,7 @@ def obuka(dataunos,params): if(m=='KRAJ'): break metrike.append(m)''' - classifier.compile(optimizer=optimizator, loss=lossf,metrics =metrike) + classifier.compile(optimizer=optimizator, loss=lossf,metrics=metrike) performance_simple = fCallback(x_test, y_test) ### 14) #uzorci=int(input("UNETI KOLIKO UZORAKA ĆE BITI UNETO U ISTO VREME ")) @@ -258,7 +259,7 @@ def obuka(dataunos,params): metrikedf[metrike[i]]=history.history[metrike[i]] #print(history.history[metrike[i]]) #plt.plot(history.history[metrike[i]]) - #plt.show() + plt.show() #print(metrikedf) -- cgit v1.2.3 From c2875f84410ed610ac0f83f43323c2bcf4af17db Mon Sep 17 00:00:00 2001 From: TAMARA JERINIC Date: Thu, 17 Mar 2022 16:25:22 +0100 Subject: Izmene metrika. --- backend/microservice/mlservice.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'backend/microservice/mlservice.py') diff --git a/backend/microservice/mlservice.py b/backend/microservice/mlservice.py index 0a5f7db1..40dd691d 100644 --- a/backend/microservice/mlservice.py +++ b/backend/microservice/mlservice.py @@ -11,7 +11,7 @@ from sklearn.preprocessing import LabelEncoder import csv import json class Response: - def __init__(self,tacnost,preciznost,recall,spec,f1,mse,mae,mape,rmse,fpr,tpr): + def __init__(self,tacnost,preciznost,recall,spec,f1,mse,mae,mape,rmse): self.tacnost=tacnost self.preciznost=preciznost @@ -22,8 +22,7 @@ class Response: self.mae=mae self.mape=mape self.rmse=rmse - self.fpr=fpr - self.tpr=tpr + class fCallback(tf.keras.callbacks.Callback): def __init__(self, x_test, y_test): self.x_test = x_test @@ -102,6 +101,8 @@ def obuka(dataunos,params): elif(tippodataka==np.object_): najcescavrednost=kolona.value_counts().index[0] data[kolone[i]]=data[kolone[i]].fillna(najcescavrednost) + + kolone=data.columns ### 3)Izbacivanje kolona koje ne uticu na rezultat PART2 nredova=data.shape[0] @@ -234,7 +235,7 @@ def obuka(dataunos,params): optimizator=params["optimizer"] ### 13.1)Izbor metrike za kompajler PART2 - metrike=['mae','mse','accuracy'] + metrike=params['metrics'] #metrike=[] lossf=params["lossFunction"] ''' @@ -346,8 +347,9 @@ def obuka(dataunos,params): plt.show() ''' - r=Response(tacnost,preciznost,recall,spec,f1,mse,mae,mape,rmse,fpr,tpr) - + r=Response(float(tacnost),float(preciznost),float(recall),float(spec),float(f1),float(mse),float(mae),float(mape),float(rmse)) + import jsonpickle + return json.dumps(json.loads(jsonpickle.encode(r)), indent=2) return "Done" -- cgit v1.2.3 From d993e28caf5bcc083338c77bf161d192aaf6a98d Mon Sep 17 00:00:00 2001 From: TAMARA JERINIC Date: Sun, 20 Mar 2022 00:42:15 +0100 Subject: Omogućeni su učitavanje i čuvanje h5 fajla. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/microservice/PythonServer/project/api/api.py | 15 +++++++++++---- backend/microservice/mlservice.py | 18 ++++++++++++++---- 2 files changed, 25 insertions(+), 8 deletions(-) (limited to 'backend/microservice/mlservice.py') diff --git a/backend/microservice/PythonServer/project/api/api.py b/backend/microservice/PythonServer/project/api/api.py index b2fb503b..75df26b8 100644 --- a/backend/microservice/PythonServer/project/api/api.py +++ b/backend/microservice/PythonServer/project/api/api.py @@ -8,6 +8,7 @@ import keras import csv import json import mlservice +import h5py from mlservice import obuka app = flask.Flask(__name__) @@ -21,8 +22,14 @@ def index(): @app.route('/data', methods = ['GET', 'POST']) def data(): if request.method == 'POST': - f = request.json['filepath'] - data = pd.read_csv(f) - print(data) - return obuka(data,request.json) + print(request.json['filepath']) + f = request.json['filepath'] + + data1 = pd.read_csv(f) + + m=request.json['modelpath'] + model=tf.keras.models.load_model(m) + + #print(data) + return obuka(data1,request.json,model) app.run() \ No newline at end of file diff --git a/backend/microservice/mlservice.py b/backend/microservice/mlservice.py index 40dd691d..a244e700 100644 --- a/backend/microservice/mlservice.py +++ b/backend/microservice/mlservice.py @@ -1,3 +1,4 @@ +from statistics import mode from typing_extensions import Self import pandas as pd import tensorflow as tf @@ -10,6 +11,7 @@ from flask import request, jsonify, render_template from sklearn.preprocessing import LabelEncoder import csv import json +import h5py class Response: def __init__(self,tacnost,preciznost,recall,spec,f1,mse,mae,mape,rmse): @@ -33,12 +35,16 @@ class fCallback(tf.keras.callbacks.Callback): print('Evaluation: ', self.model.evaluate(self.x_test,self.y_test),"\n")#broj parametara zavisi od izabranih metrika loss je default -def obuka(dataunos,params): +def obuka(dataunos,params,modelunos): import numpy as np import pandas as pd import tensorflow as tf import matplotlib.pyplot as plt - + ### -1) Ucitavanje h5 modela PART3 + if(modelunos!=None): + # print("Model je unet") + model=modelunos + ### 0) Pretvaranje data seta u novi, sa kolonama koje je korisnik izabrao za obuku data=pd.DataFrame() @@ -47,6 +53,7 @@ def obuka(dataunos,params): data[zeljenekolone[i]]=dataunos[zeljenekolone[i]] #print(data.head(10)) + #predvidetikol=input("UNETI NAZIV KOLONE ČIJU VREDNOST TREBA PREDVIDETI ") ###sta se cuva od promenjivih broj kolone ili naziv kolone??? predvidetikol=params["columnToPredict"] @@ -346,10 +353,13 @@ def obuka(dataunos,params): plt.ylabel('True Positive Rate') plt.show() ''' - + ##### H5 CUVANJE ##### PART3 + nazivmodela=params['h5ModelName'] + classifier.save(nazivmodela, save_format='h5') + r=Response(float(tacnost),float(preciznost),float(recall),float(spec),float(f1),float(mse),float(mae),float(mape),float(rmse)) import jsonpickle - return json.dumps(json.loads(jsonpickle.encode(r)), indent=2) + return json.dumps(json.loads(jsonpickle.encode(r)), indent=2) return "Done" -- cgit v1.2.3 From 6a98bcbf6a29f3b6b5dd87e0c4a57b7d3e0e3974 Mon Sep 17 00:00:00 2001 From: TAMARA JERINIC Date: Sun, 20 Mar 2022 23:48:20 +0100 Subject: Dodata je mogućnost učitavanja i preprocesiranja seta podataka za predikciju. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/microservice/mlservice.py | 107 +++++++++++++++++++++++++++++++++++--- 1 file changed, 99 insertions(+), 8 deletions(-) (limited to 'backend/microservice/mlservice.py') diff --git a/backend/microservice/mlservice.py b/backend/microservice/mlservice.py index a244e700..9b6b3789 100644 --- a/backend/microservice/mlservice.py +++ b/backend/microservice/mlservice.py @@ -33,16 +33,16 @@ class fCallback(tf.keras.callbacks.Callback): def on_epoch_end(self, epoch, logs=None): print('Evaluation: ', self.model.evaluate(self.x_test,self.y_test),"\n")#broj parametara zavisi od izabranih metrika loss je default - - + def obuka(dataunos,params,modelunos): import numpy as np import pandas as pd import tensorflow as tf import matplotlib.pyplot as plt + import keras ### -1) Ucitavanje h5 modela PART3 if(modelunos!=None): - # print("Model je unet") + print("Model je unet") model=modelunos ### 0) Pretvaranje data seta u novi, sa kolonama koje je korisnik izabrao za obuku @@ -287,13 +287,20 @@ def obuka(dataunos,params,modelunos): #print(y_test) ### 15.2) Kreiranje DataFrame-a u kom se nalaze kolone koje predstavljaju stvarne i predvidjene vrednosti, potrebne za iscrtavanje grafika i metrike PART2 - #rezultat=pd.DataFrame({"Stvarna vrednost ":y_test,"Predvidjena vrednost":y_pred}) + rezultatzametrike=pd.DataFrame({"Stvarna vrednost ":y_test,"Predvidjena vrednost":y_pred}) #print(rezultat.head(20)) + ##### H5 CUVANJE ##### PART3 + nazivmodela=params['h5ModelName'] + classifier.save(nazivmodela, save_format='h5') + + + + #####METRIKE##### PART2 import sklearn.metrics as sm - + ### 16)Tacnost tacnost=sm.accuracy_score(y_test,y_pred) @@ -353,9 +360,7 @@ def obuka(dataunos,params,modelunos): plt.ylabel('True Positive Rate') plt.show() ''' - ##### H5 CUVANJE ##### PART3 - nazivmodela=params['h5ModelName'] - classifier.save(nazivmodela, save_format='h5') + r=Response(float(tacnost),float(preciznost),float(recall),float(spec),float(f1),float(mse),float(mae),float(mape),float(rmse)) import jsonpickle @@ -363,3 +368,89 @@ def obuka(dataunos,params,modelunos): return "Done" +##### UCITAVANJE DRUGOG SETA PODATAKA ##### PART3 +def ucitavanjeipreprocesiranjedrugog(dataunosdrugog,params): + data2=dataunosdrugog.copy() + + + ### 1)Unos drugog seta i odstranjivanje nezeljenih kolona + data2=pd.DataFrame() + zeljenekolone2=params["inputColumns"] + for i in range(len(zeljenekolone2)): + data2[zeljenekolone2[i]]=dataunosdrugog[zeljenekolone2[i]] + + ### 2)Izbor kolona + kolone=data2.columns + + ### 3)NULL vrednosti + brisanje='ne' + if(brisanje=='da'): + data2=data2.dropna(axis=1) + elif(brisanje=='ne'): + # brisanjer=input("DA LI ZELITE DA IZBRISETE SVE REDOVE SA NULL VREDNOSTIMA? ") + brisanjer='ne' + if(brisanjer=='da'): + data2=data2.dropna() + elif(brisanjer=='ne'): + + for i in range(len(kolone)): + + if(data2[kolone[i]].isnull().any()): + tippodataka=data2[kolone[i]].dtype + kolona=data2[kolone[i]].copy() + + if(tippodataka==np.float64 or tippodataka==np.int64): + #popunjavanje=input("UNETI NACIN POPUNJAVANJA PROMENJIVIH SA NULL VREDNOSTIMA ") + popunjavanje='medijana' + if(popunjavanje=='medijana'): + medijana=kolona.mean() + data2[kolone[i]]=data2[kolone[i]].fillna(medijana) + if(popunjavanje=='srednjavrednost'): + sv=data2[kolone[i]].sum()/data2[kolone[i]].count() + data2[kolone[i]]=sv + if(popunjavanje=='brisanjekolone'): + data2=data2.dropna(axis=1) + + elif(tippodataka==np.object_): + najcescavrednost=kolona.value_counts().index[0] + data2[kolone[i]]=data2[kolone[i]].fillna(najcescavrednost) + + kolone=data2.columns + + ### 4)Enkodiranje + enc=params["encoding"] + + ### 5)Label + + if(enc=='label'): + from sklearn.preprocessing import LabelEncoder + encoder2=LabelEncoder() + for k in range(len(kolone)): + if(data2[kolone[k]].dtype==np.object_): + data2[kolone[k]]=encoder2.fit_transform(data2[kolone[k]]) + #print(data.head(20)) + + ### 6)Onehot + + elif(enc=='onehot'): + ### PART2### + + kategorijskekolone=[] + for k in range(len(kolone)): + if(data2[kolone[k]].dtype==np.object_): + + kategorijskekolone.append(kolone[k]) ###U kategorijske kolone smestaju se nazivi svih kolona sa kategorijskim podacima + + #print(kategorijskekolone) + + ### Enkodiranje + data2=pd.get_dummies(data2,columns=kategorijskekolone,prefix=kategorijskekolone) + #print(data.head(10)) + predvidetikol=params["columnToPredict"] + kolone=data2.columns ### Azuriranje kolona nakon moguceg dodavanja + xkolone=[] + for k in range(len(kolone)): + if(kolone[k]!=predvidetikol): + xkolone.append(kolone[k]) + + x2=data2[xkolone].values() -- cgit v1.2.3 From ab2c4e59a7b187bf84cabeb03f5b9575de5fe0ee Mon Sep 17 00:00:00 2001 From: TAMARA JERINIC Date: Thu, 24 Mar 2022 15:17:50 +0100 Subject: Dodata mogučnost učitavanja i preprocesiranja fajla za predikciju, izmenjena je funkcija za obradu null vrednosti, izmenjen je api.py fajl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../microservice/PythonServer/project/api/api.py | 8 +- backend/microservice/mlservice.py | 196 +++++++++++++++------ 2 files changed, 147 insertions(+), 57 deletions(-) (limited to 'backend/microservice/mlservice.py') diff --git a/backend/microservice/PythonServer/project/api/api.py b/backend/microservice/PythonServer/project/api/api.py index 75df26b8..4768f34c 100644 --- a/backend/microservice/PythonServer/project/api/api.py +++ b/backend/microservice/PythonServer/project/api/api.py @@ -9,7 +9,8 @@ import csv import json import mlservice import h5py -from mlservice import obuka +from mlservice2 import unositok + app = flask.Flask(__name__) app.config["DEBUG"] = True @@ -27,9 +28,12 @@ def data(): data1 = pd.read_csv(f) + d2=request.json['filepath2'] + data2=pd.read_csv(d2) + m=request.json['modelpath'] model=tf.keras.models.load_model(m) #print(data) - return obuka(data1,request.json,model) + return unositok(data1,data2,request.json,model) app.run() \ No newline at end of file diff --git a/backend/microservice/mlservice.py b/backend/microservice/mlservice.py index 9b6b3789..3385a18e 100644 --- a/backend/microservice/mlservice.py +++ b/backend/microservice/mlservice.py @@ -34,13 +34,14 @@ class fCallback(tf.keras.callbacks.Callback): def on_epoch_end(self, epoch, logs=None): print('Evaluation: ', self.model.evaluate(self.x_test,self.y_test),"\n")#broj parametara zavisi od izabranih metrika loss je default -def obuka(dataunos,params,modelunos): +def obuka(dataunos,params,modelunos,dataunosdrugog): import numpy as np import pandas as pd import tensorflow as tf import matplotlib.pyplot as plt import keras ### -1) Ucitavanje h5 modela PART3 + if(modelunos!=None): print("Model je unet") model=modelunos @@ -75,7 +76,7 @@ def obuka(dataunos,params,modelunos): ### 2)Proveravanje svih kolona za null vrednosti i popunjavanje medijanom ili srednjom vrednosti ili birisanje #####Part2 ##### - + ''' #brisanje=input("DA LI ZELITE DA IZBRSETE SVE KOLONE SA NULL VREDNOSTIMA? ") brisanje='ne' if(brisanje=='da'): @@ -108,39 +109,97 @@ def obuka(dataunos,params,modelunos): elif(tippodataka==np.object_): najcescavrednost=kolona.value_counts().index[0] data[kolone[i]]=data[kolone[i]].fillna(najcescavrednost) + ''' + + nullreplace=[ + {"column":"Embarked","value":"C","deleteRow":"0","deleteCol":"0"}, + {"column": "Cabin","value":"C123","deleteRow":"0","deleteCol":"0"}] + + + nullopt=params["NullValueOptions"] + + zamena=nullreplace + nulldf=pd.DataFrame(zamena) + nulldf=nulldf.transpose() + nredova=data.shape[0] + if(nullopt=='replace'): + + + p=0 + + while(1): + if(p in nulldf.columns): + print("3") + parametri=nulldf[p] + print(parametri) + #print(data[parametri['column']]) + col=parametri['column'] + print(col) + val=parametri['value'] + print(val) + if(data[col].isnull().any()): + + if(parametri['value']!='0'): + + print(data[parametri['column']]) + data[parametri['column']]=data[parametri['column']].fillna(val) + print(data[parametri['column']]) + elif(parametri['deleteRow']==1): + data=data.dropna(subset=[col]) + print("brisi") + + + elif(parametri['deleteCol']==1): + data.pop(col) + p+=1 + continue + else: + break + + elif(nullopt=='deleteRow'): + data=data.dropna() + + elif(nullopt=='deleteCol'): + data=data.dropna() + + print(data.isnull().any()) + + kolone=data.columns - + print("null done") ### 3)Izbacivanje kolona koje ne uticu na rezultat PART2 nredova=data.shape[0] + for i in range(len(kolone)): - if((data[kolone[i]].nunique()>(nredova/2)) and( data[kolone[i]].dtype==np.object_)): + if((data[kolone[i]].nunique()==(nredova)) and( data[kolone[i]].dtype==np.object_)): data.pop(kolone[i]) #print(data.head(10)) ### 4)izbor tipa enkodiranja kolone=data.columns ### Azuriranje postojecih kolona nakon moguceg brisanja - + #enc=input("UNETI TIP ENKODIRANJA ") enc=params["encoding"] - onehot=0 - + + ### 5)Enkodiranje svih kategorijskih promenjivih label-encode metodom - + if(enc=='label'): + from sklearn.preprocessing import LabelEncoder encoder=LabelEncoder() for k in range(len(kolone)): if(data[kolone[k]].dtype==np.object_): data[kolone[k]]=encoder.fit_transform(data[kolone[k]]) #print(data.head(20)) - + ### 6)Enkodiranje svih kategorijskih promenjivih onehot metodom elif(enc=='onehot'): - ### PART2### - onehot==1 + ### PART2 ### + kategorijskekolone=[] for k in range(len(kolone)): if(data[kolone[k]].dtype==np.object_): @@ -148,7 +207,7 @@ def obuka(dataunos,params,modelunos): kategorijskekolone.append(kolone[k]) ###U kategorijske kolone smestaju se nazivi svih kolona sa kategorijskim podacima #print(kategorijskekolone) - + ### Enkodiranje data=pd.get_dummies(data,columns=kategorijskekolone,prefix=kategorijskekolone) #print(data.head(10)) @@ -199,8 +258,10 @@ def obuka(dataunos,params,modelunos): x_test=scaler.transform(x_test) x_train=scaler.transform(x_train) + ### 9)CUVANJE IZLAZNIH PODATAKA PART3 + #####ZAVRSENA PRIPREMA PODATAKA##### - + #####OBUCAVANJE MODELA##### ### 9)Inicijalizacija vestacke neuronske mreze @@ -245,13 +306,7 @@ def obuka(dataunos,params,modelunos): metrike=params['metrics'] #metrike=[] lossf=params["lossFunction"] - ''' - while(1): - m=params['lossFunction'] - - if(m=='KRAJ'): - break - metrike.append(m)''' + classifier.compile(optimizer=optimizator, loss=lossf,metrics=metrike) performance_simple = fCallback(x_test, y_test) ### 14) @@ -260,7 +315,7 @@ def obuka(dataunos,params,modelunos): uzorci=params["batchSize"] epohe=params["epochs"] history=classifier.fit(x_train,y_train,batch_size=uzorci,epochs=epohe,callbacks=[performance_simple],validation_split=0.2) - + ### 14.1)Parametri grafika iz history PART2 metrikedf=pd.DataFrame() ###DataFrame u kom se nalaze podaci o rezultatima metrika za iscrtavanje na grafiku. Svaka kolona sadrzi vrednost metrike po epohama for i in range(len(metrike)): @@ -360,15 +415,16 @@ def obuka(dataunos,params,modelunos): plt.ylabel('True Positive Rate') plt.show() ''' - + + r=Response(float(tacnost),float(preciznost),float(recall),float(spec),float(f1),float(mse),float(mae),float(mape),float(rmse)) import jsonpickle return json.dumps(json.loads(jsonpickle.encode(r)), indent=2) - return "Done" +#####KRAJ OBUKE JEDNOG##### -##### UCITAVANJE DRUGOG SETA PODATAKA ##### PART3 +##### UCITAVANJE I OBUKA DRUGOG SETA PODATAKA ##### PART3 def ucitavanjeipreprocesiranjedrugog(dataunosdrugog,params): data2=dataunosdrugog.copy() @@ -383,38 +439,56 @@ def ucitavanjeipreprocesiranjedrugog(dataunosdrugog,params): kolone=data2.columns ### 3)NULL vrednosti - brisanje='ne' - if(brisanje=='da'): - data2=data2.dropna(axis=1) - elif(brisanje=='ne'): - # brisanjer=input("DA LI ZELITE DA IZBRISETE SVE REDOVE SA NULL VREDNOSTIMA? ") - brisanjer='ne' - if(brisanjer=='da'): - data2=data2.dropna() - elif(brisanjer=='ne'): - - for i in range(len(kolone)): - - if(data2[kolone[i]].isnull().any()): - tippodataka=data2[kolone[i]].dtype - kolona=data2[kolone[i]].copy() - - if(tippodataka==np.float64 or tippodataka==np.int64): - #popunjavanje=input("UNETI NACIN POPUNJAVANJA PROMENJIVIH SA NULL VREDNOSTIMA ") - popunjavanje='medijana' - if(popunjavanje=='medijana'): - medijana=kolona.mean() - data2[kolone[i]]=data2[kolone[i]].fillna(medijana) - if(popunjavanje=='srednjavrednost'): - sv=data2[kolone[i]].sum()/data2[kolone[i]].count() - data2[kolone[i]]=sv - if(popunjavanje=='brisanjekolone'): - data2=data2.dropna(axis=1) - - elif(tippodataka==np.object_): - najcescavrednost=kolona.value_counts().index[0] - data2[kolone[i]]=data2[kolone[i]].fillna(najcescavrednost) + nullreplace=[ + {"column":"Embarked","value":"C","deleteRow":"0","deleteCol":"0"}, + {"column": "Cabin","value":"C123","deleteRow":"0","deleteCol":"0"}] + + + nullopt=params["NullValueOptions"] + + zamena=nullreplace + + nulldf=pd.DataFrame(zamena) + nulldf=nulldf.transpose() + if(nullopt=='replace'): + + + p=0 + + while(1): + if(p in nulldf.columns): + print("3") + parametri=nulldf[p] + print(parametri) + #print(data[parametri['column']]) + col=parametri['column'] + print(col) + + if(data2[col].isnull().any()): + + #print(parametri['value']) + if(parametri['value']!=''): + data2[col]=data2[col].fillna(parametri["value"]) + + elif(parametri['deleteRow']==1): + data2=data2.dropna(subset=[col]) + print("brisi") + + + elif(parametri['deleteCol']==1): + data2.pop(col) + p+=1 + continue + else: + break + + elif(nullopt=='deleteRow'): + data2=data2.dropna() + + elif(nullopt=='deleteCol'): + data2=data2.dropna() + kolone=data2.columns ### 4)Enkodiranje @@ -454,3 +528,15 @@ def ucitavanjeipreprocesiranjedrugog(dataunosdrugog,params): xkolone.append(kolone[k]) x2=data2[xkolone].values() + print(x2) + return x2 + #####OBUCAVANJE MODELA##### + + +def unositok(dataunos,dataunosdrugi,params,model): + data=obuka(dataunos,params,model,dataunosdrugi) + return(data) + + + + \ No newline at end of file -- cgit v1.2.3