Familias más ricas de países de AL en inicio de su hegemonía (2024).pdf
Visualizando Datos: la geolocalización como herramienta emergente de análisis demográfico
1. Visualizando Datos:
la geolocalización como herramienta
emergente de análisis demográfico
Presentación RugBCN 9 de Octubre 2013
JUAN GALEANO
2. ESTRUCTURA DE LA PRESENTACIÓN
INTRO: CAMBIO DEMOGRÁFICO Y GESTIÓN MUNICIPAL DE LA DIVERSIDAD
1. LECTURA DE FICHEROS GRANDES, ENORMES
2. DIVIDIR UN DATA-FRAME DE ACUERDO A UNA VARIABLE DE INTERÉS
3. DIVIDIR UN ARCHIVO DE EXTENSIÓN .SHP EN MULTIPLES ARCHIVOS .SHP
4. GEOLOCALIZACIÓN DE INFORMACIÓN: PLOTGOOGLEMAPS PACKAGE
5. VISUALIZANDO DATOS: GOOGLEVIS PACKAGE
4. AVISO A NAVEGANTES
• Soy un usuario de R autodidacta (mejor dicho blog-didacta).
• Lo que presentaré aquí ha funcionado para mi.
• Sin lugar a dudas hay maneras más eficientes y, sobretodo, elegantes de programar.
• Para conocer toda la verdad sobre las funciones y packages que repasaremos en esta
presentación, lo mejor es leer atentamente la documentación elaborada por sus
desarrolladores.
5. LECTURA DE FICHEROS GRANDES, ENORMES (I)
Padrón municipal del habitantes: 47.265.321 personas (filas) en 2012.
Fuentes de los datos: Instituto Nacional de Estadística (INE).
Formato: .sav (SPSS)
Variables incluidas en el fichero:
• provincia,
• municipio,
• distrito,
• sección,
• sexo,
• edad,
• pronac (provincia de
nacimiento),
• paisnac (paisnac),
• munnac,
• año
¿Qué hacemos con esto? ¿Cómo podemos trabajar en R con un fichero de este tamaño?
6. LECTURA DE FICHEROS GRANDES, ENORMES (II)
1. Necesitamos transformar el archivo en algo con lo que podamos trabajar en R (.txt, .csv)
Guardamos el archivo .sav como un .csv delimitado por ;
2. Utilizamos la función file para conectar con el fichero que nos interesa
padro2012 <- file("C:/Users/ced/Desktop/PC2012.csv“)
3. Utilizamos el package sqldf (función homónima) para leer el archivo en R pidiendo que
los datos sean agrupados de la manera que convenga (en este caso por sección censal).
padro2012a <- sqldf("select provincia, municipio, distrito, seccion, pronac, paisnac, count(*)
from padro2012 group by provincia, municipio, distrito, seccion, pronac,
paisnac", dbname = tempfile(), file.format = list(header = T, row.names = F,
sep = ";"), stringsAsFactors = FALSE)
7. LECTURA DE FICHEROS GRANDES, ENORMES (III)
La operación realizada con la función sqldf nos devuelve un data-frame que, en este caso,
esta compuesto de 2.031.894 observaciones (filas) y 7 variables (columnas)
8. DIVIDIR UN DATA-FRAME DE ACUERDO A UNA VARIABLE DE INTERÉS (I)
Tengo un data-frame de 35.960 observaciones (filas) y 24 variables (columnas). Necesito
dividir esta información sobre la población a nivel de sección censal agrupándola por
municipios.
9. DIVIDIR UN DATA-FRAME DE ACUERDO A UNA VARIABLE DE INTERÉS (II)
1. Determino un directorio de trabajo donde irán a parar los archivos.
setwd ("C:/Users/CED/Dropbox/R/DATA/MUNICIPIOS")
2. Divido el fichero por municipios (conservando todas las variables e incluyendo todas
secciones censales de cada municipio) utilizando la función split.
spt1 <- split(secc2011, secc2011$codmun) #esto genera un List de 8.116 elementos
3. creo los 8116 archivos correspondientes a los municipios de España en 2011 utilizando
las funciones lapply, names y write.table.
lapply(names(spt1),
function(x){
write.table(spt1[[x]], file = x)})
Nota: también podríamos agregar una extensión en la tablas utilizando la función paste
write.table(spt1[[x]], file = paste(x, ".Rdata", sep = "")
http://stackoverflow.com/questions/10002021/split-dataframe-into-multiple-output-files-in-r
10. DIVIDIR UN DATA-FRAME DE ACUERDO A UNA VARIABLE DE INTERÉS (III)
Resultado: de tener
un data-frame con
35.960 observaciones
y 24 variables, paso a
tener una carpeta en
la que he creado
8.116 tablas, una para
cada municipio de
España en 2011, de 24
variables cada una.
11. DIVIDIR UN ARCHIVO DE EXTENSIÓN .SHP EN MULTIPLES ARCHIVOS .SHP (I)
Tengo un shapefile de la composición territorial de España en el año 2011 por secciones
censales.
Lo que necesito es poder dividir
este archivo en un múltiples
shapefiles que contengan la
división por secciones censales
agrupadas a nivel municipal.
Info detallada sobre archivos .shp
http://en.wikipedia.org/wiki/Shapefile
Mapa de España por secciones censales año 2011. Fuente Instituto Nacional de Estadística.
12. DIVIDIR UN ARCHIVO DE EXTENSIÓN .SHP EN MULTIPLES ARCHIVOS .SHP (II)
Esta tarea pude ser realizada en R en 5 pasos:
1. Cargar las packages que necesitaré utilizar (sp) y (rgal):
library (sp)
library (rgal)
2. Leer el shapefile que quiero dividir utilizando la función readOGR, contenida por el
package rgal
SPAIN <- readOGR("C:/Users/ced/Dropbox/MAPAS/SECCIONES ESPAÑA Y BALEARES 2011",
"PeninsulayBaleares2011")
3. Crear un vector con valores únicos para cada subregión (municipios en este caso),
utilizando la función unique.
y <- unique(SPAIN@data$PROVMUN2)
13. DIVIDIR UN ARCHIVO DE EXTENSIÓN .SHP EN MULTIPLES ARCHIVOS .SHP (III)
4. Establecer un directorio de trabajo donde van a ir a para los nuevos archivos .shp
setwd ( “C:/Users/ced/Dropbox/MAPAS/SECCIONES POR MUNICIPIO 2011”)
5. Crear un shapefile para cada una de las subregiones y guardarlos como archivos .shp.
Para ello utilizo un for loop y la función writeOGR del package rgdal.
for (i in 1:length(y) ) {
temp3 <- SPAIN[SPAIN$PROVMUN2 == y[i], ]
writeOGR(temp3, dsn=getwd(), y[i], driver="ESRI Shapefile",
overwrite_layer=TRUE)
}
http://stackoverflow.com/questions/13175489/create-many-shape-file-from-a-large-shape-file
14. DIVIDIR UN ARCHIVO DE EXTENSIÓN .SHP EN MULTIPLES ARCHIVOS .SHP (IV)
Resultado: de tener un
archivo .shp gigantesco,
paso a tener una
carpeta en la que he
creado 32.464 archivos.
4 archivos por cada
municipio. 32.464/4 =
8.116 municipios de
España en 2011. Esta
operación tardó casi un
día en realizarse.
15. GEOLOCALIZACIÓN DE INFORMACIÓN: PLOTGOOGLEMAPS PACKAGE (I)
El package plotGoogleMaps permite graficar, proyectando sobre Google Maps, 5 tipos de
objetos:
1. SpatialPointsDataFrame
2. SpatialLinesDataFrame
3. SpatialPoligonsDataFrame
4. SpatialPixelsDataFrame
5. SpatialTemporalDataFrame (STFDF & STIDF) (Full Lattice & Irregular)
Adicionalmente, se pueden combinar 2 o más de los objetos 1-4 en un gráfico-mapa
“multi-capa”.
Info detallada: http://cran.r-project.org/web/packages/plotGoogleMaps/vignettes/plotGoogleMaps-tutorial.
pdf
16. GEOLOCALIZACIÓN DE INFORMACIÓN: PLOTGOOGLEMAPS PACKAGE (II)
Para graficar un SpatialPoligonsDataFrame (SPDF), proyectándolo sobre Google Maps,
necesitamos cargar 3 packages:
1. maptools (con el que leeremos el SPDF en R)
2. rgal (con el que determinaremos la proyección geográfica correspondiente)
3. plotGoogleMaps (con el que crearemos el archivo de extensión .html de nuestro mapa)
Nota: también podríamos leer el SPDF con la función readOGR del package rgal, cada quien a su gusto.
Además necesitamos:
• Una base cartográfica (archivo de extensión .shp), y
• Un archivo (data-frame) que contenga los datos que queremos representar.
17. GEOLOCALIZACIÓN DE INFORMACIÓN: PLOTGOOGLEMAPS PACKAGE (III)
Para realizar nuestro mapa:
1. ### CARGAR PACKAGES ###
library (maptools)
library (plotGoogleMaps)
library (rgdal)
2 . ### CARGAR LA BASE CARTOGRÁFICA ###
A08019.shp <- readShapeSpatial("C:/Users/ced/Dropbox/MAPAS/SECCIONES POR
MUNICIPIO 2011/A08019")
plot(A08019.shp)
Mapa del municipio de Barcelona por secciones censales.
Fuente Instituto Nacional de Estadística.
18. GEOLOCALIZACIÓN DE INFORMACIÓN: PLOTGOOGLEMAPS PACKAGE (IV)
Para realizar nuestro mapa:
3. ### CARGAR DATOS A REPRESENTAR ###
A08019 <- read.table("C:/Users/CED/Dropbox/R/DATA/MUNICIPIOS/A08019",header=T,
quote=""")
4. ### UNIR LOS DATOS QUE QUEREMOS REPRESENTAR A LA BASE CARTOGRÁFICA ###
mun <- merge(A08019.shp@data, A08019, by ="codi")
19. GEOLOCALIZACIÓN DE INFORMACIÓN: PLOTGOOGLEMAPS PACKAGE (V)
Para realizar nuestro mapa:
5. ### MUY IMPORTANTE: ORDENO LOS DATOS DE ACUERDO AL ORDEN DE LOS
OBJETOS DE LA BASE CARTOGRÁFICA ###
mun2b <- mun[order(order(A08019.shp@data$codi)), ]
20. GEOLOCALIZACIÓN DE INFORMACIÓN: PLOTGOOGLEMAPS PACKAGE (VI)
Para realizar nuestro mapa:
6. ### AGREGO, AL APARTADO DE DATOS DEL SPDF, LAS VARIABLES QUE ME INTERESA
QUE APAREZCAN EN EL CUADRO DE DIÁLOGO ###
A08019.shp@data$CAT <- mun2b$Tipus_Residencial
A08019.shp@data$PT <- mun2b$Poblacio_Total
A08019.shp@data$ESP <- mun2b$PES
A08019.shp@data$LA <- mun2b$PLA
A08019.shp@data$WE <- mun2b$PEOc
A08019.shp@data$EE <- mun2b$PEOr
A08019.shp@data$AF <- mun2b$PAF
A08019.shp@data$AS <- mun2b$PAS
A08019.shp@data$OT <- mun2b$PAL
colnames(A08019.shp@data) <- c("ID", "CAT", "Total pop.", "Spanish", "Latin-American",
"Western Europe", "Eastern Europe", "Africa", "Asia", "Others")
21. GEOLOCALIZACIÓN DE INFORMACIÓN: PLOTGOOGLEMAPS PACKAGE (VII)
Para realizar nuestro mapa:
7. ### DETERMINO LOS COLORES (FORMATO HTML) CON QUE QUIERO UTILIZAR ###
colores <- c("#4F9E35","#44F608","#FC9272","#FB6A4A")
#4F9E35=
#44F608=
#FC9272=
#FB6A4A=
8. ### DETERMINO EL SISTEMA DE PROYECCION GEOGRAFICA ###
Para ello utilizo la función proj4string del package rgdal
proj4string(A08019.shp) <- CRS("+proj=utm +zone=30N +ellps=intl +units=m +towgs84=-
87,-96,-120 +no_defs")
9. ### ESTABLEZCO EL DIRECTORIO DONDE SE GUARDAN LOS ARCHIVOS HTM Y PNG ###
setwd ("C:/Users/ced/Desktop/RugBCN 2013")
24. VISUALIZANDO DATOS: GOOGLEVIS PACKAGE (I)
El package googleVis proporciona un nexo (interfaz) entre R y el Google Chart Tools.
Las funciones del googleVis package permiten visualizar datos almacenados como data-frames
en R utilizando los tipos de representación del Google Chart Tools, sin que haya
necesidad de subir nuestros datos a Google.
El resultado de la ejecución de una función del googleVis package es un código HTML que
contiene los datos y las referencias a funciones JavaScript alojados por Google.
La finalidad del googleVis package es la creación de gráficos que, además de poder ser
ejecutados de forma local, puedan insertarse fácilmente en una página web.
De entre los distintos tipos de representación posibles, aquí nos ocuparemos de dos.
1. Tables
2. Motion Charts
Info detallada: http://cran.r-project.org/web/packages/googleVis/vignettes/googleVis.pdf
25. VISUALIZANDO DATOS: GOOGLEVIS PACKAGE (II)
Crear una Tabla de consulta on-line con googleVis:
library (googleVis)
data<- read.csv ("C:/Users/CED/Dropbox/R/DATA/PROVINCIAS_2000_2010_SEGREGACION.csv")
26. VISUALIZANDO DATOS: GOOGLEVIS PACKAGE (III)
Crear una Tabla de consulta on-line con googleVis:
PROVINCIAS_tabla <- gvisTable(data, options=list(width=705, height=513), chartid=
"PROVINCIAS")
plot (PROVINCIAS_tabla)
Guardamos nuestra
tabla en un archivo
de extensión .htm
print(PROVINCIAS_tabla, file="C:/Users/ced/Desktop/RugBCN 2013/TABLA_PROVINCIAS.htm")
27. VISUALIZANDO DATOS: GOOGLEVIS PACKAGE (IV)
Crear una Motion Chart de consulta on-line con googleVis:
BC <- gvisMotionChart(data,
idvar = "Provincia",
time = "Año",
xvar = "[e]Disimilitud",
yvar = "[g]Aislamiento",
colorvar = "[d]Porcentaje nacidos extranjero",
sizevar = "[a]Población total",
options= list (height= 513,
width= 713),
chartid="GEDEM_2013")
plot (BC)
Guardamos nuestra tabla en un archivo de
extensión .htm
print(BC, file="C:/Users/ced/Desktop/RugBCN 2013/TABLA_PROVINCIAS.htm")
28. VISUALIZANDO DATOS: GOOGLEVIS PACKAGE (IV)
Para insertar un objeto del tipo gvis en una página web:
1. Subimos nuestro archivo de extensión .htm al servidor donde tengamos la web.
2. Utilizamos un iframe para insertarlo en nuestra página:
{iframe width="715" height="700"}http://ced-nova.
uab.cat/gedem/documents/SEG_PROV_ESP1.htm{/iframe}
FINAL DE LA PRESENTACIÓN
Agradecimientos: al Dr. Tim Riffe https://sites.google.com/site/timriffepersonal/, a Lluis
Ramón por su presentación sobre mapas con R realizada en la reunión del RugBCN de 2012
http://rpubs.com/Lluis_Ramon/Presentacio_mapes_amb_R, al resto de miembros de
RugBCN, a los desarrolladores de los packages utilizados, a quienes hacen preguntas en los
distintos foros de usuarios de R y, sobre todo, a quienes las contestan
29. Muchas gracias por vuestra atención
contacto: jgaleano@ced.uab.es
http://gedemced.uab.cat
GEDEM –Grup d’Estudis Demogràfics i de les Migracions
@GEDEM_CED