Browse Source

manhattan

master
bollet.c 4 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_date = DateSelection(param)
self.choix_temp_moy = TemperatureSelection(param, "Température moyenne") self.choix_temp_moy = TemperatureSelection(param, "Température moyenne")
self.choix_temp_ref = TemperatureSelection(param, "Température de référence") 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 = tk.Button(tabTest, text='Tester', command=lambda : self.affResTest(tabRes))
btn_entrer.pack() btn_entrer.pack()
@ -67,8 +71,9 @@ class Interface(tk.Frame):
date_choisie = self.choix_date.get() date_choisie = self.choix_date.get()
temperature_moyenne = self.choix_temp_moy.get() temperature_moyenne = self.choix_temp_moy.get()
temperature_ref = self.choix_temp_ref.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.affichage_resultats['text'] = "La consommation électrique \nprévue est de " + res + " MW."
self.tabs.select(tab) self.tabs.select(tab)

23
knn.py

@ -7,7 +7,7 @@ def ecartDate(date1, date2):
secParJour = 86400 secParJour = 86400
return delta_sec / secParJour return delta_sec / secParJour
def distance(point1, point2): def distance_euclide(point1, point2):
"""Prend en paramètre 2 tuples au format """Prend en paramètre 2 tuples au format
(Date du jour, Température moyenne, température de référence) (Date du jour, Température moyenne, température de référence)
et qui renvoie un nombre réel représentant 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 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])
def kPlusProches(point_a_verifier, tableau, k): return duree/100 + delta_T_moy + delta_T_ref
def kPlusProches(point_a_verifier, tableau, k, isEuclideanDistance):
"""Prend en paramètres un tuple au format """Prend en paramètres un tuple au format
(Date du jour, Température moyenne, température de référence) (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). 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 Renvoie un tableau trié avec les k plus proches
points de `point_a_verifier`, au format (distance, indice du tableau original)""" points de `point_a_verifier`, au format (distance, indice du tableau original)"""
dist = [] dist = []
if isEuclideanDistance:
distance = distance_euclide
else:
distance = distance_manhattan
for i, point in enumerate(tableau): for i, point in enumerate(tableau):
dist.append((distance(point_a_verifier, point[0]), i)) dist.append((distance(point_a_verifier, point[0]), i))
dist = sorted(dist, key=lambda t: t[0]) dist = sorted(dist, key=lambda t: t[0])

5
test.py

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

Loading…
Cancel
Save