Você está na página 1de 16

Instalando R e RStudio

1) Baixar e instalar o R 3.5.x de https://cran.r-


project.org/bin/windows/base/ . Por padrão, o R costuma ser
instalado na pasta "Meus Documentos/R/R.3.5.x".

[OBS]: Mesmo que você já tenha o R instalado na sua máquina,


recomendo baixar e instalar a versão 3.5, para evitar que diferenças
de versão atrapalhem a execução dos códigos que construiremos
juntos no curso.

2) Baixar e instalar o RStudio


de https://www.rstudio.com/products/rstudio/download/ .
[OBS1]: A versão não é tão importante, porque o RStudio é só a
interface que utilizaremos para acessar o R.

[OBS2]: Se você já tinha o RStudio e instalou a versão 3.5.x do R, é


necessário apontar o RStudio para a versão recém-instalada do R.
Faça isso em Tools -> Global Options -> General -> R Version.

[OBS3]: É preciso de privilégios de administrador para fazer essa


instalação. Caso você não possua, peça ao seu administrador. Se não
for possível, pode-se fazer a instalação em uma máquina na qual você
possua privilégios de administrador e transferir a pasta instalada para
um pendrive (versão portable). Para executar basta abrir o
arquivo rstudio.exe. Depois de transferido, pode ser necessário
apontar o RStudio para o R instalado utilizando o procedimento de
[OBS2].

Testando a instalação
1) Abrir o RStudio
2) Confirmar a versão do R instalada. Caso não seja a versão recém-
instalada, ver [OBS2] do passo 2 anterior.

3) Digitar o comando "1+1" na janela de Console e apertar ENTER para


confirmar se o R está rodando corretamente.

Utilizando o RStudio
1) Para executar comandos rapidamente no RStudio, basta digitarmos
o comando no Console e apertar ENTER.

2) Para persistirmos um ou mais comandos em um arquivo ".R",


precisamos criar o arquivo em File -> New File -> R
Script (CTRL+SHIFT+N). Podemos então salvar esse arquivo com File ->
Save File, e recuperá-lo mais tarde com File -> Open File.

3) Da janela de edição de arquivos, podemos rodar um comando


específico (uma linha ou um trecho selecionado de código) clicando
no botão "Run" (CTRL + ENTER).

4) Para rodarmos todas as linhas de um arquivo em sequência,


usamos o botão "Source".

Agora que você já instalou o R e o RStudio, você deve fazer o


download do projeto BDM - Base de Dados de Mercado.
Ele já possui os arquivos de exemplo que vamos aprender a ler a
partir do R neste módulo, bem como os scripts das aulas deste e dos
próximos módulos.

Fique atento, pois estarei sempre atualizando este arquivo à medida


que for soltando novas aulas no nosso curso!

As instruções de uso são simples: baixar o arquivo zip e


descompactar na pasta de sua preferência (mas recomendo
padronizarmos todos em C:\BDM). Para abrir o projeto, basta dar dois
cliques no arquivo BDM.Rproj.

E vamos ao curso!

Download
 BDM free 2020-04-18.zip

O que é o proxy?
O Proxy é um servidor que faz a ponte entre o seu computador e
servidores web. Se você acessa a internet na rede da sua empresa, é
bastante provável que o seu acesso seja mediado por um proxy. O
objetivo é fazer o monitoramento, controle de acesso e filtro dos
conteúdos acessados de dentro da rede da sua empresa.

Como sei se estou acessando a internet


através de um proxy?
Existem vários jeitos. O primeiro sintoma que você vai notar é que o
seu R não consegue fazer downloads de arquivos, instalar pacotes,
etc. Os erros retornados podem apresentar as mensagens "305 Use
proxy", "407 Proxy Authentication Required" ou "408 Request
Timeout", dependendo da configuração da sua rede corporativa.

Como configurar o meu R para acessar a


internet via proxy?

Passo #1: Identificando o proxy


O primeiro passo é você identificar qual é o servidor e a porta do seu
servidor de proxy. O jeito mais fácil é perguntar administrador da sua
rede.

Há também alguns comandos e programas que fazem a detecção


dessas informações de forma automática. O programa que
recomendo para Windows é o WinProxyViewer, que pode ser
baixado aqui. O proxy vai ser informado no formato servidor:porta.
(P.ex: "proxy.minhaempresa.com:8080" significa que o servidor
é proxy.minhaempresa.com e a porta é 8080). O proxy pode estar
informado diretamente na início do arquivo gerado pelo
WinProxyViewer, ou pode estar dentro do arquivo de configuração
automática, que também é mostrado na saída do programa. Nesse
caso é comum aparecer a linha return "PROXY
proxy.minhaempresa.com:8080".

