R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

PIB Trimestral no ggplot2

Vamos aprender a usar o ggplot2 para visualizar a série do PIB Trimestral. Os dados serão obtidos por raspagem, através do uso do pacote sidrar.

Baixando os pacotes necessários

Caso não os tenha instalado, é necessário fazê-lo para, depois, acioná-los em seu ambiente de trabalho. Os pacotes que precisamos são os seguintes:

  • sidrar: será usado para fazer a rapagem dos dados do SIDRA-IBGE.
  • ggplot2: suíte para elaboração de gráficos.
  • lubridate: pacote para montagem de datas.
  • zoo: um pacote de séries temporais. Usaremos uma função dele para produzir datas trimestrais.
  • ggthemes: servirá para melhorar a apresentação dos gráficos.
  • scales: será usada uma função para separar datas no gráfico.
library(sidrar)
library(ggplot2)
library(lubridate)
library (zoo)
library(ggthemes)
library(scales)
library(tidyverse)

Raspagem dos dados

Vamos fazer a raspagem diretamente do SIDRA, usando o pacote sidrar. Para isso, precisamos escolher a tabela a ser usada no SIDRA, modelar ela de acordo com nossos interesses e alimentar a função do pacote SIDRAR com o enderço da tabela. A tabela que nos interessa é a de nº 5932 - taxa de variação do índice de volume trimestral.

Na tabela, ajustamos um leiaute que bote os valores em linha. Escolhemos as variáveis: Taxa trimestre contra trimestre imediatamente anterior, PIB a preços de mercador. Selecionamos todos os trimestres. Em seguida, clicamos no ícone dos elos - Links de Compartilhar. E copia-se, do espaço Parâmetros para API o trecho conforme abaixo.

y<-get_sidra(api ="/t/5932/n1/all/v/6564/p/all/c11255/90707/d/v6564%201")

Na raspagem acima, foi usada a função get_sidra. Para facilitar a operação, foi criado um objeto y.

Em seguida, podemos conferir a classe desse objeto, no caso um data frame e visualizá-lo da seguinte maneira:

head(y)
##   Nível Territorial (Código) Nível Territorial Unidade de Medida (Código)
## 2                          1            Brasil                           
## 3                          1            Brasil                          2
## 4                          1            Brasil                          2
## 5                          1            Brasil                          2
## 6                          1            Brasil                          2
## 7                          1            Brasil                          2
##   Unidade de Medida Valor Brasil (Código) Brasil Variável (Código)
## 2                      NA               1 Brasil              6564
## 3                 %   0.9               1 Brasil              6564
## 4                 %   3.9               1 Brasil              6564
## 5                 %  -1.0               1 Brasil              6564
## 6                 %   1.0               1 Brasil              6564
## 7                 %   0.7               1 Brasil              6564
##                                                 Variável Trimestre (Código)
## 2 Taxa trimestre contra trimestre imediatamente anterior             199601
## 3 Taxa trimestre contra trimestre imediatamente anterior             199602
## 4 Taxa trimestre contra trimestre imediatamente anterior             199603
## 5 Taxa trimestre contra trimestre imediatamente anterior             199604
## 6 Taxa trimestre contra trimestre imediatamente anterior             199701
## 7 Taxa trimestre contra trimestre imediatamente anterior             199702
##           Trimestre Setores e subsetores (Código)    Setores e subsetores
## 2 1º trimestre 1996                         90707 PIB a preços de mercado
## 3 2º trimestre 1996                         90707 PIB a preços de mercado
## 4 3º trimestre 1996                         90707 PIB a preços de mercado
## 5 4º trimestre 1996                         90707 PIB a preços de mercado
## 6 1º trimestre 1997                         90707 PIB a preços de mercado
## 7 2º trimestre 1997                         90707 PIB a preços de mercado
class(y)
## [1] "data.frame"

Como podemos ver, a tabela é enorme e muita coisa nela não nos interessa. Vamos criar outro data frame, y2 só com as colunas de nosso interesse. Mas também vamos eliminar a primeira linha deste objteo y2. Isso porque essa primeira linha traz informação inexistente. Os comandos são os seguintes:

