Archivos de la categoría Monográficos

Adyacencia de polígonos con el paquete spdep de R

Cuando trabajamos con zonificación o geolocalización la adyacencia entre los elementos del estudio es relevante. En este caso quería trabajar con la adyacencia entre los polígonos que componen un archivo de datos espaciales shapefile y para entender mejor como podemos obtener la adyancecia entre polígonos creo que lo mejor es hacer un ejemplo con un mapa, en este caso un mapa de municipios de Barcelona. El primer paso es disponer del objeto con los datos espaciales, de esto ya he escrito mucho en el blog y por eso no me detengo mucho:

ub="./Desktop/R/mapas/ESP_adm4.rds"

#Creamos los objetos de R
espania = readRDS(ub)
barcelona = espania[espania$NAME_2=="Barcelona",]
plot(barcelona)
#Marcamos el centro de cada poligono
points(coordinates(barcelona))

adyacencia poligonos con R 1

Leemos el objeto con los datos municipales de España y hacemos un subset para quedarnos sólo con Barcelona y realizamos un mapa municipal de la provincia de Barcelona sencillamente usando plot. Podemos identificar todos los centroides de los polígonos que componen este objeto con la función coordinates, ahora lo que necesitamos identificar es la adyacencia entre estos puntos, la adyacencia entre los municipos de Barcelona. En mi caso localicé el paquete spdep de R, muy adecuado para trabajar con ponderaciones.

Os pongo paso por paso el código de R y luego comento como voy buscando REFERENCIAS para crear las adyacencias Sigue leyendo Adyacencia de polígonos con el paquete spdep de R

Resolución del juego de modelos con R

Hace mucho planteé un juego de identificación de modelos con R y ya se me había olvidado daros la solución. Pensando en el Grupo de Usuarios de R y en hacer algo parecido en una presentación recordé que había que solucionar el ejercicio. Lo primero es la creación de los datos, se me ocurrió una función sencilla y una nube de puntos alrededor de ella:

#Variable independiente
indep = runif(500,100,500)
#Función para crear la variable dependiente
foo = function(x){ mean(x)*(1-sin(-0.006042*x))
}
dep = sapply(indep,foo)

dep=dep+(runif(length(dep),-100,100))
datos = data.frame(cbind(indep,dep))
plot(datos)

juego_modelos1

Seleccionamos los datos de entrenamiento y test:

#Datos de entrenamiento y test
indices = sample(1:length(dep),length(dep)/2) 
entrenamiento = datos[indices,]
test = datos[-indices,]

El más sencillo de todos era el caso de la regresión lineal y fue el que puse de ejemplo:

#REgresión lineal
modelo.1=lm(dep ~ indep,entrenamiento)
plot(test)
points(test$indep,predict(modelo.1,test),col="red")

juego_modelos2

Una línea que pasa por la media de la nube de puntos. Otro de los casos menos complicados es el árbol de regresión Sigue leyendo Resolución del juego de modelos con R

Truco Excel. Abrir múltiples libros de Excel en distintas hojas de un nuevo libro

Hace tiempo escribí sobre el método de Excel GetOpenFilename para abrir archivos desde Excel a través del explorador de archivos ahora le damos una nueva vuelta de tuerca a aquella entrada y de forma simple podemos abrir múltiples libros de Excel que además se añadirán de forma sucesiva en un nuevo libro. En este link podéis descargaros el archivo y como veréis no tiene nada. Un botón Abrir Excel realiza el proceso, se abre el explorador de Windows y podéis seleccionar múltiples archivos Excel que se almacenan en un array. La macro a ejecutar es la siguiente:

Sub abre_libros()
Dim Hoja As Object, rango As String
Dim libros As Variant

'Ventana con archivos
libros = Application.GetOpenFilename _
("Archivos Excel (*.xls*), *.xls*", 2, "Abrir archivos", , True)
'Es necesario seleccionar archivos
If IsArray(libros) Then
'Creamos un libro nuevo
Workbooks.Add
libro_actual = ActiveWorkbook.Name
'Ahora pegamos las hojas
For i = LBound(libros) To UBound(libros)
Workbooks.Open libros(i)
libro_nuevo = ActiveWorkbook.Name
For Each Hoja In ActiveWorkbook.Sheets
Hoja.Copy after:=Workbooks(libro_actual).Sheets(Workbooks(libro_actual).Sheets.Count)
Next
Workbooks(libro_nuevo).Close False
Next
End If
End Sub

