Browse Source

Fonction listeTuple et un moyen d'utiliser les fonctions

master
Denis Leenaerts 3 weeks ago
parent
commit
7866155768
  1. 46
      projet_knn_feat_denis_le_goat.py

46
projet_knn_feat_denis_le_goat.py

@ -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
@ -41,8 +41,8 @@ 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()

Loading…
Cancel
Save