diff --git a/Imputer/fill_missing.py b/Imputer/fill_missing.py
index b433a3dc78e64c5e542a3962e2861746dae76ee6..e50f660b25c9b1231ed5491184189526d8df034d 100644
--- a/Imputer/fill_missing.py
+++ b/Imputer/fill_missing.py
@@ -8,14 +8,14 @@ Created on Fri Feb 26 12:57:45 2021
 import pandas as pd
 import numpy as np
 
-data = pd.read_csv('data.csv')
-data= data.iloc[:,1:]
-timeinterval=[0]
+data = pd.read_csv('data.csv') #einlesen der relevanten daten
+data= data.iloc[:,1:] # alter index filtern
+timeinterval=[0] # liste mit zeitintervalen erstellen
 minutes=[0]
 indexes=[]
 time=0
 minute=0
-for h in range(108):
+for h in range(108): # für den ganzen tag durchgehen und berechnen ab welchen sekunden man in welchem sende-interval ist
     h=h+1
     if (h<13 or (h>48 and h<63) or h>98):
         time=time + (30*60)
@@ -31,11 +31,11 @@ timeinterval=np.asarray(timeinterval)
 minutes=np.asarray(minutes)
 indexes=np.asarray(indexes)
 for h in range(np.asarray(timeinterval).shape[0]-1):    
-    data.loc[(data['time']>timeinterval[h]) & (data['time']<=timeinterval[h+1]), 'time'] = indexes[h] #data.loc[(data['time']>timeinterval[h]) & (data['time']<=timeinterval[h+1]), 'time'] = indexes[h] 
+    data.loc[(data['time']>timeinterval[h]) & (data['time']<=timeinterval[h+1]), 'time'] = indexes[h] #für jede sukundenanzahl das jeweilige interval einsetzen
 
 
 
-d=data.copy()
+d=data.copy()# ergänzen der Zeilen welche nicht erfasst worden sind
 for e in data['day_index'].unique(): # für alle verschiedenen tages_indexe
     day_data=data.loc[data['day_index'] == e] # nur die einzelnen Tage
     for h in indexes: #für alle zeit_indexe der tage  
@@ -49,4 +49,4 @@ for e in data['day_index'].unique(): # für alle verschiedenen tages_indexe
                 new_row={'Streckenvorhersage.ZielortID':k,'Streckenvorhersage.StartortID': 1,'Streckenvorhersage.Dauer':0,'time':h,'day_index':e ,'weekday':(data.loc[data['day_index']==e]).loc[(data.loc[data['day_index']==e]).index[0],'weekday']}
                 data = data.append(new_row, ignore_index=True)
             
-data.to_csv('data_unfilled.csv')
\ No newline at end of file
+data.to_csv('data_unfilled.csv') # die daten aufgefüllt mit leeren zeielen für die fehlenden einträge als neue csv abspeichern
diff --git a/Imputer/impute_mean.py b/Imputer/impute_mean.py
index 847d58a01cfaf496e32b8024f8fe4dfdeb670e5a..4e58abf89e8ca242899e7205d473566dcab432d5 100644
--- a/Imputer/impute_mean.py
+++ b/Imputer/impute_mean.py
@@ -29,8 +29,6 @@ Y_incmpl = data_incmpl['Streckenvorhersage.Dauer']
 
 
 #Prediction anhand vorhandener Daten
-
-
 myANN = Sequential()
 myANN.add(Dense(80, activation='relu', input_dim=X_cmpl.shape[1]))
 myANN.add(Dense(50,activation='relu'))
@@ -47,8 +45,8 @@ print('Mittlere Abweichung auf fehlende Daten: %e ' % (np.mean(np.abs(yDiff))))
 
 
 
-#impute Dauer auf vorhandenen Daten
-for index,row in data_incmpl.iterrows():
+#impute Dauer auf vorhandenen Daten indem er jede reihe durchgeht und den durchschnittswert den er in den Originaldaten hat berechnet.
+for index,row in data_incmpl.iterrows(): 
     relevant_data= data_cmpl[data_cmpl['time']==row['time']]
     data_incmpl.loc[index,'Streckenvorhersage.Dauer']=pd.DataFrame.mean(relevant_data['Streckenvorhersage.Dauer'])
     
@@ -57,8 +55,8 @@ data_incmpl = data_incmpl[~np.isnan(data_incmpl['Streckenvorhersage.Dauer'])] #
 X_incmpl = data_incmpl[['Streckenvorhersage.ZielortID','Streckenvorhersage.StartortID','time','weekday']]
 Y_incmpl = data_incmpl['Streckenvorhersage.Dauer']
 
