Cierto agricultor interesado en el cultivo de caña de azúcar, desea saber en qué zonas del mundo puede establecer su cultivo y obtener rendimientos potenciales (kg/ha). El agricultor sabe que uno de los factores limitantes más no el único, es el clima y por ello investiga cuales son los rangos óptimos sobre los cuales se obtienen rendimientos potenciales identificando lo siguiente:
Adicionalmente, el agricultor tiene información que le indica que la región del Valle del Cauca en Colombia posee unos rendimientos altos y que otra aproximación para identificar las zonas a nivel global sería buscar otros sitios con condiciones similares.
A partir del planteamiento anterior se propone que:
Para el desarrollo de la actividad lo primero es obtener mapas que nos permitan identificar las variables climáticas necesarias para el estudio, que son temperatura media y precipitaciones globales, para ello tomamos la información de la página “World Climate” de la Url “https://worldclim.org/data/worldclim21.html”, la información allí encontrada ofrece la media requerida entre los años 1970 y 2000.
Se empezará primero con la importación de la temperatura media, de World Climate se obtiene la temperatura media mensual, filtramos en cada mapa las zonas del mundo que cumplen con el rango de temperatura deseado y, a modo de primera previsualización, sumamos los mapas para obtener un mapa de “aptitud por temperatura” del cultivo de caña de azucar.
# Cargar archivos de la temperatura media global por mes
directorio <- "C:/Users/Christian/Desktop/Carpeta del Todo/Cursos Maestria en Ciencia de Datos/07 - Análisis de datos geográficos y espaciales/Unidad 2 - Exploracion de Datos Espaciales/wc2.1_10m_tavg/"
Temp_media_archivos <- list.files(directorio, pattern = "*.tif$", full.names = TRUE)
Temp_media_meses_rasters <- stack(Temp_media_archivos)
# Filtrar zonas en los mapas que cumplen el rango de temperatura deseado
Temp_media_meses <- Temp_media_meses_rasters>=22.5 & Temp_media_meses_rasters<=28
# Generar una previsualización de las zonas aptas por la suma de meses
Temp_media <- sum(Temp_media_meses)
plot(Temp_media, main="Gráfico 1. Zonas aptas por temperatura por suma de meses")
El ciclo de la caña de azúcar es un proceso que puede ser prácticamente anualizados, usualmente se habla de entre 11 y 16 meses, por lo que las zonas marcadas con un color más intenso serán más aptas para el cultivo, mientras que las zonas de color medio requerirán apoyos para hacer viable el cultivo, las zonas más claras probablemente no tendrán la capacidad suficiente para sostener el cultivo adecuadamente.
Una vez obtenido el mapa de temperatura media, procedemos de la misma forma con los mapas de precipitación media mensual
# Cargar archivos de la precipitación media global por mes
directorio_2 <- "C:/Users/Christian/Desktop/Carpeta del Todo/Cursos Maestria en Ciencia de Datos/07 - Análisis de datos geográficos y espaciales/Unidad 2 - Exploracion de Datos Espaciales/wc2.1_10m_prec/"
Prec_media_meses_archivos <- list.files(directorio_2, pattern = "*.tif$", full.names = TRUE)
Prec_media_meses_rasters <- stack(Prec_media_meses_archivos)
# Filtrar zonas en los mapas que cumplen el rango de precipitaciones deseado
Prec_media_meses <- Prec_media_meses_rasters>=125 & Prec_media_meses_rasters<=290
# Generar una previsualización de las zonas aptas por la suma de meses
Prec_media <- sum(Prec_media_meses)
plot(Prec_media, main="Gráfico 2. Zonas aptas por precipitación por suma de meses")
Viendo que la información proporcionada es correcta procedemos a demarcar las zonas que cumplen con los dos requisitos solicitados, es decir, con una temperatura media entre 22,5°C y 28°C y una precipitación media anual entre 1500 y 3500 milímetros, para ello se “multiplican” los datos mensuales de zonas aptas tanto de temperatura como de precipitaciones, esto dará las zonas que cumplen con ambos requisitos por mes y, a modo de previsualización, se suman los mapas como se hizo anteriormente, de manera que se visualice cuantos meses se cumplen las condiciones por zona.
# "Multiplicar" los mapas para ver las zonas que cumplen ambos criterios por mes
Temp_y_prec <- stack(lapply(1:nlayers(Temp_media_meses), function(i) {
return(Temp_media_meses[[i]] * Prec_media_meses[[i]])
}))
# Generar una previsualización de las zonas aptas por la suma de meses
Temp_y_prec_apta <- sum(Temp_y_prec)
plot(Temp_y_prec_apta, main="Gráfico 3. Zonas con las condiciones climáticas deseadas")
Vemos que en general se han señalado la mayor parte de la región tropical del mundo con las excepciones de los grandes desiertos y las regiones de alta montaña.
Del mapa de condiciones climáticas deseadas, seleccionamos tres países sin ningún criterio adicional que solo con esas condiciones podrían ser considerados como ideales para plantaciones de caña de azúcar, los países seleccionados son Colombia, Indonesia y Vietnam.
Primero empezamos importando un archivo shapefile, que usa el mismo sistema de coordenadas y que contenga las divisiones políticas del mundo. Los archivos shapefiles fueron obtenidos de la página “Natural Earth Data” de la url: https://www.naturalearthdata.com/downloads/ .
# Importar shapefile de paises del mundo
directorio_3 <- "C:/Users/Christian/Desktop/Carpeta del Todo/Cursos Maestria en Ciencia de Datos/07 - Análisis de datos geográficos y espaciales/Unidad 2 - Exploracion de Datos Espaciales/countries/"
paises_mundo <- st_read(paste(directorio_3, "ne_10m_admin_0_countries_esp.shp", sep=""), options = "ENCODING=UTF-8")
## options: ENCODING=UTF-8
## Reading layer `ne_10m_admin_0_countries_esp' from data source
## `C:\Users\Christian\Desktop\Carpeta del Todo\Cursos Maestria en Ciencia de Datos\07 - Análisis de datos geográficos y espaciales\Unidad 2 - Exploracion de Datos Espaciales\countries\ne_10m_admin_0_countries_esp.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 249 features and 168 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -180 ymin: -90 xmax: 180 ymax: 83.6341
## Geodetic CRS: WGS 84
plot(paises_mundo$geometry)
Empezamos con Colombia, recortamos la región correspondiente a Colombia usando la geometría del shapefile y se grafica en azul las regiones que cumplen los requisitos de temperatura y precipitaciones.
# Recortar el shapefile de Colombia
Shape_Colombia <- paises_mundo[paises_mundo$NAME_SORT == "Colombia", ]
# Recortar el rasterfile de Colombia en el mapa de precipitaciones
Raster_Colombia <- crop(Temp_y_prec_apta, Shape_Colombia)
# Graficar el mapa de colombia con las zonas de condiciones climáticas deseadas
plot(Raster_Colombia, main = "Gráfico 4. Zonas de Colombia\n con las condiciones climáticas deseadas")
plot(st_geometry(Shape_Colombia), add = TRUE, border = "blue", lwd = 2)
Procedemos de la misma forma con indonesia, recordando que la región azul es lo único que nos interesa, que es la región que cumplen los requisitos de temperatura y precipitaciones.
# Recortar el shapefile de Indonesia
Shape_Indonesia <- paises_mundo[paises_mundo$NAME_SORT == "Indonesia", ]
# Recortar el rasterfile de Indonesia en el mapa de precipitaciones
Raster_Indonesia <- crop(Temp_y_prec_apta, Shape_Indonesia)
# Graficar el mapa de Indonesia con las zonas de condiciones climáticas deseadas
plot(Raster_Indonesia, legend=FALSE, main = "Gráfico 5. Zonas de Indonesia\n con las condiciones climáticas deseadas")
plot(st_geometry(Shape_Indonesia), add = TRUE, border = "blue", lwd = 2)
Finalmente, procedemos de la misma forma con Vietnam, recordando que la región azul es lo único que nos interesa, que es la región que cumplen los requisitos de temperatura y precipitaciones.
# Recortar el shapefile de Vietnam
Shape_Vietnam <- paises_mundo[paises_mundo$NAME_SORT == "Vietnam", ]
# Recortar el rasterfile de Vietnam en el mapa de precipitaciones
Raster_Vietnam <- crop(Temp_y_prec_apta, Shape_Vietnam)
# Graficar el mapa de Indonesia con las zonas de condiciones climáticas deseadas
plot(Raster_Vietnam, legend=FALSE, main = "Gráfico 6. Zonas de Vietnam\n con las condiciones climáticas deseadas")
plot(st_geometry(Shape_Vietnam), add = TRUE, border = "blue", lwd = 2)
Ahora se pide identificar las condiciones climáticas del Valle del Cauca, que la convierten en una región de rendimientos altos para el cultivo de caña de azúcar, para ello se requiere extraer información vía Google Maps del clima de la región.
Los tres puntos seleccionados podemos verlos en el siguiente mapa:
# Coordenadas obtenidas de Google Map
coor_1 <- c(3.303794232418576, -76.55553265733947)
coor_2 <- c(3.6176051606608715, -76.71261016445712)
coor_3 <- c(3.877972219972629, -76.25393096143048)
# Crear dataframe con las coordenadas obtenidas
long <- c(coor_1[2],coor_2[2],coor_3[2])
lat <- c(coor_1[1],coor_2[1],coor_3[1])
coor_valle <- data.frame(long,lat)
# Proyectar el mapa en el sistema de coordenadas
Puntos_Valle <- SpatialPoints(coor_valle)
proj4string(Puntos_Valle) <- CRS("+proj=longlat +datum=WGS84 +no_defs")
# Gráficar el mapa
leaflet(Puntos_Valle) %>%
addTiles() %>%
addMarkers(popup = "Puntos en el Valle del Cauca") %>%
setView(lng = mean(coor_valle$lon), lat = mean(coor_valle$lat), zoom = 8)
Con ello creamos una serie de tiempo para los tres puntos seleccionados, los tres puntos seleccionados los identificaremos de la siguiente forma, punto 1: Al sur de Cali, Punto 2: Al este de Dagua, Punto 3: Al oeste de Buga. Graficamos la serie de tiempo del primer punto, que corresponde al sur del municipio de Cali:
#Obteniendo datos de temperatura del punto 1
Serie_1_temp <- extract(Temp_media_meses_rasters,coor_valle[1,])
# Gráficando datos de temperatura del punto 1
colnames(Serie_1_temp) <- c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12")
barplot(Serie_1_temp[1,], main="Gráfico 7. Serie de tiempo de temperatura en Punto 1", las = 2, ylim = c(21,22.5), xpd = FALSE)%>%
text(x = ., y = Serie_1_temp-0.05, label = round(Serie_1_temp, 2), pos = 3, cex = 0.70)
#Obteniendo datos de temperatura del punto 2
Serie_1_prec <- extract(Prec_media_meses_rasters,coor_valle[1,])
# Gráficando datos de temperatura del punto 1
colnames(Serie_1_prec) <- c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12")
barplot(Serie_1_prec[1,], main="Gráfico 8. Serie de tiempo de precipitación en Punto 1", las = 2, ylim = c(0,300))%>%
text(x = ., y = Serie_1_prec-0.05, label = round(Serie_1_prec, 2), pos = 3, cex = 0.70)
Procedemos de la misma forma con el punto 2, que corresponde al este de Dagua.
#Obteniendo datos de temperatura del punto 2
Serie_2_temp <- extract(Temp_media_meses_rasters,coor_valle[2,])
# Gráficando datos de temperatura del punto 2
colnames(Serie_2_temp) <- c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12")
barplot(Serie_2_temp[1,], main="Gráfico 9. Serie de tiempo de temperatura en Punto 2", las = 2, ylim = c(19.5,21), xpd = FALSE)%>%
text(x = ., y = Serie_2_temp-0.05, label = round(Serie_2_temp, 2), pos = 3, cex = 0.70)
#Obteniendo datos de temperatura del punto 2
Serie_2_prec <- extract(Prec_media_meses_rasters,coor_valle[2,])
# Gráficando datos de temperatura del punto 2
colnames(Serie_2_prec) <- c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12")
barplot(Serie_2_prec[1,], main="Gráfico 10. Serie de tiempo de precipitación en Punto 2", las = 2, ylim = c(0,300))%>%
text(x = ., y = Serie_2_prec-0.05, label = round(Serie_2_prec, 2), pos = 3, cex = 0.70)
Procedemos de la misma forma con el punto 3, que corresponde al este de Buga.
#Obteniendo datos de temperatura del punto 3
Serie_3_temp <- extract(Temp_media_meses_rasters,coor_valle[3,])
# Gráficando datos de temperatura del punto 3
colnames(Serie_3_temp) <- c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12")
barplot(Serie_3_temp[1,], main="Gráfico 11. Serie de tiempo de temperatura en Punto 3", las = 2, ylim = c(21,22.5), xpd = FALSE)%>%
text(x = ., y = Serie_3_temp-0.05, label = round(Serie_3_temp, 2), pos = 3, cex = 0.70)
#Obteniendo datos de temperatura del punto 3
Serie_3_prec <- extract(Prec_media_meses_rasters,coor_valle[3,])
# Gráficando datos de temperatura del punto 3
colnames(Serie_3_prec) <- c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12")
barplot(Serie_3_prec[1,], main="Gráfico 12. Serie de tiempo de precipitación en Punto 3", las = 2, ylim = c(0,250))%>%
text(x = ., y = Serie_3_prec-0.05, label = round(Serie_3_prec, 2), pos = 3, cex = 0.70)
Con ello hemos graficado las variables climáticas solicitadas, a partir de los puntos seleccionados podríamos asociar que el rango de temperatura de la región es [19.5, 22.15] y el rango de precipitaciones [71, 242].
Como una posible aproximación al problema, se realiza un promedio de la temperatura y precipitación de los 3 puntos y a partir de ese promedio se realizará el cálculo de similaridad con el resto del mundo. Tras ello se graficará el mapa de similitud de temperaturas.
# Promediamos las temperaturas de los tres puntos
Serie_Valle_temp <- sum(Serie_1_temp, Serie_2_temp, Serie_3_temp)/3
# Calculamos las distancias euclidianas del resto del mundo
Simil_temp <- sqrt(sum((Serie_Valle_temp - Temp_media_meses_rasters)^2))
# Normalizamos el mapa de temperaturas
simil_temp_max <- cellStats(Simil_temp, stat = 'max')
Simil_temp_norm <- (1-(Simil_temp/simil_temp_max))
# Gráficamos el mapa similitud de temperaturas.
plot(Simil_temp_norm, main="Gráfico 13. Mapa de Similitud de temeperaturas con el Valle del Cauca")
Como una posible aproximación al problema, se realiza un promedio de la temperatura y precipitación de los 3 puntos y a partir de ese promedio se realizará el cálculo de similaridad con el resto del mundo. Tras ello se graficará el mapa de similitud de temperaturas.
# Promediamos las precipitaciones de los tres puntos
Serie_Valle_prec <- sum(Serie_1_prec, Serie_2_prec, Serie_3_prec)/3
# Calculamos las distancias euclidianas del resto del mundo
Simil_prec <- sqrt(sum((Serie_Valle_prec - Prec_media_meses_rasters)^2))
# Normalizamos el mapa de precipitaciones
simil_prec_max <- cellStats(Simil_prec, stat = 'max')
Simil_prec_norm <- (1-(Simil_prec/simil_prec_max))
# Gráficamos el mapa similitud de precipitaciones.
plot(Simil_prec_norm, main="Gráfico 14. Mapa de Similitud de precipitaciones con el Valle del Cauca")
Finalmente, como ambos mapas están normalizados, se suman, y se agrega una escala de color más clara, en este caso, irá de blanco a rojo, y con ello se grafica el mapa de similitud climática, entre más rojo, más parecidas serán los condiciones a las del Valle del Cauca.
# "Sumar" los mapas para ver las zonas que cumplen ambos criterios por mes
Temp_y_prec <- stack(lapply(1:nlayers(Temp_media_meses), function(i) {
return(Temp_media_meses[[i]] * Prec_media_meses[[i]])
}))
# Generar una previsualización de las zonas aptas por la suma de meses
Simil_clima <- (Simil_temp_norm + Simil_prec_norm)/2
gradiente <- colorRampPalette(c("white", "gray", "red"))(100)
plot(Simil_clima, main="Gráfico 15. Mapa de Similitud de climática con el Valle del Cauca",
col = gradiente)
Vemos en el resultado final que el mapa es relativamente similar a los resultados obtenidos por el filtro de rangos de temperaturas y precipitaciones obtenidos previamente.
A partir de los resultados obtenidos por los dos métodos utilizados, podemos señalar las siguientes conclusiones y observaciones: