Gestión de Bases de Datos con R

Anuncio
Introducción
RODBC
Ejemplo
Gestión de Bases de Datos con R
Antonio Miñarro
[email protected]
Departament d’Estadı́stica
Junio, 2013
A. Miñarro
Bases de Datos con R
Junio, 2013
1 / 23
Introducción
RODBC
Ejemplo
Esquema del tema
1
Introducción
2
RODBC
3
Ejemplo
A. Miñarro
Bases de Datos con R
Junio, 2013
2 / 23
Introducción
RODBC
Ejemplo
Esquema del tema
1
Introducción
2
RODBC
3
Ejemplo
A. Miñarro
Bases de Datos con R
Junio, 2013
3 / 23
Introducción
RODBC
Ejemplo
Importación y Exportación de datos
Ficheros de texto: scan, read.fwf, read.table, read.ftable,
read.csv, readLines.
Importar de otros sistemas estadı́sticos: read.S, read.spss,
read.dta, read.octave (foreign package)
Bases de datos relacionales (RDBMS)
A. Miñarro
Bases de Datos con R
Junio, 2013
4 / 23
Introducción
RODBC
Ejemplo
Importación y Exportación de datos
Ficheros de texto: scan, read.fwf, read.table, read.ftable,
read.csv, readLines.
Importar de otros sistemas estadı́sticos: read.S, read.spss,
read.dta, read.octave (foreign package)
Bases de datos relacionales (RDBMS)
A. Miñarro
Bases de Datos con R
Junio, 2013
4 / 23
Introducción
RODBC
Ejemplo
Importación y Exportación de datos
Ficheros de texto: scan, read.fwf, read.table, read.ftable,
read.csv, readLines.
Importar de otros sistemas estadı́sticos: read.S, read.spss,
read.dta, read.octave (foreign package)
Bases de datos relacionales (RDBMS)
A. Miñarro
Bases de Datos con R
Junio, 2013
4 / 23
Introducción
RODBC
Ejemplo
Bases de datos relacionales (1)
Están especı́ficamente diseñadas para trabajar con grandes
conjuntos de datos.
Permiten un acceso rápido a partes seleccionadas de la base
de datos
Permiten sumarizar y cruzar información de los campos
Superan las restricciones de almacenaje tı́picas de las hojas de
cálculo
Permiten un acceso simultáneo de diversos clientes sobre
diferentes máquinas y con controles de seguridad
Permiten actuar como servidor de una gran variedad de
clientes
La utilización conjunta de R y DBMS’s incrementa la potencia de
ambos sistemas.
A. Miñarro
Bases de Datos con R
Junio, 2013
5 / 23
Introducción
RODBC
Ejemplo
Bases de datos relacionales (2)
Tradicionalmente han coexistido grandes RDBMS: Oracle,
IBM DB2, Microsoft SQL Server; con otros más pequeños
adaptados a ámbitos más modestos: Microsoft Access,
MySQL, etc.
Actualmente la división se está desvaneciendo con las nuevas
versiones de MySQL u otros gestores que se acercan a los
rendimientos de los grandes RDBMS.
El standard que nos permite comunicar con todas estas
fuentes de datos es el ODBC (Open Database Connectivity),
y permite conexiones también con hojas de cálculo, bases de
datos no-relacionales o incluso ficheros de texto comprimidos.
A. Miñarro
Bases de Datos con R
Junio, 2013
6 / 23
Introducción
RODBC
Ejemplo
El lenguaje SQL
Generalmente las bases de datos residirán en ordenadores
diferentes al nuestro y la comunicación se logra a través de un
lenguaje standard SQL (Structured Query Language)
soportado por la mayorı́a de DBMS.
Es necesario utilizar instrucciones especı́ficas del lenguaje para
operar con las bases de datos
Por ejemplo
Ejemplo de instrucción SQL
SELECT columna1 columna2 FROM Tabla1 WHERE columna3 > 20 ORDER BY columna2
A. Miñarro
Bases de Datos con R
Junio, 2013
7 / 23
Introducción
RODBC
Ejemplo
El lenguaje SQL
Generalmente las bases de datos residirán en ordenadores
diferentes al nuestro y la comunicación se logra a través de un
lenguaje standard SQL (Structured Query Language)
soportado por la mayorı́a de DBMS.
Es necesario utilizar instrucciones especı́ficas del lenguaje para
operar con las bases de datos
Por ejemplo
Ejemplo de instrucción SQL
SELECT columna1 columna2 FROM Tabla1 WHERE columna3 > 20 ORDER BY columna2
A. Miñarro
Bases de Datos con R
Junio, 2013
7 / 23
Introducción
RODBC
Ejemplo
Esquema del tema
1
Introducción
2
RODBC
3
Ejemplo
A. Miñarro
Bases de Datos con R
Junio, 2013
8 / 23
Introducción
RODBC
Ejemplo
R interface packages
En el CRAN existen algunos packages especı́ficos de un tipo
de base de datos: ROracle, RPostgreSQL, RJDBC, RSQLite,
RMySQL
Existen algunos de ámbito general: RODBC permite una
comunicación con fuentes de bases de datos compatibles con
ODBC
A. Miñarro
Bases de Datos con R
Junio, 2013
9 / 23
Introducción
RODBC
Ejemplo
RODBC package
Proporciona una interfaz de conexión con bases de datos
compatibles con ODBC
Corre sobre Windows/Unix/Linux/OS X y sobre casi todos los
DBMS
Windows proporciona drivers no únicamente para DBMS sino
también para Excel, DBase y ficheros de texto
Necesita la instalación previa y carga del package
En algún caso puede necesitar la instalación de drivers ODBC
especı́ficos para la plataforma y BD. Por ejemplo para instalar
conectividad con MySQL en Windows podemos encontrar el
driver en http://dev.mysql.com/downloads/connector/odbc/
> install.packages('RODBC')
> library(RODBC)
A. Miñarro
Bases de Datos con R
Junio, 2013
10 / 23
Introducción
RODBC
Ejemplo
Esquema general de trabajo
Abrir conexión con una fuente de datos
Leer información de la base de datos
Trabajar y manipular la información
Eventualmente volcar información en la base de datos o
modificar la información existente
Cerrar la conexión con la base de datos
A. Miñarro
Bases de Datos con R
Junio, 2013
11 / 23
Introducción
RODBC
Ejemplo
Esquema general de trabajo
Abrir conexión con una fuente de datos
Leer información de la base de datos
Trabajar y manipular la información
Eventualmente volcar información en la base de datos o
modificar la información existente
Cerrar la conexión con la base de datos
A. Miñarro
Bases de Datos con R
Junio, 2013
11 / 23
Introducción
RODBC
Ejemplo
Esquema general de trabajo
Abrir conexión con una fuente de datos
Leer información de la base de datos
Trabajar y manipular la información
Eventualmente volcar información en la base de datos o
modificar la información existente
Cerrar la conexión con la base de datos
A. Miñarro
Bases de Datos con R
Junio, 2013
11 / 23
Introducción
RODBC
Ejemplo
Esquema general de trabajo
Abrir conexión con una fuente de datos
Leer información de la base de datos
Trabajar y manipular la información
Eventualmente volcar información en la base de datos o
modificar la información existente
Cerrar la conexión con la base de datos
A. Miñarro
Bases de Datos con R
Junio, 2013
11 / 23
Introducción
RODBC
Ejemplo
Esquema general de trabajo
Abrir conexión con una fuente de datos
Leer información de la base de datos
Trabajar y manipular la información
Eventualmente volcar información en la base de datos o
modificar la información existente
Cerrar la conexión con la base de datos
A. Miñarro
Bases de Datos con R
Junio, 2013
11 / 23
Introducción
RODBC
Ejemplo
Esquema del tema
1
Introducción
2
RODBC
3
Ejemplo
A. Miñarro
Bases de Datos con R
Junio, 2013
12 / 23
Introducción
RODBC
Ejemplo
Ejemplo
Vamos a utilizar como ejemplo un par de bases de datos de Access. La
base de datos inventario.mdb con dos tablas y la base de datos
HDR2013.accdb también con dos tablas y esta última protegida con la
contraseña ’1234’
A. Miñarro
Bases de Datos con R
Junio, 2013
13 / 23
Introducción
RODBC
Ejemplo
Apertura de la comunicación
> odbcDataSources()
MS Access Database
"Microsoft Access Driver (*.mdb, *.accdb)"
Excel Files
"Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)"
dBASE Files
"Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)"
> myconn<-odbcConnectAccess('inventario.mdb')
Podemos tener abiertas varias conexiones
> myconn2<-odbcConnectAccess2007('HDR2013.accdb',pwd='1234')
A. Miñarro
Bases de Datos con R
Junio, 2013
14 / 23
Introducción
RODBC
Ejemplo
Apertura de la comunicación
> odbcDataSources()
MS Access Database
"Microsoft Access Driver (*.mdb, *.accdb)"
Excel Files
"Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)"
dBASE Files
"Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)"
> myconn<-odbcConnectAccess('inventario.mdb')
Podemos tener abiertas varias conexiones
> myconn2<-odbcConnectAccess2007('HDR2013.accdb',pwd='1234')
A. Miñarro
Bases de Datos con R
Junio, 2013
14 / 23
Introducción
RODBC
Ejemplo
Análisis de la información en la BD
Podemos analizar las tablas presentes en la BD
> Tablas1<-sqlTables(myconn,tableType='TABLE')
> Tablas1$TABLE_NAME
[1] "especies" "puntos"
ası́ como los campos presentes en cada tabla
> coltabla1<-sqlColumns(myconn,Tablas1$TABLE_NAME[1])
> coltabla1[,3:7]
1
2
3
4
5
TABLE_NAME COLUMN_NAME DATA_TYPE TYPE_NAME COLUMN_SIZE
especies inventario
12
VARCHAR
50
especies
genero
12
VARCHAR
50
especies
especie
12
VARCHAR
50
especies
punto
12
VARCHAR
50
especies
mida
7
REAL
24
A. Miñarro
Bases de Datos con R
Junio, 2013
15 / 23
Introducción
RODBC
Ejemplo
Análisis de la información en la BD
Podemos analizar las tablas presentes en la BD
> Tablas1<-sqlTables(myconn,tableType='TABLE')
> Tablas1$TABLE_NAME
[1] "especies" "puntos"
ası́ como los campos presentes en cada tabla
> coltabla1<-sqlColumns(myconn,Tablas1$TABLE_NAME[1])
> coltabla1[,3:7]
1
2
3
4
5
TABLE_NAME COLUMN_NAME DATA_TYPE TYPE_NAME COLUMN_SIZE
especies inventario
12
VARCHAR
50
especies
genero
12
VARCHAR
50
especies
especie
12
VARCHAR
50
especies
punto
12
VARCHAR
50
especies
mida
7
REAL
24
A. Miñarro
Bases de Datos con R
Junio, 2013
15 / 23
Introducción
RODBC
Ejemplo
Descarga de información
> dfpuntos<-sqlFetch(myconn,'puntos')
> dfespecies<-sqlFetch(myconn,'especies')
A. Miñarro
Bases de Datos con R
Junio, 2013
16 / 23
Introducción
RODBC
Ejemplo
Consultas
>
+
>
>
+
+
>
+
+
+
+
especies_a<-sqlQuery(myconn,"SELECT * FROM especies
WHERE punto = 'a100'")
generos<-sqlQuery(myconn,"SELECT DISTINCT genero FROM especies")
combina<-sqlQuery(myconn,"SELECT genero, especie, salinidad
FROM especies,puntos
WHERE especies.punto = puntos.punto")
promsal<-sqlQuery(myconn,"SELECT genero, AVG(salinidad)
AS Promedio_Salinidad FROM puntos
INNER JOIN especies
ON especies.punto = puntos.punto
GROUP BY genero")
A. Miñarro
Bases de Datos con R
Junio, 2013
17 / 23
Introducción
RODBC
Ejemplo
Volcado de la información
>
>
>
>
sqlSave(myconn,promsal)
tablas<-sqlTables(myconn,tableType='TABLE')
sqlDrop(myconn,'promsal')
tablas<-sqlTables(myconn,tableType='TABLE')
A. Miñarro
Bases de Datos con R
Junio, 2013
18 / 23
Introducción
RODBC
Ejemplo
Cerrando la conexión
Cerrando la conexión
> close(myconn)
> close(myconn2)
A. Miñarro
Bases de Datos con R
Junio, 2013
19 / 23
Introducción
RODBC
Ejemplo
Ejemplo con SQLite
> install.packages("DBI")
> install.packages("RSQLite")
> install.packages("nutshell")
> library(RSQLite)
> library(nutshell)
> base<-"C:/Users/antonio/Documents/R/win-library/3.0/nutshell.bbdb/extdata/bb.db"
> drv <- dbDriver("SQLite")
> con <- dbConnect(drv,dbname=base)
A. Miñarro
Bases de Datos con R
Junio, 2013
20 / 23
Introducción
RODBC
Ejemplo
Ejemplo con SQLite (2)
> dbListTables(con)
[1]
[4]
[7]
[10]
[13]
[16]
[19]
[22]
[25]
"Allstar"
"AwardsManagers"
"AwardsSharePlayers"
"Fielding"
"HOFold"
"ManagersHalf"
"PitchingPost"
"SchoolsPlayers"
"TeamsFranchises"
"AllstarFull"
"AwardsPlayers"
"Batting"
"FieldingOF"
"HallOfFame"
"Master"
"Salaries"
"SeriesPost"
"TeamsHalf"
"Appearances"
"AwardsShareManagers"
"BattingPost"
"FieldingPost"
"Managers"
"Pitching"
"Schools"
"Teams"
"xref_stats"
> dbListFields(con,"Allstar")
[1] "playerID" "yearID"
A. Miñarro
"lgID"
Bases de Datos con R
Junio, 2013
21 / 23
Introducción
RODBC
Ejemplo
Ejemplo con SQLite (3)
> batting.2008 <- dbGetQuery(con,
+ paste("SELECT m.nameLast, m.nameFirst, m.weight, m.height, ",
+ "m.bats, m.throws, m.debut, m.birthYear, b.* ",
+ "from Master m inner join Batting b ",
+ "on m.playerID=b.playerID where b.yearID=2008"))
> names(batting.2008)
[1]
[7]
[13]
[19]
[25]
[31]
"nameLast"
"debut"
"lgID"
"2B"
"BB"
"GIDP"
"nameFirst"
"birthYear"
"G"
"3B"
"SO"
"G_old"
"weight"
"playerID"
"G_batting"
"HR"
"IBB"
"height"
"yearID"
"AB"
"RBI"
"HBP"
"bats"
"stint"
"R"
"SB"
"SH"
"throws"
"teamID"
"H"
"CS"
"SF"
> dim(batting.2008)
[1] 1384
32
A. Miñarro
Bases de Datos con R
Junio, 2013
22 / 23
Introducción
RODBC
Ejemplo
Ejemplo con SQLite (4)
> batters <- dbReadTable(con,"Batting")
> dim(batters)
[1] 91457
24
> dbDisconnect(con)
[1] TRUE
A. Miñarro
Bases de Datos con R
Junio, 2013
23 / 23
Descargar