Skip to content

Repository files navigation

BSAIcrabR: A simple R workflow for accessing and summarizing ADF&G BSAI crab observer and dockside sampling data

Installation

devtools::install_github("commfish/BSAIcrabR")

Data Access

Data access features under construction. Eventually, data access will be through the load_* series of functions. Use of these functions to download data will require connected to an ADF&G network and an OceanAK account (fish ticket data).

Example

Below is an example workflow for summarizing fishery data necessary for the BBRKC stock assessment:

# load

library(BSAIcrabR)

# data ----

## count pot data
pot_sum <- load_pot_dump("./bbrkc/data/RKC-1990-2023_potsum.csv", stock = "BBRKC", clean = T)

## measure pot data
obs_meas <- load_crab_dump("./bbrkc/data/RKC-1990-2023_crab_dump.csv", stock = "BBRKC", clean = T)

## dockside data
dock <- load_dockside("./bbrkc/data/RKC-1990-2023_retained_size_freq.csv", stock = "BBRKC", clean = T)

## timeseries of directed effort
dir_effort_prerat <- read_csv("./misc/data/fish_ticket_timeseries/directed_effort_timeseries_DP.csv") 

## fish ticket summary by stat area
readRDS("../adfg_crab_observer/misc/data/fish_ticket_timeseries/fish_ticket_stat_area_summary.RDS") %>%
  mutate(fishery = gsub("XR", "TR", fishery)) %>%
  filter(substring(fishery, 1, 2) == "TR") %>%
  mutate(fishery = substring(fishery, 1, 4)) %>%
  # add crab year
  add_crab_year(., date_correct = F) %>%
  # rename fields
  rename(live_n = live_number,
         deadloss_n = deadloss_number,
         live_lb = live_lbs,
         deadloss_lb = deadloss_lbs) -> ft_statarea

## incidental-directected fish ticket report
read_csv("../adfg_crab_observer/misc/data/fish_ticket_timeseries/Q_dir_inc_fish_ticket.csv", skip = 2) %>%
  janitor::clean_names() %>%
  filter(grepl("Total", seasons)) %>%
  filter(!grepl("Grand", seasons)) %>%
  mutate(year = substring(seasons, 3, 4)) %>%
  transmute(year, QT = wbt_directed_effort, QO = bss_directed_effort) %>%
  left_join(read_csv("../adfg_crab_observer/misc/data/fish_ticket_timeseries/T_dir_inc_fish_ticket.csv", skip = 2) %>%
              janitor::clean_names() %>%
              filter(grepl("Total", seasons)) %>% 
              filter(!grepl("Grand", seasons)) %>%
              mutate(year = substring(seasons, 3, 4)) %>%
              transmute(year, TT = ebt_directed_effort, TR = bbr_directed_effort) %>%
              full_join(readRDS("../adfg_crab_observer/misc/data/fish_ticket_timeseries/fish_ticket_stat_area_summary_2_21_25.RDS") %>%
                           filter(substring(fishery, 1, 2) == "XR") %>%
                           mutate(year = substring(fishery, 3, 4)) %>%
                           group_by(year) %>%
                           summarise(XR = sum(pots, na.rm = T))), by = "year") %>%
  pivot_longer(2:ncol(.), names_to = "fish", values_to = "effort") %>%
  mutate(fish = gsub("XR", "TR", fish)) %>%
  mutate(fishery = paste0(fish, year)) %>%
  group_by(fishery) %>%
  summarise(effort = sum(effort, na.rm = T)) %>%
  # join to prerationalized doug pengilly data
  bind_rows(dir_effort_prerat) %>%
  # add crab year
  add_crab_year(date_correct = F) %>%
  # other fisheries
  bind_rows(readRDS("../adfg_crab_observer/misc/data/fish_ticket_timeseries/fish_ticket_stat_area_summary_2_21_25.RDS") %>%
              filter(!(substring(fishery, 1, 2) %in% c("QO", "TT", "TR", "QT", "XR"))) %>%
              group_by(fishery, crab_year) %>%
              summarise(effort = sum(pots, na.rm = T)) %>% ungroup) %>%
  arrange(fishery) %>%
  # temporarily add CP98 (as QP)
  add_row(fishery = "QP98", effort = 89500, crab_year = 1998) %>%
  group_by(fishery, crab_year) %>%
  summarise(effort = sum(effort, na.rm = T)) %>%
  ungroup -> dir_effort


# retained catch ----

get_retained_catch(ft_data = ft_statarea) %>% 
  write_csv("./bbrkc/output/2025/retained_catch.csv")

# total catch ----

get_total_catch(pot_data = pot_sum, crab_data = obs_meas, ft_data = dir_effort, stock = "BBRKC") %>%
  write_csv("./bbrkc/output/2025/total_catch.csv")

# crab fishery discards ----

get_discards(retained_catch = get_retained_catch(ft_data = ft_statarea),
             total_catch = get_total_catch(pot_data = pot_sum, crab_data = obs_meas, ft_data = dir_effort, stock = "BBRKC"),
             stock = "BBRKC") %>%
  write_csv("./bbrkc/output/2025/discards.csv")

# retained size comp ----

get_dockside_comp(data = dock, by = NULL) %>% 
  write_csv("./bbrkc/output/2025/retained_catch_composition.csv")

# observer size comp ----

get_observer_comp(data = obs_meas, by = "sex") -> obs_comp

## directed fishery
obs_comp %>% filter(substring(fishery, 1, 2) == "TR") %>%
  write_csv("./bbrkc/output/2025/directed_total_composition.csv")

## e166 tanner crab
obs_comp %>% filter(substring(fishery, 1, 2) == "TT") %>%
  write_csv("./bbrkc/output/2025/tanner_bycatch_composition.csv")

About

R library for summary of BSAI crab fishery data from fish tickets and the shellfish observer program

Resources

Stars

0 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages