Pacote reticulate

Por Gabriela Lima Borges (convidada) 20/11/2017

Se você também quiser escrever um post como convidada, entre em contato a gente em contato@curso-r.com!

Pacote Reticulate

Imagine se você pudesse aproveitar da quantidade e da variedade enorme de módulos e bibliotecas do Python no ambiente amigável do RStudio? Graças ao pacote reticulate isso é possível de uma maneira familiar para quem quem já é usuário do R.

O reticulate é um pacote que proporciona a integração Python & R via R e pode ser bastante útil se você quiser fazer todas as análises no ambiente do Rstudio. Os módulos, classes e funções do Python importados podem ser utilizados como se fossem funções nativas do R.

Para utilizar o pacote são necessárias a instalação do Python com versão superior a 2.7, a instalação dos módulos do Python que serão utilizados durante a análise e a instalação do pacote via install.packages().

# install.packages("reticulate")
library(reticulate)

Quando for utilizada uma função do Python em um objeto do R, ele será convertido para seu formato equivalente do Python e vice-versa. Os tipos de conversões de objetos são explicitadas neste link.

## Data frame do R é convertido em Dict do Python
a <- r_to_py(mtcars)
class(a)
## [1] "python.builtin.dict"   "python.builtin.object"

## Dict do Python é convertido em List do R
class(py_to_r(a))
## [1] "list"

Importando módulos

A importação de módulos do Python para o R é bem simples. Basta usar a função import() do pacote reticulate e o nome do módulo que você quer importar, em seguida guardar isso em um objeto no R.

np <- import("numpy")
pandas <- import("pandas")
os <- import("os")

Use a função py_module_available() pra checar se um módulo do Python está disponível no seu computador.

py_module_available("matplotlib")
## [1] TRUE

As funções que estão dentro de módulos ou classes do Python podem ser acessadas utilizando o operador $:

os$getcwd()
## [1] "/home/jtrecenti/curso-r/site/content/blog"
np$abs(-1)
## [1] 1

E podemos misturar funções do R e do python:

library(magrittr)

rnorm(10) %>% 
  np$abs() %>% 
  np$cumproduct() %>% 
  plot()

Exemplo

Para ilustrar a integração Python & R via R, vamos usar o Astropy, que é uma biblioteca do Python desenvolvida para a astronomia. Vamos tentar reproduzir esse exemplo que foi implementado no python. Primeiro, precisamos instalar o módulo:

pip install astropy

No ambiente do RStudio, vamos importar os módulos do Astropy que usaremos.

down <- import("astropy.utils.data")
fits <- import("astropy.io.fits")

Em seguida, vamos baixar a imagem em arquivo FITS e verificar se está tudo ok usando a função info do Python que está no pacote Astropy.io.fits.

url <- "https://astropy.stsci.edu/data/tutorials/FITS-images/HorseHead.fits"
im.file <- down$download_file(url, cache=TRUE)
fits$info(im.file)
Filename: ~/.astropy/cache/download/py2/2c9202ae878ecfcb60878ceb63837f5f
No.    Name      Ver    Type      Cards   Dimensions   Format
  0  PRIMARY       1 PrimaryHDU     161   (891, 893)   int16   
  1  er.mask       1 TableHDU        25   1600R x 4C   [F6.2, F6.2, F6.2, F6.2]

Agora vamos transformar nossa imagem em uma matriz de pixels e plotar com a função image do R.

im.data <- fits$getdata(im.file)
im.data %>% 
  t() %>% 
  image(col = gray(seq(0, 1, length = 256)))

comments powered by Disqus