Interfases con R/R Interfaces
-
Upload
balcruz -
Category
Technology
-
view
507 -
download
0
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