compléter le code de ces différentes fonctions
avec comme fichier csv :
https://pixees.fr/informatiquelycee/n_site/asset/iris.csv
import csv
liste_fleurs=[]
with open('iris.csv', newline='') as csvfile:
spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
for row in spamreader:
liste_fleurs.append(row)
def transformation(chaine):
'''
>>>transformation("1.4,2,0")
[1.4,2,0]
'''
def transformation_liste(liste):
'''
transforme la liste fleurs en un liste
de dictionnaires
>>>transformation_liste(liste_fleurs)[0]
{'petal_length':1.4,'petal-width':0.2,"species":0}
'''
def distance(fleur1,fleur2):
Proposition correction
import csv
liste_fleurs=[]
with open('iris.csv', newline='') as csvfile:
spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
for row in spamreader:
liste_fleurs.append(row)
def transformation(chaine):
'''
>>>transformation("1.4,2,0")
[1.4,2.0,0.0]
'''
retour=chaine.split(",")
return [float(val) for val in retour]
def transformation_liste(liste):
'''
transforme la liste fleurs en un liste
de dictionnaires
>>>transformation_liste(liste_fleurs)[0]
{'petal_length':1.4,'petal-width':0.2,"species":0}
'''
retour=[]
for i in range(1,len(liste)):
dico={}
fleur=transformation(liste[i][0])
dico['petal_length']=fleur[0]
dico['petal_width']=fleur[1]
dico['species']=fleur[2]
retour.append(dico)
return retour
liste_fleurs=transformation_liste(liste_fleurs)
def distance(fleur1,fleur2):
'''
calcule la distance entre 2 fleurs
'''
x1=fleur1['petal_length']
y1=fleur1['petal_width']
x2=fleur2['petal_length']
y2=fleur2['petal_width']
return ((x1-x2)**2+(y1-y2)**2)**0.5
def plus_proches_voisins(fleur,liste_fleurs):
'''
renvoie la liste des plus proches
voisins par distance croissante
'''
liste=liste_fleurs.copy()
retour=[]
# tant que retour n'a pas la taille voulue
while len(retour)!=len(liste_fleurs):
# on cherche la fleur la plus proche
d_min=distance(fleur,liste[0])
fleur_min=liste[0]
for f in liste:
if distance(fleur,f)<d_min:
d_min=distance(fleur,f)
fleur_min=f
# on l'ajoute au retour
retour.append(fleur_min)
# on l'enleve de la liste
liste.remove(fleur_min)
# on renvoie ce qu'il faut
return retour
fleur={'petal_length':2.5,'petal_width':0.75}
l=plus_proches_voisins(fleur,liste_fleurs)