26 de noviembre de 2015

Extracción de valores de archivos climáticos en R – Uso de tablas, raster y shapefiles


El objetivo de este ejercicio es obtener los valores de la precipitación mensual para cada incendio ocurrido en la zona de Kalimantan (en Indonesia), ello haciendo uso del lenguaje de programación R (gratuito).  Para el presente caso hacemos uso de datos de Nasa FIRMS que contiene los incendios de Kalimantan (en Indonesia),  y la precipitación histórica para esta misma zona (1959-2000) tomada de la página web de Worldclim (Hijmans et al., 2015). Con estos datos, la idea es conocer la relación existente entre los incendios y la precipitación por cada mes.

Nota: las direcciones son aquellas que se encuentran entre comillas (“ “) y cambiaría conforme a la localización de los datos del interprete, es decir, usted.

Hacemos uso de las librerías “raster” y “rgdal”, para instalarlas abrimos el programa de R y escribimos lo siguiente:
install.packages(“raster”)
install.packages(“rgdal”)
require(“raster”)
require(“rgdal”)

Luego procedemos a abrir el shapefile que contiene los sismos de Indonesia, desde noviembre del año 2000 hasta agosto del 2015.

fire = shapefile("E:/Indonesia/Data/_shp/_nasa_firms/_trial_zone_kalimantan/fire_new.shp")
head(fire@data) #permite ver las primeras seis filas del shape
dim(fire@data) #ver las dimensiones de la tabla de atributos
fire_tabla <- as.data.frame(fire@data) #convertir tabla del shapefile a un data frame (tabla en R).

Leemos los archivos raster para los doce meses de la precipitación, así como se muestra a continuación.
path = "F:/Proyectos_2015/Indonesia/Data/_tif/worldclim/data/_indonesia/_asc/prec/"
archivos = list.files(path, full.names = T, pattern = ".asc$")
datos = lapply(archivos, FUN=raster)
stack_prec = stack(datos) #hacemos un stack, es decir poner todos los raster de precipitación uno encima de otro.

Procedemos a hacer la extracción de los valores para los puntos de incendios a partir de los doce meses de la precipitación:
coor = as.data.frame(extract(stack_prec, fire_tabla[,3:2])) #hace la extracción y a su vez convierte los resultados en un data.frame (diferente al vector)
head(coor) #aquí podemos observar que hay valores sin datos NA’s.
dim(coor)
fix(coor)
tabla_2 <- cbind(enero_tabla, coor) #hacemos la unión de la tabla obtenida de la extracción y la de incendios

Luego eliminamos los archivos que tienen NA, estos valores sin datos se deben a que los incendios se encuentran localizados fuera del área de los archivos raster de precipitación.
apply(tabla_2, 2, function(x) length(which(!is.na(x)))) #contar los NA de las columnas de la tabla
#Son 87199 los campos que tienen un valor asociado, es decir que hay 1237 campos que no tienen valores de precipitación
#Estos incendios se encuentran fuera del área de estudio (en el mar), o en la costa fuera del área de los raster de Worldclim

Eliminamos de la tabla los campos que no tienen datos de precipitación, así como se presenta a continuación.
row.has.na <- apply(tabla_2, 1, function(x){any(is.na(x))})
head(row.has.na)
sum(row.has.na)
final.filtered <- as.data.frame(tabla_2[!row.has.na,]) #el signo de admiración significa "diferente de".

Si queremos escribir esta tabla producto, escribimos lo siguiente:
write.csv(final.filtered, "F:/Proyectos_2015/Indonesia/Data/_tables/_precipitacion_worldclim/prec_fires_kalimantan_barat.csv")

Pasamos a convertir la tabla obtenida a un shapefile, ello a partir de las columnas de longitud y latitud que contiene dicha tabla.
coordinates(final.filtered) <- ~LONGITUDE+LATITUDE
class(final.filtered)
plot(final.filtered, pch=19)




Y por último, guardamos el archivo shapefile.
writeOGR(final.filtered, dsn = "E:/Blogger/Post_2/_resultados/_shp", layer= "prec_fires", driver = "ESRI Shapefile")


De este link se pueden descargar los datos del presente ejercicio.



Bibliografía:

HIJMANS, R.J., S.E. CAMERON, J.L. PARRA, P.G. JONES and A. JARVIS. Very high resolution interpolated climate surfaces for global land areas. International Journal of Climatology, 2005, vol. 25, no. 15, p. 1965-1978.
R DEVELOPMENT CORE TEAM (2004). A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. ISBN 3-900051-07-0, URL http://www.R-project.org.


Comentarios

Entradas populares de este blog

Extracción por mascara en R

Convertir una tabla a shape en R

¿Cómo descargar información de GBIF usando R?