42 lines
1.5 KiB
Python
42 lines
1.5 KiB
Python
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()
|