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:
Base R, where
merge
returns adata.frame
.The
dplyr
package, whereinner_join
returns atibble
.The
data.table
package, wheremerge
returns adata.table
.
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",])