Archivo de la categoría: Monográficos

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

Editado 2019:

Como podéis leer más abajo Correos ha impedido al proyecto Cartociudad incluir los mapas de España por Código Postal, ahora es necesario comprarlos. Sin embargo, hay versiones antiguas como las que se descargó en su día Íñigo Flores. Con estas descargas yo he elaborado un mapa de España por códigos postales:

Descargar el shapefile con el mapa de España por códigos postales para QGIS.

Una vez os hayáis descargado el mapa sólo tenéis que abrir la capa vectorial correspondiente (el shp) con QGIS:

Los cruces los realizáis en QGIS a través del campo COD_POSTAL. También podéis hacer filtros para realizar mapas de provincias o ciudades.

Versión antigua:

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. Seguir 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 Seguir 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 Seguir 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 Seguir 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 Seguir leyendo Mapas municipales de España en R, con la ayuda de Excel

Truco R. Añadir una marca de agua a nuestro gráfico con ggplot2

Un breve truco que tenía en la nevera. Añadir marcas de agua a los gráficos de R realizados con ggplot2. Quería dedicar una serie de monográficos a las marcas de agua y al final nunca acabé. Para ilustrar el ejemplo vamos a graficar la serie de visitas a esta web que nos ha dado Google Analytics:

# Objeto con las visitas
visitas=c(213,376, 398, 481,416, 505, 771, 883,686, 712 ,
883,993,1234 , 1528 ,1965 ,1676 ,1037 , 1487 ,1871 ,2725 ,2455 ,2856 ,
2868,2809 ,3326 ,4284 ,4599 ,3863 ,3778 ,5090 ,5510 ,5911 ,4460 ,5495 ,5290 ,
6407,5619 ,6494 ,5854 ,4940 , 4735 ,6049 ,6839 ,8695 ,7112 ,9207 ,8991 ,
10909 , 9647 , 10943 , 9819 , 8982 ,
8597,10004,12550,12025, 9108,10664, 9563,9751 ,11402 ,11875,10395,
10078,8706,10893, 13197,12868 ,9857 ,12119 , 13421 ,14411, 12820 , 14443 , 12713 ,
13869,11740,14887,17021,16827)
serie <- ts(visitas, start=c(2008, 4), end=c(2014, 11), frequency=12)

Hemos creado un objeto serie temporal del tipo ts y aprovecho esta entrada para contaros como transformar un objeto ts en un data frame. Recordamos que ggplot2 no puede graficar objetos ts (por lo menos hasta donde yo sé). Para la transformación del objeto emplearemos la función index del paquete zoo y mi querida función melt de reshape2:

#Pasar de objeto ts a data frame
library(reshape2)
library(zoo)
serie.nueva <- data.frame( anio = index(serie),
                           visitas = melt(serie)$value)

Ahora disponemos de un data frame con el que podemos pintar la serie:

#Ya podemos graficar el data frame
library(ggplot2)
graf <- ggplot(data=serie.nueva,aes(anio,visitas))  + geom_line() +
  labs(list(title = "Visitas a www.analsisisydecision.es",
        x = "Mes de la visita", y = "Número de visitas"))
graf + annotate("text", x = Inf, y = -Inf, label = "www.analisisydecision.es",
                hjust=1, vjust=-0.30, col="blue", cex=7, alpha = 0.3)

Para pintar la marca de agua empleamos annotate y añadimos un texto Seguir leyendo Truco R. Añadir una marca de agua a nuestro gráfico con ggplot2

Medir la importancia de las variables en una red neuronal con R

Sigo a vueltas con esta gran web y hoy vamos a medir la importancia de las variables en una red neuronal. Al igual que sucede en un modelo de regresión los parámetros obtenidos pueden servirnos para determinar la importancia de una variable dentro del modelo. En el caso de una red neuronal los pesos de la red pueden ser utilizados para determinar cómo influye una variable en el modelo. Para ilustrar este tipo de tareas el gran @beckmw realizó esta entrada:

http://beckmw.wordpress.com/2013/08/12/variable-importance-in-neural-networks/

El método que emplea para determinar esta importancia fue propuesto por Garson en 1991 y parte de la idea de buscar todas las conexiones que tiene una variable dentro de una red neuronal y se ponderan para obtener un valor único que describe el grado de asociación de nuestra variable dependiente con cada una de sus regresoras. Garson realizó este método para poder obtener un valor de 0 a 1, pero @beckmw lo ha modificado para que el signo tenga su importancia. La función que ha creado este genio la tenéis en Github

source(url(‘https://gist.githubusercontent.com/fawda123/6206737/raw/d6f365c283a8cae23fb20892dc223bc5764d50c7/gar_fun.r’))

Por cierto, qué manía tienen algunos con usar devtools. Haciendo sólo:

#Dejamos los nombres de los coeficientes de una forma más adecuada
tr=nnet.fit$coefnames
tr=substr(tr,16,30)
nnet.fit$coefnames=tr

#Pintamos la importancia de las variables
gar.fun(‘medv’,nnet.fit)

Obtenemos el gráfico con el que comienza esta entrada al blog. Ni se os ocurra comenzar a tocar este gráfico con los temas de ggplot2, somos gente productiva. Vemos como a la izquierda del gráfico se sitúan las variables con mayor peso negativo y a la derecha las variables con mayor peso positivo. Podemos eliminar algunas variables y seguramente el comportamiento predictivo del modelo no empeoraría.

Hay que dejar de pensar en las redes neuronales como una caja negra sin sentido. Saludos.

Representación de redes neuronales con R

En la última entrada realizamos un modelo de regresión con redes neuronales. Hoy quería mostraros como representar gráficamente la red neuronal creada en esa entrada. A la modelización con redes neuronales siempre se le ha achacado un comportamiento de “caja negra”, nosotros pasamos unas variables de entrada por una capa oculta y obtenemos una salida. No hay parámetros ni inferencia sobre los mismos, no sabemos lo que hace la red por dentro. En el caso concreto de R y continuando con la entrada anterior  si hacemos summary(bestnn):

a 12-4-1 network with 57 weights
options were – linear output units decay=1e-05
b->h1 i1->h1 i2->h1 i3->h1 i4->h1 i5->h1 i6->h1 i7->h1 i8->h1 i9->h1
-5.61 -3.80 -1.03 0.74 -2.81 2.83 2.37 2.86 6.72 4.68
i10->h1 i11->h1 i12->h1
1.65 0.87 -8.16 Seguir leyendo Representación de redes neuronales con R