# Instala (se necessário)
install.packages("remotes")
# Instala o pacote realestatebr
::install_github("viniciusoike/realestatebr") remotes
Real Estate Brazil
Consumir os dados do mercado imobiliário brasileiro não é tarefa fácil. Pensando em simplificar este processo eu criei um pacote chamado realestatebr
que importa e limpa diversas bases de dados relacionadas ao mercado imobiliário. Atualmente, o pacote está majoritariamente focado no mercado residencial.
Para instalar o pacote é preciso ter o devtools
ou remotes
instalado.
O pacote é estruturado em torno de funções get_*
que importam bases de dados. O pacote cobre:
Abrainc: Indicadores
Abrainc: IAMI
Abrainc: Radar
Abrainc: Relatórios MCMV e MAP
Abecip: IGMI-R
Abecip: Indicadores de crédito
BIS: Residential Property Price Indices
Banco Central do Brasil: Estatísticas do Mercado Imobiliário
Banco Central do Brasil: Séries macroeconômicas
B3: Ações de empresas relacionadas ao mercado imobiliário
FipeZap: Índice FipeZap
FGV-Ibre: Séries macroeconômicas, IVAR, INCC, etc.
QuintoAndar: Índice QuintoAndar de Aluguel
Registro de Imóveis
SECOVI-SP: Panorama do Mercado Imobiliário
Para mais detalhes sobre o pacote consulte o repositório no GitHub.
Usando o pacote
Os exemplos abaixo demonstram alguns dos usos do pacote.
library(dplyr)
library(ggplot2)
library(RcppRoll)
library(realestatebr)
Índices de Preços
O Brasil tem diversos índices de preços imobiliários. A função get_rppi
permite baixar tanto os índices de aluguel como de compra/venda. O código abaixo importa as séries do FipeZap, IGMI-R (FGV e Abecip) e IVG-R (BCB).
<- get_rppi("sale", stack = TRUE) sale
Os dados são importados em formato longitudinal identificados pela coluna source
. A coluna chg
traz a variação mensal do índice enquanto a coluna acum12m
traz a variação acumulada em 12 meses.
O código abaixo mostra os três índices desde 2018. Note que há um descolamento interessante entre o IGMI-R e o IVG-R. O Índice FipeZap e o IVG-R, que historicamente costumam convergir, também apresentam comportamento divergente nesta janela de tempo.
# Filter only Brazil
<- sale |>
rppi_brasil filter(
== "Brazil" | name_muni == "Índice Fipezap",
name_muni >= as.Date("2018-01-01"),
date <= as.Date("2023-06-01")
date
)
ggplot(rppi_brasil, aes(date, acum12m)) +
geom_line(aes(color = source)) +
scale_x_date(date_breaks = "1 year", date_labels = "%Y") +
scale_y_continuous(labels = scales::label_percent()) +
scale_color_manual(
name = "", values = c("#264653", "#2a9d8f", "#e9c46a")
+
) labs(
title = "Índices de Preço",
x = NULL,
y = "Acumulado 12 meses"
+
) theme_light() +
theme(legend.position = "top")
O gráfico abaixo mostra as séries num horizonte maior de tempo.
<- sale |>
rppi_brasil filter(
== "Brazil" | name_muni == "Índice Fipezap",
name_muni >= as.Date("2009-01-01"),
date <= as.Date("2023-06-01")
date
)
ggplot(rppi_brasil, aes(date, acum12m)) +
geom_line(aes(color = source)) +
scale_x_date(date_breaks = "1 year", date_labels = "%Y") +
scale_y_continuous(labels = scales::label_percent()) +
scale_color_manual(
name = "", values = c("#264653", "#2a9d8f", "#e9c46a")
+
) labs(
title = "Índices de Preço",
x = NULL,
y = "Acumulado 12 meses"
+
) theme_light() +
theme(legend.position = "top")
Financiamento de Imóveis
Pode-se importar facilmente os dados da Abecip sobre financiamentos imobiliários. A função get_abecip_indicators
é uma lista que retorna dados sobre o SBPE e o CGI.
# Import data from Abecip
<- get_abecip_indicators()
abecip
names(abecip)
[1] "sbpe" "units" "cgi"
O gráfico abaixo mostra o total de unidades financiadas a cada ano.
<- abecip$units
unidades
<- unidades |>
tbl_unidades_ano mutate(ano = lubridate::year(date)) |>
summarise(total_ano = sum(units_total), .by = "ano")
ggplot(tbl_unidades_ano, aes(x = ano, y = total_ano)) +
geom_col(fill = "#264653") +
geom_hline(yintercept = 0) +
scale_x_continuous(breaks = 2001:2023) +
scale_y_continuous(labels = scales::label_number(big.mark = ".")) +
labs(
title = "Unidades Financiadas SBPE",
x = NULL,
y = "Unidades",
caption = "Unidades de 2023 acumuladas até agosto."
+
) theme_light() +
theme(
panel.grid.minor.x = element_blank(),
panel.grid.major.x = element_blank(),
axis.text.x = element_text(angle = 90)
)
Preços de Imóveis
O Banco Central disponibiliza uma enorme variedade de séries relacionadas ao mercado imobiliário. A função get_bcb_realestate
retorna mais de 3500 séries. Para agilizar o download destas bases, todas as funções oferecem a opção cached = TRUE
. Usando esta opção o download é feito via GitHub e tende a ser mais rápido; o dado, contudo, corre o risco de estar levemente desatualizado.
<- get_bcb_realestate(category = "all", cached = TRUE)
bcb
length(unique(bcb$series_info))
[1] 3656
Infelizmente, não é trivial usar esta base de dados. As colunas category
, type
e v1
a v5
tentam facilitar o trabalho de filtrar as linhas. Há seis grandes categorias.
count(bcb, category)
# A tibble: 6 × 2
category n
<fct> <int>
1 contabil 303
2 credito 285853
3 direcionamento 5223
4 fontes 604
5 indices 555
6 imoveis 25353
Cada série é identificada pela coluna series_info
. Quebrando esta coluna em outras, fica um pouco mais fácil de encontrar as séries desejadas.
|>
bcb filter(category == "contabil") |>
count(series_info, type, v1)
# A tibble: 3 × 4
series_info type v1 n
<chr> <chr> <chr> <int>
1 contabil_bndu_imobiliario_br bndu imobiliario 81
2 contabil_financiamento_comercial_br financiamento comercial 111
3 contabil_financiamento_residencial_br financiamento residencial 111
O gráfico abaixo mostra o preço mediano do imóvel financiado nos estados da região Sul. Note que estas séries possuem um comportamento irregular em 2019.
<- bcb |>
tbl_imoveis_sul filter(
== "imoveis",
category == "valor",
type == "compra",
v1 %in% c("RS", "SC", "PR")
abbrev_state
)
ggplot(tbl_imoveis_sul, aes(x = date, y = value, color = abbrev_state)) +
geom_line() +
scale_x_date(date_breaks = "1 year", date_labels = "%Y") +
scale_color_manual(
name = "", values = c("#264653", "#2a9d8f", "#e9c46a")
+
) labs(
title = "Preço de financiamento",
x = NULL,
y = "R$"
+
) theme_light() +
theme(legend.position = "top")
Séries Macroeconômicas
A função get_bcb_series
facilita a importação de séries macroeconômicas potencialmente relacionadas com o mercado imobiliário. Como há muitas séries, o argumento category
facilita a seleção de temas específicos. A categoria de preços inlcui os principais índices de preço relacionados ao mercado, como o INCC, IPCA e IGPM.
<- get_bcb_series(category = "price")
macro
unique(macro$name_pt)
[1] "Índice geral de preços do mercado (IGP-M)"
[2] "Índice geral de preços-disponibilidade interna (IGP-DI)"
[3] "Índice nacional de custo da construção (INCC)"
[4] "Índice nacional de preços ao consumidor-amplo (IPCA)"
[5] "Índice nacional de preços ao consumidor-Amplo (IPCA) - Habitação"
[6] "Índice nacional de preços ao consumidor (INPC) - Habitação"
[7] "Meios de pagamento - M1 (saldo em final de período) - Novo - sazonalmente ajustado"
O gráfico abaixo combina a série de preços do IGMI-R, importada anteriormente, com o IPCA. Os valores são acumulados em 12 meses e apresentados desde 2018. Nota-se como o preço dos imóveis cresceu acima da inflação a partir de 2020.
<- macro |>
series_ipca filter(name_simplified == "ipca") |>
mutate(
acum12m = roll_prodr(1 + value / 100, n = 12) - 1,
series = "ipca"
|>
) select(date, series, acum12m)
<- sale |>
series_igmi filter(
== "IGMI-R",
source %in% c("Porto Alegre", "Brazil")
name_muni |>
) select(date, series = name_muni, acum12m)
<- rbind(series_ipca, series_igmi)
series_macro
<- series_macro |>
series_macro filter(date >= as.Date("2018-01-01"), date <= as.Date("2023-07-01")) |>
mutate(
series = factor(series, levels = c("Brazil", "Porto Alegre", "ipca"))
)
ggplot(series_macro, aes(x = date, y = acum12m, color = series)) +
geom_line(linewidth = 0.8) +
scale_y_continuous(labels = scales::label_percent()) +
scale_color_manual(
name = "",
values = c("#264653", "#2a9d8f", "#e9c46a"),
labels = c("Brasil (geral)", "Porto Alegre", "IPCA")
+
) labs(
title = "Preços de imóveis crescem acima da inflação",
x = NULL,
y = "Acumulado 12 meses"
+
) theme_light() +
theme(legend.position = "top")
Caminhos futuros
O desenvolvimento futuro do pacote será guiado pela incorporação de mais bases de dados e relatórios de mercado.