y2<-data.frame(y$Trimestre, y$Valor)
y2<-y2[-1, ]
head(y2)
##         y.Trimestre y.Valor
## 2 2º trimestre 1996     0.9
## 3 3º trimestre 1996     3.9
## 4 4º trimestre 1996    -1.0
## 5 1º trimestre 1997     1.0
## 6 2º trimestre 1997     0.7
## 7 3º trimestre 1997     1.2

Vamos renomear a coluna y$Valor como pib.

pib<-y2$y.Valor 

Resolvendo o problema das datas

Acontece, contudo, que o R não reconhece a coluna de trimestres do objeto y2 como datas. Além disso, visando o uso da coluna de datas pelo pacote ggplot2 precisamos fazer alguns ajustes na coluna de datas para apresentá-la em forma trimestral.

Primeiro, vamos criar uma coluna efetivamente de datas trimestrais com a ajuda da função seq.Date. Fiquem atentas aos argumentos das funções. Não poucas vezes, eles são bastantes literais. Notem que a classe o objeto a ser criado, trim é data.

trim<-seq.Date(from = as_date("1996-04-01"),
                      to = as_date("2021-12-01"),
                      "quarter")
class(trim)
## [1] "Date"

Vamos agora deixar a coluna de datas em um formato adequado ao gráfico que faremos com o ggplot2. Para tanto, usaremos uma função do pacote zoo, como dito antes. O q do argumento da função abaixo faz referência ao trimestre (quarterly em inglês).

trimestre = as.yearqtr(trim, format='%Y%q')
head(trimestre)
## [1] "1996 Q2" "1996 Q3" "1996 Q4" "1997 Q1" "1997 Q2" "1997 Q3"

Criando um data frame final

Vamos agora juntar o que já fizemos em um data frame:

pib_tri <- data.frame(trimestre, pib)
head(pib_tri)
##   trimestre  pib
## 1   1996 Q2  0.9
## 2   1996 Q3  3.9
## 3   1996 Q4 -1.0
## 4   1997 Q1  1.0
## 5   1997 Q2  0.7
## 6   1997 Q3  1.2

Renomeando as colunas de nosso data frame com a função colnames():

colnames(pib_tri) = c('trimestres', 'pib_trim')
head(pib_tri)
##   trimestres pib_trim
## 1    1996 Q2      0.9
## 2    1996 Q3      3.9
## 3    1996 Q4     -1.0
## 4    1997 Q1      1.0
## 5    1997 Q2      0.7
## 6    1997 Q3      1.2

Gráficos no ggplot2

Vamos fazer um gráfico inicial bem básico. Observem que o ggplot funciona por camadas de aprimoramento e intruções. Essa camadas são inseridas na programação por meio do sinal “+”.

ggplot(pib_tri, aes(x=trimestres, y=pib_trim))+
  geom_line(col="blue")

O gráfico acima é muito básico. Notem que nem os trimestres estão devidamente apresentados.

Vamos acrescentar camadas e instruções para melhorar o gráfico.

ggplot(pib_tri, aes(x=trimestres, y=pib_trim))+theme_linedraw()+
  geom_line(col="blue", size = .8)+
  geom_hline(yintercept=0, colour='red', linetype='dashed')+
  scale_x_yearqtr(breaks = seq(from = min(pib_tri$trimestres),
                               to = max(pib_tri$trimestres),
                               by = 1),
                  format = "%Y/Tri%q")+
  theme(axis.text.x=element_text(angle=45, hjust=1),
        plot.title = element_text(size=10, face='bold'))+
  labs(x='Ano/Trimestre', y='PIB (%)',
       title='PIB Trimestral',subtitle = '1996-2021',
       caption='Fonte: Joahannes Brahms')

