Browse Source

Knnn mark 1

master
parent
commit
2ea3b54053
  1. 373
      KNN_Mark1.py

373
KNN_Mark1.py

@ -1,198 +1,175 @@
from tkinter import * from tkinter import *
def lancer(): def lancer(k, date, temp_moy, temp_ref, donnees):
lecture("pic-journalier-consommation.csv") donnees, lst_conso = moyenne_liste()
kPlusProches(value1, donnees_point,temp_jour) donnees_point = [date, temp_moy, temp_ref]
estBissextile(an) print(k)
print(donnees_point)
def lecture(fichier): print(donnees)
temp_jour = [] lst_k_plus_proches = kPlusProches(k, donnees_point, donnees)
with open(fichier, "r") as menu: PuissanceMoyenne(lst_k_plus_proches)
menu.readline()
for ligne in menu: def lecture(fichier):
ligne_net = ligne.strip() temp_jour = []
lst_ligne = list(ligne_net.split(";")) with open(fichier, "r") as menu:
temp_jour.append(lst_ligne) menu.readline()
for i in range(len(temp_jour)): for ligne in menu:
temp_jour[i][1] = float(temp_jour[i][1]) ligne_net = ligne.strip()
temp_jour[i][2] = float(temp_jour[i][2]) lst_ligne = list(ligne_net.split(";"))
temp_jour[i][3] = float(temp_jour[i][3]) temp_jour.append(lst_ligne)
return temp_jour for i in range(len(temp_jour)):
temp_jour[i][1] = float(temp_jour[i][1])
def estBissextile(an): temp_jour[i][2] = float(temp_jour[i][2])
"""Fonction estBissextile qui prend en paramètre l’année à vérifier et qui renvoie True si elle est bissextile, False sinon""" temp_jour[i][3] = float(temp_jour[i][3])
an_base = an return temp_jour
an = an//4
if an*4 == an_base: def estBissextile(an):
return True """Fonction estBissextile qui prend en paramètre l’année à vérifier et qui renvoie True si elle est bissextile, False sinon"""
else: return an % 4 == 0
return False
def kPlusProches(k,donnees_point,donnees):
def kPlusProches(k,donnees_point,temp_jour): """Fonction qui prend en paramètre un tuple correspondant au point à vérifier,
"""Fonction qui prend en paramètre un tuple correspondant au point à vérifier, une liste du jeu de données et la conso électrique. Renvoie une liste triée
une liste du jeu de données et la conso électrique. Renvoie une liste triée en fonction de la distance dont les éléments sont des tuples."""
en fonction de la distance dont les éléments sont des tuples.""" if k > len(donnees): #par sécurité on réduit k
voisins = [] k = len(donnees)
if k > len(temp_jour[0]): voisin=[]
k = len(temp_jour[0]) for i in range(len(donnees)):
energy = temp_jour.pop() voisin.append(distance(donnees, donnees_point, i))
energy.sort voisin.sort()
for i in range(len(temp_jour[0])): return [voisin[i] for i in range(k)]
d = distance(temp_jour[i],donnees_point)
voisins.append((d, i))
voisins.sort() def numeroJour(date):
return [voisins[i][1] for i in range(k)] an_mois_jour = list(date.split("-"))
def numeroJour(date): an = int(an_mois_jour[0])
an_mois_jour = list(date.split("-")) mois = int(an_mois_jour[1])
jour = int(an_mois_jour[2])
an = int(an_mois_jour[0])
mois = int(an_mois_jour[1]) if mois == 1:
jour = int(an_mois_jour[2]) j_en_plus = 0
elif mois == 2:
if mois == 1: j_en_plus = 31
j_en_plus = 0 elif mois == 3:
elif mois == 2: j_en_plus = 59
j_en_plus = 31 elif mois == 4:
elif mois == 3: j_en_plus = 90
j_en_plus = 59 elif mois == 5:
elif mois == 4: j_en_plus = 120
j_en_plus = 90 elif mois == 6:
elif mois == 5: j_en_plus = 151
j_en_plus = 120 elif mois == 7:
elif mois == 6: j_en_plus = 181
j_en_plus = 151 elif mois == 8:
elif mois == 7: j_en_plus = 212
j_en_plus = 181 elif mois == 9:
elif mois == 8: j_en_plus = 243
j_en_plus = 212 elif mois == 10:
elif mois == 9: j_en_plus = 273
j_en_plus = 243 elif mois == 11:
elif mois == 10: j_en_plus = 304
j_en_plus = 273 elif mois == 12:
elif mois == 11: j_en_plus = 334
j_en_plus = 304
elif mois == 12: if estBissextile(an) and mois > 2:
j_en_plus = 334 j_en_plus += 1
if estBissextile(an) and mois > 2: num_jour = j_en_plus + jour
j_en_plus += 1 if num_jour > 365:
num_jour = 365
num_jour = j_en_plus + jour return num_jour
if num_jour > 365:
num_jour = 365 def moyenne_liste():
return num_jour temp_jour = lecture("pic-journalier-consommation.csv")
donnees= []
def moyenne_liste(): lst_conso = []
temp_jour, = lecture("pic-journalier-consommation.csv") for i in range(len(temp_jour)):
temp_num_jour = [] temp_jour[i][0] = numeroJour(temp_jour[i][0])
for i in range(365): donnees.append([temp_jour[i][0], temp_jour[i][2], temp_jour[i][3]])
temp_jour[i][0] = numeroJour(temp_jour[i][0]) lst_conso.append(temp_jour[i][1])
for l in range(len(temp_jour)): return donnees, lst_conso
lst_conso = []
lst_temp_moy = [] def distance(donnees, donneespoint, i):
lst_temp_ref = [] """Fonction qui dit qu'en prenant des points et ben on peut trouver une distance entre 2 point"""
moy_conso = 0 x1 = donnees[i][0]
moy_temp_moy = 0 x2 = donneespoint[0]
moy_temp_ref = 0 d1 = x1-x2
for m in range(len(temp_jour)): d2 = 365 - d1
if temp_jour[l][0] == i+1: d_final = d1
lst_conso.append(temp_jour[l][1]) if d1 > d2:
lst_temp_moy.append(temp_jour[l][2]) d_final = d2
lst_temp_ref.append(temp_jour[l][3]) y1 = donnees[i][1]
for n in range(len(lst_conso)): y2 = donneespoint[1]
moy_conso += lst_conso[n] z1 = donnees[i][2]
moy_temp_moy += lst_temp_moy[n] z2 = donneespoint[2]
moy_temp_ref += lst_temp_ref[n] return ((d_final)**2)+((y1-y2)**2)+((z1-z2)**2)
moy_conso = moy_conso / len(lst_conso)
moy_temp_moy = moy_temp_moy / len(lst_temp_moy) def PuissanceMoyenne(lst_k_plus_proches):
moy_temp_ref = moy_temp_ref / len(lst_temp_ref) """Calcule la moyenne de distances entre les points """
temp_num_jour.append([i, moy_conso, moy_temp_moy, moy_temp_ref]) lecture("pic-journalier-consommation.csv")
conso_moy =0 # sum() / len(lst_k_plus_proches)
def distance(temp_jour, donneespoint): return conso_moy
"""Fonction qui dit qu'en prenant des points et ben on peut trouver une distance entre 2 point"""
x1 = temp_jour[0] def recup1():
x2 = donneespoint[0] k = 5 #value1.get()
y1 = temp_jour[1] return k
y2 = donneespoint[1]
z1 = temp_jour[2] def recup2():
z2 = donneespoint[2] date = value2.get()
dist = ((x1-x2)**2)+((y1-y2)**2)+((z1-z2)**2) return date
return dist
def recup3():
def PuissanceMoyenne(lst,distance): temp_moy = value3.get()
"""Fonction qui calcule la moyenne de distances entre les points """ return temp_moy
lecture("pic-journalier-consommation.csv")
moy = sum() / len() def recup4():
temp_ref = value4.get()
def recup1(): return temp_ref
voisins = value1.get()
label5.configure(text=voisins) #def calc_conso():
# Conso =
def recup2(): # label8.configure(text=Conso)
date = value2.get()
label6.configure(text=date) fenetre = Tk()
def recup3(): canvas1 = Canvas(fenetre)
temp_moy = value3.get() label1 = Label(fenetre, text="Choisissez le nombre de voisins (k) :")
label6.configure(text=temp_moy) value1 = IntVar()
entree1 = Entry(fenetre, textvariable=value1, width=45)
def recup4():
temp_ref = value4.get() label2 = Label(fenetre, text="Veuillez entrez la date (format 'aaaa-mm-jj'):", width=45)
label6.configure(text=temp_ref) value2 = IntVar()
entree2 = Entry(fenetre, textvariable=value2, width=45)
#def calc_conso():
# Conso = label3 = Label(fenetre, text="Veuillez entrez la température moyenne (en °C):", width=45)
# label8.configure(text=Conso) value3 = IntVar()
entree3 = Entry(fenetre, textvariable=value3, width=45)
label4 = Label(fenetre, text="Veuillez entrez la température de référence (en °C) :", width=45)
fenetre = Tk() value4 = IntVar()
txt_design = font = ('Helvetica', 12, 'bold', 'underline','italic') entree4 = Entry(fenetre, textvariable=value4, width=45)
canvas1 = Canvas(fenetre)
label1.grid(pady=10)
label1 = Label(fenetre, text="Choisissez le nombre de voisins (k) :",font = entree1.grid()
txt_design,bg ='#005dff',foreground="#ff5733")
value1 = IntVar() label2.grid(pady=10)
entree1 = Entry(fenetre, textvariable=value1) entree2.grid()
label2 = Label(fenetre, text="Veuillez entrez la date (format 'aaaa-mm-jj'):",font = label3.grid(pady=10)
txt_design,bg ='#005dff',foreground="#ff5733") entree3.grid()
value2 = IntVar()
entree2 = Entry(fenetre, textvariable=value2) label4.grid(pady=10)
entree4.grid()
label3 = Label(fenetre, text="Veuillez entrez la température moyenne (en °C):",font =
txt_design,bg ='#005dff',foreground="#ff5733") label9 = Label(fenetre, text="Conso", bg="yellow")
value3 = IntVar()
entree3 = Entry(fenetre, textvariable=value3) bouton1 = Button(canvas1, text="Tester", command=lancer(recup1(), recup2(), recup3(), recup4(), moyenne_liste()), width=15, height=2, bg="cyan").grid(pady=10)
label4 = Label(fenetre, text="Veuillez entrez la température de référence (en °C) :",font = canvas1.grid()
txt_design,bg ='#005dff',foreground="#FF5733") label9.grid(pady=10)
value4 = IntVar()
entree4 = Entry(fenetre, textvariable=value4) fenetre.title("IHM KNN")
fenetre.iconbitmap('icon.ico')
label1.grid(pady=10) fenetre.mainloop()
entree1.grid()
label2.grid(pady=10)
entree2.grid()
label3.grid(pady=10)
entree3.grid()
label4.grid(pady=10)
entree4.grid()
label9= Label(fenetre,width=8, text="Conso", bg="#b054da",fg='#fbff7a',font =('calibri',9,'bold') ,relief ='groove')
bouton1 = Button(canvas1, text="Tester", command=fenetre.destroy,height=2,width=8 ,bg="#e7374c",fg='#fbff7a', font =
('colibri',13,'bold')).grid()
canvas1.grid(pady = 15)
label9.grid()
fenetre.title("IHM KNN")
fenetre.iconbitmap('icon.ico')
fenetre['bg'] = '#005dff'
fenetre.geometry('400x360')
fenetre.mainloop()

Loading…
Cancel
Save