Se debe instalar el paquete reticulate y cargar su libreria con el mismo nombre
# --- R ---
library(reticulate)
Despues tenemos que fijar el directorio donde tengamos Python. En mi caso uso el environment Anaconda.
# --- R ---
use_condaenv("C:/Users/Usuario/anaconda3/python.exe")
Ahora ya se puede ejecutar codigo de Python, pero solo en chunks de python, es decir, en chunks que empiezan con ```{python}
# --- PYTHON ---
a = "Hola " + "Mundo"
print(a)
## Hola Mundo
Si ejecutamos un codigo de Python en un chunk de R, es decir, en un chunk que empieza por ```{r} , obtenemos un error.
# --- R ---
# b = "Hola " + "Mundo"
# print(b)
# Si se ejecuta sale error porque estamos usando lenguaje Python dentro de un chunk de R
Podemos acceder a los objetos creados con Python desde un chunk de R con la instruccion py$
# --- R ---
py$a
## [1] "Hola Mundo"
Podemos equivalentemente acceder a los objetos creados en R desde un chunk de Python con instruccion r.
# --- R ---
b="ey chavales"
# --- PYTHON ---
r.b
## 'ey chavales'
Podemos cargar librerias de Python usando un chunk de R del siguiente modo
# --- R ---
# py_install("pandas")
# py_install("numpy")
# py_install("scipy")
Vamos a hacer un ejemplo de una analisis estadistico mezclando el uso de Python y R. Esta es la principal utilidad de reticulete, nos permite hacer analisis con R y Python simultaneamente
# --- PYTHON ---
# Tratamiento de datos
import pandas as pd
import numpy as np
# Gráficos
import matplotlib.pyplot as plt
from matplotlib import style
import seaborn as sns
# Preprocesado y modelado
from scipy.stats import pearsonr
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
from sklearn.metrics import mean_squared_error
import statsmodels.api as sm
import statsmodels.formula.api as smf
# Configuración matplotlib
plt.rcParams['image.cmap'] = "bwr"
#plt.rcParams['figure.dpi'] = "100"
plt.rcParams['savefig.bbox'] = "tight"
style.use('ggplot') or plt.style.use('ggplot')
# Configuración warnings
import warnings
warnings.filterwarnings('ignore')
# --- PYTHON ---
# Datos
equipos = ["Texas","Boston","Detroit","Kansas","St.","New_S.","New_Y.", "Milwaukee","Colorado","Houston","Baltimore","Los_An.","Chicago", "Cincinnati","Los_P.","Philadelphia","Chicago","Cleveland","Arizona", "Toronto","Minnesota","Florida","Pittsburgh","Oakland","Tampa", "Atlanta","Washington","San.F","San.I","Seattle"]
bateos = [5659, 5710, 5563, 5672, 5532, 5600, 5518, 5447, 5544, 5598, 5585, 5436, 5549, 5612, 5513, 5579, 5502, 5509, 5421, 5559, 5487, 5508, 5421, 5452, 5436, 5528, 5441, 5486, 5417, 5421]
runs = [855, 875, 787, 730, 762, 718, 867, 721, 735, 615, 708, 644, 654, 735, 667, 713, 654, 704, 731, 743, 619, 625, 610, 645, 707, 641, 624, 570, 593, 556]
datos = pd.DataFrame({'equipos': equipos, 'bateos': bateos, 'runs': runs})
datos.head(3)
## equipos bateos runs
## 0 Texas 5659 855
## 1 Boston 5710 875
## 2 Detroit 5563 787
# --- R ---
py$datos[1:7, ]
| equipos | bateos | runs |
|---|---|---|
| Texas | 5659 | 855 |
| Boston | 5710 | 875 |
| Detroit | 5563 | 787 |
| Kansas | 5672 | 730 |
| St. | 5532 | 762 |
| New_S. | 5600 | 718 |
| New_Y. | 5518 | 867 |
# --- R ---
library(ggplot2)
ggplot(data = py$datos, aes( x=bateos, y=runs) )+
geom_point()
# --- PYTHON ---
# División de los datos en train y test
# ==============================================================================
X = datos[['bateos']]
y = datos['runs']
X_train, X_test, y_train, y_test = train_test_split(
X.values.reshape(-1,1), y.values.reshape(-1,1), train_size = 0.8, random_state = 1234, shuffle = True )
# Creación del modelo
# ==============================================================================
modelo = LinearRegression()
modelo.fit(X = X_train.reshape(-1, 1), y = y_train)
## LinearRegression()
# --- PYTHON ---
# Información del modelo
# ==============================================================================
print("Intercept:", modelo.intercept_)
## Intercept: [-2367.7028413]
print("Coeficiente:", list(zip(X.columns, modelo.coef_.flatten(), )))
## Coeficiente: [('bateos', 0.5528713534479736)]
print("Coeficiente de determinación R^2:", modelo.score(X, y))
## Coeficiente de determinación R^2: 0.3586119899498744
# --- PYTHON ---
corr_test = pearsonr(x = datos['bateos'], y = datos['runs'])
print("Coeficiente de correlación de Pearson: ", corr_test[0])
## Coeficiente de correlación de Pearson: 0.6106270467206687