Os comandos mais importantes da programação acima são os seguintes:

  • aes define quem vai ser o x e quem vai ser o y do gráfico.
  • them_linedraw é uma função do pacote ggthemes. Serve para definir um padrão para o gráfico.
  • geom_line diz que queremos linhas em nosso gráfico (vejam os seus argumentos),
  • geom_hline serve para se traçar uma linha horizontal. Ajuda a visualizar a trajetória do PIB trimestral, pois marcamos sua posição em zero: yintercept =0.
  • scale_x_yearqtr essa função é do pacote scales. Serve para espaçar as datas do eixo x(argumento by). Atenção para o qtr, de trimestral. e também para o formato escolhido para as datas.
  • theme serve para definir aspectos gerais do gráfico, como o tamanho do título, por exemplo.
  • labs serve para nomear argumentos do gráfico, como por exemplo, “Fonte: …”.

Observando que o espaçamento nas datas está de acordo com a escolha feita no argumento by da função scale_x_yearqtr. Vamos melhorara ainda mais o gráfico em seguida.

PIB Trimestral e médias móveis

Uma velha máxima da programação é que se pode chegar a um mesmo resultado de diversas formas. Vamos aproveitar a instrução sobre como incluir médias móveis no gráfico do PIB Trimestral para chegar aos mesmos resultados que chegamos antes, de outra maneira.

(Vou modificar um pouco a letras usadas antes). Primeiro acessamos a base de dados que nos interessa por raspagem:

yp<-get_sidra(api ="/t/5932/n1/all/v/6564/p/all/c11255/90707/d/v6564%201")

Agora, separamos as variáveis que nos interessa do data frame baixado, o yp. No comando logo abixo, entre colchetes já pedimos para a primeira linha ser eliminada do data frame (o valor é NA).

dfyp<-data.frame(yp$Trimestre, yp$Valor)[-1,] 

Vamos renomear as colunas do data frame criado:

colnames(dfyp) = c("trime", "Pib")

Como antes, é preciso criar uma coluna de trimestres.

trimes<-seq.Date(from = as_date("1996-04-01"),
               to = as_date("2021-12-01"),
               "quarter")

Vamos usar uma função do pacote zoo para dar um formato mais apropriado à coluna trime.

trimestres = as.yearqtr(trimes, format='%Y%q')

Vamos juntar tudo em um data frame:

PIB_Tri <- data.frame(trimestres,dfyp$Pib)

Renomeando o data frame PIB_Tri:

colnames(PIB_Tri)<- c("Trimestres", "PIB")

Médias móveis

Vamos encontrar uma coluna de médias móveis e inseri-la no data frame PIB_Tri.

PIB_Trim<-PIB_Tri%>%mutate(Média_móvel = rollmean(PIB, k= 6, fill= NA))

A média móvel calculada é para seis períodos (trimestres) os espaços vazios serão preenchidos com a informção NA.

Gráfico com média móvel

Inicialmente, vamos criar um vetor (objeto) para ajudar na especificação das cores do gráfico.

cores<-c("PIB"="darkgreen", "Média_móvel" = "red")

O gráfico:

ggplot(PIB_Trim, aes(x=Trimestres, y= PIB))+theme_bw()+
  geom_line(aes(y=PIB, colour = "PIB"), size = 1)+
  geom_line(aes (y = Média_móvel, colour = "Média_móvel"), size = 1)+
  scale_x_yearqtr(breaks = seq(from = min(PIB_Trim$Trimestres),
                               to = max(PIB_Trim$Trimestres),
                               by = 1),
                  format = "%Y/Tri%q")+
  theme(axis.text.x=element_text(angle=45,face = 'bold', hjust=1),
        axis.text.y=element_text(face='bold'),
        plot.title = element_text(size=10, face='bold', hjust = 0.5), 
        plot.subtitle = element_text(size = 10, face = 'bold', hjust = 0.5),
        legend.position = "top")+
  labs(x='Ano/Trimestre', y='PIB (%)',
       title='PIB Trimestral',subtitle = '1996-2021',
       caption='Fonte: Johannes Brahms', color = "")+
  scale_color_manual(values = cores) ### Perfeito! 
## Warning: Removed 5 row(s) containing missing values (geom_path).

Camadas adicionais em relação ao gráfico anterior:

  • geom_line com a coluna de médias móveis.
  • Em theme informamos que queremos o título centralizado (hjust=0.5) e em negrito.
  • O mesmo vale para o subtítulo.
  • em scale_color definimos as cores conforme o vetor de cores previamente criado.