SAS: Mapa de distritos de Barcelona

La semana pasada publiqué el mapa de distritos de Madrid, así qie creo que es justo también publicar el mapa de distritos de Barcelona. En este caso los datos los he encontrado en la sección de periodismo de datos de la Vanguardia.

Distritos_Barcelons

filename file "&ruta/shapefiles_barcelona_distrito.shp" encoding="UTF-8";
proc mapimport datafile=file
out = BARCELONA;
run;

proc sort data=BARCELONA out=DISTRITO nodupkey;
by c_distri;
run;

proc gmap data=DISTRITO map=BARCELONA;
id c_distri;
title "Distritos del municipio de Barcelona";
choro n_distri/discrete;
run;

He encontrado también el mapa de secciones censales de Barcelona.

DCensal_Barcelona

filename file "&ruta/elecciones_congreso_distrito_censal_bcn.shp" encoding="UTF-8";
proc mapimport datafile=file
out = CEN_BARCELONA;
run;

proc sort data=CEN_BARCELONA out=DISTRITO nodupkey;
by cartodb_id;
run;

proc gmap data=DISTRITO map=BARCELONA;
id cartodb_id;
title "Distritos y secciones censales del municipio de Barcelona";
choro distrito/discrete;
run;

SAS: Mapa de distritos de Madrid

Pues eso, para aquellos a los que os guste dibujar mapas y gráficos chulos y no os importe currároslo un poco aquí tenéis un pequeño código para dibujar los distritos del municipio de Madrid.

Distritos de Madrid

La fuente de datos es el Instituto de Estadística de la Comunidad de Madrid que publica shapes en este link. Este ficheros contiene todos los distritos de la Comunidad.

filename file "&ruta/200001693.shp" encoding="UTF-8";
proc mapimport datafile=file
out = MADRID;
run;

proc sort data=MADRID out=DISTRITO nodupkey;
by geocodigo;
run;

data DISTRITO;
set DISTRITO;
if substr(geocodigo,1,3)='079';
distrito = substr(desbdt,8);
run;

proc gmap data=DISTRITO map=MADRID;
id geocodigo;
choro distrito/discrete;
run;

Gráficos de mapa con shapefiles: coronavirus

Vamos a tratar como usar shapefiles para dibujar mapas con SAS. Utilizaré para los ejemplos datos de la trágica lacra que nos asola estos días, la enfermedad del coronavirus.

Un shapefile es un formato vectorial de almacenamiento de información geográfica, es además un fichero multiarchivo porque requiere de varios ficheros para poder ser interpretado. Son varios los ficheros que pueden estar incluidos, pero al menos deben existir estos tres: .shp, .shx y .dbf.

SAS puede utilizar proc mapimport para importar el shapefile y convertirlo en tablas SAS que podremos tratar para construir gráficos. Además, en este caso, le vamos a asociar datos sobre el coronavirus consultados a fecha 4 de abril en la siguiente página de Sanidad.

proc gmap se encarga de dibujar el mapa que está definido en el parámetro map= y los datos para los gráficos o los colores de representación se encuentran informados por el contenido del parámetro data=. El statement choro (jocoso nombre para los peruanos) indica la variable que se utilizará para representar las distintas zonas del mapa con un color más o menos intenso según su valor relativo. La opción choro variable/discrete indica una variable no continua, por lo que los colores representados con colores distintos.

coronavirus1

filename file "&ruta/gadm36_ESP_1.shp" encoding="UTF-8";
proc mapimport datafile=file out = GDIS;
run;

proc sort data=GDIS out=COMUNIDAD (rename=(name_1 = comunidad)) nodupkey;
    by gid_1;
run;

/* Adecuamos la posición de las Islas Canarias para tener un mapa más grande */;
data GDIS;
    set GDIS;
    if name_1='Islas Canarias' then do;
        x = x + 20;
        y = y + 7;
    end;
run;

/* Añadimos la información del coronavirus */
data CORONAVIRUS;
    infile datalines dsd missover;
    format contagiados 8. comunidad $50. fallecidos 8.;
    input contagiados comunidad $ fallecidos;
    cards;
    36249, 'Comunidad de Madrid', 4723
    24734, 'Cataluña', 2508
    7875, 'Castilla y León', 723
    9324, 'Castilla-La Mancha', 989
    8187, 'País Vasco', 477
    7869, 'Andalucía', 426
    6901, 'Comunidad Valenciana', 571
    5625, 'Galicia', 159
    2972, 'Comunidad Foral de Navarra', 171
    3078, 'Aragón', 251
    2405, 'La Rioja', 128
    1979, 'Extremadura', 208
    1522, 'Principado de Asturias', 76
    1564, 'Islas Canarias', 78
    1384, 'Cantabria', 68
    1271, 'Islas Baleares', 71
    1188, 'Región de Murcia', 51
    152, 'Ceuta y Melilla', 3
    ;
run;

proc sql;
    create table COMUNIDAD2 as
    select a.*,
           b.contagiados,
           b.fallecidos
    from COMUNIDAD a
    left join CORONAVIRUS b
    on a.comunidad = b.comunidad;
quit;

proc gmap data=COMUNIDAD2 map=GDIS;
    title 'Contagiados por coronavirus en España';
    id gid_1;
    choro contagiados;
run;

Utilizar block en vez de choro representará los datos como columnas verticales dentro de cada zona. La opción legend=legend se utiliza para indicar que el color de las columnas y de la leyenda serán iguales.

coronavirus2

proc gmap data=COMUNIDAD2 map=GDIS;
    title 'Contagiados por coronavirus en España';
    id gid_1;
    block contagiados / legend=legend;
run;