IIS_2023_1/tsyppo_anton_lab_4/main.py

41 lines
1.8 KiB
Python
Raw Permalink Normal View History

2023-12-06 15:08:42 +04:00
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)