Browse Source

enzo

# tout
master
DAUDET Paul 3 years ago
parent
commit
da29ebac47
  1. 147
      KNN_Mark1.py

147
KNN_Mark1.py

@ -1,13 +1,9 @@
from tkinter import * from tkinter import *
def lancer(k, date, temp_moy, temp_ref, donnees): def lancer():
donnees, lst_conso = moyenne_liste() lecture("pic-journalier-consommation.csv")
donnees_point = [date, temp_moy, temp_ref] kPlusProches(value1, donnees_point,temp_jour)
print(k) estBissextile(an)
print(donnees_point)
print(donnees)
lst_k_plus_proches = kPlusProches(k, donnees_point, donnees)
PuissanceMoyenne(lst_k_plus_proches)
def lecture(fichier): def lecture(fichier):
temp_jour = [] temp_jour = []
@ -18,27 +14,34 @@ def lecture(fichier):
lst_ligne = list(ligne_net.split(";")) lst_ligne = list(ligne_net.split(";"))
temp_jour.append(lst_ligne) temp_jour.append(lst_ligne)
for i in range(len(temp_jour)): for i in range(len(temp_jour)):
temp_jour[i][1] = float(temp_jour[i][1]) temp_jour[i][1] = float(temp_jour[i][1])
temp_jour[i][2] = float(temp_jour[i][2]) temp_jour[i][2] = float(temp_jour[i][2])
temp_jour[i][3] = float(temp_jour[i][3]) temp_jour[i][3] = float(temp_jour[i][3])
return temp_jour return temp_jour
def estBissextile(an): 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""" """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 an_base = an
an = an//4
def kPlusProches(k,donnees_point,donnees): 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, """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()
return [voisins[i][1] for i in range(k)]
def numeroJour(date): def numeroJour(date):
an_mois_jour = list(date.split("-")) an_mois_jour = list(date.split("-"))
@ -81,75 +84,92 @@ def numeroJour(date):
return num_jour return num_jour
def moyenne_liste(): def moyenne_liste():
temp_jour = lecture("pic-journalier-consommation.csv") temp_jour, = lecture("pic-journalier-consommation.csv")
donnees= [] temp_num_jour = []
lst_conso = [] for i in range(365):
for i in range(len(temp_jour)):
temp_jour[i][0] = numeroJour(temp_jour[i][0]) temp_jour[i][0] = numeroJour(temp_jour[i][0])
donnees.append([temp_jour[i][0], temp_jour[i][2], temp_jour[i][3]]) for l in range(len(temp_jour)):
lst_conso.append(temp_jour[i][1]) lst_conso = []
return donnees, lst_conso lst_temp_moy = []
lst_temp_ref = []
def distance(donnees, donneespoint, i): 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""" """Fonction qui dit qu'en prenant des points et ben on peut trouver une distance entre 2 point"""
x1 = donnees[i][0] x1 = temp_jour[0]
x2 = donneespoint[0] x2 = donneespoint[0]
d1 = x1-x2 y1 = temp_jour[1]
d2 = 365 - d1
d_final = d1
if d1 > d2:
d_final = d2
y1 = donnees[i][1]
y2 = donneespoint[1] y2 = donneespoint[1]
z1 = donnees[i][2] z1 = temp_jour[2]
z2 = donneespoint[2] z2 = donneespoint[2]
return ((d_final)**2)+((y1-y2)**2)+((z1-z2)**2) dist = ((x1-x2)**2)+((y1-y2)**2)+((z1-z2)**2)
return dist
def PuissanceMoyenne(lst_k_plus_proches): def PuissanceMoyenne(lst,distance):
"""Calcule la moyenne de distances entre les points """ """Fonction qui calcule la moyenne de distances entre les points """
lecture("pic-journalier-consommation.csv") lecture("pic-journalier-consommation.csv")
conso_moy =0 # sum() / len(lst_k_plus_proches) moy = sum() / len()
return conso_moy
def recup1(): def recup1():
k = 5 #value1.get() voisins = value1.get()
return k label5.configure(text=voisins)
def recup2(): def recup2():
date = value2.get() date = value2.get()
return date label6.configure(text=date)
def recup3(): def recup3():
temp_moy = value3.get() temp_moy = value3.get()
return temp_moy label6.configure(text=temp_moy)
def recup4(): def recup4():
temp_ref = value4.get() temp_ref = value4.get()
return temp_ref label6.configure(text=temp_ref)
#def calc_conso(): #def calc_conso():
# Conso = # Conso =
# label8.configure(text=Conso) # label8.configure(text=Conso)
fenetre = Tk()
fenetre = Tk()
txt_design = font = ('Helvetica', 12, 'bold', 'underline','italic')
canvas1 = Canvas(fenetre) canvas1 = Canvas(fenetre)
label1 = Label(fenetre, text="Choisissez le nombre de voisins (k) :") label1 = Label(fenetre, text="Choisissez le nombre de voisins (k) :",font =
txt_design,bg ='#005dff',foreground="#ff5733")
value1 = IntVar() value1 = IntVar()
entree1 = Entry(fenetre, textvariable=value1, width=45) entree1 = Entry(fenetre, textvariable=value1)
label2 = Label(fenetre, text="Veuillez entrez la date (format 'aaaa-mm-jj'):", width=45) label2 = Label(fenetre, text="Veuillez entrez la date (format 'aaaa-mm-jj'):",font =
txt_design,bg ='#005dff',foreground="#ff5733")
value2 = IntVar() value2 = IntVar()
entree2 = Entry(fenetre, textvariable=value2, width=45) entree2 = Entry(fenetre, textvariable=value2)
label3 = Label(fenetre, text="Veuillez entrez la température moyenne (en °C):", width=45) label3 = Label(fenetre, text="Veuillez entrez la température moyenne (en °C):",font =
txt_design,bg ='#005dff',foreground="#ff5733")
value3 = IntVar() value3 = IntVar()
entree3 = Entry(fenetre, textvariable=value3, width=45) entree3 = Entry(fenetre, textvariable=value3)
label4 = Label(fenetre, text="Veuillez entrez la température de référence (en °C) :", width=45) label4 = Label(fenetre, text="Veuillez entrez la température de référence (en °C) :",font =
txt_design,bg ='#005dff',foreground="#FF5733")
value4 = IntVar() value4 = IntVar()
entree4 = Entry(fenetre, textvariable=value4, width=45) entree4 = Entry(fenetre, textvariable=value4)
label1.grid(pady=10) label1.grid(pady=10)
entree1.grid() entree1.grid()
@ -163,13 +183,16 @@ entree3.grid()
label4.grid(pady=10) label4.grid(pady=10)
entree4.grid() entree4.grid()
label9 = Label(fenetre, text="Conso", bg="yellow") label9= Label(fenetre,width=8, text="Conso", bg="#b054da",fg='#fbff7a',font =('calibri',9,'bold') ,relief ='groove')
bouton1 = Button(canvas1, text="Tester", command=lancer(recup1(), recup2(), recup3(), recup4(), moyenne_liste()), width=15, height=2, bg="cyan").grid(pady=10) bouton1 = Button(canvas1, text="Tester", command=fenetre.destroy,height=2,width=8 ,bg="#e7374c",fg='#fbff7a', font =
('colibri',13,'bold')).grid()
canvas1.grid() canvas1.grid(pady = 15)
label9.grid(pady=10) label9.grid()
fenetre.title("IHM KNN") fenetre.title("IHM KNN")
fenetre.iconbitmap('icon.ico') fenetre.iconbitmap('icon.ico')
fenetre['bg'] = '#005dff'
fenetre.geometry('400x360')
fenetre.mainloop() fenetre.mainloop()
Loading…
Cancel
Save