Reticulate en R

R Python Petrofísica

Carga archivos LAS con la librera Welly de Python desde R

Rigoberto Chandomi https://www.linkedin.com/in/rigobertochandomi/
2023-11-20

El paquete reticulate proporciona un amplio conjunto de herramientas para la interoperabilidad entre Python y R. El paquete incluye facilidades para:

Llamar a Python desde R en una variedad de formas, incluyendo R Markdown, scripts de Python, importación de módulos de Python, y el uso de Python de forma interactiva dentro de una sesión de R.

Traducción entre objetos R y Python (por ejemplo, entre dataframes R y Pandas, o entre matrices R y matrices NumPy).

Vinculación flexible a diferentes versiones de Python, incluyendo entornos virtuales y entornos Conda.

En este ejemplo cargamos los paquetes reticulate y dplyr para utilizar las librerías de Python y manipular datos. Podemos especificar la ruta de python o utilizar la variable path por defecto

#install.packages("reticulate")
library(reticulate)
library(dplyr)
use_python("C:/Python37")

Primero Cargamos las librerías python; welly para leer archivos .las y numpy para manejar arrays y dataframes. En la función import() el parámetro module es el nombre del módulo de Python, el parámetro convert indica si los objetos de Python se convertirán automáticamente a su equivalente en R.

wl <- import(module = "welly",convert = FALSE)
np <- import(module = "numpy",convert = FALSE)

Cargamos de datos desd un archvo *.las, en este caso son datos de registro de un pozo de campo Volve, tomados de un conjunto de datos público. Usamos el operador $ para llamar laa funciones de librerías python

w1.las =  wl$Well$from_las('159-19A_LFP.las')

Después de leer el archivo LAS podemos convertirlo en pandas dataframe, y luego en un objeto equivalente de R con la función py_to_r()

#convert to pandas dataframe
w1.pyDF = wl$Well$df(w1.las)

#Convert to R object
w1.rDF <- py_to_r(w1.pyDF)

Ahora podemos manipular los datos de registro en el ambiente R. Usando la función select() del paquete dplyr, obtenemos sólo 5 variables (columnas) del dataframe y usando la función summary se muestra un resumen estadistico de cada variable.

#Select 5 columns
W1.log <- w1.rDF %>%
       select(LFP_GR,LFP_DT,LFP_NPHI,LFP_RHOB,LFP_RT)

#Set columns names
colnames(W1.log) <- c("GR","DT","NPHI","RHOB","RT")

head(W1.log)
                GR       DT      NPHI     RHOB       RT
3500.0183 36.62100 76.72920 0.1542000 2.460200 1.791000
3501.0183 19.33979 78.63159 0.1597398 2.471712 1.854558
3502.0183 18.84149 77.20108 0.1608761 2.501013 2.030150
3503.0183 13.04376 75.79430 0.1516073 2.495261 1.945968
3504.0183 16.61945 74.73752 0.1431858 2.531302 2.160454
3505.0183 16.07623 73.56017 0.1331433 2.491674 2.280584
summary(W1.log)
       GR               DT              NPHI              RHOB      
 Min.   :  0.00   Min.   : 59.89   Min.   :0.06296   Min.   :2.005  
 1st Qu.: 23.80   1st Qu.: 72.14   1st Qu.:0.13956   1st Qu.:2.369  
 Median : 36.80   Median : 77.62   Median :0.17711   Median :2.466  
 Mean   : 53.49   Mean   : 80.92   Mean   :0.20888   Mean   :2.449  
 3rd Qu.: 66.14   3rd Qu.: 84.85   3rd Qu.:0.23487   3rd Qu.:2.550  
 Max.   :783.63   Max.   :131.36   Max.   :4.40690   Max.   :2.901  
 NA's   :9                                           NA's   :1      
       RT           
 Min.   :   0.1903  
 1st Qu.:   1.5673  
 Median :   2.0722  
 Mean   :   9.5929  
 3rd Qu.:   4.4428  
 Max.   :1786.9496