41 lines
1.8 KiB
Python
41 lines
1.8 KiB
Python
|
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)
|