Ggmap

Rejillas poblacionales con R (un borrador)

R

me llegó ayer por Twitter (vía @unnombrealazar). En el mapa aparece representada la edad media de la población por provincia (y hoy voy a dar las cloropetas por buenas). Salta a la vista Guadalajara: tiene una edad media ¿sorprendentemente? baja. Tanto que tuve que comprobarlo en el INE. La explicación (siempre a posteriori) más obvia es

@gilbellosta @unnombrealazar inmigrantes que trabajan en el corredor del henares, familias con niños supongo

– jesus alfaro (@jesusalfar) 26 de marzo de 2017

"Todas" las terrazas de Madrid

es un mapa en el que, en rojo, figuran todas (véase la coda) las terrazas de Madrid. Los datos están extraídos del censo de locales, sus actividades y terrazas de hostelería y restauración del ayuntamiento y están procesados con

terrazas <- fread("http://datos.madrid.es/egob/catalogo/200085-17-censo-locales.txt")
terrazas$coordenada_x_local <- as.numeric(gsub(",", ".", terrazas$coordenada_x_local))
terrazas$coordenada_y_local <- as.numeric(gsub(",", ".", terrazas$coordenada_y_local))
tmp <- terrazas[terrazas$coordenada_x_local > 1000, ]
tmp <- terrazas[terrazas$coordenada_y_local > 3e6,]

# UTM a siglo XXI
library(rgdal)
terrazas.utm     <- SpatialPoints(
    cbind(tmp$coordenada_x_local,
    tmp$coordenada_y_local),
    proj4string=CRS("+proj=utm +zone=30"))
terrazas.latlong <- spTransform(terrazas.utm,
    CRS("+proj=longlat"))

library(ggmap)
madrid <- get_map("madrid", zoom = 12)
tmp <- as.data.frame(terrazas.latlong)
ggmap(madrid) + geom_point(
    aes(x = coords.x1, y = coords.x2),
    data = tmp, size = .5,
    col = "red", alpha = 0.3)

Sobre las cursivas de todas:

Pequeño bug en ggmap: no pinta el último tramo de una ruta

R

Supongo que no debería escribirlo aquí sino comunicárselo a quien mantiene ggmap. Pero ya tuve una experiencia mejorable con él y dos no serán. Así que lo cuento por acá.

La mayor parte del mérito en el descubrimiento, en cualquier caso, es de una alumna de la clase de R que he dado hoy (en el momento en el que escribo, no en el que lees) en el Banco de Santander. No tengo su nombre ni tengo claro que quisiese que lo mencionase.

Ficheros KML con R y ggmap

Fácil:

library(maptools)
library(ggmap)

# un fichero bajado el Ayto. de Madrid
# (catálogo de datos abiertos)
rutas <- getKMLcoordinates("dat/130111_vias_ciclistas.kml")

# procesando el fichero kml
rutas <- lapply(1:length(rutas),
    function(x) data.frame(rutas[[x]], id = x))
rutas <- do.call(rbind, rutas)

# mapa de Madrid
mapa <- get_map("Madrid",
    source = "stamen", maptype = "toner",
    zoom = 12)

# pintando los tramos sobre el mapa
ggmap(mapa) + geom_path(aes(x = X1, y = X2,
    group = id), data = rutas,
    colour = "red")

produce

rutas_ciclistas_madrid

Nota: KML es esto.

Grafos sobre mapas

R

He escrito de grafos, he escrito de mapas; hoy hablaré de la combinación de ambas cosas.

Tengo un grafo cuyos nodos están geoposicionados. Lo quiero estudiar utilizando herramientas de grafos (vía igraph) pero después representarlos sobre una capa con información geográfica (una foto satelital de Google Maps, vamos).

La red va a ser la de guifi.net en los derredores de Barcelona. guifi.net es un proyecto para crear una red de telecomunicaciones mancomunada, abierta, libre y neutral. Quienes forman parte de ella colocan antenas que se conectan con otras de la red y comienzan en enviar bits. Las antenas y sus conexiones conforman una red que se puede estudiar como cualquier otra: ¿qué nodos/enlaces son más centrales/críticos? Etc.

ggmap: mapas con R

Me mandó Alberto González Paje código para representar información en mapas usando R que hoy he dejado en su mínima expresión para que los lectores de esta bitácora puedan extender para crear sus propios mapas.

Es el siguiente:

library(ggmap)

# ubico mi alma mater
unizar <- geocode('Universidad de Zaragoza, Zaragoza, España')

# obtengo un mapa
map.unizar <- get_map(
    location = as.numeric(unizar),
    color = "color",
    maptype = "roadmap",
    scale = 2,
    zoom = 16)

# lo represento
ggmap(map.unizar)

# le añado puntos
ggmap(map.unizar) + geom_point(
    aes(x = lon, y = lat),
    data = unizar, colour = 'red',
    size = 4)

Creo que es fácil de extender.