-
-X_train, X_test, y_train, y_test = train_test_split(X_cmpl, Y_cmpl, test_size=0.35)
+#größere Testmenge aus den originaldaten suchen
+X_train, X_test, y_train, y_test = train_test_split(X_cmpl, Y_cmpl, test_size=0.2)
 y_train = pd.DataFrame(data=y_train,columns=['Streckenvorhersage.Dauer'])
 
 X_train=X_train.append(X_incmpl)
@@ -73,6 +71,7 @@ myANN.add(Dense(30,activation='relu'))
 myANN.add(Dense(1,activation='linear'))
 myANN.compile(loss='mean_squared_error', optimizer='adam')
 
+#ANN mit gefüllten Daten als trainingsmenge
 myANN.fit(X_train,y_train, epochs=100,shuffle=True,verbose=False)
 yp = myANN.predict(X_test)
 yp=np.squeeze(yp)
@@ -81,12 +80,12 @@ yDiff = yp - y_test
 print('Mittlere Abweichung mit aufgefüllten Daten(mean): %e ' % (np.mean(np.abs(yDiff))))
 
 
+#das Data-DateaFrame mit den gefüllten Daten füllen
 y_test = pd.DataFrame(data=y_test,columns=['Streckenvorhersage.Dauer'])
-
 X_all=X_train.append(X_test)
 y_all=pd.concat([y_train,y_test])
 data= X_all
 y_all= np.asarray(y_all)
 data['Streckenvorhersage.Dauer']=y_all
