class: center, middle, inverse, title-slide # Importação de Dados Econômicos e Financeiros com o R ### Paulo Henrique Sales Guimarães ### 24 de outubro de 2019 --- --- # Introdução - Natureza dos dados (IPO, dividendos, "*tick-by-tick*", entre outros) -- - Fonte dos dados (*Yahoo Finance*, *Google Finance*, *IBGE*, *IPEA*, dentre outros) -- - Conjunto de dados - identificador (*ticker*), referência (data/hora) e um preço -- - Contratos financeiros de dívidas e derivativos - prazo de vencimento -- - Relatórios financeiros de empresas (B3 - Bolsa de Valores do Brasil e CVM - Comissão de Valores Mobiliários). --- # Pacotes do CRAN **1) Fontes de dados nacionais** -- - **BETS:** Brazilian economic time series - **BatchGetSymbols ** - Cotações das ações listadas na Bovespa (B3) - **GetTDData:** Dados do Tesouro Direto - **GetDFPData:** Demostrativos financeiros de empresas listadas na B3 - **GetHFTData:** Dados de negociações em alta frequência da B3 - **rbcb:** Portal de dados abertos do Banco Central do Brasil. --- # Pacotes do CRAN **2) Fontes de dados internacionais** -- - **Quandl:** Várias bases de dados do mundo - **quantmod:** Framework para modelagem em finanças quantitativas - **tidyquant:** Bringing financial analysis to the tidyverse. --- # Pacotes do CRAN ```r pacotes <- c("BatchGetSymbols", "rbcb", "GetTDData", "BETs", "GetHFData", "GetTDData", "Quandl", "quantmod", "tidyquant", "dplyr") # install.packages(pacotes) ``` --- # Pacote BatchGetSymbols -- - Dados obtidos do *Yahoo Finance* e *Google Finance* -- - B3 e várias outras bolsas internacionais -- - Identificadores das ações (*tickers*) e um período de tempo -- - Os preções do *Yahoo Finance* não são ajustados a dividendos --- ## Pacote BatchGetSymbols Acesse aqui: https://finance.yahoo.com/ --- ## Pacote BatchGetSymbols Acesse aqui: http://www.b3.com.br/pt_br/ --- ## Pacote BatchGetSymbols -- - O pacote **BatchGetSymbols** (Perlin, 2016) é construído com base nas funções do pacote **quantmod** (Ryan, 2015) -- - Limpeza e organização - todos os dados financeiros de diferentes **tickers** são mantidos no mesmo **dataframe** -- - Os dados são salvos localmente no computador do usuário (pasta selecionada) -- - É possível baixar cotações de todas as ações que fazem parte de certo índice (por exemplo, SP&500) -- - Flexibilidade de formato dos dados. --- ## Pacote BatchGetSymbols ```r library(BatchGetSymbols) library(dplyr) acoes <- c("PETR4.SA") inicio <- Sys.Date() - 60 # início final <- Sys.Date() bench.ticker <- "^BVSP" saida <- BatchGetSymbols(tickers = acoes, first.date = inicio, last.date = final, bench.ticker = bench.ticker) print(saida$df.control) ``` ``` # A tibble: 1 x 6 ticker src download.status total.obs perc.benchmark.~ threshold.decis~ <chr> <chr> <chr> <int> <dbl> <chr> 1 PETR4.~ yahoo OK 42 1 KEEP ``` ```r head(saida) ``` ``` $df.control # A tibble: 1 x 6 ticker src download.status total.obs perc.benchmark.~ threshold.decis~ <chr> <chr> <chr> <int> <dbl> <chr> 1 PETR4.~ yahoo OK 42 1 KEEP $df.tickers price.open price.high price.low price.close volume price.adjusted 1 24.90 25.50 24.68 25.50 61008800 25.50 2 25.53 25.69 25.17 25.50 54958200 25.50 3 25.39 25.58 25.25 25.30 19049900 25.30 4 25.11 25.66 25.03 25.60 47829600 25.60 5 26.16 26.37 26.00 26.26 56179000 26.26 6 26.60 26.79 26.34 26.39 48586800 26.39 7 26.40 26.86 26.20 26.52 48502200 26.52 ref.date ticker ret.adjusted.prices ret.closing.prices 1 2019-08-29 PETR4.SA NA NA 2 2019-08-30 PETR4.SA 0.000000000 0.000000000 3 2019-09-02 PETR4.SA -0.007843176 -0.007843176 4 2019-09-03 PETR4.SA 0.011857748 0.011857748 5 2019-09-04 PETR4.SA 0.025781250 0.025781250 6 2019-09-05 PETR4.SA 0.004950457 0.004950457 7 2019-09-06 PETR4.SA 0.004926146 0.004926146 [ reached 'max' / getOption("max.print") -- omitted 35 rows ] ``` --- ## Pacote BatchGetSymbols * **Nota:** A saída de **BatchGetSymbols** é um objeto do tipo lista, sendo que o objeto **df.control** mostra que todos os *tickers* foram válidos. -- ```r glimpse(saida$df.tickers) ``` ``` Observations: 42 Variables: 10 $ price.open <dbl> 24.90, 25.53, 25.39, 25.11, 26.16, 26.60, ... $ price.high <dbl> 25.50, 25.69, 25.58, 25.66, 26.37, 26.79, ... $ price.low <dbl> 24.68, 25.17, 25.25, 25.03, 26.00, 26.34, ... $ price.close <dbl> 25.50, 25.50, 25.30, 25.60, 26.26, 26.39, ... $ volume <dbl> 61008800, 54958200, 19049900, 47829600, 56... $ price.adjusted <dbl> 25.50, 25.50, 25.30, 25.60, 26.26, 26.39, ... $ ref.date <date> 2019-08-29, 2019-08-30, 2019-09-02, 2019-... $ ticker <chr> "PETR4.SA", "PETR4.SA", "PETR4.SA", "PETR4... $ ret.adjusted.prices <dbl> NA, 0.000000000, -0.007843176, 0.011857748... $ ret.closing.prices <dbl> NA, 0.000000000, -0.007843176, 0.011857748... ``` -- Podemos utilizar a função **GetIbovStocks** para importar a composição atual do índice Ibovespa diretamente do site do B3. --- ```r ibov <- GetIbovStocks() tickers <- paste0(ibov$tickers, ".SA") inicio1 <- Sys.Date() - 90 final1 <- Sys.Date() bench.ticker <- "^BVSP" saida1 <- BatchGetSymbols(tickers = tickers, first.date = inicio1, last.date = final1, bench.ticker = bench.ticker) # a função 'paste0' serve para adicionar o texto '.SA' para cada ticker em # ibov$tickers. glimpse(saida1) ``` ``` List of 2 $ df.control:Classes 'tbl_df', 'tbl' and 'data.frame': 64 obs. of 6 variables: ..$ ticker : chr [1:64] "ABEV3.SA" "AZUL4.SA" "B3SA3.SA" "BBAS3.SA" ... ..$ src : chr [1:64] "yahoo" "yahoo" "yahoo" "yahoo" ... ..$ download.status : chr [1:64] "OK" "OK" "OK" "OK" ... ..$ total.obs : int [1:64] 64 64 64 64 64 64 64 64 64 64 ... ..$ perc.benchmark.dates: num [1:64] 1 1 1 1 1 1 1 1 1 1 ... ..$ threshold.decision : chr [1:64] "KEEP" "KEEP" "KEEP" "KEEP" ... $ df.tickers:'data.frame': 4029 obs. of 10 variables: ..$ price.open : num [1:4029] 20.3 20.3 20.2 20.4 20.1 ... ..$ price.high : num [1:4029] 20.8 20.4 20.7 20.6 20.4 ... ..$ price.low : num [1:4029] 20.2 19.8 20.2 20.3 20.1 ... ..$ price.close : num [1:4029] 20.3 20.1 20.4 20.5 20.2 ... ..$ volume : num [1:4029] 24255200 27074600 26961600 15526900 20704700 ... ..$ price.adjusted : num [1:4029] 20.3 20.1 20.4 20.5 20.2 ... ..$ ref.date : Date[1:4029], format: "2019-07-30" ... ..$ ticker : chr [1:4029] "ABEV3.SA" "ABEV3.SA" "ABEV3.SA" "ABEV3.SA" ... ..$ ret.adjusted.prices: num [1:4029] NA -0.01032 0.01441 0.00343 -0.01611 ... ..$ ret.closing.prices : num [1:4029] NA -0.01032 0.01441 0.00343 -0.01611 ... ``` --- # Pacote Quandl - Plataforma **Quandl** - séries de dados gratuitos e pagos (https://www.quandl.com/). --- # Pacote Quandl - BCB (Banco Central do Brasil) e IBGE fornecem dados econômicos e financeiros nesta plataforma -- - É necessário fazer o registro de um novo usuário no site --  **Nota:** Cada usuário possui a sua chave de API (que é exclusiva) --- # Pacote Quandl - Cada tabela de dados do **Quandl** possui um símbolo, no site da plataforma você poderá utilizar o sistema de busca ou utilizar a função *Quandl.search* para pesquisar diretamente no R. -- ```r library(Quandl) library(dplyr) Quandl.api_key("bLKpBf6-ARnDpzM4j8Cx") df.search <- Quandl.search("INPC", per_page = 5) ``` ``` National Consumer Price Index (INPC) Code: BCB/188 Desc: National Consumer Price Index (INPC). Units: Monthly % var. Freq: monthly Cols: Date | Value Inphonic Inc (INPC) Unadjusted Stock Prices Code: XNAS/INPC_UADJ Desc: <b>Ticker</b>: INPC <br> <br> <b>Exchange</b>: XNAS <br> <br> Columns: <br> <br> Open,High,Low,Close,Volume are unadjusted and shown in USD currency. <br> <br> Adjustment Factor shows the factor by which prices are adjusted on days which adjustments take place <br> <br> Adjustment Type is a number representing the type of adjustment. Refer to documentation for more information on these codes. Freq: daily Cols: Date | Open | High | Low | Close | Volume | Adjustment Factor | Adjustment Type Inphonic Inc (INPC) Adjusted Stock Prices Code: OTCB/INPC Desc: <b>Ticker</b>: INPC <br> <br> <b>Exchange</b>: OTCB <br> <br> Columns: <br> <br> Open,High,Low,Close,Volume are adjusted and shown in USD currency. <br> <br> Adjustment Factor shows the factor by which prices are adjusted on days which adjustments take place <br> <br> Adjustment Type is a number representing the type of adjustment. Refer to documentation for more information on these codes. Freq: daily Cols: Date | Open | High | Low | Close | Volume | Adjustment Factor | Adjustment Type Inphonic Inc (INPC) Unadjusted Stock Prices Code: OTCB/INPC_UADJ Desc: <b>Ticker</b>: INPC <br> <br> <b>Exchange</b>: OTCB <br> <br> Columns: <br> <br> Open,High,Low,Close,Volume are unadjusted and shown in USD currency. <br> <br> Adjustment Factor shows the factor by which prices are adjusted on days which adjustments take place <br> <br> Adjustment Type is a number representing the type of adjustment. Refer to documentation for more information on these codes. Freq: daily Cols: Date | Open | High | Low | Close | Volume | Adjustment Factor | Adjustment Type Inphonic Inc (INPC) Adjusted Stock Prices Code: XNAS/INPC Desc: <b>Ticker</b>: INPC <br> <br> <b>Exchange</b>: XNAS <br> <br> Columns: <br> <br> Open,High,Low,Close,Volume are adjusted and shown in USD currency. <br> <br> Adjustment Factor shows the factor by which prices are adjusted on days which adjustments take place <br> <br> Adjustment Type is a number representing the type of adjustment. Refer to documentation for more information on these codes. Freq: daily Cols: Date | Open | High | Low | Close | Volume | Adjustment Factor | Adjustment Type ``` ```r glimpse(df.search) ``` ``` Observations: 5 Variables: 13 $ id <int> 23997, 37284692, 37778793, 37778795, 378... $ dataset_code <chr> "188", "INPC_UADJ", "INPC", "INPC_UADJ",... $ database_code <chr> "BCB", "XNAS", "OTCB", "OTCB", "XNAS" $ name <chr> "National Consumer Price Index (INPC)", ... $ description <chr> "National Consumer Price Index (INPC). U... $ refreshed_at <chr> "2019-10-27T01:47:03.343Z", "2017-09-24T... $ newest_available_date <chr> "2019-09-30", "2007-11-30", "2008-11-24"... $ oldest_available_date <chr> "1979-04-30", "2006-12-28", "2007-11-21"... $ column_names <list> [<"Date", "Value">, <"Date", "Open", "H... $ frequency <chr> "monthly", "daily", "daily", "daily", "d... $ type <chr> "Time Series", "Time Series", "Time Seri... $ premium <lgl> FALSE, TRUE, TRUE, TRUE, TRUE $ database_id <int> 35, 14999, 15099, 15099, 14999 ``` ```r # Por exemplo, vamos baixar a série do data_base 'database_code - BCB' com o # 'dataset_code - INPC' serie <- "BCB/188" inicio2 <- as.Date("2000-01-01") final2 <- Sys.Date() dados <- Quandl(code = serie, type = "raw", start_date = inicio2, end_date = final2) glimpse(dados) ``` ``` Observations: 237 Variables: 2 $ Date <date> 2019-09-30, 2019-08-31, 2019-07-31, 2019-06-30, 2019-05... $ Value <dbl> -0.05, 0.12, 0.10, 0.01, 0.15, 0.60, 0.77, 0.54, 0.36, 0... ``` ```r # A função 'type = raw' gera um dataframe. ``` --- - Podemos baixar mais de uma série no mesmo código  --- ```r series <- c("BCB/11", "BCB/4389") inicio3 <- as.Date("2010-01-01") final3 <- Sys.Date() - 120 dados2 <- Quandl(code = series, type = "raw", start_date = inicio3, end_date = final3) glimpse(dados2) ``` ``` Observations: 2,382 Variables: 3 $ Date <date> 2010-01-04, 2010-01-05, 2010-01-06, 2010-0... $ `BCB.11 - Value` <dbl> 0.032927, 0.032927, 0.032927, 0.032927, 0.0... $ `BCB.4389 - Value` <dbl> 8.61, 8.61, 8.61, 8.62, 8.62, 8.62, 8.62, 8... ``` ```r # Podemos mudar o formato da série por meio do pacote 'tidyr' library(tidyr) dados3 <- tidyr::gather(dados2, type, value, -Date) glimpse(dados3) ``` ``` Observations: 4,764 Variables: 3 $ Date <date> 2010-01-04, 2010-01-05, 2010-01-06, 2010-01-07, 2010-01... $ type <chr> "BCB.11 - Value", "BCB.11 - Value", "BCB.11 - Value", "B... $ value <dbl> 0.032927, 0.032927, 0.032927, 0.032927, 0.032927, 0.0329... ``` ```r # Podemos também mudar os nomes das variáveis dados3$type <- forcats::fct_recode(dados3$type, SELIC = "BCB.11 - Value", `SELIC acumulada` = "BCB.4389 - Value") glimpse(dados3) ``` ``` Observations: 4,764 Variables: 3 $ Date <date> 2010-01-04, 2010-01-05, 2010-01-06, 2010-01-07, 2010-01... $ type <fct> SELIC, SELIC, SELIC, SELIC, SELIC, SELIC, SELIC, SELIC, ... $ value <dbl> 0.032927, 0.032927, 0.032927, 0.032927, 0.032927, 0.0329... ``` --- # Pacote rbcb -- - O pacote **rbcb** permite o acesso direto ao API do BCB (Banco Central do Brasil) -- **get_series(code, start_date, end_date, as)** -- Exemplos: IBOVESPA = 7, IPCA = 433, Dólar = 1 Os códigos são obtidos na busca do SGS -- - Não é necessário cadastro (código API) ---  --- ## Pacote rbcb -- 1) Atividade Econômica: contas nacionais, indústria, mercado de trabalho; -- 2) Economia Regional: Finanças públicas, coméricio exterior, entre outras séries para as regiões do Brasil ou por estados; -- 3) Expectativas de Mercado: taxas de juros, índices, moedas; -- 4) Economia Internacional: taxas de juros de moedas estrangeiras, balança comercial, indicadores de atividade econômica; -- 5) Finanças Públicas: dívida líquida do setor público, dívida mobiliária federal, receitas dos estados e municípios. -- - As séries estão disponíveis em diversos formatos (formato padrão é *tibble*) e JSON, CSV ou XML, por exemplo. --- ## Pacote rbcb ```r library(rbcb) # não está no CRAN atualmente IBOVESPA <- rbcb::get_series(7, last = 756, as = "xts") plot(IBOVESPA) ``` <!-- --> --- ## Pacote rbcb <!-- --> --- # Pacote BETS -- - O pacote **BETS** permite o acesso ao repositório de dados da Fundação Getúlio Vargas (FGV) que inclui bases de dados do BCB, IBGE e o Instituto Brasileiro de Economia (FGV/IBRE) -- - Não necessita de chave (API) --- ## Pacote BETS ```r library(BETS) desemprego <- BETSsearch("unemployment", view = FALSE) glimpse(desemprego) ``` ``` Observations: 30 Variables: 7 $ code <chr> "10777", "10778", "10779", "10780", "10781", "1078... $ description <chr> "Open unemployment rate - by metropolitan region -... $ unit <chr> "%", "%", "%", "%", "%", "%", "%", "Monthly % var.... $ periodicity <chr> "M", "M", "M", "M", "M", "M", "M", "M", "M", "M", ... $ start <chr> "31/10/2001", "31/10/2001", "31/10/2001", "31/10/2... $ last_value <chr> "feb/2016", "feb/2016", "feb/2016", "feb/2016", "f... $ source <chr> "IBGE", "IBGE", "IBGE", "IBGE", "IBGE", "IBGE", "I... ``` --- ## Pacote BETS ```r library(ggplot2) desemprego <- BETSget(24369) autoplot(desemprego) ``` <!-- --> --- ## Pacote quantmod -- - O pacote **quantmod** fornece permite fazer *download* e importação de dados de uma variedade de locais (Yahoo Finance, FRED, OANDA, etc); -- - O *framework* tem funções específicas para manipulação e visualização de séries temporais, particularmente úteis para séries de ações. --- ## Pacote quantmod ```r library(quantmod) getSymbols("PETR4.SA", src = "yahoo", from = as.Date("2000-01-01")) ``` ``` [1] "PETR4.SA" ``` ```r chartSeries(PETR4.SA[, 6]) ``` <!-- --> --- ## Pacote quantmod - A função *chartSeries* é usada para gerar o gráfico dos dados que foi coletado. Agora, utilizando o comando adicional *subset* para usar apenas as informações referentes aos últimos 3 meses. --- ## Pacote quantmod ```r chartSeries(PETR4.SA, subset = "last 3 months") ``` <!-- --> --- ## Pacote quantmod ```r getSymbols("^BVSP", src = "yahoo", from = "2010-01-01", to = "2019-01-01") ``` ``` [1] "^BVSP" ``` ```r head(BVSP) ``` ``` BVSP.Open BVSP.High BVSP.Low BVSP.Close BVSP.Volume 2010-01-04 68587 70081 68587 70045 1655400 2010-01-05 70046 70595 69928 70240 1984200 2010-01-06 70237 70937 70016 70729 2243600 2010-01-07 70723 70723 70045 70451 1555000 2010-01-08 70455 70766 70158 70263 1634400 2010-01-11 70267 71068 70158 70433 1569000 BVSP.Adjusted 2010-01-04 70045 2010-01-05 70240 2010-01-06 70729 2010-01-07 70451 2010-01-08 70263 2010-01-11 70433 ``` ```r chart_Series(BVSP) ``` <!-- --> ```r candleChart(BVSP, theme = "white") ``` <!-- --> --- ## Pacotes GetDFPData, GetHFData e GetTDData - O pacote **GetDFPData** (Perlin, 2017) fornece uma interface aberta para todas as demonstrações financeiras distribuídas pela B3 e CVM, fornecendo inúmeras informações acerca da empresa pesquisada. --- ## Pacotes GetDFPData, GetHFData e GetTDData ```r library(GetDFPData) info <- gdfpd.get.info.companies(type.data = "companies") ``` ``` Found cache file. Loading data.. ``` ```r glimpse(info) ``` ``` Observations: 528 Variables: 16 $ name.company <chr> "521 PARTICIPAÇOES S.A. - EM LIQUIDAÇÃO E... $ id.company <int> 16330, 16284, 21725, 18970, 22179, 24643,... $ cnpj <dbl> 1.547749e+12, 1.851771e+12, 1.034501e+13,... $ date.registration <date> 1997-07-11, 1997-05-30, 2009-06-24, 2001... $ date.constitution <date> 1996-07-30, 1997-04-02, 2008-08-18, 2000... $ city <chr> "RIO DE JANEIRO", "RIO DE JANEIRO", "SÃO ... $ estate <chr> "RJ", "RJ", "SP", "SP", "RJ", "SP", "SP",... $ situation <chr> "ATIVO", "ATIVO", "ATIVO", "ATIVO", "ATIV... $ situation.operations <chr> "LIQUIDAÇÃO EXTRAJUDICIAL", "FASE OPERACI... $ listing.segment <chr> NA, "Tradicional", "Tradicional", "Corpor... $ main.sector <chr> NA, "Outros", "Saúde", "Utilidade Pública... $ sub.sector <chr> NA, "Outros", "Serv.Méd.Hospit..Análises ... $ segment <chr> NA, "Outros", "Serv.Méd.Hospit..Análises ... $ tickers <chr> NA, "QVQP3B", "ADHM3", "TIET11;TIET3;TIET... $ first.date <date> 1998-12-31, 2001-12-31, 2008-12-31, 2001... $ last.date <date> 2018-12-31, 2018-12-31, 2018-12-31, 2018... ``` --- ## Pacote GetHFData - O pacote **GetHFData** (Perlin and Ramos, 2106) foi idealizado para facilitar a importação e análise de dados de negociação de alta frequência da B3. -- - Dados coletados no formato zip. --- ## Pacote GetHFData - Recentemente, a B3 permitiu acesso externo ao seu site ftp (ftp://ftp.bmf.com.br/). Nesse endereço, é possível encontrar várias informações sobre o sistema financeiro brasileiro, incluindo conjuntos de dados com dados de negociação de alta frequência (*tick by tick*) para três mercados diferentes: ações, opções e BMF. --- ```r library(GetHFData) my.folder <- "F:/outdoor" # meu diretório setwd(my.folder) n.assets <- 6 my.date <- as.Date("2019-06-25") type.market <- "equity" df.tickers <- ghfd_get_available_tickers_from_ftp(my.date = my.date, type.market = type.market) ``` ``` Reading ftp contents for equity(trades) (attempt = 1|10) Attempt 1 - File exists, skipping dl ``` ```r glimpse(df.tickers) ``` ``` Observations: 527 Variables: 4 $ tickers <fct> PETR4, BBAS3, BOVA11, B3SA3, ITUB4, BBDC4, ITSA4, ... $ n.obs <dbl> 58305, 36082, 35573, 34863, 34457, 30686, 29950, 2... $ type.market <fct> equity, equity, equity, equity, equity, equity, eq... $ f.name <fct> ftp files/NEG_20190625.gz, ftp files/NEG_20190625.... ``` --- ## Pacote GetHFData <!-- --> --- ## Pacote GetHFData - **Nota:** A saída de *ghfd_get_HF_data* é um dataframe com várias colunas: tempo, último preço, volatilidade, número de negociações, etc. -- - Por último, vale dizer que há o pacote **highfrequency** que também possibilita fazer análise de dados de alta frequência (https://cran.r-project.org/web/packages/highfrequency/highfrequency.pdf). --- # Pacote GetTDData - o pacote **GetTDData** possibilita trabalhar com preços e retornos de títulos emitidos pelo governo brasileiro. --- ## Acessando dados de páginas da internet - Podemos também fazer a importação de dados diretamente de uma página *web* (*webscraping*). --- ```r library(readxl) url = "https://bit.ly/2N9vtOh" download.file(url, "primario.xlsx", mode = "wb") data = read_excel("primario.xlsx", sheet = "1.1", skip = 4, col_types = c("text", rep("numeric", 264))) previdencia = t((data[c(14, 36), -1])) head(previdencia) ``` ``` [,1] [,2] 35431 3558.900 3402.2 35462 3328.900 3328.6 35490 3321.200 3436.8 35521 3398.100 3364.6 35551 3473.231 3509.0 35582 3473.100 3539.4 ``` # Outros pacotes - Rblpapi(Bloomberg) - IBrokers - TFX - RBitcoin - tidyquant (Tidy Quantitative Financial Analysis). --- # Referências - 1) Perlin,M. (2016). BatchGetSymbols: Downloads and Organizes Financial Data for Mutiple Tickers. R package version 1.0. - 2) Perlin, M. (2017). GetDFPData: Reading Annual Financial Reports from Downloading and Aggregationg High Frequency Trading Data Data from Bovespa. - 3) Perlin, M. (2018). Processamento e Análise de Dados Financeiros e Econômicos com o R. 2ª Edição. Ed. Publicação Independente. - 4) Wickham, H. and Francois, R. (2016). dplyr: A Grammar of Data Manipulation. R package version 0.5.0.