Friday, June 22, 2012

Analytics con SAP y R (Version Windows)


Mi buen amigo y guru de programacion Piers Harding escribio un blog llamado Analytics with SAP and R donde nos mostro como enlazar los maravillosos mundos de R y SAP. Si...SAP...no SAP HANA...sino el buen y viejo NetWeaver...

Piers construyo la extension de RSAP usando Linux...pero yo soy un usuario Windows...asi que iniciamos la discusion y colaboracion de como construir la extension para Windows 64 bits.

Debo decirlo...no fue facil...Piers no tiene Windows...asi que yo necesitaba probar todo...pero yo no tenia experiencia previa construyendo extensiones para R...asi que luego de mucho trabajo por ambas partes, estoy feliz de anunciar que lo hicimos funcionar

Aqui estan los pasos a seguir...

  • Instala los siguientes paquetes en RStudio: yaml, reshape y RUnit.
  • Ve a este thread http://scn.sap.com/thread/950318 y decarga la ultima version de la libreria NWRFCSDK.
  • Descarga el codigo fuente de RSAP de la cuenta de Github de Piers https://github.com/piersharding/RSAP
  • Descarga RTools para la version de tu instalacion de R
  • Dentro de la carpeta /src copia todo el contenido de las siguentes carpetas:
    • /include de tu instalacion de R
    • /include de tu carpeta nwrfcsdk
    • /lib de tu carpeta nwrfcsdk
  • Cambia el archivo Makevars.win (localizado en RSAP/src) y utiliza esta linea:
    • PKG_LIBS=sapnwrfc.dll libsapucum.dll

Asegurate de que estas usando el R correcto para tu carpeta NWRFCSDK...R 64bit para NWRFCSDK 64bits. Puedes revisar estos si vas a Variables de Entorno --> Path y buscas algo como esto C:\Program Files\R\R-2.15.0\bin\x64 (x32 o x64)

Con eso listo, podemos abrir una sesion CMD y escribir lo siguiente:

C:\> R CMD INSTALL --build --preclean --clean --no-multiarch -l C:/RSAP RSAP

De hecho que vas a recibir algunos warnings, pero no te preocupes...debe estar todo bien siempre y cuando recibas esta lineas...


installing to C:/RSAP/RSAP/libs/x64
** R
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
* MD5 sums
packaged installation of 'RSAP' as RSAP_0.03.zip


* DONE (RSAP)

No estoy muy seguro, si eso es suficiente para tener el RSAP instalado y listo para trabajar...asi que para estar seguro, puedes hacer esto...

  • Ve a tu carpeta RSAP...y haz un .zip de la carpeta RSAP que esta dentro.
  • Ve a tu RStudio y selecciona Tools --> Install Packages --> Choose (.zip) --> Busca tu .zip y presiona Install.

Ahora, estamos listos para la accion...tal como hizo Piers, voy a usar un archivo .yml para guardar mis parametros de coneccion:

ashost: "X.X.X.X"
sysnr: "00"
client: "520"
user: "idadmin"
passwd: "XXXXXXXX"
lang: EN
trace: 1
lcheck: 1
loglevel: warn

Y aqui esta el codigo fuente para nuestro ejemplo...(Para este ejemplo necesitas las librerias: wordcloud y tm).

library("RSAP")
library("tm")
library("wordcloud")
setwd("C:/Blag/R_Scripts")
 
 
conn = RSAPConnect("sap.yml")
parms<-list('DELIMITER' = ';',
               'FIELDS' = list(FIELDNAME = list('CARRNAME', 'FORCURAM')),
               'QUERY_TABLE' = 'ZSBOOK')
res<-RSAPInvoke(conn, "RFC_READ_TABLE", parms)
RSAPClose(conn)
 
 
sbook<-res$DATA
flds<-sub("\\s+$", "", res$FIELDS$FIELDNAME)
sbook<-data.frame(colsplit(sbook$WA,";", names=flds))
sbook_agg=aggregate(FORCURAM ~ CARRNAME, data=sbook, FUN=sum)
vect<-cbind(sbook_agg$CARRNAME,sbook_agg$FORCURAM)
new_vect<-vect[order(vect[,2]),]
new_vect<-c(new_vect[,1])
n<-length(new_vect)
new_array<-c(n,1)
carrname<-levels(sbook_agg$CARRNAME)
for(i in 1:n) new_array[i]<-carrname[new_vect[i]]
d<-data.frame(word=new_array,freq=new_vect)

Para hacer el grafico mas sencillo de leer, agrege la opcion para crear PDFs, asi que un PDF sera generado.


Espero que les haya gustado este blog...Piers y yo pusimos un gran esfuerzo y la recompensa ha sido asombrosa...ahora usuarios de Linux y Windows pueden disfrutar RSAP! -:D

No comments: