Mapas

Un par de novedades de R 4.4.0 y algunos otros asuntos más

I.

Una vulnerabilidad asociada a R y un análisis sobre la intrahistoria de la misma. Se refiere a la importación acrítica de ficheros binarios de datos en R, en el que un agente malicioso puede haber insertado código que no quieres ver corriendo en tu máquina.

II.

Hay gente que busca asociaciones en tablas con millones de celdas, la mayor parte de las cuales tienen valores 0 o 1. Es un problema con la peor de las pintas del mundo, pero hay artículo y código.

Algunas novedades tecnológicas que he recopilado en los últimos tiempos (no todas rompedoramente nuevas)

Últimamente he creado muchas pequeños scripts en Python con parámetros de todo tipo. Tanto esta entrada para los principios generales como, por supuesto, los LLMs más habituales, me han acabado ahorrando horas y horas de trabajo.

shelmet, un paquete de Python para interactuar con la shell, está comenzando a aparecer en la cabecera de mis scripts.

Estoy creando cada vez más diagramas como parte de la documentación de mis proyectos. Ninguna herramienta es tal como me gustaría, pero la más próxima a la que consideraría ideal que he encontrado por el momento es Excalidraw.

Cartogramas "de Dorling"

R

Motivado por esta entrada construí

usando

muns <- st_read("data/CifraPob2023.shp")
peninsula <- muns[muns$ccaa != 'Canarias',]
plot(peninsula["pob_23"])
peninsula <- st_transform(peninsula, 25830)


peninsula_dorling <- cartogram_dorling(
  x = peninsula,
  weight = "pob_23",
  k = 0.2,
  itermax = 100)

plot(peninsula_dorling["pob_23"])

sobre unos datos que ya no recuerdo de dónde bajé. La única línea no autoexplicativa del código es

peninsula <- st_transform(peninsula, 25830)

que transforma las coordenadas originales de los datos en coordenadas proyectadas (o, más bien, las coordenadas proyectadas que rigen en la zona peninsular). El 25830 en cuestión me lo chivó un LLM.

Basta una línea para mejorar tus mapas; pero, ¿cuál?

R

A la vista de los mapas

pocos habrán que no prefieran el de la derecha. Los mapas están extraídos de la entrada Improve your maps in one line of code changing map projections, cuyo título ha sido elegido muy acertadamente en tanto que los mapas han sido construidos usando

gd_n2_main_laea <- gd_n2_main %>%
    st_transform(crs = 3035)

a <- gd_n2_main %>%
    ggplot() +
    geom_sf(fill = "#F48FB1", color = NA)+
    geom_sf(data = bord, color = "#C2185B", size = .5)+
    coord_sf(crs = 3857)

b <- gd_n2_main_laea %>%
    ggplot() +
    geom_sf(fill = "#DCE775", color = NA)+
    geom_sf(data = bord, color = "#AFB42B", size = .5)

library(patchwork)

a + b + plot_annotation(tag_levels = "A")

y, por lo tanto, solo difieren en la línea

¡Cuidado con las discontinuidades (subrepticias o no) en las escalas de color!

El tema de hoy es el mapa

distribuido de forma no irónica vía Twitter por algún desavisado al que no merece la pena apuntar con el dedo.

Podemos aceptar que, en primera aproximación, pasa el fitro. Existen desde hace un tiempo datos estadísticos ya no por regiones administrativas sino por rejillas de 1 km² y en este gráfico se han limitado a representar esos datos.

Uno de los problemas asociados a este tipo de datos (en rejillas) es que donde no vive nadie no hay una rejilla con el dato asociado pop = 0, sino que, directamente, no hay rejilla. Es decir, que donde falta rejilla, uno no sabe si hay un lago, el mar, o los Monegros. Para entender esto, merece la pena echar un vistazo al aspecto de las rejillas en la zona de Salzburgo:

¿Por qué vivimos tantos españoles a tanta altitud?

Perdóneseme haber usado lenguaje causal en el título de esta entrada siendo así que no encontrará el lector indicios sólidos de respuesta en lo que sigue. Y, sobre todo, que no se confunda y me tome por un sociólogo a la violeta o un economista posmo: no, soy matemático.

Quiero simplemente hacer constar un pequeño ejercicio de análisis espacial usando los paquetes sf y terra de R motivado, eso sí, por una pregunta que se planteó en cierto foro a raíz de esta captura de la Wikipedia:

Mi mapa provincial favorito

Mi mapa provincial de España favorito es este:

O, en una versión más cruda,

Cosas sobre él:

  • Forma parte de la colección de mapas que provee el INE para su uso con en infausto PCAxis y puede descargarse de aquí (junto con muchos otros, casi todos convencionales y aburridos, mapas de España, sus regiones, provincias y municipios).
  • Para facilitar su uso y, probablemente, infringiendo normas sobre la propiedad intelectual u otras, lo he colgado también aquí.
  • Como se puede apreciar, el mapa resuelve los problemas que plantean otros más fieles al territorio para la representación de información estadística. En particular, redimensiona algunas provincias para hacerlas visibles y, llegado el caso, clicables.
  • Tiene muchos, muchos detractores.

