import csv
from math import sqrt
iris = list(csv.DictReader(open("iris.csv")))
print(len(iris), "données dans le fichier")
long = float(input("Longueur pétale : "))
larg = float(input("Largeur pétale : "))
def dist(d):
"""renvoie la distance entre d et (long, larg)"""
dlong = float(d["petal_length"])
dlarg = float(d["petal_width"])
return sqrt((dlong - long) ** 2 + (dlarg - larg) ** 2)
def insere(d, t):
"""insère une nouvelle donnée d dans le tableau t
en maintenant t croissant pour dist"""
t.append(d)
i = len(t) - 1
while i > 0 and dist(t[i - 1]) > dist(d):
t[i] = t[i - 1]
i = i - 1
t[i] = d
def majoritaire(t):
"""renvoie un élément majoritaire dans t
on suppose t non vide"""
assert len(t) > 0
c = {}
mx = 1
mj = t[0]
for x in t:
if x not in c:
c[x] = 0
c[x] += 1
if c[x] > mx:
mx = c[x]
mj = x
return mj
def ppv(k):
t = [] # maintenu en ordre croissant de distance
for d in iris:
insere(d, t)
if len(t) > k:
t.pop()
# print([dist(d) for d in t])
return majoritaire([x["species"] for x in t])
for k in range(1, 10):
print("k=", k, "donne", ppv(k))