Assessing species potential

Author

Richard Cottrell

Published

4 August 2025

Set up

library(tidyverse)
library(here)
library(janitor)
library(countrycode)
library(rnaturalearth)

here("src") %>% list.files(pattern = "\\.R$", full.names = TRUE) %>% walk(source)

Pull in FAO data for aquaculture production.

aquaculture_raw <- read_csv(file.path(rdsi_dir, "raw_data/fao/FAO_fishstat_2020/global_aquaculture_production_1950_2020.csv"))


(aquaculture_prod <- 
  aquaculture_raw |> 
  clean_names() |> 
  select(c(1:7, starts_with("x"))) |> 
  pivot_longer(names_to = "year", values_to = "production", cols= -c(1:7)) |> 
  mutate(year = gsub(pattern="x", replacement = "", year)) |> 
  filter(year %in% c(2015:2020)) |> 
  group_by(asfis_species_name_2, asfis_species_name_3, environment_name, year) |> 
  summarise(production = sum(production)) |> 
    ungroup() |> 
     filter(environment_name=="Marine" & 
           !asfis_species_name_3 %in% c("Clams, cockles, arkshells", 
                                        "Abalones, winkles, conchs",
                                        "Mussels", 
                                        "Oysters",
                                        "Shrimps, prawns",
                                        "Crabs, sea-spiders",
                                         "Freshwater molluscs",
                                        "Squids, cuttlefishes, octopuses",
                                        "Pearls, mother-of-pearl, shells",
                                        "Miscellaneous aquatic plants",
                                        "Scallops, pectens"),
         !grepl("seaweeds" , asfis_species_name_3),
         !grepl("molluscs|cucumber|invertebrates", asfis_species_name_2)) |> 
    filter(!asfis_species_name_2 %in% c("Marine fishes nei")) |> 
     group_by(asfis_species_name_2) |> 
     summarise(production = mean(production)) |> 
  arrange(-production) |> 
    mutate(cum_prop = cumsum(production)/sum(production),
           prop = production/sum(production))
)


ggplot(aquaculture_prod |> slice(1:20))+
  aes(x = reorder(asfis_species_name_2, cum_prop), y = cum_prop)+
  geom_col(fill = "dodgerblue3")+
  theme_bw()+
  theme(text = element_text(size=8),
    axis.text.x = element_text(angle=45, hjust = 1))+
  labs(x = "", y = "Prop. global marine finfish aquaculture")


ggsave("explore/cottrell_explore/global_proportion_finfish.jpg", dpi = 600, width = 18, height = 12, units="cm")
  


#


(aquaculture_country_prod <- 
  aquaculture_raw |> 
  clean_names() |> 
  select(c(1:7, starts_with("x"))) |> 
  pivot_longer(names_to = "year", values_to = "production", cols= -c(1:7)) |> 
  mutate(year = gsub(pattern="x", replacement = "", year)) |> 
  filter(year %in% c(2015:2020)) |> 
  group_by(country_name, asfis_species_name_2, asfis_species_name_3, environment_name, year) |> 
  summarise(production = sum(production)) |> 
    ungroup() |> 
     filter(environment_name=="Marine" & 
           !asfis_species_name_3 %in% c("Clams, cockles, arkshells", 
                                        "Abalones, winkles, conchs",
                                        "Mussels", 
                                        "Oysters",
                                        "Shrimps, prawns",
                                        "Crabs, sea-spiders",
                                         "Freshwater molluscs",
                                        "Squids, cuttlefishes, octopuses",
                                        "Pearls, mother-of-pearl, shells",
                                        "Miscellaneous aquatic plants",
                                        "Scallops, pectens"),
         !grepl("seaweeds" , asfis_species_name_3),
         !grepl("molluscs|cucumber|invertebrates", asfis_species_name_2)) |> 
     group_by(country_name, asfis_species_name_2) |> 
     summarise(production = mean(production)) |> 
  arrange(-production) |> 
    filter(!asfis_species_name_2 %in% c("Marine fishes nei")) |> 
    ungroup() |> 
    mutate(prop = production/sum(production)) |> 
    group_by(country_name) |> 
    nest() |> 
    mutate(country_production =  map(data, ~(sum(.$production)))) |> 
    unnest(cols = c(data, country_production)) |> 
    ungroup() |> 
    arrange(-country_production)
)


top_20_countries <- unique(aquaculture_country_prod$country_name)[1:20]
top_20_spp <- aquaculture_prod |> 
                  slice(1:20) |> 
                  pull(asfis_species_name_2) |> 
                  unique()



ggplot(aquaculture_country_prod |> 
         filter(country_name %in% top_20_countries & 
                  asfis_species_name_2 %in% top_20_spp) |> 
         mutate(asfis_species_name_2 = factor(asfis_species_name_2, levels = top_20_spp)))+
  aes(x = reorder(asfis_species_name_2, -prop), y = production, fill = country_name)+
  geom_col()+
  theme_bw()+
  theme(text = element_text(size=8),
    axis.text.x = element_text(angle=45, hjust = 1),
    legend.key.size = unit(0.4, "cm"))+
  labs(x = "", y = "Prop. global marine finfish aquaculture", fill = "")

ggsave("explore/cottrell_explore/global_proportion_finfish_by_country.jpg", dpi = 600, width = 18, height = 12, units="cm")


aquaculture_prod |> filter(grepl("rouper", asfis_species_name_2))

Species decided on:

Common name Scientific name
Atlantic salmon Salmo salar
Other salmonids Generalised multi-species model - incl. Oncorhynchus mykiss and Oncorhynchus kisutch (Coho)
European seabass Dicentrarchus labrax
Gilthead seabream Sparus aurata
Large Yellow Croaker Larimichthys crocea
Japanese seabass Lateolabrax japonicus
Japanese amberjack Seriola quinqueradiata
Groupers Generalised mutli-species model
Pompano Trachinotus blochii
Milkfish Chanos chanos