This pressure layer represents the spatial distribution of artisanal fishing pressure globally. A subset of fishing data provided by the Sea Around Us Project is used to estimate artisanal catch in tons per half degree cells around the world. Catch is standardized by net primary production in a similar fashion to the commercial fishing pressure layers.
The artisanal fisheries pressure layer has not been updated since the first global assessment in 2012. Previous methods are detailed in Halpern et al. (2008) where the layer was originally developed (page 5 of supplement).
In brief, the original method used small-scale fisheries data provided by the FAO for just 59 countries.
The Sea Around Us Project developed a multivariate regression model to isolate geographic, demographic, and socioeconomic variables that best predict the SAUP-validated artisanal catch rates from FAO (excluding values estimated by SAUP). The best and simplest model involved only two variables, length of coastline and unemployment rate. This model was used to predict artisanal catch values for countries without FAO-reported data. Finally, we distributed these national total catch values (CT) into 1 km2 cells.
Reference: Pauly D. and Zeller D. (Editors), 2015. Sea Around Us Concepts, Design and Data (seaaroundus.org)
Downloaded: June 27, 2016 (sent by email from Arāash Tavakolie)
Description: Catch per half degree cell (tons)
Native data resolution: 0.5 degree
Time range: 1950 - 2010
Format: Tabular
#set options for all chunks in code
knitr::opts_chunk$set(warning=FALSE, message=FALSE)
library(parallel)
library(foreach)
library(doParallel)
library(raster)
library(rasterVis)
library(RColorBrewer)
cols = rev(colorRampPalette(brewer.pal(11, 'Spectral'))(255)) # rainbow color scheme
mytheme=rasterTheme(region=cols)
source("~/github/ohiprep/src/R/common.R")
#ocean raster at 1km
ocean = raster(file.path(dir_M, 'model/GL-NCEAS-Halpern2008/tmp/ocean.tif'))
#set mollweide projection CRS
mollCRS=crs('+proj=moll +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +units=m +no_defs')
#paths
dir_anx <- file.path(dir_M,'git-annex/globalprep/prs_fish/v2016')
The annual mean net primary productivity data was processed in npp.Rmd.
npp_files <- list.files(file.path(dir_anx,'VGPM_primary_productivity/int/annual_npp'),pattern = 'annual_mean_npp_2',full.names = T)
plot(raster(npp_files[13]), col=cols, main = 'Net Primary Production 2015', axes=F)
Although our catch data goes back to 1950, we only have net primary productivity data back to 2003. Therefore we can only create artisanal fishing pressure layers for the years 2003 - 2010.
catch_files <- list.files('int/annual_artisanal_rasters',full.names=T)
registerDoParallel(3)
foreach (yr = c(2003:2010)) %dopar%{
#1. get net primary production for that year
npp <- npp_files[substr(npp_files,111,114)==yr]%>%
raster()%>%
projectRaster(raster(catch_files[1]))%>%
resample(raster(catch_files[1]))
#2. Get artisanal catch raster
art <- catch_files[substr(catch_files,30,33) == yr]%>%
raster()
#3. Divide catch by npp and save to github
overlay(art,npp,fun=function(x,y){x/y},filename = paste0('int/artisanal_npp/artisanal_npp_',yr,'.tif'),overwrite=T)
}
catch_files <- list.files('int/annual_artisanal_rasters',full.names=T)
plot(projectRaster(ocean,raster(catch_files[1])), col='cornsilk2', axes=F, main='Catch (tons) standardized by NPP \n 2010', legend=F)
plot(raster('int/artisanal_npp/artisanal_npp_2010.tif'),main='Catch (tons) standardized by NPP \n 2010',col=cols,axes=F,add=T)
We calculate the means over a rolling window of 5 years to account for interannual variability. The data is log transformed.
art_npp <- list.files('int/artisanal_npp',full.names=T)
registerDoParallel(4)
foreach (i = 2003:2006) %dopar%{
yrs <- c(i:(i+4))
out <- art_npp[which(substr(art_npp,33,36) %in% yrs)]%>%
stack()%>%
calc(fun=function(x){mean(x,na.rm=T)}, filename = paste0('int/mean_artisanal/mean_catch_',yrs[1],'_',yrs[5],'.tif'),overwrite=T)%>%
calc(fun=function(x){log(x+1)})
writeRaster(out,filename = paste0('int/mean_artisanal/mean_catch_log',yrs[1],'_',yrs[5],'.tif'),overwrite=T)
}
Look at all catch data standardized by NPP from 2003 - 2010 and use the 99.99th quantile as the reference point.
art_npp <- list.files('int/artisanal_npp',full.names=T)
#get data across all years
vals <- c()
for(i in 2003:2010){
m <- art_npp[which(substr(art_npp,33,36) == i)]%>%
raster()%>%
getValues()
vals <- c(vals,m)
}
min <- log(min(vals,na.rm=T)+1) #0
max <- log(max(vals,na.rm=T)+1) #11.66215
vals <- vals[!is.na(vals)]
ref <- log(quantile(vals,prob = 0.9999,na.rm=T)+1) #10.89199
The reference point is 10.8919858, the range of data is 4.361688810^{-11} to 11.6621537.
mean_files <- list.files('int/mean_artisanal',full.names=T, pattern = 'log')
foreach (i = 2003:2006) %dopar%{
yrs <- c(i:(i+4))
out <- mean_files[which(substr(mean_files,34,37) == i)]%>%
raster()%>%
calc(fun=function(x){ifelse(x>ref,1,x/ref)})%>%
projectRaster(crs = mollCRS,over=T)%>%
resample(ocean,method='ngb',filename = paste0(file.path(dir_anx),'/out/artisanal/art_press_',yrs[1],'-',yrs[5],'.tif'),overwrite=T)
}
#looking at the most recent layer
r <- raster(file.path(dir_anx,'out/artisanal/art_press_2006-2010.tif'))
plot(ocean, col='cornsilk2', axes=F, main='Artisanal Fishing Pressure Layer\n OHI 2016', legend=F)
plot(r,col=cols,axes=F,box=F,add=T)
histogram(r)
setwd('globalprep/prs_fish/v2016')
source("../../../src/R/common.R")
#paths
dir_git <- file.path(dir_M,'git-annex/globalprep/prs_fish/v2016/out/artisanal')
library(raster)
library(rgdal)
library(dplyr)
# raster/zonal data
zones <- raster(file.path(dir_M, "git-annex/globalprep/spatial/d2014/data/rgn_mol_raster_1km/sp_mol_raster_1km.tif")) # raster data
rgn_data <- read.csv(file.path(dir_M, "git-annex/globalprep/spatial/d2014/data/rgn_mol_raster_1km/regionData.csv")) # data for sp_id's used in raster
### Low bycatch data first
# get raster data:
rasts <- list.files(dir_git)
pressure_stack <- stack()
for(raster in rasts){ # raster = "art_press_2003-2007.tif"
tmp <- raster(file.path(dir_git, raster))
pressure_stack <- stack(pressure_stack, tmp)
}
# extract data for each region:
regions_stats <- zonal(pressure_stack, zones, fun="mean", na.rm=TRUE, progress="text")
regions_stats2 <- data.frame(regions_stats)
setdiff(regions_stats2$zone, rgn_data$ant_id) # antarctica regions are in there, makes sense....no land
setdiff(rgn_data$ant_id, regions_stats2$zone) # 213 is in there, that makes sense (Antarctica)
data <- merge(rgn_data, regions_stats, all.y=TRUE, by.x="rgn_id", by.y="zone") %>%
gather("year", "pressure_score", starts_with("art"))
lb_data <- data %>%
mutate(year = substring(year, 16, 19)) %>%
mutate(year = as.numeric(year)) %>%
mutate(year = year + 6) %>%
filter(ant_typ == "eez") %>%
dplyr::select(rgn_id, rgn_nam, year, pressure_score)
write.csv(lb_data, "int/lb_artisanal.csv", row.names=FALSE)
## save toolbox data for different years/regions
# function to extract data more easily
saveData <- function(newYear){ # newYear= 2012
criteria_year <- ~year == newYear
tmp <- lb_data %>%
filter_(criteria_year) %>%
dplyr::select(rgn_id, pressure_score) %>%
arrange(rgn_id)
write.csv(tmp, sprintf('output/artisanal_fish_lb_%s.csv', newYear), row.names=FALSE)
}
### extract data
for(newYear in (max(lb_data$year) - 3):(max(lb_data$year))){
saveData(newYear)
}
### try visualizing the data using googleVis plot
library(googleVis)
plotData <- lb_data %>%
dplyr::select(rgn_nam, year, pressure_score)
Motion=gvisMotionChart(plotData,
idvar="rgn_nam",
timevar="year")
plot(Motion)
print(Motion, file='art_lb.html')
Fishing data
Pauly D. and Zeller D. (Editors), 2015. Sea Around Us Concepts, Design and Data (seaaroundus.org)
Net Primary Productivity data
Behrenfeld, M.J. and Falkowski, P.G., 1997. Photosynthetic rates derived from satelliteābased chlorophyll concentration. Limnology and oceanography, 42(1), pp.1-20.
Downloaded from http://www.science.oregonstate.edu/ocean.productivity/standard.product.php