Passo #2: Configurando o seu R


Para o R acessar a internet através de um proxy, precisamos
configurar algumas variáveis de ambiente indicando as configurações
de proxy.
No Windows, fazemos isso clicando em "Iniciar", e depois com o
botão direito sobre "Computador" e depois clicando em
"Propriedades".
Depois clicamos em "Configurações Avançadas do Sistema" e
"Variáveis de Ambiente".

Então vamos adicionar uma nova variáveis de ambiente clicando em


"Novo" na seção "Variáveis para o usuário", preenchendo o nome e o
valor da variável e clicando em OK.
Os nomes das variáveis que precisamos criar são três: http_proxy,
https_proxy e ftp_proxy.

Os valores são todos os mesmos, que são:


http://servidor:porta/

Exemplo: se o seu servidor detectado no passo anterior


for proxy.minhaempresa.com e a porta 8080,  o valor da variável será
http://proxy.minhaempresa.com:8080/. A tela de criação da variável
ficará assim:

Após configurar as três variáveis, reiniciar o computador e tentar


novamente a instalação do pacote ou download do arquivo.

----------------------------------------------------------------------------------------------

Bugfix:

A ANBIMA passou a incluir debêntures com "(#)" no nome do emissor.


O caracter "#" é entendido como início de comentário dentro da linha
do arquivo a ser lido pelo read.table(), o que faz com que algumas
linhas deixem de ter seus campos lidos corretamente. Esse
comportamento é controlado pelo parâmetro "comment.char" da
função read.table(), cujo valor default é justamente "#". Para
corrigirmos esse problema, precisamos definir o comment.char para
"".

Exemplo:

