Prova 1° GQ - Laboratório de Dados Econômicos¶
Aluno: Joel Victor Sobrinho Da Silva
2 - O que é tidyverse? Explique as principais? Explique as seguintes funções do tidyverse: pipe, select, filter, mutate. Qual a diferença ente um data.frame e um tibble¶
O tidyverse é um pacote (ecosistema), que agrega vários pacotes, como dplyr, lubridate, forcats, ggplot etc. É como um canivete suiço para trabalhar com análise ou ciência de dados.
Explicação para as funções:
- pipe: %>% é um operador/função que funciona como um "e, então" concatenando várias operações para manipular um dataframe.
Exemplo: df = df_raw %>% select(coluna1, coluna2) %>% mutate(nova_coluna = coluna1 + coluna2)
select: permite selecionar colunas de um data.frame ou tibble
filter: permite filtrar um data.frame/tibble com base com base em valores que aparecem em uma coluna Exemplo: df %>% filter(coluna1 > 10)
mutate: permite criar ou editar colunas em um data.frame/tibble Exemplo: df
A principal diferença entre um data.frame e tibble é que que a classe de objetos data.frame faz parte do 'R base', já a classe de objetos faz parte do 'universo' do tidyverse, e um objeto da classe tibble.
3 - Em que sentido o tidyverse pode ser considerado um conjunto de pacotes de código aberto (Open Source) e também um software livre (Free Software)?¶
Exise uma grande diferença entre softwares de código aberto (Open Source) e software livre (Free software).
- Softwares livres são aqueles que permitem o uso livre mas não possuem o código aberto para modificações
- Softwares de código aberto são aqueles que possuem o seu código de fonte livre para todos estudarem, editarem e lançarem as suas próprias versões, a depender do tipo de licença pode ser mais permissivo ou mais restrito no que se pode fazer com o código disponibilizado.
4 - Tabela 7060 - IPCA¶
Para essa questão foi solicitado coletar os dados da tabela 7060 do Sidra-IBGE, com os dados do 'IPCA'
# Carrega os pacotes
library(sidrar) # pacote para consumir dados da api do ibge-sidra
library(tidyverse) # pacote do ecosistema tidyverse, que carrega vários pacotes como dplyr, forcats etc
# Carrega a tabela com a variação mensal do ipca para o Brasil, Rio de Janeiro e Salvador
ipca_long = get_sidra(api = "/t/7060/n1/all/n7/2901,3301/v/63/p/last%2024/c315/7169/d/v63%202")
# Visualiza os dados
head(ipca_long)
All others arguments are desconsidered when 'api' is informed
| Nível Territorial (Código) | Nível Territorial | Unidade de Medida (Código) | Unidade de Medida | Valor | Brasil e Região Metropolitana até 2020 (Código) | Brasil e Região Metropolitana até 2020 | Variável (Código) | Variável | Mês (Código) | Mês | Geral, grupo, subgrupo, item e subitem (Código) | Geral, grupo, subgrupo, item e subitem | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <chr> | <chr> | <chr> | <dbl> | <chr> | <chr> | <chr> | <chr> | <chr> | <chr> | <chr> | <chr> | |
| 2 | 1 | Brasil | 2 | % | 0.26 | 1 | Brasil | 63 | IPCA - Variação mensal | 202309 | setembro 2023 | 7169 | Índice geral |
| 3 | 1 | Brasil | 2 | % | 0.24 | 1 | Brasil | 63 | IPCA - Variação mensal | 202310 | outubro 2023 | 7169 | Índice geral |
| 4 | 1 | Brasil | 2 | % | 0.28 | 1 | Brasil | 63 | IPCA - Variação mensal | 202311 | novembro 2023 | 7169 | Índice geral |
| 5 | 1 | Brasil | 2 | % | 0.56 | 1 | Brasil | 63 | IPCA - Variação mensal | 202312 | dezembro 2023 | 7169 | Índice geral |
| 6 | 1 | Brasil | 2 | % | 0.42 | 1 | Brasil | 63 | IPCA - Variação mensal | 202401 | janeiro 2024 | 7169 | Índice geral |
| 7 | 1 | Brasil | 2 | % | 0.83 | 1 | Brasil | 63 | IPCA - Variação mensal | 202402 | fevereiro 2024 | 7169 | Índice geral |
Os dados coletados via pacote sidrar normalmente são entregues em formato "longo", vamos aplicar uma série de transformações para deixar os dados no formato desejado.
- Vamos usar a função mutate para criar uma nova coluna de datas
- A função parse_date do pacote 'lubridate' foi utilizada, com o argumento format = "%Y%m"
- A função select foi selecionado para selecionar apenas as colunas de interesse
- e por fim a função pivot_wider foi utilizada para 'pivotear' os dados e sair do formato "longo" para o formato "largo"
# Cria o dataframe no formato wide
ipca_wide = ipca_long %>%
# Usa a função mutate para criar uma nova coluna de datas
mutate(Data = parse_date(x = ipca_long$`Mês (Código)`,format = "%Y%m")) %>%
# Usa a função select para selecionar as colunas de interesse
select('Brasil e Região Metropolitana até 2020', 'Valor', 'Data') %>%
# Usa a função pivot_wider para sair de um formato 'longo' para um formato 'wide'
pivot_wider(names_from = 'Brasil e Região Metropolitana até 2020', values_from = 'Valor')
# Olha o novo dataframe
head(ipca_wide)
| Data | Brasil | Salvador (BA) | Rio de Janeiro (RJ) |
|---|---|---|---|
| <date> | <dbl> | <dbl> | <dbl> |
| 2023-09-01 | 0.26 | 0.05 | 0.18 |
| 2023-10-01 | 0.24 | 0.29 | 0.38 |
| 2023-11-01 | 0.28 | -0.17 | 0.57 |
| 2023-12-01 | 0.56 | 0.84 | 0.65 |
| 2024-01-01 | 0.42 | 0.13 | 0.44 |
| 2024-02-01 | 0.83 | 0.96 | 0.88 |
5 - Tabela 6784 - PIB e PIB per capita¶
Para essa questão foi solicitado coletar os dados da tabela 6784 do Sidra-IBGE, com os dados do 'PIB' e 'PIB per capita'
# Carrega os dados sobre PIB e PIB per capita usando a funçao get_sidra do pacote sidrar
pib_long = get_sidra(api = "/t/6784/n1/all/v/9808,9812/p/all/d/v9812%202")
# Olha o dataframe
head(pib_long)
All others arguments are desconsidered when 'api' is informed
| Nível Territorial (Código) | Nível Territorial | Unidade de Medida (Código) | Unidade de Medida | Valor | Brasil (Código) | Brasil | Variável (Código) | Variável | Ano (Código) | Ano | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <chr> | <chr> | <chr> | <dbl> | <chr> | <chr> | <chr> | <chr> | <chr> | <chr> | |
| 2 | 1 | Brasil | 1550 | Milhões de Reais | 854764 | 1 | Brasil | 9808 | PIB - valores correntes | 1996 | 1996 |
| 3 | 1 | Brasil | 1550 | Milhões de Reais | 952089 | 1 | Brasil | 9808 | PIB - valores correntes | 1997 | 1997 |
| 4 | 1 | Brasil | 1550 | Milhões de Reais | 1002351 | 1 | Brasil | 9808 | PIB - valores correntes | 1998 | 1998 |
| 5 | 1 | Brasil | 1550 | Milhões de Reais | 1087710 | 1 | Brasil | 9808 | PIB - valores correntes | 1999 | 1999 |
| 6 | 1 | Brasil | 1550 | Milhões de Reais | 1199092 | 1 | Brasil | 9808 | PIB - valores correntes | 2000 | 2000 |
| 7 | 1 | Brasil | 1550 | Milhões de Reais | 1315755 | 1 | Brasil | 9808 | PIB - valores correntes | 2001 | 2001 |
Aqui foi criado um novo dataframe fitrando apenas os dados do 'PIB per capita - valores correntes'
# Filtra apenas para 'PIB per capita - valores correntes'
pib_long_per_capita = pib_long %>%
filter(pib_long$`Variável` == 'PIB per capita - valores correntes')
# Observa o dataframe
head(pib_long_per_capita)
| Nível Territorial (Código) | Nível Territorial | Unidade de Medida (Código) | Unidade de Medida | Valor | Brasil (Código) | Brasil | Variável (Código) | Variável | Ano (Código) | Ano | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <chr> | <chr> | <chr> | <dbl> | <chr> | <chr> | <chr> | <chr> | <chr> | <chr> | |
| 1 | 1 | Brasil | 38 | Reais | 5219.36 | 1 | Brasil | 9812 | PIB per capita - valores correntes | 1996 | 1996 |
| 2 | 1 | Brasil | 38 | Reais | 5729.02 | 1 | Brasil | 9812 | PIB per capita - valores correntes | 1997 | 1997 |
| 3 | 1 | Brasil | 38 | Reais | 5944.92 | 1 | Brasil | 9812 | PIB per capita - valores correntes | 1998 | 1998 |
| 4 | 1 | Brasil | 38 | Reais | 6359.80 | 1 | Brasil | 9812 | PIB per capita - valores correntes | 1999 | 1999 |
| 5 | 1 | Brasil | 38 | Reais | 6863.88 | 1 | Brasil | 9812 | PIB per capita - valores correntes | 2000 | 2000 |
| 6 | 1 | Brasil | 38 | Reais | 7433.48 | 1 | Brasil | 9812 | PIB per capita - valores correntes | 2001 | 2001 |
Aqui o pacote 'ggplot2' foi utilizado para criar um gráfico de linhas da variável 'PIB per capita - valores correntes'
# Ajusta a saída da célula para aumentar o tamanho do gráfico
options(repr.plot.width = 22, repr.plot.height = 8)
# Plota um dataset no formato longo usando o ggplot
ggplot(data = pib_long_per_capita, aes(x = as.numeric(Ano), y = Valor, colour = Variável)) +
geom_line(color = 'red', linewidth = .9) +
theme_minimal() +
labs(title = aes("PIB per capita do Brasil"),
subtitle = "Valores em R$ Milhões",
x = "Ano",
y = "Valor"
)