For this assignment, I wanted to see what the Nobel Prize data could tell me beyond who won. I looked at how often prizes were shared, whether that changed over time, who the youngest winners were, and how often winners were affiliated with an institution in a different country from where they were born.
Loading the JSON Data
I used two endpoints from the Nobel Prize API (version 2.1). The prizes endpoint gives me the award year, category, award date, and recipients. The laureates endpoint gives me birth information and affiliations recorded for each award. I requested up to 1,500 records from each endpoint and checked the number returned against the total reported by the API. The results reflect the data available when this report was rendered.
Code
library(jsonlite)library(dplyr)
Attaching package: 'dplyr'
The following objects are masked from 'package:stats':
filter, lag
The following objects are masked from 'package:base':
intersect, setdiff, setequal, union
Code
library(tidyr)library(purrr)
Attaching package: 'purrr'
The following object is masked from 'package:jsonlite':
flatten
Code
library(knitr)
Warning: package 'knitr' was built under R version 4.6.1
I kept two levels of detail. For the sharing questions, I needed one row per awarded prize. For the age and country questions, I needed one row per recipient per award, since some people received more than one prize. I left out category and year entries that had no recipients when counting awarded prizes.
For country names, I used the API’s present-day country label when available and the recorded country label otherwise. This helps with some historical name differences. I removed duplicate affiliation countries within each award, so two institutions in the same country still count as one country. I kept organizations in the prize-sharing analysis but used only people for the age and country questions.
Code
text_or_na <-function(value) {if (is.null(value) ||!nzchar(trimws(value))) {return(NA_character_) }trimws(value)}country_name <-function(place) {coalesce(text_or_na(place$countryNow$en),text_or_na(place$country$en) )}individuals <-keep(laureates_json$laureates, function(person) {is.null(person$orgName)})individual_awards <-map_dfr(individuals, function(person) {map_dfr(person$nobelPrizes, function(award) { countries <-map_chr(award$affiliations, country_name) recorded_countries <-unique(countries[!is.na(countries)])tibble(laureate_id = person$id,laureate_name =coalesce(text_or_na(person$knownName$en),text_or_na(person$fullName$en) ),year =as.integer(award$awardYear),category = award$category$en,birth_date =text_or_na(person$birth$date),birth_country =country_name(person$birth$place),affiliation_country_count =length(recorded_countries),affiliation_country =if (length(recorded_countries) ==1) { recorded_countries[1] } else {NA_character_ } ) })})# Use the recipient ID, year, and category to match the correct award.award_keys <-c("laureate_id", "year", "category")stopifnot(!anyDuplicated(individual_awards[award_keys]),!anyDuplicated(prize_recipients[award_keys]),nrow(anti_join(individual_awards, prize_recipients, by = award_keys)) ==0)individual_awards <- individual_awards |>left_join(prize_recipients, by = award_keys)
Question 1: Which categories have the highest share of prizes shared by multiple recipients?
I counted each awarded prize once and marked it as shared when it had more than one recipient. I divided the number of shared prizes by the total number of awarded prizes in that category.
Physiology or Medicine had the highest share: 77 out of 117 awarded prizes were shared (65.8%). I used percentages because the categories do not all have the same number of awarded prizes.
Question 2: How did the average number of recipients per prize change between the two periods?
I compared 1950–1979 with 1990–2019. For each category, I averaged the number of recipients per awarded prize in each period. I subtracted the earlier average from the later one, so a positive number means that prizes had more recipients on average in the later period.
The biggest increase was in Chemistry, where the average went from 1.47 to 2.33 recipients per prize. Economic Sciences first appears in the API in 1969, so its earlier average covers fewer years.
Question 3: Who was the youngest individual laureate in each category?
I used the full birth date and the date the API records for the award, rather than subtracting the two years. I left out incomplete dates, such as dates with a month or day of zero. I ranked by age in days and kept exact ties. The table shows age in completed years as well as days.
The youngest person across the categories was Malala Yousafzai, who was 17 when awarded the prize in Peace. The age comparison excluded 23 individual award records without a usable pair of dates.
Question 4: In which categories did birth and award affiliation countries differ most often?
For this question, I compared birth country with the country of the affiliation listed for that specific award. I included individual award records with a known birth country and exactly one distinct recorded affiliation country. I excluded records with no recorded affiliation country, more than one, or no birth country. If a record met more than one exclusion rule, I counted it under the first reason shown in the code. This measures differences in recorded locations; it does not tell me anyone’s citizenship or whether they moved.
Among the records I could compare, Chemistry had the highest percentage: 68 of 197 individual award records (34.5%). The number of eligible records varied across categories, so I would interpret this ranking alongside the exclusions in the table. A category with zero eligible records has no percentage to report.
Conclusion
What stood out to me was how the unit of analysis changed depending on the question. For sharing, I counted each prize once. For age and affiliation, I looked at each person’s record for a specific award. Keeping those separate helped me avoid counting shared prizes more than once or using an affiliation from the wrong award.