R para não Programadores – Importação de arquivos EXCEL, SPSS, STATA e SAS – Curso Prático

November 10, 2016 no comments Posted in R, R para não Programadores, RStudio

Esse post está sendo escrito após o lançamento da versão 1.0 do RStudio em 2016, que tornou a importação de arquivos e a publicação de resultados bem mais agradável. Se ainda não tem o RStudio, trate de instalar a versão desktop [1].

Se você tem recursos para instalar a versão servidor na intranet da sua empresa, melhor ainda, pois todos os interessados dentro do seu espaço de trabalho podem se beneficiar.

Em outro momento posso falar sobre a instalação RStudio Server em ambiente Linux.

Aqui a parte super “cool” do novo RStudio, as telas falam tudo, veja:

Aba Environment, Import Excel. Aproveite e perceba logo as opções de importação SAS, STATA, SPSS.

Screen Shot 2016-11-10 at 10.21.03.png

Se estiver conectado a internet o RStudio vai verificar a necessidade de instalação de pacotes adicionais para a tarefa e irá emitir um alerta. Aceite.

screen-shot-2016-11-10-at-10-23-53

Uma janela se abre,

screen-shot-2016-11-10-at-10-25-00

selecione o arquivo a ser importado,

screen-shot-2016-11-10-at-10-25-28

um preview dos dados são apresentados,

screen-shot-2016-11-10-at-10-25-50

Primeira linha tem nomes das colunas?

screen-shot-2016-11-10-at-10-26-17

o código que gerou o preview e que iremos inserir em nosso script

screen-shot-2016-11-10-at-10-26-04

aceite e pronto os dados já importados para um data frame com o mesmo nome do arquivo sem a extensão .xlsx.

O arquivo era “capitasMetrico.xlsx”, agora temos um data frame capitaisMetrico para trabalhar.

screen-shot-2016-11-10-at-10-26-35

Aqui o código ja inserido no script.

E aqui uma pausa para falar em Diretórios e Referências dentro dos códigos em R. O código gerado faz uma apontamento ao caminho físico completo onde está o nosso script, o que é problema, toda vez que movermos esse script teremos que alterar o código.

Se você pretende que o script seja executado no próprio RStudio, mas eventualmente em em outra pasta, o próprio RStudio facilita a nossa vida,  vá no menu SESSION > To Source File Location. Pronto ele ajustará o diretório de trabalho para a pasta aonde está o seu script.

Screen Shot 2016-11-10 at 10.41.52.png

Mas é possível automatizar ainda mais e evitar essa ida ao meu Session. Basta inserir o comando abaixo logo

em uma linha que anteceda a qualquer comando que pretenda referenciar arquivos externos.

Feito isso agora o nosso script pode fazer referências relativas a diretórios que estão dentro da pasta do script.

Agora podemos mover a vontade toda a pasta para outros locais sabendo que as referências não serão afetadas.

Um tópico a parte face a enorme quantidade de opções é sobre “como” os dados são importados, codificações diferentes entre países e caracteres especiais.

No exemplo anterior os dados estavam em um formato apropriado para o sistema brasileiro, casas decimais como “,” e pontos como separado de milhares. A rotina read_excel não oferece recursos maiores para alteração do formato quanto a origem da planilha, então adotamos a solução temporária, feia :).

Alteramos no Excel as virgulas por pontos e importamos novamente, mais a frente iremos explorar alternativas mais estruturadas para extração de dados.

Outro detalhe importante, se não especificamos no read_excel quais colunas são numéricas, todas são importadas como “Texto”, logo não poderemos operar como números.

Duas soluções possíveis, especificar o tipo de dados com atributo “col_types” no read_excel, ou alterar o tipo depois.

A segunda opção aqui é mais didática pois exemplifica como operar sobre colunas de um data frame.

Referências

Choose Your Version of RStudio – RStudio Desktop  https://www.rstudio.com/products/rstudio/download3/

“RStudio and Shiny are trademarks of RStudio, Inc.”

Importando Dados da Série Histórica das ações BM&F Bovespa usando R

November 4, 2016 no comments Posted in Código, R

Aos interessados em estudar o comportamento das ações BM&F Bovespa saiba que as informações são disponibilizadas em uma base de dados contendo a série histórica das ações negociadas[4].

Particularmente não tenho experiência como investidor em bolsa, mas tenho uma grande curiosidade sobre os modelos matemáticos que tentam estimar ou prever o comportamento do mercado de ações.

Entretanto para o início de um estudo ou proposição de modelo que procure estimar o comportamento representado dos dados ao longo do tempo é necessário que primeiro tenhamos acesso aos dados.

No caso dos dados das ações BM&F Bovespa, a recuperação não é imediata via Excel, a enumeração dos campos é bem desconfortável. Provavelmente deve haver um modo inteligente de especificar onde inicia e termina cada campo, mas até essa data ao pesquisar uma solução, quando escrevi esse post, a solução propostano site da Microsoft  me pareceu “boring”, cansativa e propensa e erros.
Anyway, suplantada ou não por outro método mais eficiente, para iniciantes e curiosos sempre é bom ver formas alternativas de se remover um obstáculo. Ai vai.

O objetivo principal aqui é mesmo o demonstrar uma das aplicações de um pacote muito eficiente na leitura de grandes arquivos de dados, o IOTOOLS, e estimular curiosos a se iniciar na programação em R.

Em 2014, automatizei o processo de importação no R, mas de modo extremamente ineficiente, demorava demais.