No se me ocurrió como hacer el código más sencillo y al final lo que hace es recorrer el array de libros que abre y añadir las hojas sobre un libro nuevo. Tiene algunas limitaciones en la forma en la que pega las nuevas hojas pero nada que pueda ser muy complicado de solucionar. Ahora tenéis que mejorar la entrada más visitada de este blog para que pueda unir en uno los Excel que se abren.

Como hacer un mapa de España por códigos postales con QGIS

Tenía pendiente hablar de QGIS y de la creación de un mapa de España por códigos postales gratuito y libre. Pero no sé como enfocar esta entrada porque el mapa, siendo gratuito y de difusión libre, no se puede usar con fines comerciales y me temo que un gran número de lectores del blog tienen tales fines. Así que he pensado en hablaros de CartoCiudad y de los mapas que contiene este interesante proyecto. En CartoCiudad colaboran algunos ministerios y entidades estatales, entre ellas Correos y podéis descargar provincia a provincia los archivos que componen el proyecto. Emplear los mapas de CartoCiudad implica aceptar las siguientes condiciones:

1. La licencia de uso solicitada ampara exclusivamente el uso no comercial de la información geográfica, entendiendo como tal el uso que no conlleva aprovechamiento económico directo, indirecto o diferido. Cualquier uso distinto al descrito, incluida la publicación, requerirá la suscripción de una autorización o contrato específico con el Centro Nacional de Información Geográfica (CNIG), devengando, en su caso, la contraprestación económica correspondiente. En caso de duda deberá establecerse contacto con el CNIG (consulta@cnig.es).

2. El usuario titular de la licencia se compromete a citar al Instituto Geográfico Nacional (IGN) mediante la fórmula: «© Instituto Geográfico Nacional de España» como origen y propietario de la información geográfica suministrada ante cualquier exhibición o difusión de ella, o de parte de ella o de cualquier producto que, aún siendo de forma parcial, la incorpore o derive de ella.

- Si se tratara de Ortofoto o MDT5 (PNOA®), la mención se sustituirá por: «PNOA cedido por © Instituto Geográfico Nacional de España».
- Tratándose de datos LiDAR, la mención se sustituirá por: «LiDAR-PNOA cedido por © Instituto Geográfico Nacional de España».
- En caso de datos SIOSE®, la mención se sustituirá por: «SIOSE cedido por © Instituto Geográfico Nacional de España».
- Tratándose de CartoCiudad®, la mención se sustituirá por: «CartoCiudad cedido por © Instituto Geográfico Nacional de España».

3. En caso de CartoCiudad®, los nuevos productos o servicios que puedan generarse basados en CartoCiudad®, no incluirán ninguna referencia a la información catastral, ni suplantarán explícitamente o mediante productos o servicios que puedan dar lugar a confusión a los ofrecidos por la Dirección General del Catastro, del Ministerio de Economía y Hacienda, o a los ofrecidos por la Sociedad Estatal Correos y Telégrafos S.A., a quienes corresponde en exclusiva la competencia para la difusión de la información catastral y postal respectivamente, así como el ejercicio de los derechos de propiedad intelectual inherentes a la información y a las bases de datos catastrales y postales.

4. La cesión de la información digital licenciada, de otra que la incorpore o de cualquier producto derivado de ella, a otra persona física o jurídica, requerirá la concesión por el CNIG de nueva licencia al nuevo usuario, o que el cedente comunique expresamente por escrito al nuevo usuario las condiciones originales de licenciamiento establecidas por el CNIG, y que el nuevo usuario acepte expresamente dichas condiciones. Esta comunicación puede llevarse a término mediante el documento estándar descargable desde www.ign.es, o bien a través de un documento definido por el cedente y aprobado previamente por el CNIG.

5. Esta licencia de uso no comercial, no supone la concesión de ningún tipo de exclusividad, aval o patrocinio, ni responsabilidad alguna del IGN sobre el uso derivado de los datos geográficos.

Si os habéis leído la licencia de uso entendréis porque tengo algunas dudas sobre la conveniencia de escribir esta entrada. Así que se me ha ocurrido que, os voy a decir como podéis hacer el mapa de códigos postales, os voy a advertir que el mapa que hagáis no puede tener fines comerciales y que si queréis un mapa comercial hay empresas que os pueden vender estos mapas. Yo en mi puesto de trabajo tengo uno de estos mapas comerciales y no ha sido necesario hacer todo lo que a continuación os voy a relatar. Sigue leyendo Como hacer un mapa de España por códigos postales con QGIS

