ohi logo
OHI Science | Citation policy

Summary

The commercial fishing pressure layers are created from catch data provided by the Sea Around Us Project and net primary production data from the Vertically Generalized Production Model (VGPM) as described in Behrenfeld and Falkowski (1997)

Two layers are created in this analysis, commercial fishing pressure from high bycatch gear and low bycatch gear. Quantifying the amount of catch caught by these different categories of fishing gear is done by combining two different pieces of information.

  1. The amount of fish catch caught per gear type was calculated for the first global Cumulative Human Impact analysis (Halpern 2008).

  2. Total fish catch (tons) per half degree cell globally

The amount of catch caught per gear type has not been recalculated since 2008. The total proportion of catch caught per gear type is calculated from this original data, and then applied to the more recent catch data to get an updated estimate of catch per gear type. This assumes that the proportion of total catch caught by high and low bycatch has remained consistent since 2008.

Updates from previous assessment

The fisheries catch data has been updated by the Sea Around Us Project and is provided at a spatial resolution of 0.5 degree. Previously, only aggregate catch at the country level was used.


Data Source

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


Methods

Setup

Load all relevant libraries including parallel processing packages.

#set options for all chunks in code
knitr::opts_chunk$set(warning=FALSE, message=FALSE,fig.width = 6, fig.height = 4, fig.path = 'figs/')

library(parallel)
library(foreach)
library(doParallel)
library(raster)
library(rasterVis)
library(RColorBrewer)

options(scipen=999)

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_git <- file.path(dir_M,'git-annex/globalprep/prs_fish/v2016')

Catch by gear type

These two rasters are at a resolution of 1km2 and were created in this dataprep.R script

gear_hb = raster(file.path(dir_M,'git-annex/globalprep/prs_fish/v2015/gear_prop_hb_gcs.tif'))
gear_lb = raster(file.path(dir_M,'git-annex/globalprep/prs_fish/v2015/gear_prop_lb_gcs.tif'))

stack(gear_hb,gear_lb)%>%
  `names<-`(c("High Bycatch Gear","Low Bycatch Gear"))%>%
  levelplot(par.settings = mytheme, main = "Proportion of total catch caught by gear type")

Net Primary Production (NPP)

The Net Primary Production data was prepared in npp.Rmd.

npp <- list.files(file.path(dir_M,'git-annex/globalprep/prs_fish/v2016/VGPM_primary_productivity/int/annual_npp'),pattern = 'npp_2',full.names=T)

plot(raster(npp[13]),col=cols,axes=F,main = 'Net Primary Production (mg C/m2/day) \n 2015')

Annual catch

We only use catch data from 2003 - 2010 to calculate these layers since those are the time periods where we also have primary productivity data. And we don’t need to go further back than 2003 since all OHI assessments will use this time period.

catch_files <- list.files('int/annual_industrial_rasters',full.names = T)[54:61]

plot(raster(catch_files[8]),col=cols,axes=F,box=F,main = "Catch (tons) in 2010")

Catch by gear

fish_fun is a function that takes each annual catch raster and splits it into two rasters according to the proportion of catch in each cell caught by high and low bycatch gear.

# function that takes each annual catch raster, reprojects and resamples, splits it according to high and low bycatch and then standardizes by npp for that year.

fish_fun <- function(file){
  
  yr <- substr(file,31,34)
  
  r  <- raster(file)
  
  hb <- overlay(r,gear_hb,fun=function(x,y){x*y},filename = paste0(file.path(dir_git,'int/annual_hb_catch/annual_hb_catch_'),yr,'.tif',sep=''),overwrite=T)
      
  lb <- overlay(r,gear_lb,fun=function(x,y){x*y},filename = paste0(file.path(dir_git,'int/annual_lb_catch/annual_lb_catch_'),yr,'.tif',sep=''),overwrite=T)
  
}

mclapply(catch_files,fish_fun, mc.cores = 6)

Standardize by NPP

Total catch per cell is standardized by the NPP values. This is done because the same fishing pressure can have different impacts depending on the productivity in the region.

Before standardizing, the NPP data is aggregated to the same spatial resolution as the catch data, 0.5 degree cells, to accurately calculate catch in tons/km2 standardized by mg C/m2/day.

