IIS_2023_1/almukhammetov_bulat_lab_4/lab4.py
2023-11-17 00:15:55 +04:00

52 lines
2.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.

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