import pandas as pd from sklearn.manifold import TSNE import matplotlib.pyplot as plt from sklearn.preprocessing import LabelEncoder # Чтение данных из файла CSV data = pd.read_csv("Hostel.csv") # Очистка данных и заполнение пропущенных значений data['Distance'] = data['Distance'].str.replace('km from city centre', '').astype(float) data['summary.score'] = data['summary.score'].fillna(data['summary.score'].mean()) # Закодируем категориальную переменную "City" с использованием LabelEncoder le = LabelEncoder() data['City'] = le.fit_transform(data['City']) # Выбор нужных колонок для кластеризации features = ['summary.score', 'Distance', 'City'] X = data[features] # Применение t-SNE для уменьшения размерности tsne = TSNE(n_components=2, random_state=42) X_tsne = tsne.fit_transform(X) # Добавление кластеров к датафрейму data['cluster'] = X_tsne.argmax(axis=1) # Используем argmax для определения кластера # Визуализация результатов plt.figure(figsize=(10, 6)) scatter = plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=data['cluster'], cmap='viridis', s=data['Distance']**1.5) plt.title('t-SNE Кластеризация хостелов') plt.xlabel('t-SNE Component x') plt.ylabel('t-SNE Component y') plt.legend(*scatter.legend_elements(), title='Clusters') plt.tight_layout() plt.savefig('Clustering.png') plt.show() # Вывод средних значений для каждого кластера cluster_means = data.groupby('cluster').agg({'City': 'mean', 'Distance': 'mean', 'summary.score': 'mean'}) print(cluster_means)