A função dendrogram do módulo scipy.cluster.hierarchy é usada para criar um dendrograma a partir de uma matriz de ligação (linkage matrix) calculada após a realização de um algoritmo de agrupamento hierárquico. Um dendrograma é um tipo de representação gráfica de uma hierarquia de agrupamentos, onde os objetos são aninhados em grupos com base em sua similaridade.

Parâmetros principais:

  • Z (array-like): A matriz de ligação gerada pelo algoritmo de agrupamento hierárquico, que conecta grupos de observações em uma estrutura hierárquica.

  • truncate_mode (str, opcional): Este parâmetro permite que você especifique como deseja cortar o dendrograma se ele for muito longo para caber na tela. Os valores possíveis incluem “lastp” (mantém apenas os últimos p níveis de clusters), “level” (corta o dendrograma em uma altura especificada) e “mtica” (mantém o maior nível de clusters possível).

  • p (int, opcional): Se o truncate_mode for definido como “lastp”, este parâmetro especifica quantos níveis de clusters a serem mantidos. Por exemplo, p=3 manterá apenas os últimos três níveis de clusters.

  • level (float, opcional): Se o truncate_mode for definido como “level”, este parâmetro especifica a altura na qual o dendrograma deve ser cortado. A altura é geralmente uma distância euclidiana entre clusters.

  • above_threshold_color (str, opcional): A cor dos clusters acima do nível de corte especificado quando truncate_mode é usado.

  • below_threshold_color (str, opcional): A cor dos clusters abaixo do nível de corte especificado quando truncate_mode é usado.

Retorno:

A função dendrogram retorna um objeto de dicionário que contém várias informações sobre o dendrograma gerado, incluindo as posições x e y dos nós (clusters) e informações sobre quais pontos de dados pertencem a cada cluster.

Exemplo:

import numpy as np
from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pyplot as plt
 
# Base de dados
x = [20,  27,  21,  37,  46, 53, 55,  47,  52,  32,  39,  41,  39,  48,  48]
y = [1000, 1200, 2900, 1850, 900, 950, 2000, 2100, 3000, 5900, 4100, 5100, 7000, 5000, 6500]
 
base_salary = np.array([
  [age, salary]
  for age, salary in zip(x, y)
])
 
# Calcule a matriz de ligação
linkage_matrix = linkage(base_salary, method='ward')
 
# Crie o dendrograma
dendrogram_ = dendrogram(linkage_matrix)
plt.title("Dendrograma")
plt.xlabel("Pessoas")
plt.ylabel("Distância")
plt.axhline(y=3.5, color='r', linestyle='--');

Saída:

Note

A linha representa o número ideal de cluster, que no caso é 3, pois a reta da direita não cruza com nenhum ponto na horizontal, com base isso essa reta seria um bom ponto de análise.

Neste exemplo, geramos dados aleatórios, calculamos a matriz de ligação usando o método de ligação “ward”, criamos o dendrograma e o exibimos usando Matplotlib. O dendrograma mostrará como os dados foram agrupados hierarquicamente com base em sua similaridade. Você pode ajustar a aparência do dendrograma e personalizá-lo de acordo com suas necessidades.