Lo de los detractores es una cosa extraña. Yo creo que son familia de alguien del rincón de Ademuz o del Condado de Treviño. Desde luego, gente que jamás ha cogido un metro. Los primeros planos del metro de Londres eran tal que

IGN + R + leaflet

Iba a escribir una entrada técnica al respecto, pero resulta que ya la había hecho hace un tiempo y no me acordaba.

Solo quiero abundar en el tema para recordaros que si os interesa mostrar mapas de España vía leaflet, en lugar de usar las capas por defecto, que vaya a saber uno de dónde las sacan, uno siempre puede tirar de la cartografía oficial.

Uno de los motivos puede ser que el mapa forme parte de una aplicación seria. Y las (o ciertas) capas por defecto de leaflet muestran hasta los puticlús,

De "la fiebre amarilla de Cádiz y pueblos comarcanos" de 1800

Esta entrada está motivada, en última instancia, por la lectura del libro (muy recomendable, por otra parte), The Art of Statistics: Learning From Data, de David Spiegelhalter. Sus muchas virtudes hacen, por contraste, que relumbre particularmente un defecto característico de toda esa creciente literatura sobre el tema: su aburridor anglocentrismo. Que si el médico devenido asesino en serie, que si los cirujanos de Bristol, que si el manidísimo John Snow (que esta vez, en este libro, de casualidad, no aparece),…

Cartogramas con recmap

R

He construido

que, obviamente no es la gran maravilla, basándome en Rectangular Statistical Cartograms in R: The recmap Package y usando

library(rgdal)
library(pxR)
library(recmap)

provs <- readOGR(dsn = "provincias/",
    layer = "Provincias")

pobl <- as.data.frame(read.px("2852.px",
    encoding = "latin1"), use.codes = T)
pobl2 <- as.data.frame(read.px("2852.px",
    encoding = "latin1"))

pobl$nombre <- pobl2$Provincias

pobl <- pobl[, c("Provincias", "nombre", "value")]
colnames(pobl) <- c("COD_PROV", "nombre", "poblacion")
pobl <- pobl[pobl$COD_PROV != "null",]

pobl <- pobl[!pobl$COD_PROV %in%
    c("51", "52", "38", "07", "35"),]


dat <- merge(provs, pobl,
    by = "COD_PROV", all.x = FALSE)
dat@data$NOM_PROV <- NULL
dat$z <- dat$poblacion

tmp <- as.recmap(dat)

tmp$name <- dat@data$nombre
tmp$ccaa <- dat@data$COD_CCAA

res <- recmapGA(tmp, popSize = 300,
    maxiter = 30, run = 10)

cartogram <- res$Cartogram

ccaa <- tmp[, c("name", "ccaa")]
ccaa$ccaa <- as.numeric(factor(ccaa$ccaa))
cartogram <- merge(cartogram, ccaa)

plot.recmap(cartogram, col.text = "black",
    main = "cartograma -- población\n  españa peninsular",
    col = cartogram$ccaa)

Como los datos los he bajado de por ahí y no recuerdo dónde, dejo como referencia el objeto arriba llamado tmp aquí.

Elecciones, mapas... y mi favorito

De entre lo bueno que pudan haber traído las últimas elecciones generales (las españolas de abril de 2019, para quien requiera mayor precisión) puede contarse una pequeña revolución en la cartografía electoral.

Debemos agradecérselo al equipo de Kiko Llaneras en El País, que nos han regalado esto. Prueba de que las cosas han cambiado es que ha sido replicado en otros sitios, como este.

[Nota: no sé si estoy cometiendo injusticias en el párrafo anterior por omisión o confusión en las prelaciones; si alguien dispone de más o mejor información sobre la intrahistoria de esas publicaciones, que me avise.]

Leaflet con capas WMS de Correos, Catastro, etc.

R

Esta entrada es un subproducto del trabajo que pocería que he realizado estos días en caRtociudad.

caRtociudad permite generar mapas estáticos al estilo de ggmap. Iba a poner algún ejemplo, pero los dejo para otro día.

La cosa es que mejorando caRtociudad::get_cartociudad_map, se me ha pasado por la cabeza la posibilidad de realizar la integración no ya con ggmap sino con leaflet. Y así (¡probadlos!), para los códigos postales,

library(leaflet)

leaflet() %>% addTiles() %>%
  setView(-3.703399, 40.41688, zoom = 14) %>%
  addWMSTiles(
  "http://www.ign.es/wms-inspire/ign-base",
  layers = "codigo-postal",
  options = WMSTileOptions(format = "image/png",
    transparent = TRUE),
  tileOptions(tms = TRUE),
  attribution = "")

Para las secciones censales,

España, Platón, Madrid

En 1871-1872 se publicó la primera edición de las obras completas de Platón traducidas al español. Hubo 500 suscriptores en toda España (que entonces incluía, recuérdese, Cuba, Puerto Rico y quién sabe si algún desafortunado lugar más). Y uno más de Uruguay, que solicitó dos copias.

En total, 11 volúmenes de 250-350 páginas de texto no demasiado prieto.

La distribución provincial de suscriptores fue:

Ciertamente curiosa.

Más información (incluida la lista de los suscriptores, tanto institucionales como privados), aquí.