Instrução inicial* (Importante)

Para utilizar o Python e o Markdown de forma que seja possível renderizar o documento para obter o output, antes é nescessário conferir se as configurações de PATH do sistema não estão dando conflito.

A seguinte solução proposta neste link do stackoverflow resolveu ou problema:

  • Open Control Panel-> System Settings -> Advanced System Settings ->Environment Variables ->New. Set Variable Name: QT_PLUGIN_PATH , Variable Directory:

C:\Users\Fellipe\Anaconda3 e C:\Program Files\MiKTeX 2.9\miktex\bin\x64

O pacote reticulate

O pacote reticulate fornece um conjunto abrangente de ferramentas para interoperabilidade entre o Python e o R. O pacote inclui recursos para:

  • Chamando Python de R de várias maneiras, incluindo R Markdown, sourcing de scripts Python, importando módulos Python e usando Python interativamente dentro de uma sessão R.

  • Tradução entre objetos R e Python (por exemplo, entre quadros de dados R e Pandas, ou entre matrizes R e matrizes NumPy).

  • Ligação flexível para diferentes versões do Python, incluindo ambientes virtuais e ambientes Conda.

O Reticulate incorpora uma sessão Python em sua sessão R, permitindo interoperabilidade perfeita e de alto desempenho. Se você é um desenvolvedor de R que usa Python para algum de seus trabalhos ou um membro da equipe de ciência de dados que usa os dois idiomas, o reticulate pode simplificar drasticamente seu fluxo de trabalho!

Começando

Instalação

Instale o pacote reticulado do CRAN da seguinte maneira:

install.packages("reticulate")

Versão em Python

Por padrão, o reticulate usa a versão do Python encontrada em seu PATH (por exemplo, Sys.which("python")).

Fornecendo dicas

Há duas maneiras de fornecer dicas sobre qual versão do Python deve ser usada:

1 - Configurando o valor da variável de ambiente RETICULATE_PYTHON para um binário do Python. Observe que, se você definir essa variável de ambiente, a versão especificada do Python sempre será usada (isto é, prescritiva, em vez de consultiva). Para definir o valor de RETICULATE_PYTHON, insira Sys.setenv(RETICULATE_PYTHON = PATH) no .Rprofile do seu projeto, onde PATH é seu binário Python preferido.

2 -Ao chamar uma destas funções:

Descrição da função
use_python() Especifique o caminho de um binário específico do Python.
use_virtualenv() Especifique o diretório que contém um virtualenv do Python.
use_condaenv() Especifique o nome de um ambiente Conda.

A função use_python() permite que você especifique uma versão alternativa, por exemplo:

library(reticulate)
use_python("C:/Users/Fellipe/Anaconda3")
use_virtualenv("~/myenv")
use_condaenv("myenv")

Pacotes Python

Você pode instalar qualquer pacote Python requerido usando ferramentas de shell padrão como pip econda. Alternativamente, reticulate inclui um conjunto de funções para gerenciar e instalar pacotes dentro de virtualenvs e Ambientes Conda. Veja o artigo sobre Instalando o Python Pacotes para detalhes adicionais.

Chamando o Python

Existem várias maneiras de integrar o código Python ao seu R projetos:

  1. Python no Markdown R - Um novo Python mecanismo de linguagem para R Markdown que suporta bidirecional comunicação entre R e Python (os fragmentos R podem acessar o Python objetos e vice-versa).

  2. Importando módulos Python - O A função import () permite importar qualquer módulo Python e chamar funciona diretamente de R.

  3. Sourcing de scripts em Python - O A função source_python() permite que você crie um script Python mesma maneira que você iria source () um script R (funções Python e objetos definidos dentro do script ficam diretamente disponíveis para o R sessão).

  4. REPL do Python - A função repl_python() cria um console interativo do Python dentro de R. Objetos que você cria dentro Python estão disponíveis para sua sessão R (e vice-versa).

Cada uma dessas técnicas é explicada em mais detalhes abaixo.

Python in R Markdown

O pacote ** reticulate ** inclui um mecanismo Python para R Markdown com os seguintes recursos:

  1. Execute pedaços de Python em uma única sessão do Python incorporada em seu R session (shared variables / state entre pedaços de Python)

  2. Impressão de saída em Python, incluindo saída gráfica de matplotlib.

  3. Acesso a objetos criados dentro de blocos do Python usando o py objeto (por exemplo, py $ x acessaria uma variávelx criada dentro Python de R).

  4. Acesso a objetos criados dentro de R chunks do Python usando o r objeto (por exemplo, r.x acessaria a variávelx criada dentro de R de Python)

</ div>

A conversão interna para muitos tipos de objeto Python é fornecida, incluindo NumPy matrizes e Pandas quadros de dados. Do exemplo, você pode use Pandas para ler e manipular dados, em seguida, plotar facilmente os dados do Pandas frame usando ggplot2:

# Chunk em Python
import pandas
iris = pandas.read_csv("iris.csv")
# Chunk em R
library(ggplot2)
ggplot(py$iris, aes(Sepal.Length, Sepal.Width, col=Species))+
  geom_point()+
  geom_jitter()

Observe que o mecanismo Python reticulado é ativado por padrão dentro de R Markdown sempre que o reticulate estiver instalado.

Veja o R Markdown Python Engine documentação para detalhes adicionais.

Importando módulos Python

Você pode usar a função import () para importar qualquer módulo Python e chamar a partir de R. Por exemplo, este código importa o módulo os do Python e chama a função listdir ():

library(reticulate)
os <- import("os")
os$listdir(".")
 [1] ".git"             ".gitignore"       ".Rbuildignore"    ".RData"          
 [5] ".Rhistory"        ".Rproj.user"      ".travis.yml"      "appveyor.yml"    
 [9] "DESCRIPTION"      "docs"             "external"         "index.html"      
[13] "index.Rmd"        "inst"             "issues"           "LICENSE"         
[17] "man"              "NAMESPACE"        "NEWS.md"          "pkgdown"         
[21] "R"                "README.md"        "reticulate.Rproj" "src"             
[25] "tests"            "vignettes" 

Funções e outros dados dentro de módulos e classes do Python podem ser acessado através do operador $ (análogo ao modo como você interage com uma lista R, ambiente ou classe de referência).

Os módulos importados do Python suportam o preenchimento de código e a ajuda em linha:

Veja Chamando o Python de R para detalhes adicionais sobre como interagir com objetos Python de dentro de R.

Sourcing de scripts Python

Você pode criar qualquer script Python da mesma forma que você cria um script R usando a função source_python(). Por exemplo, se você tivesse o seguindo o script Python iris.py :

# Codigo em Python
import pandas
def read_iris(file):
  iris = pandas.read_csv(file)
  return iris

Então você pode criar o script e chamar a função read_flights() como segue:

# Codigo em R
source_python("iris.py")
iris <- read_iris("iris.csv")

ggplot(py$iris, aes(Sepal.Length, Sepal.Width, col=Species))+
  geom_point()+
  geom_jitter()

Veja a documentação source_python() para detalhes adicionais sobre código Python de sourcing.

REPL de Python

Se você quer trabalhar com Python interativamente, você pode chamar o repl_python() function, que fornece um REPL de Python embutido sua sessão R. Objetos criados dentro do REPL Python podem ser acessados de R usando o objeto py exportado de reticulate. Por exemplo:

!

Digite exit dentro do Python REPL para retornar ao prompt R.

Observe que o código Python também pode acessar objetos de dentro da sessão R usando o objeto r (por exemplor.flights). Veja o repl_python() documentação para adicional de

REPL de Python

Se você quer trabalhar com Python interativamente, você pode chamar o repl_python () function, que fornece um REPL de Python embutido sua sessão R. Objetos criados dentro do REPL Python podem ser acessados de R usando o objeto py exportado de reticulate. Por exemplo:

!

Digite exit dentro do Python REPL para retornar ao prompt R.

Observe que o código Python também pode acessar objetos de dentro da sessão R usando o objeto r (por exemplor.flights). Veja o repl_python () documentação para detalhes adicionais sobre como usar o REPL incorporado em Python.

Conversão entre R e Python

reticulate fornece os genéricos r_to_py() para converter objetos R em objetos Python e py_to_r() para converter objetos Python de volta em objetos R. Os autores de pacotes podem fornecer métodos para esses genéricos converterem objetos Python e R que não são manipulados por reticulate.

reticulate fornece operadores de conversão para alguns dos objetos Python mais usados, incluindo:

  • Objetos Python incorporados (listas, dicionários, números, strings, tuplas)
  • Matrizes NumPy,
  • Objetos Pandas (Index, Series, DataFrame),
  • Objetos de data e hora do Python.

