# importando a biblioteca matplotlib do python
import matplotlib.pyplot as plt
%matplotlib inline
# importando a biblioteca scipy do python
from scipy.cluster.hierarchy import dendrogram, linkage
# importando a biblioteca sklearn do python
from sklearn.cluster import AgglomerativeClustering
from sklearn.preprocessing import StandardScaler
# importando a biblioteca numpy do python
import numpy as np
# criando os dados para a variável x
x = [20, 27, 21, 37, 46, 53, 55, 47, 52, 32, 39, 41, 39, 48, 48]
# criando os dados para a variável y
y = [1000, 1200, 2900, 1850, 900, 950, 2000, 2100, 3000, 5900, 4100, 5100, 7000, 5000, 6500]
# criando uma lista vazia 'dataframe'
dataframe = []
# iterando os dados x e y em 'dataframe'
for i in range (0, 15):
dataframe.append((x[i], y[i]))
# transformando a lista em um array numpy
dataframe = np.asarray(dataframe)
# criando o objeto 'scaler'
scaler = StandardScaler()
# realizando o escalonamento de atributos em 'dataframe'
dataframe = scaler.fit_transform(dataframe)
# configurando alguns detalhes do gráfico
plt.figure(figsize = (20, 10))
plt.title('Dendrograma')
plt.xlabel('Pessoas')
plt.ylabel('Distâncias Euclidianas')
#configurando o objeto 'dendrograma' para gerar o gráfico
dendrograma = dendrogram(linkage(dataframe, method = 'ward'))
# 'linkage' responsável por unir os dados
# 'method' é a escolha do tipo de função para cálculo das distâncias, 'ward' é a que possui melhores
# resultados
# criando o objeto clusterizador 'hc'
hc = AgglomerativeClustering(n_clusters = 3, affinity = 'euclidean', linkage = 'ward')
# treinando e realizando a clusterização com os dados do dataframe
previsoes = hc.fit_predict(dataframe)
# configurando o gráfico
plt.figure(figsize = (10,5))
plt.title('Dados Clusterizados')
plt.scatter(dataframe[previsoes == 0, 0], dataframe[previsoes == 0, 1], s = 100, marker = 'x', c = 'red',
label = 'Cluster 1')
plt.scatter(dataframe[previsoes == 1, 0], dataframe[previsoes == 1, 1], s = 100, marker = 'x', c = 'blue',
label = 'Cluster 2')
plt.scatter(dataframe[previsoes == 2, 0], dataframe[previsoes == 2, 1], s = 100, marker = 'x', c = 'green',
label = 'Cluster 3')
plt.xlabel('Idade')
plt.ylabel('Salário')
plt.grid(True)
plt.box(False)
plt.legend()
<matplotlib.legend.Legend at 0x241d991bac8>