hb_files <- list.files(file.path(dir_git,'int/annual_hb_catch'),full.names=T)
lb_files <- list.files(file.path(dir_git,'int/annual_lb_catch'),full.names=T)

registerDoParallel(4)

foreach (yr = c(2003:2010)) %dopar%{
  
  #1. get net primary production for that year
  n <- npp[substr(npp,111,114)==yr]%>%
          raster()%>%
          projectRaster(gear_hb)%>%
          resample(.,gear_hb)

  #2. Get bycatch rasters for the yr
  cat_hb <- hb_files[substr(hb_files,90,93) == yr]%>% 
              raster()                 
  
  cat_lb <- lb_files[substr(lb_files,90,93) == yr]%>%
              raster()
 
  #3. Divide catch by npp and save to git-annex
  overlay(cat_hb,n,fun=function(x,y){x/y},filename = paste0(dir_git,'/int/annual_catch_npp/hb_catch_npp_',yr,'.tif'), overwrite=T) 
  overlay(cat_lb,n,fun=function(x,y){x/y},filename = paste0(dir_git,'/int/annual_catch_npp/lb_catch_npp_',yr,'.tif'), overwrite=T) 
  
}

Five year means

Mean catch per cell is calculated over a rolling window of 5 years to account for interannual variability. The data is then log transformed.

lb_npp <- list.files(file.path(dir_git,'/int/annual_catch_npp'),full.names=T, pattern = 'lb')
hb_npp <- list.files(file.path(dir_git,'/int/annual_catch_npp'),full.names=T, pattern = 'hb')

registerDoParallel(4)

foreach (i = 2003:2006) %dopar%{
  
  yrs <- c(i:(i+4))
  
  out_lb <- lb_npp[which(substr(lb_npp,89,92) %in% yrs)]%>%
            stack()%>%
            calc(fun=function(x){mean(x,na.rm=T)}, filename = paste0(dir_git,'/int/mean_catch_5yr/mean_lb_catch_',yrs[1],'_',yrs[5],'.tif'),overwrite=T)%>%
            calc(fun=function(x){log(x+1)})
  
  writeRaster(out_lb,filename = paste0(dir_git,'/int/mean_catch_5yr/mean_lb_catch_log',yrs[1],'_',yrs[5],'.tif'),overwrite=T)
  
    out_hb <- hb_npp[which(substr(hb_npp,89,92) %in% yrs)]%>%
            stack()%>%
            calc(fun=function(x){mean(x,na.rm=T)}, filename = paste0(dir_git,'/int/mean_catch_5yr/mean_hb_catch_',yrs[1],'_',yrs[5],'.tif'),overwrite=T)%>%
            calc(fun=function(x){log(x+1)})
  
  writeRaster(out_hb,filename = paste0(dir_git,'/int/mean_catch_5yr/mean_hb_catch_log',yrs[1],'_',yrs[5],'.tif'),overwrite=T)
  
}

Reference Point

Look at all catch data standardized by NPP from 2003 - 2010 and use the 99.99th quantile as the reference point.

lb_npp <- list.files(file.path(dir_git,'/int/annual_catch_npp'),full.names=T, pattern = 'lb')
hb_npp <- list.files(file.path(dir_git,'/int/annual_catch_npp'),full.names=T, pattern = 'hb')

# HIGH BYCATCH

#get data across all years
vals <- c()

for(i in 2003:2010){
#print(i)
  m <- hb_npp[which(substr(hb_npp,89,92) == i)]%>%
    raster()%>%
    getValues()
  
 n <- m[!is.na(m)]

  vals <- c(vals,n)

}

min_v_hb <- min(vals,na.rm=T) # 0
max_v_hb <- max(vals,na.rm=T) # 11.28059

ref_hb <- log(quantile(vals,prob = 0.9999,na.rm=T)+1) #10.29217


#LOW BYCATCH

#get data across all years
lb_vals <- c()

for(i in 2003:2010){

  m <- lb_npp[which(substr(lb_npp,89,92) == i)]%>%
    raster()%>%
    getValues()

  n <- m[!is.na(m)]
  
  lb_vals <- c(lb_vals,n)

}
min_v_lb <- min(lb_vals,na.rm=T) # 0
max_v_lb <- max(lb_vals,na.rm=T) # 12.25


