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.
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.
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:
library(sidrar)
library(ggplot2)
library(lubridate)
library (zoo)
library(ggthemes)
library(scales)
library(tidyverse)
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
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"
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
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:
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.
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")
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.
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: