Skip to content
Snippets Groups Projects
Commit c7a4ec5f authored by Christoph Olberding's avatar Christoph Olberding
Browse files

Update Imputer/fill_missing.py, Imputer/impute_mean.py,...

Update Imputer/fill_missing.py, Imputer/impute_mean.py, Imputer/impute_median.py, Imputer/sort_csv.py, UI/UI.py, UI/model.sav files
parent 7cac8c35
Branches
No related tags found
No related merge requests found
......@@ -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
......@@ -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,7 +45,7 @@ print('Mittlere Abweichung auf fehlende Daten: %e ' % (np.mean(np.abs(yDiff))))
#impute Dauer auf vorhandenen Daten
#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')
data.to_csv('data_filled(mean).csv') # Die gefülten Daten in einer neuen csv abspeichern
......@@ -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)
......
......@@ -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
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
UI/UI.py 0 → 100644
# -*- 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()
File added
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment