Version: 2025.1.0.1
Date: 2025-06-17
Title: Global Fishery and Aquaculture Statistics
Depends: R (≥ 3.5.0)
Suggests: areaplot
LazyData: yes
Description: The Food and Agriculture Organization of the United Nations (FAO) FishStat database is the leading source of global fishery and aquaculture statistics and provides unique information for sector analysis and monitoring. This package provides the global production data from all fisheries and aquaculture in R format, ready for analysis.
License: CC BY-NC-SA 4.0
URL: https://www.fao.org/fishery/en/fishstat, https://github.com/sofia-taf/fishstat
Encoding: UTF-8
RoxygenNote: 7.3.2
NeedsCompilation: no
Packaged: 2025-06-17 00:45:18 UTC; arnim
Author: Arni Magnusson [aut, cre], Rishi Sharma [aut], FAO [cph]
Maintainer: Arni Magnusson <thisisarni@gmail.com>
Repository: CRAN
Date/Publication: 2025-06-17 04:20:02 UTC

Global Fishery and Aquaculture Statistics

Description

The Food and Agriculture Organization of the United Nations (FAO) FishStat database is the leading source of global fishery and aquaculture statistics and provides unique information for sector analysis and monitoring.

This package provides the global production data from all fisheries and aquaculture in R format, ready for analysis.

Details

Production tables:

aquaculture aquaculture production
capture capture production
production aquaculture and capture production

Lookup tables:

area fishing areas
country countries and territories
environment aquaculture environments
measure units of measurement
source sources of production
species taxonomic groups
status status of data entries

Joining Tables

Production tables can be joined with lookup tables using the merge function, as demonstrated in the help page examples for aquaculture and capture production. The column names in this package have been designed to allow automatic inference of which columns to join, and the resulting table will have unique column names.

The merge function is generally useful for joining tables, but other join methods are available in R that can be faster but require either additional packages or more coding. The production example uses square brackets and the match function to add one lookup column at a time to the production table. Compared to the slower merge function, this saves time, both for users and CRAN servers running maintenance tests.

Rather than optimizing speed or memory footprint, one can optimize convenience by constructing a full table with all data records and all columns:

prod.all <- merge(merge(merge(merge(merge(merge(production,
                  area), country), measure), source), species), status)
cap.all <- merge(merge(merge(merge(merge(capture,
                 area), country), measure), species), status)
aqua.all <- merge(merge(merge(merge(merge(merge(aquaculture,
                  area), country), environment), measure), species), status)

Popular paradigms for joining tables include:

Note

The data in the package were downloaded from the FAO data server and imported into R. The R package version indicates the version of FishStat data it includes. Column names have been simplified to facilitate quick exploration and plotting in R.

An effort has been made to describe each table in the corresponding R help page. However, the official and authoritative documentation of the FishStat database is found on the FAO FishStat website.

The example below demonstrates how the FishStat data can be used to produce an overview of global fisheries and aquaculture. The combination of FishStat and the R environment can also be very efficient for analyses that focus on selected areas, countries, species, and/or taxonomic groups.

Author(s)

Arni Magnusson and Rishi Sharma created this R package.

All credit for the FishStat database goes to the Statistics Team of the FAO Fisheries and Aquaculture Division, as well as national data submitters. The database terms of use are based on the CC BY-NC-SA 3.0 IGO license. The R package is released under a similar CC BY-NC-SA 4.0 license.

To cite the use of FishStat data:

FAO. [Year]. FishStat data. Fisheries and Aquaculture Division. Rome. https://www.fao.org/fishery/en/fishstat.

To cite the use of this R package to access the data, cite FishStat (above) as well as:

Magnusson, A. and R. Sharma. [Year]. fishstat: Global Fishery and Aquaculture Statistics. R package version [Version]. https://cran.r-project.org/package=fishstat.

See Also

The package on CRAN provides the latest FishStat data, within a few weeks after the official FAO data release. For research and reference purposes, packages containing older data releases are available on GitHub with descriptive names such as fishstat21 and fishstat22, containing the FAO FishStat data releases from 2021 and 2022:

install_github("https://github.com/sofia-taf/fishstat21")
install_github("https://github.com/sofia-taf/fishstat22")

Examples

head(production)

# Analyze production measured in tonnes
prod <- production[production$measure == "Q_tlw" & production$value > 0,]

# Fast merge yearbook and inlandmarine columns
prod$yearbook <- species$yearbook[match(prod$species, species$species)]
prod$inlandmarine <- area$inlandmarine[match(prod$area, area$area)]

# Select SOFIA species, excluding mammals, reptiles, and plants
prod <- prod[grep("Fish, crustaceans and molluscs", prod$yearbook, fixed=TRUE),]

# Determine origin
prod$origin <- ifelse(prod$source == "CAPTURE", "Capture", "Aquaculture")
prod$w <- ifelse(prod$inlandmarine == "Marine areas", "marine", "inland")
prod$origin <- paste0(prod$origin, " (", prod$w, ")")
cbind(sort(unique(prod$origin)))

# World capture fisheries and aquaculture production
x <- xtabs(value~year+origin, aggregate(value~year+origin, prod, sum))
x <- x[,c(2,1,4,3)] / 1e6
library(areaplot)
areaplot(x, legend=TRUE, args.legend=list(x="topleft"), ylab="million tonnes")

Global Aquaculture Production

Description

Aquaculture production quantity by species, area, country, and aquatic environment for the years 1950-2023, compiled and published by FAO (2025).

Usage

aquaculture

Format

Data frame containing eight columns:

species species code
year year
area area code
country country code
value quantity in tonnes
measure measure code
status status code
environment environment code

Details

This data frame contains the full set of 104,598 data records from the FishStat Aquaculture Quantity data table. Column names have been simplified to facilitate quick exploration and plotting in R.

Source

FAO (2025). Global Aquaculture Production. Fisheries and Aquaculture Division. Rome.

https://www.fao.org/fishery/en/collection/aquaculture

See Also

aquaculture and capture data are also available in a combined production format.

area, country, environment, measure, source, species, and status are lookup tables.

fishstat-package gives an overview of the package.

Examples

head(aquaculture)

# Add species columns
aqua <- merge(aquaculture, species)

# Top 10 aquaculture species in 2023, production in tonnes
x <- aggregate(value~species_name, aqua, sum, subset=year==2023)
x$value <- round(x$value)
head(x[order(-x$value),], 10)

# Total aquaculture production by major taxa since 1950, in million tonnes
aggregate(value~tolower(major), aqua, function(x) round(sum(x/1e6)))

# Annual aquaculture production of all animals
x <- aggregate(value~year, aqua, sum, subset=major!="PLANTAE AQUATICAE")
plot(value/1e6~year, x, ylab="million tonnes", type="l")
title(main="Aquaculture production: All animals")

Areas

Description

Major inland and marine fishing areas, defined by FAO (2025).

Usage

area

Format

Data frame containing five columns:

area area code
area_name area name
inlandmarine inland or marine
faregion northern, central, or southern (marine fishing areas)
ocean Atlantic, Indian, Pacific, or Southern Ocean (marine fishing areas)

Details

This data frame contains the full set of 29 data records from the FishStat Water Area Groups data table. Column names have been simplified to facilitate quick exploration and plotting in R.

Source

FAO (2025). Global Production. Fisheries and Aquaculture Division. Rome.

https://www.fao.org/fishery/en/collection/global_production

See Also

aquaculture and capture data are also available in a combined production format.

area, country, environment, measure, source, species, and status are lookup tables.

fishstat-package gives an overview of the package.

Examples

head(area)

# Inland waters and marine areas
area[area$inlandmarine == "Inland waters", c("area", "area_name")]
area[area$inlandmarine == "Marine areas", c("area", "area_name")]

# Check if any area has zero production
nonzero <- unique(production$area[production$value > 0])
print(area[!(area$area %in% nonzero),], row.names=FALSE)

# Check which species groups are recorded in areas 98 and 99
species_98_99 <- unique(production$species[production$area %in% 98:99])
cbind(unique(species$isscaap[species$species %in% species_98_99]))

# Marine fishing areas in northern, central, and southern regions
area$area[area$faregion == "Northern regions"]
area$area[area$faregion == "Central regions"]
area$area[area$faregion == "Southern regions"]

# Examine one area
print.simple.list(area[area$area == 71,])

Global Capture Production

Description

Capture production quantity by species, area, and country for the years 1950-2023, compiled and published by FAO (2025).

Usage

capture

Format

Data frame containing seven columns:

species species code
year year
area area code
country country code
value quantity in tonnes or number of individuals
measure measure code
status status code

Details

This data frame contains the full set of 1,055,015 data records from the FishStat Capture Quantity data table. Column names have been simplified to facilitate quick exploration and plotting in R.

Source

FAO (2025). Global Capture Production. Fisheries and Aquaculture Division. Rome.

https://www.fao.org/fishery/en/collection/capture

See Also

aquaculture and capture data are also available in a combined production format.

area, country, environment, measure, source, species, and status are lookup tables.

fishstat-package gives an overview of the package.

Examples

head(capture)

# Analyze catches measured in tonnes
cap <- aggregate(value~species+year, capture, sum, subset=measure=="Q_tlw")
cap <- merge(cap, species[c("species", "species_name", "major")])

# Top 10 capture species in 2023
x <- aggregate(value~species_name, cap, sum, subset=year==2023)
x$value <- round(x$value)
head(x[order(-x$value),], 10)

# Total capture production by major taxa since 1950, in million tonnes
x <- aggregate(value~tolower(major), cap, function(x) round(sum(x/1e6)))
x[x$value > 0,]

# Annual capture production of all animals
x <- aggregate(value~year, cap, sum, subset=major!="PLANTAE AQUATICAE")
plot(value/1e6~year, x, ylim=c(0,105), ylab="million tonnes", type="l")
title(main="Capture production: All animals")

Countries

Description

Countries and various territories, defined by FAO (2025).

Usage

country

Format

Data frame containing eight columns:

country country code
country_name country name
iso2 ISO 2-alpha code
iso3 ISO 3-alpha code
continent continent
georegion geographic region
ecoclass economic class
official official country name

Details

This data frame contains the full set of 275 data records from the FishStat Country Groups data table. Column names have been simplified to facilitate quick exploration and plotting in R.

Source

FAO (2025). Global Production. Fisheries and Aquaculture Division. Rome.

https://www.fao.org/fishery/en/collection/global_production

See Also

aquaculture and capture data are also available in a combined production format.

area, country, environment, measure, source, species, and status are lookup tables.

fishstat-package gives an overview of the package.

Examples

head(country)

# Regions within continents
table(country$georegion, country$continent)

# Select country entries that have non-zero production
nonzero <- unique(production$country[production$value > 0])
country.nz <- country[country$country %in% nonzero,]
length(country.nz$country)

# Only country and country_name are always defined
cbind(sapply(country, function(x) all(x != "")))

# Columns defined for non-zero production
cbind(sapply(country.nz, function(x) all(x != "")))

# Economic class levels
sort(unique(country$ecoclass))

# Examine individual countries
print.simple.list(country[country$iso2 == "IS",])
print.simple.list(country[country$country_name == "Samoa",])

Environments

Description

Aquatic environments for aquaculture, defined by FAO (2025).

Usage

environment

Format

Data frame containing two columns:

environment environment code
environment_name environment name

Details

This data frame contains the full set of 4 data records from the FishStat Production Environment data table. Column names have been simplified to facilitate quick exploration and plotting in R.

Source

FAO (2025). Aquaculture Production. Fisheries and Aquaculture Division. Rome.

