52 lines
2.8 KiB
Python
52 lines
2.8 KiB
Python
# Использовать метод кластеризации по варианту для данных из таблицы 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()
|