Interfases con R/R Interfaces

28
Interfases con R Seminarios Lic. en Estad´ ıstica Bernardo Alvez da Cruz IESTA – UDELAR 1 de junio de 2009 Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 1 / 24

Transcript of Interfases con R/R Interfaces

Interfases con R

Seminarios Lic. en Estadıstica

Bernardo Alvez da Cruz

IESTA – UDELAR

1 de junio de 2009

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 1 / 24

1 Introduccion

2 Conexiones e interfases de redConexiones

Archivos de textoEl Proyecto Omegahat

Interfases de redSockets

3 R & bases de datosInterfases simples

Hojas de calculoOtros formatos

Interfases avanzadasODBC y RODBC

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 2 / 24

Introduccion

¿Como se comunica R con programas externos?

Motivacion

Importacion/exportacion de datos (R , paquetes)

Grandes volumenes de datos, limitacion computacional

Comunicacion con otros sistemas

Ejemplos

¿Como leo un archivo .xls con R ?

¿Como le agrego un analisis estadıstico con R a un CRM (CustomerRelationship Management) hecho en Java?

¿Como proceso datos de una tabla almacenada en MySQL?

¿Como procesar las series de dolar del Banco Central con R ?

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 3 / 24

Introduccion

¿Como se comunica R con programas externos?

Motivacion

Importacion/exportacion de datos (R , paquetes)

Grandes volumenes de datos, limitacion computacional

Comunicacion con otros sistemas

Ejemplos

¿Como leo un archivo .xls con R ?

¿Como le agrego un analisis estadıstico con R a un CRM (CustomerRelationship Management) hecho en Java?

¿Como proceso datos de una tabla almacenada en MySQL?

¿Como procesar las series de dolar del Banco Central con R ?

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 3 / 24

Introduccion

¿Como se comunica R con programas externos?

Motivacion

Importacion/exportacion de datos (R , paquetes)

Grandes volumenes de datos, limitacion computacional

Comunicacion con otros sistemas

Ejemplos

¿Como leo un archivo .xls con R ?

¿Como le agrego un analisis estadıstico con R a un CRM (CustomerRelationship Management) hecho en Java?

¿Como proceso datos de una tabla almacenada en MySQL?

¿Como procesar las series de dolar del Banco Central con R ?

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 3 / 24

1 Introduccion

2 Conexiones e interfases de redConexiones

Archivos de textoEl Proyecto Omegahat

Interfases de redSockets

3 R & bases de datosInterfases simples

Hojas de calculoOtros formatos

Interfases avanzadasODBC y RODBC

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 4 / 24

ConexionesTipos de conexiones

Tipos de conexiones

Archivos de texto planos o comprimidos (.gz, .bz2)

Pipes para conexiones entre procesos (Unix-like)

Sockets soporte de sockets BSD (*nix, Windows)

Otros: terminales, url’s, conexiones de texto, etc.

Operaciones primitivas: open, read, write, close

Paquete: baseFunciones: file, url, gzfile, bzfile, unz, pipe, fifo, socketConnection

Ejemplosmydata = scan(unz(’exportaciones2008.zip’,’enero2008.txt’))

