Dhanush Kattaiyan (s4135587)
2025-10-30
Hey everyone,
This presentation is all about how people around the world are eating
more today than ever before but not everyone eats the same.
Some countries have plenty of food, while others still struggle to meet
basic needs.
I wanted to explore how daily calorie supply per person has changed
from 1961 to 2021
The goal is to clearly show which countries improved, which fell behind,
and what that says about global food inequality.
This is not about blame it’s about understanding the story behind the data.
” Data Description”
The data comes from Our World in Data, which uses official numbers
from the Food and Agriculture Organization (FAO).
It shows the average number of calories available per person per day for
over 150 countries between 1961 and 2021.
Unit: kcal per person per day
It measures food availability, not exact intake.
I cleaned the data, removed regional totals, and added each country’s
continent for comparison.
This dataset is open, reliable, and updated regularly, which makes it perfect for studying long-term nutrition trends.
knitr::opts_chunk$set(
echo = TRUE, message = FALSE, warning = FALSE,
fig.width = 10, fig.height = 6, fig.align = "center"
)
# Install and load required packages
libs <- c("tidyverse","readr","janitor","countrycode","scales","forcats","RColorBrewer")
new <- setdiff(libs, rownames(installed.packages()))
if (length(new)) install.packages(new, dependencies = TRUE)
invisible(lapply(libs, library, character.only = TRUE))# Read dataset
cal_raw <- read_csv("daily-per-capita-caloric-supply.csv", show_col_types = FALSE)
# Clean and prepare
cal <- cal_raw %>%
janitor::clean_names() %>%
rename(
country = entity,
iso3 = code,
year = year,
kcal_per_person = daily_calorie_supply_per_person
) %>%
filter(!is.na(iso3)) %>% # remove regional aggregates
mutate(continent = countrycode(country, "country.name", "continent", warn = FALSE))
# Save latest year for later
latest_year <- max(cal$year, na.rm = TRUE)global_trend <- cal %>%
group_by(year) %>%
summarise(global_avg = mean(kcal_per_person, na.rm = TRUE), .groups = "drop")
ggplot(global_trend, aes(year, global_avg)) +
geom_line(linewidth = 1, colour = "#2C7FB8") +
geom_smooth(method = "loess", se = FALSE, linetype = "dashed", colour = "#253494") +
scale_y_continuous(labels = scales::comma) +
labs(title = "Global average daily calorie supply (1961–2021)",
subtitle = "Mean across countries, kcal/person/day",
x = NULL, y = "kcal/person/day")
# Key Insights
Global calorie availability has grown steadily over the past 60
years.
The gap between countries has narrowed slightly but still remains
wide.
Africa and South Asia lag behind other regions.
China has made big improvements since the 1990s.
Some countries like the U.S. and Australia already had high supply and
stayed there.
It’s clear the world eats more now but not equally.
band <- cal %>%
group_by(year) %>%
summarise(
p10 = quantile(kcal_per_person, 0.10, na.rm = TRUE),
p90 = quantile(kcal_per_person, 0.90, na.rm = TRUE),
.groups = "drop"
)
ggplot(band, aes(year)) +
geom_ribbon(aes(ymin = p10, ymax = p90), alpha = 0.25, fill = "#9ECAE1") +
geom_line(aes(y = p10), colour = "#2B8CBE") +
geom_line(aes(y = p90), colour = "#2B8CBE") +
labs(title = "Inequality band: 10th–90th percentile",
subtitle = "Country calorie supply, kcal/person/day",
x = NULL, y = "kcal/person/day")cont_trend <- cal %>%
filter(!is.na(continent)) %>%
group_by(continent, year) %>%
summarise(avg_kcal = mean(kcal_per_person, na.rm = TRUE), .groups = "drop")
ggplot(cont_trend, aes(year, avg_kcal, colour = continent)) +
geom_line(linewidth = 1) +
scale_colour_brewer(palette = "Set2") +
labs(title = "Continental averages over time",
subtitle = "Average calorie supply per continent",
x = NULL, y = "kcal/person/day", colour = NULL)tb <- cal %>%
filter(year == latest_year) %>%
arrange(desc(kcal_per_person))
top15 <- tb %>% slice_head(n = 15) %>% mutate(group = "Top 15")
bot15 <- tb %>% slice_tail(n = 15) %>% mutate(group = "Bottom 15")
tb_plot <- bind_rows(top15, bot15) %>%
mutate(country = fct_reorder(country, kcal_per_person))
ggplot(tb_plot, aes(kcal_per_person, country, fill = group)) +
geom_col(width = 0.7) +
facet_wrap(~group, scales = "free_y") +
scale_x_continuous(labels = scales::comma) +
scale_fill_brewer(palette = "Set2") +
labs(title = paste0("Top vs Bottom countries in ", latest_year),
subtitle = "Daily calorie supply per person",
x = "kcal/person/day", y = NULL, fill = NULL)focus <- c("Australia","India","China","United States","Brazil","Nigeria")
spot <- cal %>% filter(country %in% focus)
ggplot(spot, aes(year, kcal_per_person, colour = country)) +
geom_line(linewidth = 1) +
scale_colour_brewer(palette = "Set2") +
labs(title = "Country trajectories: diet transition and divergence",
subtitle = "Comparison of six countries (1961–2021)",
x = NULL, y = "kcal/person/day", colour = NULL)cal_dec <- cal %>%
mutate(decade = paste0(floor(year/10)*10, "s")) %>%
filter(year %% 10 == 0)
ggplot(cal_dec, aes(kcal_per_person, fill = decade)) +
geom_density(alpha = 0.35) +
scale_fill_brewer(palette = "Set3") +
labs(title = "Distribution of country calorie supply by decade",
subtitle = "Smoothed density across countries",
x = "kcal/person/day", y = "density", fill = NULL)
# Conclusion
The data tells a hopeful but uneven story.
Yes, food availability has improved worldwide but many people still
don’t get enough.
The next big challenge isn’t just providing food; it’s making sure
everyone can access healthy and affordable diets.
For me, this project was a reminder that data isn’t just numbers it’s people’s lives behind the charts.
1.Daily supply of calories per person. (2024). Our World in Data. https://ourworldindata.org/grapher/daily-per-capita-caloric-supply#research-and-writing 2.Basic to Advanced. GeeksforGeeks. https://www.geeksforgeeks.org/data-visualization/types-of-data-visualization/ 3.[1]G. Grolemund, “2.8 Interactive documents | R Markdown: The Definitive Guide,” Bookdown.org, Dec. 30, 2023. https://bookdown.org/yihui/rmarkdown/interactive-documents.html (accessed Oct. 30, 2025).