ref_lb <- log(quantile(lb_vals,prob = 0.9999,na.rm=T)+1) #11.13

The reference point is 10.2921663 (0 - 79266.8067432) for high bycatch and 11.1288256 (0 - 208704.3484551) for low bycatch.

Rescale, Resample and Reproject

mean_hb <- list.files(file.path(dir_git,'int/mean_catch_5yr'),full.names=T, pattern = 'hb_catch_log')
mean_lb <- list.files(file.path(dir_git,'int/mean_catch_5yr'),full.names=T, pattern = 'lb_catch_log')

registerDoParallel(4)

foreach (i = 2003:2006) %dopar%{
  
  yrs <- c(i:(i+4))
  
  out_hb <- mean_hb[which(substr(mean_hb,90,93) == i)]%>%
            raster()%>%
            calc(fun=function(x){ifelse(x>ref_hb,1,x/ref_hb)})%>%
            projectRaster(crs = mollCRS,over=T)%>%
            resample(ocean,method = 'ngb',filename = paste0(file.path(dir_git),'/out/high_bycatch/hb_fish_pressure_',yrs[1],'-',yrs[5],'.tif'),overwrite=T)
  
  out_lb <- mean_lb[which(substr(mean_lb,90,93) == i)]%>%
            raster()%>%
            calc(fun=function(x){ifelse(x>ref_lb,1,x/ref_lb)})%>%
            projectRaster(crs = mollCRS, over=T)%>%
            resample(ocean,method = 'ngb',filename = paste0(file.path(dir_git),'/out/low_bycatch/lb_fish_pressure_',yrs[1],'-',yrs[5],'.tif'),overwrite=T)
  
}

Results

hb <- raster(file.path(dir_git,'out/high_bycatch/hb_fish_pressure_2006-2010.tif'))
lb <- raster(file.path(dir_git,'out/low_bycatch/lb_fish_pressure_2006-2010.tif'))

plot(hb,col=cols,main = 'High Bycatch Fishing Pressure Layer \n OHI 2016', axes = F)

plot(lb, col=cols, main = 'Low Bycatch Fishing Pressure Layer \n OHI 2016', axes = F)


Extract the data by OHI region

setwd('globalprep/prs_fish/v2016')

source("~/github/ohiprep//src/R/common.R")

#paths
 dir_git <- file.path(dir_M,'git-annex/globalprep/prs_fish/v2016')


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(file.path(dir_M,'git-annex/globalprep/prs_fish/v2016/out/low_bycatch'))

pressure_stack <- stack()
for(raster in rasts){ # raster = "lb_fish_pressure_2003-2007.tif"
  tmp <- raster(file.path(dir_M,'git-annex/globalprep/prs_fish/v2016/out/low_bycatch', 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("lb")) 

lb_data <- data %>%
  mutate(year = substring(year, 23, 26)) %>%
  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.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/comm_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='lb.html')
 
### Get the high bycatch data 

rasts <- list.files(file.path(dir_M,'git-annex/globalprep/prs_fish/v2016/out/high_bycatch'))

pressure_stack <- stack()
for(raster in rasts){ # raster = "lb_fish_pressure_rescaled_2003-2007.tif"
  tmp <- raster(file.path(dir_M,'git-annex/globalprep/prs_fish/v2016/out/high_bycatch', 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("hb")) 

hb_data <- data %>%
  mutate(year = substring(year, 23, 26)) %>%
  mutate(year = as.numeric(year)) %>%
  mutate(year = year + 6) %>%
  filter(ant_typ == "eez") %>%
  dplyr::select(rgn_id, rgn_nam, year, pressure_score)

write.csv(hb_data, "int/hb.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/comm_fish_hb_%s.csv', newYear), row.names=FALSE)
}


### extract data 
for(newYear in (max(hb_data$year) - 3):(max(hb_data$year))){
  saveData(newYear)
}


### try visualizing the data using googleVis plot
library(googleVis)
plotData <- hb_data %>%
  dplyr::select(rgn_nam, year, pressure_score)

Motion=gvisMotionChart(plotData, 
                       idvar="rgn_nam", 
                       timevar="year")
plot(Motion)

print(Motion, file='hb.html')

Citation information

Pauly D. and Zeller D. (Editors), 2015. Sea Around Us Concepts, Design and Data (seaaroundus.org)