pag = url(’http://www.iesta.edu.uy’); html = readLines(pag,-1); print(html)

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 5 / 24

ConexionesEl Proyecto Omegahat

Es un proyecto iniciado en 1998 que agrupa una variedad de software libre deaplicacion estadıstica.Muchos paquetes estan abandonados y/o desactualizados.

Paquetes disponibles

Interfases con lenguajes de programacion:

Perl: RSPerlPython: RSPythonJava: RSJavaMatlab: RMatlab

Plug-in’s:

Gnumeric: RGnumericNetscape: SNetscape

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 6 / 24

Interfases de redSockets

Que son?La interfaz socket fue desarrollada como parte del S.O BSD y puede verse como elpunto final de una comunicacion bidireccional entre dos maquinas o entreprocesos de una maquina.Un socket queda definido por una direccion IP, un Puerto y por un Protocolo.

Uso de sockets

Escribir programas cliente/servidor entre diferentes maquinas(Windows/Unix, Mac/Linux, etc)

Realizar estudios estadısticos utilizando metodo Monte Carlo

Ejecutar una gran cantidad de tests en paralelo

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 7 / 24

Interfases de redSockets

Que son?La interfaz socket fue desarrollada como parte del S.O BSD y puede verse como elpunto final de una comunicacion bidireccional entre dos maquinas o entreprocesos de una maquina.Un socket queda definido por una direccion IP, un Puerto y por un Protocolo.

Uso de sockets

Escribir programas cliente/servidor entre diferentes maquinas(Windows/Unix, Mac/Linux, etc)

Realizar estudios estadısticos utilizando metodo Monte Carlo

Ejecutar una gran cantidad de tests en paralelo

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 7 / 24

Interfases de redSockets

Que son?La interfaz socket fue desarrollada como parte del S.O BSD y puede verse como elpunto final de una comunicacion bidireccional entre dos maquinas o entreprocesos de una maquina.Un socket queda definido por una direccion IP, un Puerto y por un Protocolo.

Uso de sockets

Escribir programas cliente/servidor entre diferentes maquinas(Windows/Unix, Mac/Linux, etc)

Realizar estudios estadısticos utilizando metodo Monte Carlo

Ejecutar una gran cantidad de tests en paralelo

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 7 / 24

Interfases de redSockets (cont.)

Ejemplo

Estando en Montevideo, deseamos obtener numeros pseudo–aleatorios generadospor un servidor localizado en Cerrillada, Rivera.

El sistema R envıa un “mensaje” con la distribucion, sus parametros y la cantidadde numeros aleatorios al servidor.El servidor obtiene un numero y se lo devuelve.Nota: el servidor puede o bien un sistema R remoto o bien un servidor dedicado.

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 8 / 24

Interfases de redCaso 1 - Comunicacion vıa sockets (bajo nivel)

Paquete: utilsFunciones: make.socket, read.socket, write.socket, close.socket

Demo: Random Server

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 9 / 24

Interfases de redCaso 1 - Comunicacion vıa sockets (bajo nivel)

Cliente

Servidor

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 10 / 24

Interfases de redCaso 1 - Comunicacion vıa sockets (bajo nivel)

Resumen1 Se crea el socket, server=TRUE

2 Se leen del socket 2048 bytes y se guarda en la variable request

3 Se procesa la solicitud, se obtienen los valores aleatorios y se escribe en elsocket la respuesta (“send”)

4 Se cierra el socket y se baja el servidor en caso de recibir un exit

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 11 / 24

Interfases de redCaso 2 - paquete Rserve

Paquete Rserve

Rserve es un servidor TCP/IP que permite a otros programas utilizar lasfuncionalidades de R (vıa sockets).Descarga: http://www.rforge.net/Rserve/files/Requisitos: R-1.5.0 o superior

CaracterısticasEspacio y directorio de trabajo independiente por conexion

Implementaciones de clientes disponibles en C/C++ y Java

Soporta conexiones remotas, autenticacion y transferencia de archivos

Util cuando queremos integrar en aplicaciones calculos estadısticos, graficos,etc con R de fondo

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 12 / 24

Interfases de redCaso 2: paquete Rserve

Instalacion, inicio y uso

> i n s t a l l . packages ( ” Rse rve ” ) # R CMD INSTALL Rse rve 0.6−0. t a r . gz

> l i b r a r y ( Rs e rve )> Rserve ( )S t a r t i n g Rse rve on po r t 6311:

Listado 1: Random Server (Java)p u b l i c s t a t i c vo i d getRandomNumbers ( ) {

t r y {RConnect ion c = new RConnect ion ( ) ;S t r i n g fun = ” r u n i f (10 ,0 ,30 ) ” ;doub le [ ] d= c . e va l ( fun ) . a sDoub l e s ( ) ;f o r ( i n t i =0; i< d . l e ng th ; i++) {

System . out . p r i n t l n ( ” ” + d [ i ] ) ;}

} ca tch ( Excep t i on e ){e . p r i n tS t a ckT r a c e ( ) ;

}}

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 13 / 24

Interfases de redOtras interfases de red

download.file: permite leer desde una url (http o https) y grabar en unarchivo el contenido

DCOM: es un protocolo de Windows para comunicacion entre diferentesprogramas

CORBA (Common Object Request Broker Architecture): similar a DCOM,permite a otras aplicaciones llamar a funciones, operaciones que estanubicados en un servidor de objetos.

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 14 / 24

1 Introduccion

2 Conexiones e interfases de redConexiones

Archivos de textoEl Proyecto Omegahat

Interfases de redSockets

3 R & bases de datosInterfases simples

Hojas de calculoOtros formatos

Interfases avanzadasODBC y RODBC

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 15 / 24

Hojas de calculo

Importacion

En Windows:

RODBC

library(RODBC); con = odbcConnectExcel(’C:\\datos.xls’)gdata (multiplataforma, convierte a csv previa importacion)library(gdata); data = read.xls(’C:\\datos.xls’, sheet=1,perl=“perl”)xlsReadWrite

En Linux:

gdata (idem anterior)xls → csv → R

Exportacion a excel/plugins

Exportar datos de R a Excel, paquetes: dataframes2xls, WriteXLS

(Excel 2003)

Plugins para manejo de funciones de R desde Excel o Gnumeric: RExcel,RGnumeric, etc.

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 16 / 24

Otros formatos

Paquete foreign

Sistema Leer EscribirSAS read.xportSPSS read.spss write.spssStata read.dta write.dtaS-Plus read.S write.SFoxPro, DBase (DBF) read.dbf write.dbfEpiInfo (.REC) read.epinfo

En Windows puede utilizarse el paquete RODBC para leer/escribir en archivos DBF.

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 17 / 24

Interfaz ODBC para acceso a bases de datos

ODBC (Open DataBase Conectivity)

Es un estandar de acceso a bases de datos sin importar el DBMS (DataBaseManagement System) que almacena los datos.Esto brinda independencia de lenguajes de programacion, bases de datos ysistemas operativos.Existen ODBC para muchos sistemas de bases de datos:Oracle (Oracle Inc.), SQL Server, Access (Microsoft), MySQL (SunMicrosystems), PostgreSQL (open source)

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 18 / 24

ODBC: componentes

Componentes

Una aplicacion compatible conODBC (aplicacion que utiliza lainterfaz ODBC paracomunicarse con un DBMS)

ODBC Driver Manager, es elpuente entre la aplicacionODBC y el driver ODBC

Repositorio con drivers ODBCinstalados

Driver ODBC, el cual traducelas llamadas de la API ODBC ensentencias que entiende elDBMS

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 19 / 24

Como utilizar ODBC

1 Abrir conexion con la base de datos.Para ello es necesario crear un DSN (Data Source Name).Existen dos tipos de DSN:

User DSN (DSN de usuario): accesible solamente por el usuario que lo creoSystem DSN (DSN del sistema): accesible por cualquier usuario

Ejemplo:

"DSN=DSNMysql, UID=usuario, PWD=1234"

2 Enviar la consulta

3 Procesar el resultado

4 Cerrar la conexion con la base de datos

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 20 / 24

Paquete RODBC

RODBCRODBC provee una interfaz a fuentes de datos que soportan ODBC.Esto permite que un mismo codigo R pueda acceder a diferentes bases de datos, yal ser ODBC un sistema cliente–servidor podemos estar conectados a un DBMScorriendo en un sistema Linux desde un cliente Windows.

RODBC provee dos grupos de comandos: odbc* de mas bajo nivel y sql* demas alto nivel.

hasta 16 conexiones a la vez y hacia cualquier combinacion de hosts/dsn.

Puede utilizarse RODBC para importar datos de Excel vıa el driver ODBCpara Excel, sin embargo, tenemos que ajustarnos a ciertos requisitos que debecumplir la planilla.

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 21 / 24

Paquete RODBC

FuncionesLas funciones basicas que vamos a manejar son las siguientes:

Establecimiento de conexiones a bases de datos ODBC:odbcConnect, odbcConnectAccess, odbcConnectDbase,

odbcConnectExcel

Listado de tablas: sqlTables

Lectura de una tabla: sqlFetch

Consultas a tablas y recuperacion de resultados: sqlQuery

Observaciones

Gran cantidad de datos (archivos/bases de datos) pueden ser un problema yaque R almacena los objetos en memoria y, por lo tanto, se pueden estargenerando muchas copias de los mismos al ejecutar una funcion.Esto provoca que R se quede sin memoria y crash!.

Datos > 100 MB pueden causar el comportamiento anterior.

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 22 / 24

Bibliografıa

Phil Spector , Data Manipulation with R. Springer, 2008.

CRAN , http://cran.r-project.org/

Venables, Bill , An introduction to R: software for statistical modelling and

computing, course notes (http://www.csiro.au/files/files/pi7c.pdf)

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 23 / 24

Fin

Muchas gracias.

Bernardo Alvez da Cruz (IESTA – UDELAR) Interfases con R 1 de junio de 2009 24 / 24