https://www.fao.org/fishery/en/collection/aquaculture

See Also

aquaculture and capture data are also available in a combined production format.

area, country, environment, measure, source, species, and status are lookup tables.

fishstat-package gives an overview of the package.

Examples

environment

# Aquaculture production by environment in 2023, in million tonnes
x <- merge(aquaculture, environment)
x <- aggregate(value~environment_name, x, sum, subset=year==2023)
transform(x, value=round(value/1e6))

Measures

Description

Units of measurement, defined by FAO (2025).

Usage

measure

Format

Data frame containing seven columns:

measure measure code
measure_name measure name
short short name
multiplier unit multiplier
unit unit symbol
measure_description measure description
sws SWS code

Details

This data frame contains the full set of 11 data records from the FishStat Units data table. Column names have been simplified to facilitate quick exploration and plotting in R.

Source

FAO (2025). Global Production. Fisheries and Aquaculture Division. Rome.

https://www.fao.org/fishery/en/collection/global_production

See Also

aquaculture and capture data are also available in a combined production format.

area, country, environment, measure, source, species, and status are lookup tables.

fishstat-package gives an overview of the package.

Examples

head(measure, 3)

# Aquaculture production is measured in tonnes live weight
table(aquaculture$measure)

# Capture production is measured in tonnes or number of individuals
table(capture$measure)

# When number of individuals is used, it is for mammals and reptiles
x <- merge(capture[capture$measure=="Q_no_1",], species)
aggregate(value~isscaap, x, sum)
aggregate(value~isscaap, x, sum, subset=year==2023)

# Examine one measure
print.simple.list(measure[measure$measure=="Q_tlw",])

Global Aquaculture and Capture Production

Description

Aquaculture and capture production quantity by species, area, and country for the years 1950-2023, compiled and published by FAO (2025).

Usage

production

Format

Data frame containing eight columns:

species species code
year year
area area code
country country code
value quantity in tonnes or number of individuals
measure measure code
status status code
source source code

Details

This data frame contains the full set of 1,159,613 data records from the FishStat Production Quantity data table. Column names have been simplified to facilitate quick exploration and plotting in R.

Source

FAO (2025). Global Production. Fisheries and Aquaculture Division. Rome.

https://www.fao.org/fishery/en/collection/global_production

See Also

aquaculture and capture data are also available in a combined production format.

area, country, environment, measure, source, species, and status are lookup tables.

fishstat-package gives an overview of the package.

Examples

head(production)

# Analyze production measured in tonnes
prod <- production[production$measure == "Q_tlw" & production$value > 0,]

# Fast merge yearbook and inlandmarine columns
prod$yearbook <- species$yearbook[match(prod$species, species$species)]
prod$inlandmarine <- area$inlandmarine[match(prod$area, area$area)]

# Select SOFIA species, excluding mammals, reptiles, and plants
prod <- prod[grep("Fish, crustaceans and molluscs", prod$yearbook, fixed=TRUE),]

# Determine origin
prod$origin <- ifelse(prod$source == "CAPTURE", "Capture", "Aquaculture")
prod$w <- ifelse(prod$inlandmarine == "Marine areas", "marine", "inland")
prod$origin <- paste0(prod$origin, " (", prod$w, ")")
cbind(sort(unique(prod$origin)))

# World capture fisheries and aquaculture production
x <- xtabs(value~year+origin, aggregate(value~year+origin, prod, sum))
x <- x[,c(2,1,4,3)] / 1e6
library(areaplot)
areaplot(x, legend=TRUE, args.legend=list(x="topleft"), ylab="million tonnes")

Sources

Description

Sources of aquaculture and capture production, defined by FAO (2025).

Usage

source

Format

Data frame containing two columns:

source source code
source_name source name

Details

This data frame contains the full set of 4 data records from the FishStat Production Source data table. Column names have been simplified to facilitate quick exploration and plotting in R.

Source

