#!/usr/bin/env python # coding: utf-8 # # Agrupamento Hierárquico # #### Aplicando o algoritmo de agrupamento hierárquico em uma base de dados de salário por idade. # In[4]: # importando a biblioteca matplotlib do python import matplotlib.pyplot as plt get_ipython().run_line_magic('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 # In[5]: # 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) # In[6]: # criando o objeto 'scaler' scaler = StandardScaler() # In[7]: # realizando o escalonamento de atributos em 'dataframe' dataframe = scaler.fit_transform(dataframe) # In[12]: # 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 # In[15]: # criando o objeto clusterizador 'hc' hc = AgglomerativeClustering(n_clusters = 3, affinity = 'euclidean', linkage = 'ward') # In[16]: # treinando e realizando a clusterização com os dados do dataframe previsoes = hc.fit_predict(dataframe) # In[17]: # 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() # ### Alguma Dúvida? Entre em Contato Comigo: # - [Me envie um e-mail](mailto:alysson.barbosa@ee.ufcg.edu.br);