# Использовать метод кластеризации по варианту для данных из таблицы 1 по варианту(таблица 9), самостоятельно # сформулировав задачу. Интерпретировать результаты и оценить, насколько хорошо он подходит для решения # сформулированной вами задачи. # Кластеризация: Группировка домов на основе их характеристик, таких как широта, долгота, возраст дома, # общее количество комнат и т. д. Выделяем общие особенности или характеристики в различных районах. # У меня второй вариант, остаток от деления номера варианта на 5 : 5/2=0 целых, остаток 2, берем второй вариант - # алгоритм кластеризации - linkage import matplotlib.pyplot as plt import pandas as pd import seaborn as sns from scipy.cluster.hierarchy import linkage, fcluster from sklearn.preprocessing import StandardScaler data = pd.read_csv('housing.csv') # Выделение интересующих столбцов features = data[['housing_median_age', 'total_rooms', 'median_house_value']] # Заполнение пропущенных значений медианой features = features.fillna(features.median()) # Стандартизация данных scaler = StandardScaler() scaled_features = scaler.fit_transform(features) # Применение алгоритма linkage для кластеризации linkage_matrix = linkage(scaled_features, method='ward', metric='euclidean') # Выбор оптимального числа кластеров и применение кластеризации num_clusters = 5 # Выберите желаемое количество кластеров clusters = fcluster(linkage_matrix, num_clusters, criterion='maxclust') # Добавление информации о кластерах в исходные данные features['cluster'] = clusters # Вывод результатов кластеризации print(features[['housing_median_age', 'total_rooms', 'median_house_value', 'cluster']]) clustered_data = features.groupby('cluster').describe() print(clustered_data) # Визуализация результатов кластеризации с использованием seaborn plt.figure(figsize=(12, 6)) sns.scatterplot(x='housing_median_age', y='total_rooms', size='median_house_value', sizes=(10, 200), hue='cluster', palette='viridis', data=features) plt.title('Clustering Results') plt.xlabel('Housing Median Age') plt.ylabel('Total Rooms') plt.show()