-data.to_csv('data_filled(mean).csv')
-    
\ No newline at end of file
+data.to_csv('data_filled(mean).csv') # Die gefülten Daten in einer neuen csv abspeichern
+    
diff --git a/Imputer/impute_median.py b/Imputer/impute_median.py
index 3d1ba7275ec687860989603d3321fd5115bb87a0..1511c07dcc896ca71f2d7227f645b3c5467e6b75 100644
--- a/Imputer/impute_median.py
+++ b/Imputer/impute_median.py
@@ -55,7 +55,7 @@ X_incmpl = data_incmpl[['Streckenvorhersage.ZielortID','Streckenvorhersage.Start
 Y_incmpl = data_incmpl['Streckenvorhersage.Dauer']
 
 #größere Testmenge aus den originaldaten suchen
-X_train, X_test, y_train, y_test = train_test_split(X_cmpl, Y_cmpl, test_size=0.35)
+X_train, X_test, y_train, y_test = train_test_split(X_cmpl, Y_cmpl, test_size=0.2)
 y_train = pd.DataFrame(data=y_train,columns=['Streckenvorhersage.Dauer'])
 
 X_train=X_train.append(X_incmpl)
@@ -87,4 +87,4 @@ data= X_all
 y_all= np.asarray(y_all)
 data['Streckenvorhersage.Dauer']=y_all
 data.to_csv('data_filled(median).csv') # Die gefülten Daten in einer neuen csv abspeichern
-    
\ No newline at end of file
+    
diff --git a/Imputer/sort_csv.py b/Imputer/sort_csv.py
index 4dbaea4be686b9434996e4118f673bf2137923b9..9a6faa3e1112127c78d269dd49bebb6cde3707e0 100644
--- a/Imputer/sort_csv.py
+++ b/Imputer/sort_csv.py
@@ -9,27 +9,24 @@ import pandas as pd
 import numpy as np
 
 
-data = pd.read_csv('db_dump.csv',delimiter=';')
-dumb=data.copy()
-relevantData= pd.DataFrame.copy(data[['Streckenvorhersage.ZielortID','Streckenvorhersage.StartortID','Streckenvorhersage.Dauer']])
-helpSeries= pd.DataFrame(np.zeros(relevantData.shape[0]))
-#relevantData['day']=helpSeries
-#relevantData['month']=helpSeries
-#relevantData['year']=helpSeries
-relevantData['time']=helpSeries
+data = pd.read_csv('db_dump.csv',delimiter=';')#Lese die Csv als Panda Dataframe ein
+relevantData= pd.DataFrame.copy(data[['Streckenvorhersage.ZielortID','Streckenvorhersage.StartortID','Streckenvorhersage.Dauer']]) # filtere die relevaten Daten
+helpSeries= pd.DataFrame(np.zeros(relevantData.shape[0])) # eine Spalte mit nullen für weitere ergänzten Spalten
+#Spalten ergänzen für Zeit, einen Index für den Tag und den einzelnen Wochentagen
+relevantData['time']=helpSeries      
 relevantData['day_index']=helpSeries
 relevantData['weekday']=helpSeries
 
-dates= data['Streckenvorhersage.Datum']
+dates= data['Streckenvorhersage.Datum'] # fürs bessere Arbeiten alle Datum-Einträge in ein Hilfs-Dataframe einlesen
 for d in range(dates.shape[0]):
-    toTest =  dates[d]
+    toTest =  dates[d]  #Aufteilen des Datums in die Bestandteile + zusammenrechnen der gesamt sekunden
     hours = toTest[11:13]
     minutes = toTest[14:16]
     seconds = int(toTest[17:19]) + int(hours)*60*60 + int(minutes)*60
     day = toTest[0:2]
     month = toTest[3:5]
     year = toTest[6:10]
-    day_index= int(day)+int(month)*31+int(year)*12
+    day_index= int(day)+int(month)*31+int(year)*49
     #relevantData.at[d,'month']= month
     #relevantData.at[d,'day']=day
     #relevantData.at[d,'year']=year
@@ -38,4 +35,4 @@ for d in range(dates.shape[0]):
     relevantData.at[d,'weekday']=pd.to_datetime(year+'-'+month+'-'+day)
     relevantData.at[d,'weekday']=relevantData.loc[d,'weekday'].dayofweek
 
-relevantData.to_csv('data.csv')
+relevantData.to_csv('data.csv')  # neue csv mit lediglich relevanten daten errstellen
diff --git a/UI/UI.py b/UI/UI.py
new file mode 100644
index 0000000000000000000000000000000000000000..42e9efaf4bfaab147626c2fdf58b2f7b589404bc
--- /dev/null
+++ b/UI/UI.py
@@ -0,0 +1,65 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Mon Mar 29 20:54:18 2021
+
+@author: Christoph
+"""
+import tkinter as tk
+import pickle
+import numpy as np
+from datetime import datetime,date
+
+OptionList = [
+"Hochschule Bochum",
+"Centro Oberhausen",
+"Unperfekthaus Essen",
+"Neanderthalmuseum",
+"Kö-Bogen",
+"Haus Kemnade",
+"ZOOM Erlebniswelt",
+"Villa Hügel",
+"Wallfahrt Neviges",
+"Ruhr Park",
+"Schloss Burg",
+"Haus Ruhrnatur"
+] 
+
+app = tk.Tk()
+
+app.geometry('300x600')
+
+variable = tk.StringVar(app)
+variable.set(OptionList[0])
+
+opt = tk.OptionMenu(app, variable, *OptionList)
+opt.config(width=90, font=('Helvetica', 32))
+opt.pack()
+
+opt.pack()
+array=np.array(["Hochschule Bochum","Centro Oberhausen","Unperfekthaus Essen","Neanderthalmuseum","Kö-Bogen","Haus Kemnade","ZOOM Erlebniswelt","Villa Hügel","Wallfahrt Neviges","Ruhr Park","Schloss Burg","Haus Ruhrnatur"]).reshape(-1,1)
+def berechne():
+    now = datetime.now()
+    today = date.today()
+    current_time = now.strftime("%H:%M:%S")
+    current_date = today.strftime("%d/%m/%Y")
+    Stunde=current_time[0:2]
+    Minute=current_time[3:5]
+    Jahr=current_date[6:]
+    Monat=current_date[3:5]
+    Tag=current_date[0:2]
+    Wochentag=datetime.today().weekday()
+    for d in range(12):
+        if (variable.get() == array[d,0]):
+            ZielortID=d+2
+    loaded_model = pickle.load(open('model.sav', 'rb'))
+    x_test=np.array([ZielortID,Jahr,Monat,Tag,Wochentag,Stunde,Minute]).reshape(1,-1)
+    result = loaded_model.predict(x_test)
+    lsum["text"]='Sie benötigen: '+str(result)[1:3]+' Minuten '+str(result)[3:5]+' Sekunden'
+    #print(str(result)[1:3]+' Minuten '+str(result)[3:5]+' Sekunden')
+    
+
+button = tk.Button(app, text="Berechnen", command=berechne, font= ('Helvetica', 26))
+button.pack()
+lsum = tk.Label(app, text = 'Sie benötigen: ',font = ('Helvetica', 26))
+lsum.pack()
+app.mainloop()
diff --git a/UI/model.sav b/UI/model.sav
new file mode 100644
index 0000000000000000000000000000000000000000..ea7e274060af82395e64cc710ba69c8ca9a8c171
Binary files /dev/null and b/UI/model.sav differ