IIS_2023_1/tsyppo_anton_lab_4/main.py
2023-12-06 15:08:42 +04:00

41 lines
1.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)