&  

Para quem sempre utilizou o R e precisa começar a utilizar o Python, uma coisa que faz muita falta é o ambiente muito amigavel e prático do RStudio, nele podemos criar nossos projetos, criar nossos BD’s, fazer o controle de versão com o GitHub, criar nossos relatórios do RMarkdown, postar os relatórios no RPubs, criar nossas aplicações Shiny e publica-las no shinyapps.io, e muito mais, tudo sem sair do RStudio. Quando comecei a aprender Python, fui apresentado a muitas IDE’s. Primeiro usei o Jupyter Notebook, depois o Spyder, então o VS Code, o Databricks, o Google Colab e ouvi falar de muitas outras. Assisti vídeos de opinião e fui apredendo um pouco de cada, mas sempre sentindo falta do RStudio. Até que um dia, ao entrar na página do RStudio para olhar uns exemplos do Shiny me deparei com a seguinte página: R & Python: A Love Story. Sim! um pacote chamado “reticulate” para executar códigos Python dentro do R.

Corri para o RStudio novamente, instalei o reticulate e tentei executar alguns códigos no Python. Não deu certo! Fui buscar algumas informações e descobri que precisava criar um ambiente virtual para executar o Python no R. Depois de ler aguns blogs e fazer algumas tentativas ainda sem sucesso, encontrei um ótimo vídeo no canal R-Ladies Baltimore criado pela professora do departamento de estatística da University of British Columbia, Tiffany Timbers. No vídeo, ela explica como configurar o ambiente virtual.

Escrevi este documento para compartilhar um pouco do que aprendi. Além da configuração inicial do ambiente virtual, também incluí uma sessão com alguns códigos do Python.

A sessão com os códigos do Python consiste em um processo de obtenção de dados da Web, criação de um BD do MongoDB e inserção dos dados selecionado no BD. Ao final, os dados coletados do MongoDB foram salvos em um data frame do Pandas e utilizados em uma funão do R através de uma função do pacote Reticulate.



Configurar o ambiente

Passo 1. Copiar o caminho do Python

Para utilziar o Python com o RStudio, primeiro é necessário configurar o ambiente virtual. Para isso precisamos saber onde o Python está instaldo no computador. Para isso, basta abrir o terminal (digite “cmd” no menu iniciar) e inserir o comando “where python”. O resultado do comando é o caminho onde o Python está instado. basta copiar o caminho e seguir o próximo passo (Figura 1).

O caminho deve parecer com isso:

“C:\Users\user\AppData\Local\Programs\Python\Python38\python.exe”

Obs. Lembrando que o R não reconhece a barra invertida como caminho, ou precisam ser usadas duas barras invertidas ou uma normal.


Figura1. Pronpt de comando do Windows mostrando o comando ‘where python’ para saber o caminho onde o Python está instaldo. A seta indica o caminho que deve ser copiado.


Passo 2. Configurar o ambiente no perfil do R

Após copiar o caminho, é preciso abrir o “R profile” para adicionar o ambiente virtual Python. Para isso, utilizar a função “edit_r_profile” do pacote “usethis”. Se você nunca adicionou nada no seu perfil do R, vai abrir um arquivo em branco chamado “.Rprofile”. No arquivo que apareceu (Figura 2) digite o código abaixo, colando o caminho copiado anteriormente no “caminho_python”.

       “Sys.setenv(RETICULATE_PYTHON =”caminho_python“)”

Depois, basta salvar o arquivo, que pode ser fechado. Se executar a função “edit_r_profile” novamente, essa configuração já vei estar salva no perfil.

Reinicie a sessão do R e está pronto para excecutar os códigos do Python.

usethis::edit_r_profile()


Figura 2. Configurar o ambiente virtual Python no arquivo de perfil do r. “.Rprofile”.



Códigos Python

Agora, para começar a utilziar o Python, basta carregar o pacote “reticulate” e executar a função “repl_python()”. No console o “>” normal do R vai ser substituido por “>>>”, e os códigos Python poderão ser executados. No RMarkdow os códigos Python podem ser executados diretamente nos blocos (Chunk), basta iniciar cada bloco de código com {python}.

Carregar as bibliotecas do Python que vamos utilizar.

import pandas as pd
import requests
import json
from pymongo import MongoClient
import pprint
import datetime

Os dados para o exemplo foram obtidos do Portal Brasileiro de Dados Abertos.


Nome do conjunto de dados: Vendas de veículos pelas concessionárias - Automóveis


Conceito: Valor da produção de veículos automotores no País. Refletem o desempenho das vendas das empresas associadas a(o): estoque e venda de veículos pelas concessionárias produção e vendas de veículos e congêneres produção e vendas de motociclos


Fonte: Federação Nacional da Distribuição de Veículos Automotores

URL: http://api.bcb.gov.br/dados/serie/bcdata.sgs.7384/dados?formato=json


Variáveis no dataset:           data: Data no formato “dd/mm/yyyy”, as datas são o dia primeiro de cada mês, são uma representação do mês de referência.

          valor: Número de unidades vendidas na data (mês)


Requisição GET para obter os dados no formato JSON.

r = requests.get(url='https://api.bcb.gov.br/dados/serie/bcdata.sgs.7384/dados?formato=json')

Cria a conexão com o MongoDB

# Cria a conexao com o MongoDB
con = MongoClient('localhost', 27017)

# Lista os BD's 
con.list_database_names()
## ['Vendas', 'admin', 'config', 'igti', 'local', 'vendas_automoveis']

Deleta o BD ‘vendas_automoveis’ que será criado novamente no próximo bloco.

con.drop_database('vendas_automoveis')

Cria o BD e a coleção para inserir os dados no BD

novo_bd = con['vendas_automoveis']
nova_colecao = novo_bd['vendas']

Conecta novamente o BD, a coleção vendas e insere os dados JSON coletados no BD.

db = con['vendas_automoveis']
# Carrega o bd
vendas = db.vendas
resultado = vendas.insert_many(r.json())

Busca os dados do BD e configura os campos de data como datetime e o de valor como número.

df = pd.DataFrame(list(vendas.find()))
df['data'] = pd.to_datetime(df['data'], dayfirst=True)
df['valor'] = pd.to_numeric(df['valor'])

Usa o pacote reticulate para utilizar o data frame do pandas em uma função do R, neste caso um GGPlot

library(ggplot2)
library(reticulate)
addUnits <- function(n) {
  labels <- ifelse(n < 1000, n,  # less than thousands
                   ifelse(n < 1e6, paste0(round(n/1e3), 'k'),  # in thousands
                          ifelse(n < 1e9, paste0(round(n/1e6), 'M'),  # in millions
                                 ifelse(n < 1e12, paste0(round(n/1e9), 'B'), # in billions
                                        ifelse(n < 1e15, paste0(round(n/1e12), 'T'), # in trillions
                                               'too big!'
                                        )))))
  return(labels)
}


ggplot(py$df, aes(x = data, y = valor)) + 
  geom_line() +
  expand_limits(y = c(0, NA)) +
  scale_y_continuous(labels = addUnits) +
  scale_x_datetime(date_breaks = "2 year", date_labels = "%Y") +
  xlab("Ano") +
  ylab("Número de automóveis vendidos por mês") +
  theme_bw()



Leonardo Donato Nunes                    

Brasil, 04 de Janeiro de 2021


Back to top