Browse Source

manhattan

master
bollet.c 6 months ago
parent
commit
12e4f345cf
  1. 7
      ihm.py
  2. 23
      knn.py
  3. 5
      test.py

7
ihm.py

@ -51,6 +51,10 @@ class Interface(tk.Frame):
self.choix_date = DateSelection(param)
self.choix_temp_moy = TemperatureSelection(param, "Température moyenne")
self.choix_temp_ref = TemperatureSelection(param, "Température de référence")
self.EuclidOrManhattan = tk.IntVar()
tk.Radiobutton(tabTest, text="Distance euclidienne", variable=self.EuclidOrManhattan, value=1).pack()
tk.Radiobutton(tabTest, text="Distance de manhattan", variable=self.EuclidOrManhattan, value=0).pack()
btn_entrer = tk.Button(tabTest, text='Tester', command=lambda : self.affResTest(tabRes))
btn_entrer.pack()
@ -67,8 +71,9 @@ class Interface(tk.Frame):
date_choisie = self.choix_date.get()
temperature_moyenne = self.choix_temp_moy.get()
temperature_ref = self.choix_temp_ref.get()
isEuclideanDistance = self.EuclidOrManhattan.get()
res = str(lancerTest(k, (date_choisie, temperature_moyenne, temperature_ref)))
res = str(lancerTest(k, (date_choisie, temperature_moyenne, temperature_ref), isEuclideanDistance))
self.affichage_resultats['text'] = "La consommation électrique \nprévue est de " + res + " MW."
self.tabs.select(tab)

23
knn.py

@ -7,7 +7,7 @@ def ecartDate(date1, date2):
secParJour = 86400
return delta_sec / secParJour
def distance(point1, point2):
def distance_euclide(point1, point2):
"""Prend en paramètre 2 tuples au format
(Date du jour, Température moyenne, température de référence)
et qui renvoie un nombre réel représentant
@ -19,15 +19,34 @@ def distance(point1, point2):
return duree**2/100 + delta_T_moy**2 + delta_T_ref**2
def distance_manhattan(point1, point2):
"""Prend en paramètre 2 tuples au format
(Date du jour, Température moyenne, température de référence)
et qui renvoie un nombre réel représentant
la distance de Manhattan entre ces deux points"""
duree = abs(ecartDate(point1[0], point2[0]))
delta_T_moy = abs(point1[1]-point2[1])
delta_T_ref = abs(point1[2]-point2[2])
return duree/100 + delta_T_moy + delta_T_ref
def kPlusProches(point_a_verifier, tableau, k):
def kPlusProches(point_a_verifier, tableau, k, isEuclideanDistance):
"""Prend en paramètres un tuple au format
(Date du jour, Température moyenne, température de référence)
et un tableau au format (Numéro du jour, Température moyenne, Température de référence).
`isEuclidDistance` : true -> euclide ; false -> manhattan
Renvoie un tableau trié avec les k plus proches
points de `point_a_verifier`, au format (distance, indice du tableau original)"""
dist = []
if isEuclideanDistance:
distance = distance_euclide
else:
distance = distance_manhattan
for i, point in enumerate(tableau):
dist.append((distance(point_a_verifier, point[0]), i))
dist = sorted(dist, key=lambda t: t[0])

5
test.py

@ -1,13 +1,14 @@
from knn import kPlusProches
from lecture import lecture
def lancerTest(nombre_voisins, point_a_verifier):
def lancerTest(nombre_voisins, point_a_verifier, isEuclideanDistance):
"""effectue prédiction"""
fichier_apprentissage = lecture("data/pic-journalier-consommation.csv")
k_plus_proches = kPlusProches(point_a_verifier, \
fichier_apprentissage, \
nombre_voisins)
nombre_voisins,\
isEuclideanDistance)
conso_prevue = 0
liste_indices = [elem[1] for elem in k_plus_proches]

Loading…
Cancel
Save