diff --git a/iris.py b/iris.py
new file mode 100644
index 0000000000000000000000000000000000000000..19f11820e617391f631656449c1ff13746e63c0e
--- /dev/null
+++ b/iris.py
@@ -0,0 +1,73 @@
+import pandas as pd
+import numpy as np
+from collections import Counter
+
+
+def manhattan_distance(x1: np.ndarray, x2: np.ndarray) -> float:
+    distance = 0
+    if x1.shape == x2.shape:
+        for i in range(x1.size):
+            distance += np.abs(x1[i] - x2[i])
+    return distance
+
+
+if __name__ == '__main__':
+    # Charger les données Iris à partir d'un fichier CSV
+    data = pd.read_csv('Data/iris.csv', header=None)
+
+    # Séparer les caractéristiques (X) et les étiquettes de classe (y)
+    X = data.iloc[:, :-1].values
+    labels = data.iloc[:, -1].values
+
+    # Définir le nombre de clusters (k)
+    k = 3  # Par exemple, pour l'ensemble de données Iris, il y a trois classes réelles
+
+    # Initialisation aléatoire des centroïdes initiaux
+    centroids = X[np.random.choice(X.shape[0], k, replace=False)]
+    # Nombre maximal d'itérations
+    max_iter = 100
+
+    # Algorithme K-Means
+    for i in range(max_iter):
+        # Créer des clusters vides
+        clusters = [[] for _ in range(k)]
+        # Sauvegarder les anciens centroïdes
+        for point in X:
+            distances = [manhattan_distance(point, centroid) for centroid in centroids]
+            cluster_index = np.argmin(distances)
+            clusters[cluster_index].append(point)
+
+        # Sauvegarder les anciens centroïdes
+        old_centroids = centroids.copy()
+
+        # Mettre à jour les centroïdes en calculant la moyenne des points dans chaque cluster
+        for j in range(k):
+            if len(clusters[j]) > 0:
+                centroids[j] = np.mean(clusters[j], axis=0)
+
+        # Convergence ?
+        if np.all(old_centroids == centroids):
+            break
+    # Calculer la variance totale
+    total_variance = 0.0
+    for cluster_index, cluster_points in enumerate(clusters):
+        cluster_center = centroids[cluster_index]
+        for point in cluster_points:
+            total_variance += manhattan_distance(point, cluster_center) ** 2
+
+    # Calculer le taux de classification par cluster et la classe majoritaire par cluster
+    cluster_classifications = {}
+    cluster_majority_class = {}
+    for cluster_index, cluster_points in enumerate(clusters):
+        cluster_labels = labels[np.isin(X, cluster_points).all(axis=1)]
+        cluster_counts = Counter(cluster_labels)
+        cluster_classifications[cluster_index] = cluster_counts
+        cluster_majority_class[cluster_index] = cluster_counts.most_common(1)[0][0]
+
+    # Afficher la variance totale
+    print(f'Variance totale : {total_variance}')
+
+    # Afficher le taux de classification par cluster et la classe majoritaire par cluster
+    for cluster_index in range(k):
+        print(f'Cluster {cluster_index + 1} - Taux de classification : {cluster_classifications[cluster_index]}')
+        print(f'Cluster {cluster_index + 1} - Classe majoritaire : {cluster_majority_class[cluster_index]}')
\ No newline at end of file
diff --git a/main.py b/student-data.py
similarity index 100%
rename from main.py
rename to student-data.py