Faaaaaaaaaaaaala cientista! Tudo certo?
No segundo post da série vamos melhorar nosso gráfico de dispersão preliminar, obtido a partir dos dados do IBGE [1]. Definiremos uma cor para cada região, adicionaremos rótulos e título. Com isso o gráfico começa a ficar mais informativo. Vamos lá?
Só pra lembrar, no primeiro post da série [2] utilizamos os códigos a seguir para definir nosso gráfico preliminar:
# importando os pacotes necessários. import matplotlib.pyplot as plt import pandas as pd # lendo o arquivo dados_ibge.xls dados_brasil = pd.read_excel('dados_ibge.xls', sheetname=2) # gerando o gráfico. plt.scatter(x = dados_brasil['ExpecVida'], y = dados_brasil['PIBperCapita'], s = dados_brasil['PopX1000']) plt.show()
Com eles importamos o Pandas [3] e o matplotlib [4], lemos o arquivo dados_ibge.xls [5] e geramos o gráfico a seguir:
Os eixos desse gráfico apresentam a expectativa de vida e o PIB per capita, e a população de cada estado é representada pelo tamanho de cada círculo. Mas ainda não sabemos qual é cada estado ou região.
Para que nosso gráfico fique mais informativo, adicionaremos rótulos e título. Além disso, para que cada estado possua uma cor relacionada à região na qual ele está, vamos definir uma cor para cada região.
Primeiro criaremos uma lista com os valores hexa da paleta de cores 5-class Dark2, do ColorBrewer2 [6]. Esse vetor tem cinco cores, cada uma representando uma região do Brasil:
cores = ['#1b9e77', '#d95f02', '#7570b3', '#e7298a', '#66a61e']
Agora definiremos uma função, atribui_cor(), que possui um dicionário apontando a cor correspondente a cada região. Quando a função recebe uma região que não está definida no dicionário, atribui_cor() retorna a cor preta, ‘black’.
def atribui_cor(regiao): cores = { 'Norte':'#1b9e77', 'Nordeste':'#d95f02', 'Sudeste':'#7570b3', 'Sul':'#e7298a', 'CentroOeste':'#66a61e' } return cores.get(regiao, 'black')
Então criaremos o vetor de cores, uma lista que receberá a cor de cada estado de acordo com a região. A quantidade de estados é calculada pelo comprimento len(dados_brasil[‘Regiao’]), e a lista recebe cada valor usando append().
cor_regiao = list() qtde_estados = len(dados_brasil['Regiao']) for estado in range(qtde_estados): cor_regiao.append(atribui_cor(dados_brasil['Regiao'][estado]))
Usando print() vemos o vetor com as cores:
print(cor_regiao) ['#1b9e77', '#1b9e77', '#1b9e77', '#1b9e77', '#1b9e77', '#1b9e77', '#1b9e77', '#d95f02', '#d95f02', '#d95f02', '#d95f02', '#d95f02', '#d95f02', '#d95f02', '#d95f02', '#d95f02', '#7570b3', '#7570b3', '#7570b3', '#7570b3', '#e7298a', '#e7298a', '#e7298a', '#66a61e', '#66a61e', '#66a61e', '#66a61e']
Usaremos o vetor cor_regiao como argumento em scatter(), do matplotlib. Além disso, passaremos também o argumento alpha = 0.6, que deixará os círculos mais transparentes:
plt.scatter(x = dados_brasil['ExpecVida'], y = dados_brasil['PIBperCapita'], s = dados_brasil['PopX1000'], c = cor_regiao, alpha = 0.6)
Então, colocaremos o título, rótulos nos eixos X e Y, e grade:
plt.title('Desenvolvimento do Brasil em 2013, por estado', fontsize=22) plt.xlabel('Expectativa de vida (anos)', fontsize=22) plt.ylabel('PIB per capita (R$)', fontsize=22) plt.grid(True)
O argumento fontsize=22 aumenta o tamanho da fonte exibida.
Para mostrar o gráfico, usamos plt.show(). A figura resultante é dada a seguir:
Nosso gráfico já melhorou em relação ao inicial! Agora, por exemplo, conseguimos ver que os estados tendem a estar próximos, de acordo com a sua região.
Ainda não conseguimos saber qual é cada estado, ou estimar qual é a quantidade de pessoas… também precisamos saber que cor representa cada região. Resolveremos isso na semana que vem, com mais rótulos e legendas! Fique conosco!
Valeu cientista! Um giga abraço e até a próxima!
Gostou? Curta e compartilhe com seus amigos!
Quer baixar os códigos do Programando Ciência? Corre lá no nosso GitHub!
Faça uma doação pro Programando Ciência!
Curta a gente também no Facebook: www.facebook.com/programandociencia
Estou no Twitter! Siga-me se puder! @alexdesiqueira