import numpy as np
import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from sklearn.metrics import silhouette_score

# Загрузка данных
data = pd.read_csv("F1DriversDataset.csv")

# Выбор признаков для кластеризации
features = ['Championships', 'Race_Entries', 'Race_Starts', 'Pole_Positions', 'Race_Wins', 'Podiums', 'Fastest_Laps']
X = data[features]

# Применение алгоритма K-means
k = 3  # количество кластеров
kmeans = KMeans(n_clusters=k)
kmeans.fit(X)

# Оценка качества кластеризации (Индекс силуэта)
silhouette_avg = silhouette_score(X, kmeans.labels_)
print("Средний индекс силуэта: ", silhouette_avg, "\n")

# Анализ полученных кластеров
cluster_centers = kmeans.cluster_centers_
labels = kmeans.labels_
for i in range(k):
    cluster_indices = np.where(labels == i)[0]
    cluster_size = len(cluster_indices)
    print(f"Кластер {i+1}: {cluster_size} гонщиков")
    print("Средние значения признаков:")
    for j, feature in enumerate(features):
        print(f"{feature}: {cluster_centers[i][j]}")
    print()


# Визуализация результатов кластеризации
plt.scatter(X['Championships'], X['Race_Wins'], c=kmeans.labels_)
plt.xlabel('Championships')
plt.ylabel('Race_Wins')
plt.title('K-means Clustering of F1 Drivers')
plt.show()