From da29ebac47ad3bb5b4a4692422794916f265b40b Mon Sep 17 00:00:00 2001 From: DAUDET Paul Date: Thu, 2 Jun 2022 08:28:36 +0200 Subject: [PATCH] enzo # tout --- KNN_Mark1.py | 373 +++++++++++++++++++++++++++------------------------ 1 file changed, 198 insertions(+), 175 deletions(-) diff --git a/KNN_Mark1.py b/KNN_Mark1.py index 6b3027e..f85548f 100644 --- a/KNN_Mark1.py +++ b/KNN_Mark1.py @@ -1,175 +1,198 @@ -from tkinter import * - -def lancer(k, date, temp_moy, temp_ref, donnees): - donnees, lst_conso = moyenne_liste() - donnees_point = [date, temp_moy, temp_ref] - print(k) - print(donnees_point) - print(donnees) - lst_k_plus_proches = kPlusProches(k, donnees_point, donnees) - PuissanceMoyenne(lst_k_plus_proches) - -def lecture(fichier): - temp_jour = [] - with open(fichier, "r") as menu: - menu.readline() - for ligne in menu: - ligne_net = ligne.strip() - lst_ligne = list(ligne_net.split(";")) - temp_jour.append(lst_ligne) - for i in range(len(temp_jour)): - temp_jour[i][1] = float(temp_jour[i][1]) - temp_jour[i][2] = float(temp_jour[i][2]) - temp_jour[i][3] = float(temp_jour[i][3]) - return temp_jour - -def estBissextile(an): - """Fonction estBissextile qui prend en paramètre l’année à vérifier et qui renvoie True si elle est bissextile, False sinon""" - return an % 4 == 0 - -def kPlusProches(k,donnees_point,donnees): - """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 - en fonction de la distance dont les éléments sont des tuples.""" - if k > len(donnees): #par sécurité on réduit k - k = len(donnees) - voisin=[] - for i in range(len(donnees)): - voisin.append(distance(donnees, donnees_point, i)) - voisin.sort() - return [voisin[i] for i in range(k)] - - -def numeroJour(date): - an_mois_jour = list(date.split("-")) - - an = int(an_mois_jour[0]) - mois = int(an_mois_jour[1]) - jour = int(an_mois_jour[2]) - - if mois == 1: - j_en_plus = 0 - elif mois == 2: - j_en_plus = 31 - elif mois == 3: - j_en_plus = 59 - elif mois == 4: - j_en_plus = 90 - elif mois == 5: - j_en_plus = 120 - elif mois == 6: - j_en_plus = 151 - elif mois == 7: - j_en_plus = 181 - elif mois == 8: - j_en_plus = 212 - elif mois == 9: - j_en_plus = 243 - elif mois == 10: - j_en_plus = 273 - elif mois == 11: - j_en_plus = 304 - elif mois == 12: - j_en_plus = 334 - - if estBissextile(an) and mois > 2: - j_en_plus += 1 - - num_jour = j_en_plus + jour - if num_jour > 365: - num_jour = 365 - return num_jour - -def moyenne_liste(): - temp_jour = lecture("pic-journalier-consommation.csv") - donnees= [] - lst_conso = [] - for i in range(len(temp_jour)): - temp_jour[i][0] = numeroJour(temp_jour[i][0]) - donnees.append([temp_jour[i][0], temp_jour[i][2], temp_jour[i][3]]) - lst_conso.append(temp_jour[i][1]) - return donnees, lst_conso - -def distance(donnees, donneespoint, i): - """Fonction qui dit qu'en prenant des points et ben on peut trouver une distance entre 2 point""" - x1 = donnees[i][0] - x2 = donneespoint[0] - d1 = x1-x2 - d2 = 365 - d1 - d_final = d1 - if d1 > d2: - d_final = d2 - y1 = donnees[i][1] - y2 = donneespoint[1] - z1 = donnees[i][2] - z2 = donneespoint[2] - return ((d_final)**2)+((y1-y2)**2)+((z1-z2)**2) - -def PuissanceMoyenne(lst_k_plus_proches): - """Calcule la moyenne de distances entre les points """ - lecture("pic-journalier-consommation.csv") - conso_moy =0 # sum() / len(lst_k_plus_proches) - return conso_moy - -def recup1(): - k = 5 #value1.get() - return k - -def recup2(): - date = value2.get() - return date - -def recup3(): - temp_moy = value3.get() - return temp_moy - -def recup4(): - temp_ref = value4.get() - return temp_ref - -#def calc_conso(): -# Conso = -# label8.configure(text=Conso) - -fenetre = Tk() - -canvas1 = Canvas(fenetre) - -label1 = Label(fenetre, text="Choisissez le nombre de voisins (k) :") -value1 = IntVar() -entree1 = Entry(fenetre, textvariable=value1, width=45) - -label2 = Label(fenetre, text="Veuillez entrez la date (format 'aaaa-mm-jj'):", width=45) -value2 = IntVar() -entree2 = Entry(fenetre, textvariable=value2, width=45) - -label3 = Label(fenetre, text="Veuillez entrez la température moyenne (en °C):", width=45) -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) -value4 = IntVar() -entree4 = Entry(fenetre, textvariable=value4, width=45) - -label1.grid(pady=10) -entree1.grid() - -label2.grid(pady=10) -entree2.grid() - -label3.grid(pady=10) -entree3.grid() - -label4.grid(pady=10) -entree4.grid() - -label9 = Label(fenetre, text="Conso", bg="yellow") - -bouton1 = Button(canvas1, text="Tester", command=lancer(recup1(), recup2(), recup3(), recup4(), moyenne_liste()), width=15, height=2, bg="cyan").grid(pady=10) - -canvas1.grid() -label9.grid(pady=10) - -fenetre.title("IHM KNN") -fenetre.iconbitmap('icon.ico') -fenetre.mainloop() \ No newline at end of file +from tkinter import * + +def lancer(): + lecture("pic-journalier-consommation.csv") + kPlusProches(value1, donnees_point,temp_jour) + estBissextile(an) + +def lecture(fichier): + temp_jour = [] + with open(fichier, "r") as menu: + menu.readline() + for ligne in menu: + ligne_net = ligne.strip() + lst_ligne = list(ligne_net.split(";")) + temp_jour.append(lst_ligne) + for i in range(len(temp_jour)): + temp_jour[i][1] = float(temp_jour[i][1]) + temp_jour[i][2] = float(temp_jour[i][2]) + temp_jour[i][3] = float(temp_jour[i][3]) + return temp_jour + +def estBissextile(an): + """Fonction estBissextile qui prend en paramètre l’année à vérifier et qui renvoie True si elle est bissextile, False sinon""" + an_base = an + an = an//4 + if an*4 == an_base: + return True + else: + return False + +def kPlusProches(k,donnees_point,temp_jour): + """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 + en fonction de la distance dont les éléments sont des tuples.""" + voisins = [] + if k > len(temp_jour[0]): + k = len(temp_jour[0]) + energy = temp_jour.pop() + energy.sort + for i in range(len(temp_jour[0])): + d = distance(temp_jour[i],donnees_point) + voisins.append((d, i)) + voisins.sort() + return [voisins[i][1] for i in range(k)] + +def numeroJour(date): + an_mois_jour = list(date.split("-")) + + an = int(an_mois_jour[0]) + mois = int(an_mois_jour[1]) + jour = int(an_mois_jour[2]) + + if mois == 1: + j_en_plus = 0 + elif mois == 2: + j_en_plus = 31 + elif mois == 3: + j_en_plus = 59 + elif mois == 4: + j_en_plus = 90 + elif mois == 5: + j_en_plus = 120 + elif mois == 6: + j_en_plus = 151 + elif mois == 7: + j_en_plus = 181 + elif mois == 8: + j_en_plus = 212 + elif mois == 9: + j_en_plus = 243 + elif mois == 10: + j_en_plus = 273 + elif mois == 11: + j_en_plus = 304 + elif mois == 12: + j_en_plus = 334 + + if estBissextile(an) and mois > 2: + j_en_plus += 1 + + num_jour = j_en_plus + jour + if num_jour > 365: + num_jour = 365 + return num_jour + +def moyenne_liste(): + temp_jour, = lecture("pic-journalier-consommation.csv") + temp_num_jour = [] + for i in range(365): + temp_jour[i][0] = numeroJour(temp_jour[i][0]) + for l in range(len(temp_jour)): + lst_conso = [] + lst_temp_moy = [] + lst_temp_ref = [] + moy_conso = 0 + moy_temp_moy = 0 + moy_temp_ref = 0 + for m in range(len(temp_jour)): + if temp_jour[l][0] == i+1: + lst_conso.append(temp_jour[l][1]) + lst_temp_moy.append(temp_jour[l][2]) + lst_temp_ref.append(temp_jour[l][3]) + for n in range(len(lst_conso)): + moy_conso += lst_conso[n] + moy_temp_moy += lst_temp_moy[n] + moy_temp_ref += lst_temp_ref[n] + moy_conso = moy_conso / len(lst_conso) + moy_temp_moy = moy_temp_moy / len(lst_temp_moy) + moy_temp_ref = moy_temp_ref / len(lst_temp_ref) + temp_num_jour.append([i, moy_conso, moy_temp_moy, moy_temp_ref]) + +def distance(temp_jour, donneespoint): + """Fonction qui dit qu'en prenant des points et ben on peut trouver une distance entre 2 point""" + x1 = temp_jour[0] + x2 = donneespoint[0] + y1 = temp_jour[1] + y2 = donneespoint[1] + z1 = temp_jour[2] + z2 = donneespoint[2] + dist = ((x1-x2)**2)+((y1-y2)**2)+((z1-z2)**2) + return dist + +def PuissanceMoyenne(lst,distance): + """Fonction qui calcule la moyenne de distances entre les points """ + lecture("pic-journalier-consommation.csv") + moy = sum() / len() + +def recup1(): + voisins = value1.get() + label5.configure(text=voisins) + +def recup2(): + date = value2.get() + label6.configure(text=date) + +def recup3(): + temp_moy = value3.get() + label6.configure(text=temp_moy) + +def recup4(): + temp_ref = value4.get() + label6.configure(text=temp_ref) + +#def calc_conso(): +# Conso = +# label8.configure(text=Conso) + + + +fenetre = Tk() +txt_design = font = ('Helvetica', 12, 'bold', 'underline','italic') +canvas1 = Canvas(fenetre) + +label1 = Label(fenetre, text="Choisissez le nombre de voisins (k) :",font = + txt_design,bg ='#005dff',foreground="#ff5733") +value1 = IntVar() +entree1 = Entry(fenetre, textvariable=value1) + +label2 = Label(fenetre, text="Veuillez entrez la date (format 'aaaa-mm-jj'):",font = + txt_design,bg ='#005dff',foreground="#ff5733") +value2 = IntVar() +entree2 = Entry(fenetre, textvariable=value2) + +label3 = Label(fenetre, text="Veuillez entrez la température moyenne (en °C):",font = + txt_design,bg ='#005dff',foreground="#ff5733") +value3 = IntVar() +entree3 = Entry(fenetre, textvariable=value3) + +label4 = Label(fenetre, text="Veuillez entrez la température de référence (en °C) :",font = + txt_design,bg ='#005dff',foreground="#FF5733") +value4 = IntVar() +entree4 = Entry(fenetre, textvariable=value4) + +label1.grid(pady=10) +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()