Voltei a pesquisar as alternativas + recentes e me deparei com o pacote IOTOOLS para o R. Se você tem interesse por Análise de Dados, não importando se é um Estatístico ou não devia levar em consideração aprender “um pouco de R”.

Infelizmente para alguns, a grande maioria do material que considero interessante para curiosos de qualquer área de formação está disponível em Inglês.

Em Inglês a série para Leigos (for Dummies) tem um opção interessante, versão Kindle e Impressa. Até a presente data (11/2016) não vi versão em português.

Vamos ao que interessa, como importar a série histórica com o R. É simples curto e grosso. Assumo que a versão mais recente R já está instalado em sua máquina. Caso contrário veja os links na lista de Referências ao final.

Cuidado preliminar, após baixar o arquivo e usando um editor de texto como Notepad++ para Windows ou TextWrangler para Mac OSX e similares, remova a primeira e a última linha do arquivo.

As definições dos nomes dos campos e suas posições em cada linha do arquivo eu armazeno em um pequeno arquivo de apoio, mas poderiam ser definidas diretamente no corpo do script em R.

Esse pequeno arquivo só contem 3 colunas, o nome do campo, sua posição inicial e final e está salvo no arquivo “LayoutCamposSerieHistorica.csv”.

O script apenas lê esses campos e cria um vetor chamado “endings” com as posições de início de cada campo + última posição de cada linha do arquivo da série histórica das ações BM&F Bovespa e passa o processo de importação para rotina input.file do IOTOOLS.

E lá estamos nós. O arquivo convertido.

 

É realmente muito rápido.  No meu mac mini que não é de ponta, todo o processo de ler um arquivo com 390.000 linhas, gerar um data.frame e depois exportar no formato csv, levou 2.48 segundos. A importação algo próximo a 1.4 segundos.

Em tempo, se usam o R e ainda não usam o RStudio, vão correndo baixar a versão + recente. O mundo R pode ser dividido em 2 eras, antes e depois do RStudio.

Em outro “post”, caso surja interesse,  irei falar sobre como transformar essa aplicação pode se tornar interativa. Um site na web com o Shiny.

Aqui a interface da minha aplicação web de conversão de dados do IBOVESPA.

 

Referências

  1. AÇÃO (FINANÇAS). In: WIKIPÉDIA. Wikipédia, a enciclopédia livre. [S.l: s.n.], 31 jul. 2016. Disponível em: <https://pt.wikipedia.org/w/index.php?title=A%C3%A7%C3%A3o_(finan%C3%A7as)&oldid=46318787>. Acesso em: 5 nov. 2016.
  2. AZEVEDO, J. Instalação do R e do RStudio. Estatística é com R! [S.l: s.n.]. Disponível em: <http://www.estatisticacomr.uff.br/?p=164>. Acesso em: 5 nov. 2016. , 8 jul. 2015
  3. BM&F BOVESPA. BM&F BOVESPA – Serviços financeiros · Centro de negócios. Disponível em: <http://www.bmfbovespa.com.br/pt_br/index.htm>. Acesso em: 5 nov. 2016a.
  4. BM&F BOVESPA. Séries históricas. Disponível em: <http://www.bmfbovespa.com.br/pt_br/servicos/market-data/historico/mercado-a-vista/series-historicas/>. Acesso em: 5 nov. 2016b.
    Notepad++ v7.2 – Current Version. Disponível em: <https://notepad-plus-plus.org/download/v7.2.html>. Acesso em: 5 nov. 2016.
  5. R: The R Project for Statistical Computing. Disponível em: <https://www.r-project.org/>. Acesso em: 5 nov. 2016.
    RSTUDIO INC. RStudio. RStudio. [S.l: s.n.]. Disponível em: <https://www.rstudio.com/products/rstudio/>. Acesso em: 5 nov. 2016. , [S.d.]
  6. TextWrangler na Mac App Store. Disponível em: <https://itunes.apple.com/pt/app/textwrangler/id404010395?mt=12>. Acesso em: 5 nov. 2016.
  7. The Comprehensive R Archive Network. Disponível em: <https://cran.fiocruz.br/>. Acesso em: 5 nov. 2016.
    URBANEK, S.; ARNOLD, T. iotools: I/O Tools for Streaming. [S.l: s.n.], 2015. Disponível em: <https://cran.r-project.org/web/packages/iotools/index.html>. Acesso em: 5 nov. 2016.

(favor avisar caso algum dos endereços endereço se altere)

R – Convertendo listas com número variável de elementos em data frames as.data.frame.list()

October 31, 2016 no comments Posted in Código, R

Quem já passou pelo problema de ter trabalhar com listas e data.frames em R sabe que nem sempre a sua conversão é trivial, especialmente nos casos onde o número elementos em cada elemento da lista é variável. Em Inglês muitos usam a expressão “list flattening”, soa estranho a tradução para achatamento ou planarização?, talvez o mais apropriado seja “redução de uma lista para um a data.frame”.

Um exemplo possível:

Via o RBloggers um artigo publicado por  resolve o problema via uma função própria as.data.frame.list().

A código da função pode ser baixada diretamente do gitHub, https://gist.github.com/jbryer/4676064, mas o metodo recomendado é usar o devtools diretamente no seu código de modo a sempre usar a versão mais atualizada.

require(devtools)
source_gist(4676064)

A principal exigência para o uso da função é que todos os elementos da lista sejam vetores. O que no meu nível de conhecimento atual de R só consegui através de uma transposição para data.frame prévia.

Aqui um exemplo com 3 listas de tamanho diferente

e o resultado

A nossa lista p, fica assim. Extremamente útil.