TwitteR con R. El hashtag #rstats

El objetivo de la entrada es empezar a analizar tweets con R y que mejor comienzo que usar el hashtag #rstats para ver usuarios que más lo utilizan. [no me gusta conjugar el verbo retwitear] El primer paso es crear una app con Twitter, para ello nos dirigimos a https://apps.twitter.com/ y creamos una aplicación. Crearla es muy sencillo, sólo necesitamos una descripción y un nombre. La aplicación será la que permitirá a R interaccionar con Twitter mediante OAuth y para realizar esta interacción entre la aplicación y nuestra sesión de R es imprescindible:

  • Consumer key
  • Consumer secret
  • Access Token
  • Access Token secret

Para obtener estos 4 elementos una vez creada nuestra aplicación pulsamos el botón Test OAuth de la parte superior derecha de la pantalla y nos aparecerán. Y con estos elementos comenzamos a trabajar en R mediante el paquete twitteR:

#install.packages("twitteR")
#install.packages("base64enc")
library(twitteR)
library(base64enc)

consumer_key="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
consumer_secret="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
access_token="81414758-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
access_secret="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

setup_twitter_oauth(consumer_key, consumer_secret, access_token=access_token, access_secret=access_secret)

Recuerdo, consumer_key consumer_secret access_token y access_secret lo hemos obtenido cuando creamos nuestra aplicación en Twitter que va a interactuar con R mediante OAuth y por ello usamos la función setup_twitter_oauth para que twitteR pueda obtener información de nuestra aplicación. Ya estamos en disposición de leer tweets:

rstats<-searchTwitter("#rstats", n=9999, since='2015-11-01')
datos <- do.call("rbind", lapply(rstats, as.data.frame))
names(datos)

La función searchTwitter será la que más uséis cuando trabajéis con R, en este caso buscamos el hashtag #rstats, limitamos la búsqueda a 9999 tweets desde el 01 de noviembre de 2015. Se genera una lista que transformamos en un data.frame mediante la función  do.call y ahora es más sencillo trabajar con estos datos (también podemos emplear twListToDF) Otro ejemplo, si deseamos ver los tweets del del usuario @r_vaquerizo hacemos:

vaquerizo <- userTimeline('r_vaquerizo',n=100)
vaquerizo2 <- do.call("rbind", lapply(vaquerizo, as.data.frame))

Pero volvamos con #rstats, ya tenemos un data frame y deseamos saber que usuarios son los que más han empleado el hashtag:

usuarios <-subset(datos,isRetweet==FALSE)$screenName
usuarios<-sort(table(usuarios),decreasing=T)
head(usuarios)
usuarios[1:30]

El manejo de estos datos es más sencillo, eliminamos los retweet y nos quedamos sólo con los nombres de los usuarios que han escrito el tweet, los tabulamos y ordenamos. Podemos hacer un head para ver los primeros o ver directamente los 30 iniciales. Evidentemente RBloggers está a la cabeza.

A ver si puedo ir poniendo algunas cosas que voy haciendo y si alguien está interesado en algún proyecto concreto que se ponga en contacto conmigo. Saludos.

Creacion de ranking con R

Captura de pantalla 2015-12-20 a las 18.23.04

Hasta la fecha si necesitaba crear un ranking o un orden con R realizaba la tarea del siguiente modo:

nombres<-c("grupo_1","grupo_2")
grupo<-sample( nombres, 10, replace=TRUE, prob=c( 0.5, 0.5) )
dataset <- data.frame(grupo)
dataset$importes <- runif(10,100,30000)

#Creación del ranking de las variables agrupadas
dataset$ranking = ave(dataset$importes,dataset$grupo,
                      FUN= function(x) rank(x, ties.method = "first"))

Es una agrupación de factores a la que asignamos el orden con rank, con ties.method="first" esta agrupación se lleva a cabo desde el primer nivel del factor. El resultado se puede comprobar Sigue leyendo Creacion de ranking con R

Mapa de Argentina con R