FAO (2025). Global Production. Fisheries and Aquaculture Division. Rome.

https://www.fao.org/fishery/en/collection/global_production

See Also

aquaculture and capture data are also available in a combined production format.

area, country, environment, measure, source, species, and status are lookup tables.

fishstat-package gives an overview of the package.

Examples

source

# Analyze production measured in tonnes
prod <- production[production$measure == "Q_tlw" & production$value > 0,]
prod <- merge(prod, source)

# Production by source in 2023, in million tonnes
x <- aggregate(value~source_name, prod, sum, subset=year==2023)
transform(x, value=round(value/1e6))

Species

Description

Aquatic species and taxonomic groups, defined by FAO (2025).

Usage

species

Format

Data frame containing ten columns:

species species code
species_name species name
scientific scientific name
isscaap ISSCAAP group
major major taxa
cpc_class CPC class
cpc_group CPC group
yearbook yearbook category
author author of scientific name
taxonomic taxonomic code

Details

This data frame contains the full set of 13,596 data records from the FishStat Species Groups data table. Column names have been simplified to facilitate quick exploration and plotting in R.

Source

FAO (2025). Global Production. Fisheries and Aquaculture Division. Rome.

https://www.fao.org/fishery/en/collection/global_production

See Also

aquaculture and capture data are also available in a combined production format.

area, country, environment, measure, source, species, and status are lookup tables.

fishstat-package gives an overview of the package.

Examples

head(species, 3)

# Select species entries that have non-zero production
nonzero <- unique(production$species[production$value > 0])
species.nz <- species[species$species %in% nonzero,]
length(species.nz$species)

# Only species, scientific, major, and taxonomic are always defined
cbind(sapply(species, function(x) all(x != "")))

# Plus isscaap and yearbook for non-zero production
cbind(sapply(species.nz, function(x) all(x != "")))

# A variety of species are missing species_name, cpc_class, cpc_group
cbind(table(species.nz$major[species.nz$species_name == ""]))
cbind(table(species.nz$major[species.nz$cpc_class == ""]))
cbind(table(species.nz$major[species.nz$cpc_group == ""]))

# Number of species entries that have non-zero production by major taxa
cbind(table(species.nz$major))

# By yearbook categories and major taxa
table(species.nz$major, species.nz$yearbook)

# Number of unique yearbook categories, major taxa, isscaap groups, etc.
cbind(sapply(species.nz, function(x) length(unique(x))))

# The scientific and species_name entries are not unique
table(species.nz$scientific)[table(species.nz$scientific) > 1]
table(species.nz$species_name)[table(species.nz$species_name) > 1]

# Examine one species
print.simple.list(species[species$species_name == "Atlantic cod",])
print.simple.list(species[species$species == "YFT",])

# English name when available, otherwise scientific name (FishStatJ style)
species$species_alt <- ifelse(species$species_name != "",
                              species$species_name,
                              paste0("[", species$scientific, "]"))
species[grep("Hoplias", species$scientific),
        c("species_name", "scientific", "species_alt")]

Status

Description

Status of data entries, defined by FAO (2025).

Usage

status

Format

Data frame containing four columns:

status status code
status_name status name
status_description short name
alternate unit multiplier

Details

This data frame contains the full set of 16 data records from the FishStat Symbols data table. Column names have been simplified to facilitate quick exploration and plotting in R.

Source

FAO (2025). Global Production. Fisheries and Aquaculture Division. Rome.

https://www.fao.org/fishery/en/collection/global_production

See Also

aquaculture and capture data are also available in a combined production format.

area, country, environment, measure, source, species, and status are lookup tables.

fishstat-package gives an overview of the package.

Examples

head(status, 3)

# Aquaculture data entries
# Percentage that have official status, estimated, and negligible
100 * proportions(table(aquaculture$status))

# Capture data entries
# Percentage that have official status, estimated, and negligible
100 * proportions(table(capture$status))

# Examine one status definition
print.simple.list(status[status$status=="N",])