From d3dac39f5d68af103b4c8b93059c05b031498bc8 Mon Sep 17 00:00:00 2001 From: SERNY Sacha Date: Thu, 2 Jun 2022 08:45:42 +0200 Subject: [PATCH] Upload files to '' --- RTE_logo.ico | Bin 0 -> 133982 bytes final_knn.py | 123 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 123 insertions(+) create mode 100644 RTE_logo.ico create mode 100644 final_knn.py diff --git a/RTE_logo.ico b/RTE_logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..da093c05f25fee6b7d16b63db320fdfb31a41e2d GIT binary patch literal 133982 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 Z)ys(vclyd@lAYX<9$)Rj0UR@A{6F2JWTyZC literal 0 HcmV?d00001 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