Making Hidden Costs Visible
Narrative data visualisation of the global seafood system, from ocean to plate.
This was my individual coursework for the Telling Stories with Data module at King's College London (MSc Data Science, 2025/26). The question I set out to answer: what does the global seafood industry actually cost, beyond what shows up on a price tag?
I pulled together 13 datasets from the FAO, Our World in Data, the Global Slavery Index, and the US Department of Labor and built a six figure visual narrative that traces the full chain. It starts with global fish consumption and aquaculture growth, moves through bycatch and gear selectivity, overfishing and ocean plastic pollution, and ends with forced labour in seafood supply chains and the environmental footprint of different protein sources.
The design follows Segel and Heer's martini glass model (author driven opening, reader driven exploration) and Munzner's Why/What/How framework. I paid particular attention to colour blind accessibility, honest representation of data gaps, and avoiding misleading visual encodings.
There is also an interactive Tableau dashboard (G20.twb) that lets you explore fish import volumes and labour intensity across G20 nations.
The visualisations/Visulisations.ipynb notebook is the main file. It reads from the CSV datasets and produces all six static figures using matplotlib. Each figure is designed as a standalone panel that also works as part of the larger narrative sequence.
datasets/Creating_g20.ipynb handles the data wrangling for the G20 forced labour analysis, merging fish import data with labour intensity scores and slavery index rankings.
The Tableau workbook (G20.twb) provides the interactive layer on top of the same data.
Figures produced:
- Global fish consumption trends (capture vs aquaculture)
- Bycatch rates by fishing gear type
- Overfishing stock levels and Great Pacific Garbage Patch plastic composition
- Employment in fisheries and labour intensity across nations
- Environmental impact comparison (GHG and nitrogen emissions by seafood type)
- Protein sourcing: how much comes from fish globally
Python · pandas · NumPy · matplotlib · Tableau
# Clone the repo
git clone https://github.com/kautum/telling-stories-with-data.git
cd telling-stories-with-data
# Install dependencies
pip install pandas numpy matplotlib openpyxl
# Open the main notebook
jupyter notebook visualisations/Visulisations.ipynbThe Tableau file (visualisations/G20.twb) opens directly in Tableau Desktop or Tableau Public.