IIS_2023_1/almukhammetov_bulat_lab_4/lab4.py

52 lines
2.8 KiB
Python
Raw Normal View History

2023-11-17 00:15:55 +04:00
# Использовать метод кластеризации по варианту для данных из таблицы 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()