R (CRAN) + Python + Latex

Que tal,

Esta vez quiero compartir una mini guía para poder realizar un proceso combinado para el uso de un software estadístico (R) con nuestro amado python, así como la combinación también de un software de publicación documental (LaTex) para poder realizar en mi caso un reporte de calidad.

La idea de este proyecto surgió de mi profesora de Métodos numéricos, en la cual se pidió un proyecto donde se aplicaran los conocimientos adquiridos en dicha materia, Sin embargo, esto no se queda aquí, dado que este proyecto puede ser reutilizado para realizar reportes estadísticos de calidad, así como procesos automátizados para reporteo (que es el caso donde lo re-aplique).

Comenzamos entonces:

Prerequisitos:
Recordemos que nuestro software es multiplataforma, así que si lo requieren instalar en Windows o el MacOS, deberán de instalar la versión correspondiente para su plataforma.

  • Python 2.7.13
  • R (version 3.3.3 (2017-03-06))
  • LaTex (pdfTeX 3.14159265-2.6-1.40.17 (TeX Live 2016/Debian))

Una vez instalado el software, estos serían nuestros prerequisitos individuales:

    1. Python:
      re
      sys
      os
      pdb
      random
      optparse
    2. R:
      require ggplot2
      library scales
      library ggpmisc
      library rticles
    3. LaTex:
      natbib
      alifeconf
      amsmath
      amssymb
      url

Las anteriores, son las librerias propias de cada software para el uso de gráficos, e interpretación numérica, bibliografía en APA, librerías matemáticas, y para el uso de formatos textuales.

En caso necesario la instalación de las librerías por cada software es en su respectivo ambiente:

Python:

Ejecutar el siguiente comando, les permitirá revisar si las librerías están instaladas:

1
2
3
4
5
6
7
8
9
10
11
pydoc modules

Please wait a moment while I gather a list of all available modules...
import sets
...
__future__ doctest optparse tkFileDialog
_abcoll dogpile os tkFont
...

Enter any module name to get more help. Or, type "modules spam" to search
for modules whose descriptions contain the word "spam".

He quitado mucha de la información resumiendo solamente unas líneas de la salida (pero aquí verán un listado enorme de librerías, pueden validar que las requerídas existan. Si requieren realizar su instalación, pueden realizarlo por su administrador de paquetes de su distribución (para windows, regularmente vienen como paquetes separados de forma individual), o también desde pip.

Para R, la forma de validarlo sería la siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
> find.package("ggplot2")
[1] "/home/morfeokmg/R/x86_64-pc-linux-gnu-library/3.3/ggplot2"

ó:

> rownames(installed.packages())
[1] "assertthat" "backports" "base64enc" "BH"
[5] "bindr" "bindrcpp" "bit" "bit64"
[9] "bitops" "blob" "brew" "broom"
[13] "callr" "caTools" "cellranger" "cli"
[17] "clisymbols" "colorspace" "commonmark" "crayon"
[21] "cronR" "curl" "data.table" "DBI"
[25] "dbplyr" "desc" "devtools" "dichromat"
[29] "dplyr" "fastmatch" "forcats" "getopt"
[33] "ggplot2" "ggpmisc" "git2r" "glue"
[37] "gridExtra" "gtable" "haven" "hms"
[41] "htmltools" "httpuv" "httr" "hunspell"
[45] "hutils" "igraph" "jsonlite" "knitr"
[49] "labeling" "later" "latexpdf" "latticeExtra"
[53] "lazyeval" "lubridate" "markdown" "MASS"
[57] "memoise" "mnormt" "modelr" "munsell"
[61] "openssl" "pandocfilters" "pillar" "pkgconfig"
[65] "plogr" "plyr" "polynom" "praise"
[69] "prettyunits" "processx" "promises" "psych"
[73] "purrr" "R6" "RColorBrewer" "Rcpp"
[77] "readr" "readxl" "rematch" "reprex"
[81] "reshape2" "rex" "rlang" "rmarkdown"
[85] "rootSolve" "rprojroot" "rstudioapi" "rticles"
[89] "scales" "selectr" "splus2R" "stargazer"
[93] "stringdist" "stringi" "stringr" "testthat"
[97] "TeXCheckR" "tibble" "tidyr" "tidyselect"
[101] "tinytex" "utf8" "viridisLite" "whisker"
[105] "withr" "xfun" "xts" "zoo"
[109] "crayon" "digest" "evaluate" "fields"
[113] "highr" "knitr" "magrittr" "maps"
[117] "markdown" "mime" "png" "spam"
[121] "stringi" "stringr" "viridis" "yaml"
[125] "base" "boot" "class" "cluster"
[129] "codetools" "compiler" "datasets" "foreign"
[133] "graphics" "grDevices" "grid" "KernSmooth"
[137] "lattice" "MASS" "Matrix" "methods"
[141] "mgcv" "nlme" "nnet" "parallel"
[145] "rpart" "spatial" "splines" "stats"
[149] "stats4" "survival" "tcltk" "tools"
[153] "utils"

En LaTex, los paquetes indicados, vienen en la instalación por default, (en windows el instalador de latex Miktex – basic-miktex-2.9.6813-x64.exe )

Una vez que ya cumplimos con estas dependencias, podemos pasar a trabajar el proyecto.

Es un proyecto sencillo, a continuación el gráfico de lo que hice para el mismo:

El proyecto:

El proyecto consistió en realizar con base en los pares ordenados que se te proporcionaran, obtener por el método de ajuste de curvas polinomial.

Consiste en las siguientes acciones:

  1. Una interfaz para obtener los pares ordenados contabilizarlos y juntarlos de forma tal que puedan ser identificados por la función a usar en R, y pedirselos al usuario que usará la interfaz de comandos.
  2. En R se requieren como lista de Pares Ordenados, por lo que esta interfaz debe generar la tabla a leerse desde R. (esta interfaz generará un listado csv temporal)
  3. R lee esta lista csv temporal y la integra a una función de conjunto de datos (data.frame) para poder hacer operaciones correspondientes.
  4. Se realiza la contabilización de los pares ordenados proporcionados, no pueden ser solo 1 par ordenado, si no de 2..n, para poder aplicar el método (y dado que la función a usar no permite solo 1 par ordenado).
  5. Para identificar el % de error por el uso de un polinomio de grado 2..n-1, se va a ir realizando el calculo desde el grado 2 hasta el n-1 (dependiendo de la cantidad de pares ordenados).
  6. Se itera el calculo por grado, y se generan las tablas en formato png, su gráfico correspondiente. Se guarda en una carpeta.
  7. Una vez generados los png de las gráficas y las tablas, la interfaz (en python), identifica la cantidad de archivos png (el nombre de estos va de acuerdo al grado de del polinomio usado). por lo que se ordenan en una lista python.
  8. Se leen los templates LaTex y se generan el documento cabecera (python invoca LaTex)
  9. se genera el cuerpo LaTex de con los pngs (tablas y gráficas). (python invoca LaTex)
  10. Se genera la bibliografía en formato APA de acuerdo al archivo bib (python invoca bibTex)
  11. Se unifican los la cabecera, cuerpo y la bibliografía y se generan el documento pdf (python invoca LaTex)
  12. Se notifica al usuario que el proceso ha terminado.

Una vez hecho esto, podemos ver los resultados en la siguiente pantalla.

Y el ejemplo pdf generado.

metodosNumericos

El código de todo el proyecto se encuentra aquí

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *