NSI, KNN IRIS avec CSV

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)