Python em R

03/11/2022

Linguagem R

Nos últimos anos, grandes volumes de dados têm sido gerados como consequência do aumento do uso da web. Esse uso ocorre tanto por usuários individuais como também por pequenas e grandes empresas que visam negócios através da internet. Devido ao grande volume e complexidade dos dados, certas ferramentas acabam por se destacarem em áreas como a da ciência de dados por possibilitarem que as análises sejam feitas de forma mais eficiente. Dentre estas ferramentas, as linguagens de programação R e Python fazem parte das mais populares.

Python e R

A linguagem R é uma ferramenta conhecida por ser “criada por estatísticos para estatísticos”, em que seu uso é voltado majoritariamente para a computação estatística. Por outro lado, a linguagem Python é uma ferramenta de propósitos gerais e que possui fortes implementações, tanto para a área de análise de dados como também para aplicações web por exemplo. Ambas são fortemente utilizadas para análise de dados, e muitas vezes ficamos na dúvida sobre qual devemos utilizar.

De acordo com a Stack Overflow Annual Developer Survey, Python e R estão entre as 20 linguagens mais utilizadas do mundo por desenvolvedores, e o seu uso tem aumentado cada vez mais ao longo dos anos. Em pesquisas voltadas para o público da área de ciência de dados, como por exemplo a Kaggle Survey, ambas as linguagens aparecem entre as três mais utilizadas. É também evidente a recorrência dessas ferramentas em vagas de emprego, principalmente o Python em vagas voltadas para a ciência de dados.

Sabendo que tanto Python quanto R são tão utilizadas em análise de dados, por que não utilizar ambas? E não apenas isso, por que não utilizá-las ao mesmo tempo em um mesmo ambiente? Talvez muitos não saibam disso, mas existem implementações que permitem que ambas se comuniquem, permitindo que o usuário aproveite o que elas têm de melhor a oferecer. Quando falamos de integrar R e Python, existe a ferramenta {reticulate}, a qual permite usuários de R integrarem o Python em seu ambiente, e existe também o {rpy2}, que permite usuários de Python integrarem o R em seu ambiente. Para este post, nos atentaremos à ferramenta {reticulate}.

O que é o reticulate?

O {reticulate} nada mais é do que um pacote que permite o usuário conectar o Python no R. Fazer essa interação entre ambas as ferramentas por meio do {reticulate} permitirá que façamos o uso de implementações que existem no Python dentro do R, permitindo times que utilizam ambas as linguagens trabalhem de forma mais direta e eficiente, como também permitirá a utilização de implementações que a princípio sejam exclusivas do Python.

Como instalar?

Para fazer uso do {reticulate}, primeiro precisamos ter o R e seu ambiente de desenvolvimento RStudio instalados. Para isso, recomendo ao leitor o post Iniciando na linguagem R, onde abordo como instalar o R e RStudio, e também ajudo o leitor iniciar sua jornada na linguagem R.

Com o R e RStudio instalados, iremos executar o código abaixo no console do RStudio.

 

# instala o pacote reticulate no R
install.packages(“reticulate”)

Agora temos uma “ponte” que nos permite instalar o Python dentro do RStudio. Para instalar o Python, faremos uso do Miniconda, que é uma distribuição do Python que inclui a capacidade de instalação e gerenciamento de pacotes do Conda, o qual, por sua vez, é um gerenciador de versões e ambientes do Python.

# Carregue o reticulate
library(“reticulate”)

## Instala o Miniconda manualmente
install_miniconda()

Caso o usuário já possua o Python instalado em sua máquina, existe a alternativa de utilizá-lo sem precisar instalar o Miniconda. Porém, caso a distribuição do Python instalada não possua controle de versões, existe a possibilidade de ter problemas de retrocompatibilidade, em que versões de pacotes e do próprio Python podem entrar em conflito com o código criado logo que suas versões forem atualizadas. Assim, recomendo utilizar o método que estou apresentando e que faz uso do Miniconda e, dessa forma, não haverá grandes riscos de problemas de retrocompatibilidade.

Uma vez instalado o Miniconda, iremos criar e configurar um ambiente virtual em nosso computador, que servirá para que o gerenciamento de versões e pacotes do Conda entrem em ação sem afetar qualquer coisa que seja externa a este ambiente.

# Cria o ambiente virtual r-reticulate (rodar uma única vez)
conda_create(“r-reticulte”)

# Ativa o ambiente chamado r-reticulate (rodar a cada nova sessão)
use_condaenv(“r-reticulte”)

# Verifica as configurações do ambiente (versão do Python, pacotes, etc)
py_discover_config()

Note que o ambiente virtual que criamos se chama “r-reticulte”. Este ambiente é o padrão do Conda e também é o mais recomendado, isso porque evitará qualquer problema relacionado à criação de ambientes virtuais que se distanciem do padrão utilizado no próprio Conda.