Ao chamar o Python, os tipos de dados R são convertidos automaticamente para seus tipos equivalentes de Python. Quando os valores são retornados do Python para o R eles são convertidos de volta para os tipos R. Tipos são convertidos como segue:

R Python Exemplos
Vetor de elemento único Escalar 1,1L, TRUE,"foo"
Vetor de vários elementos List c (1.0, 2.0, 3.0), c (1L, 2L, 3L)
Lista de vários tipos Tuple list (1L, TRUE," foo ")
Lista nomeada Dict list (a = 1L, b = 2.0), dict (x = x_data)
Matriz / Matriz Nump ndarray
Quadro de dados Pandas DataFrame data.frame (x = c (1,2,3), y = c (" a "," b "," c "))
Função Função Python função (x) x + 1
NULL, TRUE, FALSE None, True, False NULL,TRUE, FALSE

Se um objeto Python de uma classe personalizada for retornado, então uma referência R para esse objeto é retornado. Você pode chamar métodos e acessar propriedades de o objeto como se fosse uma instância de uma classe de referência R.

Por que reticular?

Da Wikipedia artigo sobre o python reticulado:

O python reticulado é uma espécie de python encontrado no sudeste da Ásia. Eles são as cobras mais longas do mundo e os répteis mais longos … O específico nome, reticulatus, significa latim “net-like”, ou reticulado, e é uma referência ao padrão de cores complexo.

De Merriam-Webster definição de reticulate:

1: assemelhando-se a uma rede ou rede; especialmente: ter veias, fibras ou linhas cruzando uma folha reticulada. 2: ser ou envolver evolução mudança dependente da recombinação genética envolvendo diversos populações de cruzamento.

O pacote permite que você * reticule * o código Python em R, criando um nova raça de projeto que une as duas linguagens.

Aprendendo mais

Os seguintes artigos cobrem os vários aspectos do uso reticulado

Chamando o Python

Chamando o Python de R Descreve as várias maneiras de acessar objetos Python de R, bem como funções disponíveis para interações e conversões mais avançadas comportamento.

Conversão de objetos

Por padrão, quando os objetos Python são retornados para R, eles são convertidos em seus tipos R equivalentes. No entanto, se você preferir tornar a conversão de Python para R explícita e lidar com objetos nativos do Python por padrão, poderá passar convert = FALSE para a função de importação. Neste caso, a conversão de Python para R será desativada para o módulo retornado da importação. Por exemplo:

# import numpy e não especifica nenhuma conversão automática de Python para R
np <- import ("numpy", convert = FALSE)
# faça algumas manipulações de array com o NumPy
a <- np$array(c(1:4))
soma <- a$cumsum()
# converter para R explicitamente no final
py_to_r(soma)
## [1]  1  3  6 10

Como ilustrado acima, se você precisar acessar um objeto R no final de seus cálculos, poderá chamar a função py_to_r () explicitamente.

Conseguindo ajuda

Você pode imprimir documentação em qualquer objeto Python usando a função py_help (). Por exemplo:

os <- import ("os")
py_help(os$chdir)

R Markdown Python Engine

R Markdown Python Engine - Fornece detalhes sobre o uso de fragmentos do Python no R Markdown documentos, incluindo como chamar o código Python a partir de pedaços R e vice-versa.

Chunks de Python

Os fragmentos de código Python funcionam exatamente como os fragmentos de código R: o código Python é executado e qualquer saída impressa ou gráfica (matplotlib) é incluída no documento.

Todas as partes do Python são executadas em uma única sessão do Python, portanto, têm acesso a todos os objetos criados em partes anteriores. Opções de partes como echo, include, etc. funcionam como esperado.

Veja um documento R Markdown que demonstra isso:

# Chunk de python
import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2*np.pi*t)
plt.plot(t,s)
plt.xlabel('time (s)')
plt.ylabel('voltage (mV)')
plt.grid(True)
plt.savefig('test.png')
plt.show()

  • Versão em Python Configuração
  • Descreve as facilidades para determinar qual versão do Python é usado por reticulate dentro de uma sessão R.

  • Instalando o Python Pacotes
  • Documentação sobre a instalação de pacotes Python do PyPI ou Conda, e gerenciar instalações de pacotes usando virtualenvs e Conda ambientes.

  • Usando reticulate em um R Pacote
  • Diretrizes e melhores práticas para usar o reticulate em um R pacote.

  • Matrizes em R e Python - Discussão avançada das diferenças entre arrays em R e Python e as implicações para conversão e interoperabilidade.