Un lector necesita realizar un mapa de Argentina con R. El primer paso es descargar el mapa en formato R de la página web de siempre: http://www.gadm.org/country seleccionamos Argentina y el formato en R. Podéis descargar en otros formatos y trabajar con R, pero eso lo contaré otro día. Para ilustrar el ejemplo me he descargado el mapa de nivel 2, es decir, a nivel de Estado argentino. Una vez descargado el mapa empleamos el código de siempre:

library(sp)
library(RColorBrewer)

ub_argentina="C:\\TEMP\\00 raul\\MAPA\\ARG_adm1.RData"

#Creamos los objetos de R
load(ub_argentina)
argentina=gadm

plot(argentina)

argentina_R

Es sencillo trabajar con el objeto y colorear en función de valores. Un ejemplo simplista:

argentina$NAME_1
datos<-c(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)

plot(argentina,col=datos)

Pinta de negro el estado de Buenos Aires. A ver si dispongo de más tiempo y puedo desarrollar más esta entrada. Saludos.

Trucos R. El paquete classInt para clasificar variables continuas

El paquete classInt de R últimamente está muy presente en mis programas y me gustaría dedicarle unas líneas para que podáis ver algunas de sus posibilidades a la hora de clasificar variables continuas, además estas posibilidades unidas con RColorBrewer nos permiten crear gráficos muy atractivos. Instalamos y clasificamos un vector de ejemplo:

aleatorio <- abs(rnorm(100,50,30))
summary(aleatorio)
grupos <- 4
clases <- classIntervals(aleatorio, grupos, style="quantile")
clases

style: quantile
one of 156,849 possible partitions of this variable into 4 classes
[1.225299,29.19317) [29.19317,51.55524) [51.55524,72.06471) [72.06471,118.6466]
25                 25                 25                 25

Partimos un vector aleatorio en 4 clases en función de sus cuantiles y creamos un lista clases que contiene nuestra tabla y entre sus atributos destaca brks que indica los puntos de corte, en el caso de los cuantiles tenemos:

clases$brks
quantile(aleatorio)

Coinciden el atributo brks (los cortes de nuestra clasificación) y los cuantiles de nuestro vector. Este paquete lo estoy empleando conjuntamente con RcolorBrewer para la realización de gráficos:

library(RColorBrewer)
paleta <- brewer.pal(grupos,"Reds")

colores = findColours(clases, paleta)
pie(attributes(colores)$table,
main="Ejemplo de classInt",col=colores)

Hay que pararse en el objeto colores que creamos con la función findColours Sigue leyendo Trucos R. El paquete classInt para clasificar variables continuas

Mapa Excel de Europa

mapa_excel_europa1

Un lector me había pedido disponer en Excel de un mapa de Europa y dicho y hecho. Además en este Excel os muestro como hacer paletas de colores más o menos atractivas y como poder usarlas indistintamente con el mapa. Este Excel además contiene algunas líneas de Visual Basic que considero interesantes y que veremos después. Los shape están sacados de este link, pero se retoca completamente el código Visual Basic para hacerlo (a mi entender) más sencillo. El mapa se controla desde esta zona del Excel:

mapa_excel_europa2

El Dato es lo que vamos a pintar. Evidentemente tenéis que cruzar los datos con los nombres de los 37 países que se pintan en el mapa. Disponéis del nombre en inglés y del código de país para poder hacer este cruce previo. Pero quedaros con lo siguiente, lo único que podéis modificar es el nombre en inglés, por si preferís hacer vuestro VLookp o BUSCARV Sigue leyendo Mapa Excel de Europa

Mapas municipales de España en R, con la ayuda de Excel

municipios extremadura R 1

El escribir sobre el BDT de Madrid me ha hecho recordar mi trabajo con statial data de R. Los mapas de spatial data los podemos obtener de forma gratuita de http://www.gadm.org/country y en este caso vamos a descargarnos para España un SpatialPolygonsDataFrame específico para R de nivel 4 que está a nivel municipal (repito nivel todas las veces necesarias), el archivo que os debéis descargar se llamará ESP_adm4.RData. Si buscáis un poco en google encontraréis documentación acerca de este tipo de archivos de R y veréis que se pueden hacer maravillas. En este caso quiero hacer un ejemplo lo más sencillo posible, muy artesanal y casero. Con un poco de imaginación podréis complicarlo o incluso hacer una herramienta en Excel que hiciera mapas con R Sigue leyendo Mapas municipales de España en R, con la ayuda de Excel