Com isso, temos o Python integrado ao nosso ambiente R. E como podemos utilizar o Python dentro do R depois que este foi integrado? Existem diversas formas, mas scripts Python do tipo .py e arquivos de R Markdown .Rmd são os mais úteis.

Arquivos .py no RStudio

Para criar scripts de Python no R, basta iniciar um novo script assim como fazemos com o R dentro do RStudio. Veja a figura abaixo.

Uma vez criado o script, basta utilizar códigos em Python no mesmo e, ao selecionar o código que deseja executar, basta aplicar o comando ‘Ctrl + Enter’ assim como fazemos no R. O R entenderá que o usuário deseja executar um código em Python e a saída será apresentada na área do console do RStudio.

Para exemplificar, utilizarei os dados de crianças de até 28 dias de vida internadas com Síndrome Respiratória Aguda Grave (SRAG), com registros de casos dos anos de 2017 à 2022 e com a última atualização do dia 28 de Janeiro de 2022. O script criado abaixo irá carregar um pacote de manipulação de dados chamado {pandas}, carregar a base de dados e então retornar os nomes das variáveis da base no console

Note que ao executar o comando exit no console, o símbolo >>> mudou para >. No R, o símbolo > significa que o console está pronto para receber códigos em R. O equivalente no Python é exatamente o >>>. Portanto, ao dar o comando exit como no exemplo, estamos saindo do console do Python e indo para o console do R.

Arquivos .Rmd no RStudio

Em arquivos R Markdown ou .Rmd podemos construir relatórios que incluam códigos em R por meio de blocos chamados chunks. Para saber mais sobre o R Markdown, recomendo a leitura do post Relatórios com RMarkdown.

Fazendo uso do {reticulate}, podemos aumentar ainda mais a versatilidade de arquivos .Rmd ao conseguirmos incluir não apenas códigos de R em sua estrutura, como também códigos de Python. Além disso, podemos utilizar objetos criados em chunks de códigos em Python dentro de chunks de códigos em R e vice-versa. Isso só é possível porque o {reticulate} faz uma comunicação bidirecional dentro deste tipo de arquivo de forma que os objetos chamados dentro de um chunk de R mas que foram criados em um chunk de Python, por exemplo, sejam automaticamente convertidos para um tipo de objeto que faça sentido na linguagem R e, então, possa ser utilizado normalmente.

Farei uso da mesma base de dados anterior para mostrar como podemos realizar essa comunicação em um arquivo .Rmd. Este arquivo irá conter códigos em Python e em R para criar um gráfico do número de casos ao longo dos anos.

Note que o arquivo possui textos e códigos, onde os códigos estão dentro de blocos (chunks). Outro ponto que devemos ter atenção é que precisamos carregar o {reticulate} dentro do arquivo antes de dar início à comunicação bidirecional entre as linguagens.

Com o {reticulate} carregado, iniciei dois chunks de códigos em Python, onde carreguei a base de dados e fiz algumas manipulações de interesse. Posteriormente, iniciei um chunk de código em R, em que utilizei objetos anteriormente criados nos chunks de Python. O acesso a esses objetos em um chunk em R é feito através do comando py$, em que, no código acima, foi solicitada uma tabela de frequências da variável “ano”, atribuída ao objeto “casos_sumarizado”. Em seguida, outro chunk de Python foi iniciado, onde o objeto criado anteriormente no chunk de R foi utilizado. O acesso a esse objeto em um chunk em Python é feito por meio do comando r. e, com esse objeto e fazendo uso da linguagem Python, o gráfico foi construído. Abaixo está o resultado final do arquivo em HTML.

Acabamos de criar um relatório que inclui códigos em R e em Python no mesmo arquivo de forma que ambas se comunicam, bem legal, né?

Esse foi um exemplo de como podemos utilizar a interação bidirecional que o {reticulate} nos possibilita em arquivos .Rmd. Podemos notar que seria mais direto utilizar apenas o próprio R nesse exemplo, pois a tarefa é simples e tentar incluir outra linguagem seria um esforço desnecessário. A ideia dessa ferramenta de comunicação bidirecional é de possibilitar a utilização de ferramentas do Python que aumentem a eficiência de nossa análise ou outra atividade que a princípio não seria algo trivial de se conseguir apenas com o R.

Considerações finais

Vimos neste post um pouco sobre duas ferramentas muito utilizadas na área de ciência de dados, e também como utilizá-las em conjunto fazendo uso do pacote {reticulate} para extrair o melhor que ambas linguagens têm a oferecer.

Espero que este post tenha dado um bom entendimento e direcionamento a respeito de como integrar as ferramentas R e Python no mesmo ambiente. Para comentários, sugestões e colaborações científicas, entre em contato conosco através do email  ou nas nossas redes, Twitter ou Instagram.