read.table(

...

comment.char = "",

...

----------------------------------------------------------------------------------------------

OBS: Se você está atrás de um proxy, talvez seja preciso fazer uma
configuração adicional para utilizar a função POST do pacote httr. Se a
função POST estiver retornando erro, tentem passar as configurações
de proxy no parâmetro config. Por exemplo:

Endereço do proxy: meuproxy.com.br

Porta do proxy: 8080

Então o POST ficaria:

r = POST(url = ..., encode = ..., body = list(...), config =


use_proxy("meuproxy.com.br", 8080L))

Se for necessária autenticação no proxy, basta adicionar o usuário e a


senha na função use_proxy:
use_proxy("meuproxy.com.br", 8080L, "meusuario", "minhasenha")

Download Sublime Text 3: https://www.sublimetext.com/3

Expressões Regulares
Âncoras
^
: início da linha/string
l
$
: fim da linha/string
l

Quantificadores
a*
: "a" zero ou mais vezes
l
a+
: "a" uma ou mais vezes
l
a?
: "a" zero ou uma vez
l
a{m}
: "a" exatamente m vezes
l
a{m,}
: "a" pelo menos m vezes
l
a{m,n}
: "a" de m a n vezes
l

Operador OU e Colchetes
a|b
: "a" ou "b"
l
[abc]
: "a" ou "b" ou "c"
l
[A-Z]
: de A a Z (maiúsculo)
l
[A-Za-z]
: de A a Z (maiúsculo ou minúsculo)
l
[0-9]
: de 0 a 9 (equivalente a \d)
l
[\^ab]
: nem "a" nem "b" (negação)
l

Classes
\d
: dígito (0 a 9)
l
\w
: um caracter (letras ou underscore)
l
\s
: um espaço (espaço, tabulação ou quebra de linha)
l
.
: qualquer coisa (CUIDADO!)
l

OBS: As versões em maísculas negam o padrão. Ex:


\D
: qualquer coisa que não é um dígito.
l

Caracteres Especiais
^.[$()|\*+?
É preciso usar um
\
antes destes caracteres utilizá-los de forma literal.
OBS: Dentro de colchetes, não é necessário.
Ex:
\(
Alguns outros significados especiais:
\t
: tabulação
l
\n
: quebra de linha
l

Grupos
(abc)
: captura "abc" como um grupo, para ser usado futuramente na expressão com
\\n
, onde
n
l

é o número do grupo
Exemplo
:
(abc) \1
: captura "abc abc"
(\d)\1
: captura "11", "22", "33", etc
Gananciosos (greedy) ou Preguiçosos (lazy)?
Os quantificadores
\*
,
+
e
{}
são gananciosos por padrão, ou seja, tentam casar com a maior string
possível. Assim
<.*>
casa com a string inteira
"<tag>valor</tag>"
.
Se adicionarmos o lazy operator
?
, transformamos o operador em preguiçoso, e ele tentará casar
com a menor string possível. Assim
<.*?>
aplicado à string
"<tag>valor</tag>"
casa com as strings
"<tag>" e "</tag>"
.

Bugfixes:
Pessoal, incluí alguns bugfixes para consertar erros que vieram de
mudanças no padrão da tabela de projeção da ANBIMA.

#1 - Fixar Encoding:
- Problema: Em algumas máquinas, o encoding da página não era
detectado pelo readLines. Nesses casos, o "ç" de Março não era lido
corretamente e a expressão "\w+ de \d+" não capturava a string
"Março de 2019".

- Solução: incluir o parâmetro encoding = "UTF-8" na função


readLines().

#2 - Parágrafos nas células:


- Problema: Algumas células às vezes vêm com tag's <p> em volta de
seu valor, como em:

<td><p>valor</p></td>

- Solução: Antes do str_match, eliminar as tags <p> com


str_replace_all():
s = str_replace_all(s, "\\s*</?p>\\s*", "")

Note que o trecho "/?" me permite retirar ao mesmo tempo as


aberturas <p> e fechamentos </p>, e os \s* removem os espaços
antes e depois da tag.

#3 - strong's duplicados:
- Problema: Algumas vezes a projeção lida vem com duas tags strong
aninhadas, por exemplo:

<strong><strong>0,35</strong></strong>

Nesse caso, a expressão "<td [^>]*><strong>([\d,-]*)</strong></td>"


não consegue capturar a projeção.

- Solução: Antes do str_match(), eliminar os casos de strong


duplicados, com str_replace_all():

s = str_replace_all(s, "\\s*(</?strong>)\\s*\\1", "\\1")

Note que o usamos a referência \1 para capturar elementos


duplicados. Assim, por exemplo:

"  <strong>  <strong> " vira "<strong>", e " </strong> </strong> " vira


"</strong>"

Bugfix 2:

Em nova mudança no padrão, a ANBIMA retirou as quebras de linha e


espaços que separam os td’s. Assim, basta eliminar os \n e \s da
expressão regular para que ela funcione.
RUBY

# Pessoal, como houve muitas mudanças no código depois da gravação da aula,

# vou postar aqui uma versão funcional do código de leitura

# para aqueles que não estão conseguindo aplicar as adaptações necessárias

ler.projecoes.igp.anbima = function(){

# bugfix 03/05/2020: retirando \n e \s do pattern

pattern = paste0(

"<td [^>]*>(\\w+ de \\d+)</td>", # mes de coleta

"<td [^>]*>(\\d{2}/\\d{2}/\\d{2,4})</td>", # data de projecao

"<td [^>]*><strong>([\\d,-]*)</strong></td>", # projecao

"<td [^>]*>(\\d{2}/\\d{2}/\\d{2,4})</td>") # validade

url = "http://www.anbima.com.br/pt_br/informar/estatisticas/precos-e-
indices/projecao-de-inflacao-gp-m.htm"

txt = try(readLines(url, warn = F))

if(is(txt, "try-error")) stop("erro ao ler projecoes IGP ANBIMA")

#s = str_flatten(txt, "\n")

s = paste(txt, collapse = "\n")

s = str_replace_all(s, "(</?strong>)\\s*\\1", "\\1") # tratamento para tirar


<strong>'s

# redundantes.

# P.Ex: "<strong><strong>"
vira "<strong>"

# e "</strong></strong>" vira
"</strong>"

s = str_replace_all(s, "</?p>", "") # bugfix 03/05/2020: retirando


<p> e </p>

m = str_match_all(string = s, pattern = pattern)[[1]]


dados = m[,-1]

colnames(dados) = c("mes.coleta", "data", "projecao", "validade")

dados = as.data.frame(dados, stringsAsFactors = F)

dados$identificador = c("IGPM 1", "IGPM 2", "IGPM 3", "IPCA 1", "IPCA 2")

dados$data = as.Date(dados$data, "%d/%m/%y")

dados$validade = as.Date(dados$validade, "%d/%m/%y")

dados$projecao = suppressWarnings(as.numeric(gsub(",", ".", dados$projecao)))

dados

# RESULTADO EM 20/05/2020

# > ler.projecoes.igp.anbima()

# mes.coleta data projecao validade identificador

# 1 Abril de 2020 2020-04-29 0.05 2020-05-05 IGPM 1

# 2 Maio de 2020 2020-05-12 -0.15 2020-05-13 IGPM 2

# 3 Maio de 2020 2020-05-20 NA 2020-05-21 IGPM 3

# 4 Maio de 2020 2020-05-08 -0.37 2020-05-18 IPCA 1

# 5 Maio de 2020 2020-05-26 NA 2020-05-27 IPCA 2