Consultas SQL en bases de datos PostGres + PostGis mediante lenguaje R

En el post pasado se consideraron las consultas SQL a bases de datos PostGres + PostGis, en el sistema operativo Debian, utilizando los comandos propios de estos softwares. Por otra parte, en el Blog de Ariel Fuentes Díaz, hay un post en el cual se consideran las conexiones y consultas a bases de datos PostgreSQL mediante lenguaje R y, por su sencillez, me limité a probarlas con mis ejemplos ya expresados en el post anterior.

Para comenzar, hay que señalar que, como superusuario (Administrador para Windows Vista o superior), se tiene que instalar en consola de R (mediante install.packages) la libreria RPostgreSQL. Después de instalada, la cargamos en el intérprete y establecemos el driver y la conexión; tal como se encuentra a continuación:

> library(RPostgreSQL)
Loading required package: DBI
> drv<-dbDriver("PostgreSQL")
> con <- dbConnect(drv, host = "localhost", user= "zeito", password="my_password", dbname="world_borders")

A continuación, verificando que la conexión fue exitosa y leyendo la base de datos países. El resumen (sum) nos da el tipo de campos que contiene y los estadísticos relevantes para las variables numéricas de la database (en este caso solo una: area). Además, se comprueba que la database es del tipo dataframe.

> summary(con)
<PostgreSQLConnection:(5413,0)> 
  User: zeito 
  Host: localhost 
  Dbname: world_borders 
  No resultSet available
> df <- dbReadTable(con,'paises')
> summary(df)
  cntry_name             area         
 Length:251         Min.   :       1  
 Class :character   1st Qu.:     618  
 Mode  :character   Median :   62049  
                    Mean   :  541550  
                    3rd Qu.:  339515  
                    Max.   :17075200
> class(df)
[1] "data.frame" 

Ahora vamos a consultar los países cuyas áreas son mayores que 5.000.000 m2. Para ello, construimos un arreglo de índices para evitar el uso de estructuras repetitivas (bucles); que es la forma más eficiente de trabajar en R.

i<- 1:length(area)
indices.areas.may5mill<-i[areas[i] > 5000000] #sin bucle
> indices.areas.may5mill
[1]  13  30  40  46 187 236
p<-indices.areas.may5mill #para no hacerlo tan largo
> df[p,] #imprime indice, pais, area
       cntry_name     area
13      Australia  7686850
30         Brazil  8511965
40         Canada  9976140
46          China  9596960
187        Russia 17075200
236 United States  9629091

Para desconectarnos de la base de datos:

dbDisconnect(con)

Para más información de la librería pueden referirse a la documentación: RPostgreSQL.

Esta entrada fue publicada en Lenguaje R, Postgres+postgis, SIG. Guarda el enlace permanente.

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s