class: center, middle, inverse, title-slide .title[ # Reticulate 101 ] .subtitle[ ## Introdução ao uso de reticulate para facilitar a integração entre códigos R e Python ] .author[ ###
Luis Henrique Zanandréa Paese
] .date[ ###
Janeiro 2021 ] --- class: middle bg-main1 hide-slide-number .outline[ ## Outline * Introdução * Configuração do Reticulate * Importando/instalando pacotes * Importação de Pacotes * Importação de funções * Python console * R Environment/Py Environment * Live Coding ] --- class: bg-main1 split-30 hide-slide-number .column.bg-main3[ ] .column.slide-in-right[ .sliderbox.bg-main2.vmiddle[ .font3[Introdução] ]] --- class: middle center bg-main1 hide-slide-number # Reticulate -- ## Reticulate é uma ferramenta desenvolvida pela RStudio para facilitar a integração de scripts gerados tanto em R quanto em Python. -- ## Ele é formado por um conjunto de ferramentas que permitem a execução de códigos Python dentro de scripts R, bem como a tradução entre objetos gerados em R e objetos gerados em Python, além de permitir a integração entre os ambientes do R com ambientes Python gerados via virtualenv, conda, e outros. --- class: bg-main1 split-30 hide-slide-number .column.bg-main3[ ] .column.slide-in-right[ .sliderbox.bg-main2.vmiddle[ .font3[Configuração do Reticulate] ]] --- class: middle center bg-main1 hide-slide-number # Instalação do Pacote: -- ## Assim como qualquer pacote que precisa ser instalado em R, o caminho tradicional é instalar via: ```r install.packages('reticulate') ``` -- ### Lembrando: É possível utilizar o [RStudio Package Manager](https://packagemanager.rstudio.com/client/#/repos/1/overview) para facilitar a instalação. --- class: middle center bg-main1 hide-slide-number # Formas de Configurar o ambiente: -- ## Após a instalação do pacote, existem algumas formas de configurar qual a versão do Python que se deseja usar, bem como a versão de ambiente desejada (seja ela via virtualenv ou conda). --- class: middle center bg-main1 hide-slide-number # Formas de Configurar o ambiente: Python tradicional -- ## Utilizado para direcionar qual distribuição de python será utilizada para rodar os scripts. Isso facilita quando temos mais de uma distribuição de Python (Python 3.7, Python 3.6, ...) e quando temos pacotes diferentes instalados em distribuições diferentes. ```r reticulate::use_python("/usr/bin/python") ``` --- class: middle center bg-main1 hide-slide-number # Formas de Configurar o ambiente: Python Virtual Environments -- ## Caso tenha sido criado um virtualenv no projeto, para manter a informação de dependências dos pacotes e as versões instaladas nesse ambiente, é possível mapear para o reticulate usar o `venv` como padrão Python dentro do R. ```r reticulate::use_virtualenv() ``` -- ### Dica: Caso queira listar quais os ambientes virtuais existentes no projeto, basta rodar `reticulate::virtualenv_list()`. --- class: middle center bg-main1 hide-slide-number # Formas de Configurar o ambiente: Python Conda Environments -- ## Para usuarios que possuam a suite Anaconda instalada e estejam habituados a utilizar ambientes conda para a gestão dos pacotes e versões do python, esse também pode ser utilizado como padrão python para o Reticulate. ```r reticulate::use_condaenv("py36") ``` -- ### Dica: Da mesma forma que o virtualenv, é possível listar os ambientes conda existentes na máquina através do comando `reticulate::conda_list()`. --- class: middle center bg-main1 hide-slide-number # Formas de Configurar o ambiente: Miniconda -- ## Caso o usuario não possua nenhuma distribuição python instalada na máquina, ou não queira misturar os seus ambientes python, com as necessidades para executar códigos em R, é possível instalar uma distribuição do `miniconda` que será utilizada pelo R/RStudio, e será criado um ambiente `r-miniconda` para a gestão dos pacotes. ```r reticulate::install_miniconda() reticulate::use_miniconda() ``` --- class: middle center bg-main1 hide-slide-number # Formas de Configurar o ambiente: RStudio 1.4 -- ## A partir do RStudio 1.4, a versão do Python a ser utilizada também pode ser configurada a partir das Global Options do RStudio (Tools > Global Options > Python), facilitando a escolha do ambiente Python default a ser utilizado pelo Reticulate. <div align="center"> <img src="images/rstudio_python.png" height="50%" width="50%" /> </div> --- class: bg-main1 split-30 hide-slide-number .column.bg-main3[ ] .column.slide-in-right[ .sliderbox.bg-main2.vmiddle[ .font3[Importando/Instalando pacotes] ]] --- class: middle center bg-main1 hide-slide-number # Importando pacotes como variáveis R -- ## Uma das formas de importar os pacotes em Python para serem executados dentro de um script R, é importar eles como se fossem variaveis do environment do R, dado que o Reticulate já esteja configurado: -- ```r np <- reticulate::import("numpy") np$array() # equivalente ao np.array ``` --- class: middle center bg-main1 hide-slide-number # Validando a existencia de pacotes em R -- ## Embora seja fácil realizar essa importação de pacotes, às vezes não temos como garantir que o pacote está instalado no ambiente que temos configurado no reticulate... Portanto, para garantir que ele exista, ou para realizar a instalação da biblioteca, podem ser utilizados os seguintes códigos: -- ```r reticulate::py_module_available('fastAPI') reticulate::py_install("fastAPI") ``` --- class: middle center bg-main1 hide-slide-number # Importando funções/scripts em Python -- ## Para evitar a reescrita de códigos que já tenham sido desenvolvidos em Python, é possível dar `source` nessas funções já desenvolvidas para utilizar elas no script em R: -- ```r reticulate::source_python("functions/teste.py") ``` --- class: middle center bg-main1 hide-slide-number # Abrindo um Python Console dentro do RStudio -- ## Embora existam formas de integrar as duas linguagens de forma mais direta, em alguns momentos se faz necessário abrir um console Python dentro do RStudio (seja para realizar testes ou validar a execução de algum código em python nativo), e a forma de se fazer isso é através do comando: -- ```r reticulate::repl_python() ``` --- class: bg-main1 split-30 hide-slide-number .column.bg-main3[ ] .column.slide-in-right[ .sliderbox.bg-main2.vmiddle[ .font3[R/Py Environment] ]] --- class: middle center bg-main1 hide-slide-number # Como funciona? -- ## Um dos grandes benefícios trazidos pelo reticulate, para a integração entre as linguagens R e Python, vai além da integração apenas de códigos, scripts e bibliotecas, mas passa também pelo acesso conjunto aos dois environments das duas linguagens, permitindo que seja possível criar objetos em R, e utilizá-los em um script Python, e vice-versa --- class: middle center bg-main1 hide-slide-number # "Tradução dos artefatos" -- ## Para realizar a conversão dos tipos de objetos de uma linguagem para outra, existem as função `r_to_py` e `py_to_r`, que além de realizarem a troca do environment do objeto, convertem em seus equivalentes da linguagem "objetivo". -- ## Por exemplo, se eu tiver um Pandas.DataFrame em Python, e quiser trazer ele para a estrutura de R, o comando `py_to_r` irá converter esse Pandas.DataFrame em um data.frame. -- ### Para uma lista completa das conversões entre as linguagens, existe um documento na página do Reticulate referente a [conversões](https://rstudio.github.io/reticulate/#type-conversions). --- class: middle center bg-main1 hide-slide-number # Acesso entre os diferentes ambientes -- ## Para realizar o acesso de artefatos gerados em diferentes ambientes (R e Python), pode ser utilizada a seguinte sintaxe: -- ```r # Para acessar de dentro do R, objetos em Python, utilizar o py$ py${nome_do_objeto} ``` -- ```python # Para acessar de dentro do Python, objetos em R, utilizar r. r.{nome_do_objeto} ``` --- class: bg-main1 split-30 hide-slide-number .column.bg-main3[ ] .column.slide-in-right[ .sliderbox.bg-main2.vmiddle[ .font3[Conclusão] ]] --- class: middle left bg-main1 hide-slide-number # Referências ## [R Interface to Python](https://rstudio.github.io/reticulate/) ## [How to Use Python in R](https://anderfernandez.com/en/blog/how-to-use-python-in-r/) ## [Curso R - Pacote Reticulate](https://www.curso-r.com/blog/2017-11-20-reticulate/) --- class: bg-main5 middle center hide-slide-number ## [E-mail](mailto:lhzpaese@gmail.com) lhzpaese@gmail.com ## [Github](https://github.com/paeselhz) https://github.com/paeselhz ## [LinkedIn](https://www.linkedin.com/in/lhzpaese/) https://www.linkedin.com/in/lhzpaese/ --- class: bg-main1 split-30 hide-slide-number .column.bg-main3[ ] .column.slide-in-right[ .sliderbox.bg-main2.vmiddle[ .font3[Live Demo] ]]