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) |