diff --git a/RTE_logo.ico b/RTE_logo.ico new file mode 100644 index 0000000..da093c0 Binary files /dev/null and b/RTE_logo.ico differ diff --git a/final_knn.py b/final_knn.py new file mode 100644 index 0000000..817dbae --- /dev/null +++ b/final_knn.py @@ -0,0 +1,123 @@ +from tkinter import * +from math import * +import numpy as np + +def lecture(name): + lst_date = [] + lst_conso = [] + lst_t_moy = [] + lst_t_ref = [] + with open(name) as fic: + fic.readline() + for ligne in fic: + date,conso, t_moy, t_ref = ligne.split(';') + lst_date.append(date) + lst_conso.append(float(conso)) + lst_t_moy.append(float(t_moy)) + lst_t_ref.append(float(t_ref)) + return(np.array(lst_date), np.array(lst_conso), np.array(lst_t_moy), np.array(lst_t_ref)) + +def estBissextile(a): + """regarde si l'année correspond à une année bissextile""" + return (a%4==0 and a%100!=0) or a%400==0 + +def distance (pos1, pos2): + """fonction distance qui prend en paramètre 2 tuples (Numéro du jour, Température moyenne, température de référence) et qui renvoie un nombre réel représentant la distance euclidienne""" + x1, y1, z1 = pos1 + x2, y2, z2 = pos2 + diff_njour1, diff_njour2 = x1-x2, x2-x1 + if (x1-x2) <= (x2-x1): + diff = x1-x2 + else: + diff = x2-x1 + return sqrt((diff)**2)+((y1-y2)**2)+((z1-z2)**2) + +def kPlusProches(echantillon, donnees, k): + """ à reprendre -> !! TOTAL CHAOS !! U_u 0w0 *_* """ + voisins = [] + for i in range(len(donnees)): + date, t_moy, t_ref, conso = donnees[i] + d = distance(echantillon, (date, t_moy, t_ref)) + voisins.append((d, i)) + voisins = sorted(voisins) + return [voisins[i][1] for i in range(k)] + +def numeroJour(date): + """renvoie le numéro du jour dans l'année de la date "2442-04-24" """ + print(type(date)) + date = date.split('-') + a, m, j = date + a, m, j = int(a), int(m), int(j) + if (estBissextile(int(a))): + mois = (0,31,60,91,121,152,182,213,244,274,305,335,366) + else: + mois = (0,31,59,90,120,151,181,212,243,273,304,334,365) + return int(mois[m-1] + j) + +def PuissanceMoyenne(consos, i_voisins): + """renvoie la puissance moyenne, prend en entrée une liste triée en fonction de la distance""" + res = 0 + for el in i_voisins: + res += consos[el] + return res/(len(i_voisins)) + + +def triAvecIndices(lst): + """J'sais même pas ce que je fais""" + tab_i= [] + tab = [] + for i in range(len(lst)): + tab_i.append(i) + tab = list(zip(lst, tab_i)) + return tab +num_jour = [] + +dates, consos, t_pics, t_refs = lecture("pic-journalier-consommation.csv") +for date in dates: + num_jour.append(numeroJour(date)) +coords = list(zip(num_jour, t_pics, t_refs, consos)) + + + + + +def recup(): + t_moy, t_ref, date, k_input = int(temp_moy.get()), int(temp_ref.get()), value_date.get(), int(nbk.get()) + print(PuissanceMoyenne(consos, kPlusProches((numeroJour(date), t_moy, t_ref), coords, 20))) + + label4.configure(text=((PuissanceMoyenne(consos, kPlusProches((numeroJour(date), t_moy, t_ref), coords, k_input))))) + + +fenetre = Tk() +fenetre.title("RTE - Calculateur de consommation électrique") +fenetre.iconbitmap("RTE_logo.ico") + +label4 = Label(fenetre, text="Prévision consommation électrique") +label4.grid(row=0, column=2, pady = 10) + +Button(fenetre, text='Quitter', borderwidth=1, command=fenetre.destroy).grid(row=5, column=5, pady = 10, padx = 50) + +value_date = StringVar() +label1 = Label(fenetre, text="T° moy") +label1.grid(row=4, column=2, pady = 10) +temp_moy = Entry(fenetre, text='temp_moy', width=100) +temp_moy.grid(row=4, column=3) + +label2 = Label(fenetre, text="T° ref") +label2.grid(row=5, column=2, pady = 10) +temp_ref = Entry(fenetre, text='temp_ref', width=100) +temp_ref.grid(row=5, column=3) + +label3 = Label(fenetre, text="Date (AAAA-MM-JJ)") +label3.grid(row=6, column=2, pady = 10) +f_date = Entry(fenetre, textvariable=value_date, width=100) +f_date.grid(row=6, column=3) +bout = Button(text='Lancer', command=recup) +bout.grid(row=11, column=3) + +label = Label(fenetre, text="Choisir le nombre k") +label.grid(row=8, column=2, pady = 10) +nbk = Entry(fenetre, text='value_k_input', width=100) +nbk.grid(row=8, column = 3) + +fenetre.mainloop() \ No newline at end of file