|
|
@ -1,12 +1,12 @@ |
|
|
import tkinter as tk |
|
|
import tkinter as tk |
|
|
from math import sqrt |
|
|
from math import sqrt |
|
|
|
|
|
|
|
|
def transfoEnInt(groupe): |
|
|
def transfoEnFloat(groupe): |
|
|
"""Prend en parametre un tuple ou une liste de réels de type str |
|
|
"""Prend en parametre un tuple ou une liste de réels de type str |
|
|
et renvoie une liste de réels de type int""" |
|
|
et renvoie une liste de réels de type float""" |
|
|
lst = [] |
|
|
lst = [] |
|
|
for element in groupe: |
|
|
for element in groupe: |
|
|
lst += [int(element)] |
|
|
lst.append(float(element)) |
|
|
return lst |
|
|
return lst |
|
|
|
|
|
|
|
|
def lecture(nomFichier): |
|
|
def lecture(nomFichier): |
|
|
@ -28,10 +28,10 @@ True si elle l'est et False sinon""" |
|
|
def numeroJour(date): |
|
|
def numeroJour(date): |
|
|
"""Prend en parametre une date au format aaaa-mm-jj et renvoie un entier |
|
|
"""Prend en parametre une date au format aaaa-mm-jj et renvoie un entier |
|
|
correspondant au numero du jour correspondant (de 1 à 365)""" |
|
|
correspondant au numero du jour correspondant (de 1 à 365)""" |
|
|
dateSeparee = transfoEnInt(date.split('-')) |
|
|
dateSeparee = transfoEnFloat(date.split('-')) |
|
|
totalJours = 0 |
|
|
totalJours = 0 |
|
|
JoursMois = [31,28,30,31,30,31,31,30,31,30,31] #Nombre de jours de chaques mois |
|
|
JoursMois = [31,28,30,31,30,31,31,30,31,30,31] #Nombre de jours de chaques mois |
|
|
for i in range(dateSeparee[1]-1): |
|
|
for i in range(int(dateSeparee[1])-1): |
|
|
totalJours += JoursMois[i] |
|
|
totalJours += JoursMois[i] |
|
|
if estBissextile(dateSeparee[0]) and totalJours + dateSeparee[2] >= 60 and dateSeparee[1] > 2: |
|
|
if estBissextile(dateSeparee[0]) and totalJours + dateSeparee[2] >= 60 and dateSeparee[1] > 2: |
|
|
#regarde si on est dans une année bissextile et apres fevrier |
|
|
#regarde si on est dans une année bissextile et apres fevrier |
|
|
@ -40,9 +40,9 @@ correspondant au numero du jour correspondant (de 1 à 365)""" |
|
|
|
|
|
|
|
|
def distance(Tuple1 , Tuple2): |
|
|
def distance(Tuple1 , Tuple2): |
|
|
"""prend en parametre 2 tuples avec (Numéro du jour, Température moyenne, température |
|
|
"""prend en parametre 2 tuples avec (Numéro du jour, Température moyenne, température |
|
|
de référence) et renvoie la distance **euclidienne**""" |
|
|
de référence) et renvoie la distance **euclidienne**""" |
|
|
lst1 = transfoEnInt(Tuple1) |
|
|
lst1 = transfoEnFloat(Tuple1) |
|
|
lst2 = transfoEnInt(Tuple2) |
|
|
lst2 = transfoEnFloat(Tuple2) |
|
|
minJours = min([lst1[0],lst2[0]]) |
|
|
minJours = min([lst1[0],lst2[0]]) |
|
|
maxJours = max([lst1[0],lst2[0]]) |
|
|
maxJours = max([lst1[0],lst2[0]]) |
|
|
DiffJours = min([maxJours-minJours,365-maxJours+minJours]) |
|
|
DiffJours = min([maxJours-minJours,365-maxJours+minJours]) |
|
|
@ -58,10 +58,10 @@ def kPlusProches(point,lstRepre,k): #je ne sais pas si il faut mettre k ce n'est |
|
|
if k > len(lstRepre): |
|
|
if k > len(lstRepre): |
|
|
k = len(lstRepre) |
|
|
k = len(lstRepre) |
|
|
for i in range(len(lstRepre)): |
|
|
for i in range(len(lstRepre)): |
|
|
d = distance((point,lstRepre[i])) |
|
|
d = distance(point,lstRepre[i]) |
|
|
lstvoisins.append(d,i) |
|
|
lstvoisins.append((d,i)) |
|
|
lstvoisins.sort() |
|
|
lstvoisins.sort() |
|
|
return [lstvoisins[i][1] for i in range(k)] |
|
|
return [lstvoisins[i] for i in range(k)] |
|
|
|
|
|
|
|
|
def puissanceMoyenne(listeTriee, tableau): |
|
|
def puissanceMoyenne(listeTriee, tableau): |
|
|
"""Prend une liste triée de tuple avec (distance, indice du tableau initial) |
|
|
"""Prend une liste triée de tuple avec (distance, indice du tableau initial) |
|
|
@ -72,18 +72,28 @@ def puissanceMoyenne(listeTriee, tableau): |
|
|
distance,indice = donnee |
|
|
distance,indice = donnee |
|
|
PuissanceTotale += tableau[indice][1] |
|
|
PuissanceTotale += tableau[indice][1] |
|
|
return PuissanceTotale/len(listeTriee) |
|
|
return PuissanceTotale/len(listeTriee) |
|
|
|
|
|
def listeTuples(fichier): |
|
|
|
|
|
"""Prend une liste de tuples de type (date,pic journalier consommation, |
|
|
|
|
|
temperature moyenne, temperature reference) et renvoie une liste de tuples de type |
|
|
|
|
|
(numero jour, temperature moyenne, temperature de reference)""" |
|
|
|
|
|
tableau = [] |
|
|
|
|
|
for i in range(1,len(fichier)): |
|
|
|
|
|
date, picJournalier, tempMoy, tempRef = fichier[i] |
|
|
|
|
|
tableau.append((numeroJour(date),tempMoy,tempRef)) |
|
|
|
|
|
return tableau |
|
|
def main(): |
|
|
def main(): |
|
|
# nombreK = int(valeurk.get()) |
|
|
nombreK = int(valeurk.get()) |
|
|
# |
|
|
|
|
|
# date = numeroJour(valeurdate.get()) |
|
|
|
|
|
# temp = valeurtemp.get().split(" ") |
|
|
|
|
|
# temp = transfoEnInt(temp) |
|
|
|
|
|
# tempMoy, TempRef = temp |
|
|
|
|
|
|
|
|
|
|
|
fichier = lecture('pic-journalier-consommation-brute-2023.csv') |
|
|
date = numeroJour(valeurdate.get()) |
|
|
|
|
|
temp = valeurtemp.get().split(" ") |
|
|
|
|
|
temp = transfoEnFloat(temp) |
|
|
|
|
|
tempMoy, tempRef = temp |
|
|
|
|
|
|
|
|
|
|
|
fichier = lecture('pic-journalier-consommation-brute-2023.csv') |
|
|
|
|
|
|
|
|
|
|
|
listeVoisins = kPlusProches((date,tempMoy,tempRef),(listeTuples(fichier)), |
|
|
|
|
|
nombreK) |
|
|
|
|
|
print(listeVoisins) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fenetre = tk.Tk() |
|
|
fenetre = tk.Tk() |
|
|
|