aboutsummaryrefslogtreecommitdiff
path: root/backend/microservice/zahtevikorisnika.py
diff options
context:
space:
mode:
authorDanijel Andjelkovic <adanijel99@gmail.com>2022-03-10 01:02:17 +0100
committerDanijel Andjelkovic <adanijel99@gmail.com>2022-03-10 01:02:17 +0100
commite5853148a7277f7c76153701671a7df022634150 (patch)
tree080e0d0cbed027007898ff918533253a6732cd46 /backend/microservice/zahtevikorisnika.py
parent400f0d32b919da62efd9e26d0fa7f506904f0073 (diff)
parent8f20a6e09f1bc4f55c396c14c163737cab48ad6d (diff)
Merge branch 'microservice' of http://gitlab.pmf.kg.ac.rs/igrannonica/neuronstellar into dev
Diffstat (limited to 'backend/microservice/zahtevikorisnika.py')
-rw-r--r--backend/microservice/zahtevikorisnika.py162
1 files changed, 162 insertions, 0 deletions
diff --git a/backend/microservice/zahtevikorisnika.py b/backend/microservice/zahtevikorisnika.py
new file mode 100644
index 00000000..dbea2fe6
--- /dev/null
+++ b/backend/microservice/zahtevikorisnika.py
@@ -0,0 +1,162 @@
+from sklearn.preprocessing import LabelEncoder
+import tensorflow as tf
+import pandas as pd
+import keras
+
+### 1)Ucitavanje vrednosti
+#print(1)
+data=pd.read_csv('titanic.csv')
+
+### U promenjivoj kolone nalaze se nazivi svih kolona seta podataka
+kolone=data.columns
+print(kolone[1])
+print(data[kolone[1]].isnull().sum())
+print(data[kolone[1]].head(10))
+
+### 2)Proveravanje svih kolona za null vrednosti i popunjavanje medijanom
+'''
+print(2)
+for i in range(len(kolone)):
+ if(data[kolone[i]].isnull().sum()>0):
+ print(data[kolone[i]].isnull().sum())
+ print(2.1)
+ podaci=data[kolone[i]].copy()
+ print(2.2)
+ prosek=podaci.mean()
+ print(prosek)
+ print(2.3)
+ data[kolone[i]].fillna(prosek)
+'''
+### 3)Pronalazak kategorijskih promenljivih
+#print(3)
+print(data[kolone[1]].dtypes)
+### 4)izbor tipa enkodiranja
+#print(4)
+enc=input("TIP ENKODIRANJA")
+### 5)Enkodiranje svih kategorijskih promenjivih label-encode metodom
+#print(5)
+if(enc=='label'):
+ from sklearn.preprocessing import LabelEncoder
+ encoder=LabelEncoder()
+ for k in range(len(kolone)):
+ if(data[kolone[k]].dtype=='object'):
+ data[kolone[k]]=encoder.fit_transform(data[kolone[k]])
+### 6)Enkodiranje svoh kategorijskih promenjivih onehot metodom
+
+elif(enc=='onehot'):
+ #print(6)
+ kategorijskekolone=[]
+ for k in range(len(kolone)):
+ if(data[kolone[k]].dtype=='object'):
+ ###U kategorijske kolone smestaju se nazivi svih kolona sa kategorijskim podacima
+ kategorijskekolone.append(kolone[k])
+
+ print(kategorijskekolone)
+ ### Enkodiranje
+ data=pd.get_dummies(data,columns=kategorijskekolone,prefix=kategorijskekolone)
+ print(data.head(10))
+
+### 7)Podela skupa na skup za trening i skup za testiranje
+###def prefiks(s):
+#
+#
+#print(7)
+
+predvidetikol=input("UNETI NAZIV KOLONE ČIJU VREDNOST TREBA PREDVIDETI")
+xk=[]
+yk=[]
+for k in range(len(kolone)):
+ if(kolone[k]!=predvidetikol):
+ ###U xk se smestaju nazivi kolona cije vrednosti nije potrebno predvideti !!!Prefiks one-hot!!!
+ xk.append(kolone[k])
+ ###U yk treba smestiti sve nazive kolona cije vrednosti treba predvideti, !!!ukoliko je radjeno one-hot enkodiranje, naziv kolone je promenjen, ima prefiks!!!
+ ###!!!FUNKCIJA ZA PREFIKS!!!
+ ###ili odrediti x i y, pa nakon toga izvrsiti enkodiranje???
+ '''elif(kolone[k]==predvidetikol):
+ yk.append(kolone[k])
+ '''
+###Podela na x i y
+###Dodavanje vrednosti u x
+x=data[xk].values
+###Dodavanje vrednosti u y, samo za label enkodiranje, bez prefiksa
+y=data[predvidetikol].values
+
+#print(data.head(10))
+print(data[xk].head(10))
+print(data[predvidetikol].head(10))
+
+###Unos velicina za trening i test skup
+trening=int(input('UNETI VELIČINU TRENING SKUPA'))
+#test=int(input("UNETI VELICINU TESTNOG SKUPA"))
+
+###Provera unetih velicina
+if(trening<0 or trening>100):
+ print("POGREŠAN UNOS VELIČINE SKUPA ZA TRENING")
+if(trening>1):
+ trening=trening/100
+'''
+if(test<0 or test>100):
+ print("POGREŠAN UNOS VELIČINE SKUPA ZA TEST")
+if(trening>1 and test>1):
+ trening=trening/100
+ test=test/100
+'''
+###Da li korisnik zeli nasumicno rasporedjivanje podataka?
+nasumicno=input("DA LI ŽELITE NASUMIČNO RASPOREDJIVANJE PODATAKA U TRENING I TEST SKUP?")
+###!!!Dugme za nasumici izbor
+if(nasumicno=='da'):
+ random=50
+else:
+ random=0
+
+
+from sklearn.model_selection import train_test_split
+x_train,x_test,y_train,y_test=train_test_split(x,y,train_size=trening,random_state=random)
+
+### 8)Skaliranje podataka
+from sklearn.preprocessing import StandardScaler
+scaler=StandardScaler()
+scaler.fit(x_train)
+x_test=scaler.transform(x_test)
+x_train=scaler.transform(x_train)
+
+#####ZAVRSENA PRIPREMA PODATAKA#####
+
+#####OBUCAVANJE MODELA#####
+
+### 9)Inicijalizacija vestacke neuronske mreze
+
+classifier=tf.keras.Sequential()
+
+### 10)Dodavanje prvog,ulaznog sloja
+aktivacijau=input("UNETI ŽELJENU AKTIVACIONU FUNKCIJU ULAZNOG SLOJA")
+brojnu=int(input("UNETI BROJ NEURONA ULAZNOG SLOJA"))
+classifier.add(tf.keras.layers.Dense(units=brojnu,activation=aktivacijau,input_dim=x_train.shape[1]))
+
+### 11)Dodavanje drugog, skrivenog sloja
+aktivacijas=input("UNETI ŽELJENU AKTIVACIONU FUNKCIJU SKRIVENOG SLOJA")
+brojns=int(input("UNETI BROJ NEURONA SKRIVENOG SLOJA"))
+classifier.add(tf.keras.layers.Dense(units=brojns,activation=aktivacijas))
+
+### 12) Dodavanje treceg, izlaznog sloja
+aktivacijai=input("UNETI ŽELJENU AKTIVACIONU FUNKCIJU IZLAZNOG SLOJA")
+classifier.add(tf.keras.layers.Dense(units=1,activation=aktivacijai))
+
+
+### 13) Kompajliranje neuronske mreze
+gubici=input("UNETI FUNKCIJU OBRADE GUBITAKA")
+optimizator=input("UNETI ŽELJENI OPTIMIZATOR")
+classifier.compile(optimizer=optimizator, loss=gubici,metrics = ['accuracy'])
+
+### 14)
+uzorci=int(input("UNETI KOLIKO UZORAKA ĆE BITI UNETO U ISTO VREME"))
+classifier.fit(x_train,y_train,batch_size=uzorci,epochs=50)
+
+### 15) Predvidjanje
+y_pred=classifier.predict(x_test)
+
+print(y_pred)
+
+
+
+