31 lines
1.4 KiB
Python
31 lines
1.4 KiB
Python
|
import pandas as pd
|
|||
|
import matplotlib.pyplot as plt
|
|||
|
from scipy.cluster.hierarchy import dendrogram, linkage
|
|||
|
|
|||
|
# Загрузка данных из таблицы
|
|||
|
data = pd.read_csv('ufo_sighting_data.csv')
|
|||
|
|
|||
|
# Отбор необходимых столбцов
|
|||
|
columns = ['UFO_shape', 'length_of_encounter_seconds', 'latitude', 'longitude']
|
|||
|
data = data[columns]
|
|||
|
|
|||
|
# Замена отсутствующих значений
|
|||
|
data = data.fillna('Unknown')
|
|||
|
|
|||
|
# Преобразование данных в числовые значения, если необходимо
|
|||
|
# Например, можно преобразовать столбец 'length_of_encounter_seconds' из строкового в числовой формат
|
|||
|
data['length_of_encounter_seconds'] = pd.to_numeric(data['length_of_encounter_seconds'], errors='coerce')
|
|||
|
|
|||
|
# Выполнение иерархической кластеризации
|
|||
|
# Можно выбрать разные методы и метрики для кластеризации
|
|||
|
# Ниже пример с использованием евклидова расстояния и метода ward
|
|||
|
linkage_matrix = linkage(data[['latitude', 'longitude']], method='ward', metric='euclidean')
|
|||
|
|
|||
|
# Построение дендрограммы
|
|||
|
plt.figure(figsize=(10, 7))
|
|||
|
dendrogram(linkage_matrix)
|
|||
|
plt.xlabel('Наблюдения')
|
|||
|
plt.ylabel('Расстояние')
|
|||
|
plt.title('Дендрограмма')
|
|||
|
plt.show()
|