Adjusted savings: education expenditure (current US$)

Source: worldbank.org, 03.09.2025

Year: 2021

Flag Country Value Value change, % Rank
Aruba Aruba 174,471,453 +19.3% 148
Afghanistan Afghanistan 386,856,049 -26.7% 129
Angola Angola 2,216,268,402 +26.4% 79
Albania Albania 502,821,564 +21% 121
Argentina Argentina 24,056,828,336 +27.1% 27
Armenia Armenia 366,371,902 +18% 131
Antigua & Barbuda Antigua & Barbuda 32,728,500 +8.1% 171
Australia Australia 76,931,642,189 +18.4% 12
Austria Austria 23,494,511,993 +9.89% 28
Azerbaijan Azerbaijan 2,083,818,451 +26.1% 81
Burundi Burundi 144,290,531 +4.64% 152
Belgium Belgium 35,634,451,540 +13% 19
Benin Benin 516,228,818 +13.6% 120
Burkina Faso Burkina Faso 806,740,753 +12.3% 106
Bangladesh Bangladesh 5,896,415,883 +12.5% 54
Bulgaria Bulgaria 3,325,573,391 +20.7% 65
Bahamas Bahamas 401,756,086 +13.1% 128
Belarus Belarus 2,914,633,546 +4.69% 68
Belize Belize 154,225,845 +19.4% 151
Bermuda Bermuda 108,518,381 +7.16% 156
Bolivia Bolivia 2,393,602,406 +8.71% 76
Brazil Brazil 93,093,055,235 +10.4% 8
Barbados Barbados 302,458,411 +117% 137
Brunei Brunei 562,459,420 +14% 115
Bhutan Bhutan 138,464,663 +9.24% 153
Botswana Botswana 1,579,185,593 +13.5% 87
Central African Republic Central African Republic 30,914,324 +9.42% 172
Canada Canada 88,424,162,323 +21.3% 9
Switzerland Switzerland 34,881,691,879 +9.95% 20
Chile Chile 16,511,373,520 +26.1% 33
China China 314,544,773,143 +20.6% 2
Côte d’Ivoire Côte d’Ivoire 2,164,584,452 +14.2% 80
Cameroon Cameroon 1,187,421,717 +11.1% 95
Congo - Kinshasa Congo - Kinshasa 1,070,929,608 +9.58% 97
Congo - Brazzaville Congo - Brazzaville 322,122,672 +43.4% 133
Colombia Colombia 13,338,478,598 +15.5% 37
Comoros Comoros 32,975,366 +5.9% 170
Cape Verde Cape Verde 98,979,470 +14.2% 158
Costa Rica Costa Rica 4,123,394,818 +2.52% 60
Curaçao Curaçao 136,598,986 +7.66% 154
Cyprus Cyprus 1,394,685,936 +11.9% 90
Czechia Czechia 11,583,527,821 +15.2% 39
Germany Germany 199,971,924,720 +10.2% 3
Djibouti Djibouti 267,065,022 +11% 143
Dominica Dominica 27,791,257 +8.75% 173
Denmark Denmark 25,717,792,416 +12.4% 26
Dominican Republic Dominican Republic 2,255,669,282 +19.4% 77
Algeria Algeria 7,123,299,141 +12.2% 49
Ecuador Ecuador 3,788,159,766 -5.41% 61
Egypt Egypt 17,280,300,730 +10.7% 32
Spain Spain 57,433,600,464 +12.1% 14
Estonia Estonia 1,739,838,212 +17.8% 84
Ethiopia Ethiopia 3,403,852,722 +3.43% 64
Finland Finland 17,317,413,557 +9.58% 31
Fiji Fiji 160,021,612 -3.57% 150
France France 146,120,155,219 +13.6% 5
Micronesia (Federated States of) Micronesia (Federated States of) 105,178,751 -2.04% 157
Gabon Gabon 521,801,341 +17.6% 119
United Kingdom United Kingdom 158,890,910,174 +17.9% 4
Georgia Georgia 307,294,414 +15.6% 135
Ghana Ghana 3,210,252,834 +6.87% 66
Guinea Guinea 339,954,493 +10.5% 132
Gambia Gambia 52,858,645 +11.3% 165
Guinea-Bissau Guinea-Bissau 19,033,605 +12.7% 177
Equatorial Guinea Equatorial Guinea 91,477,622 +22.7% 159
Greece Greece 6,697,638,209 +13.8% 52
Grenada Grenada 39,631,142 +8.85% 167
Guatemala Guatemala 2,578,912,156 +5.73% 71
Guyana Guyana 223,512,288 +42.7% 144
Hong Kong SAR China Hong Kong SAR China 11,192,311,454 +8.35% 41
Honduras Honduras 1,656,676,603 +18% 86
Croatia Croatia 2,533,646,932 +18.1% 72
Haiti Haiti 306,471,474 +44.2% 136
Hungary Hungary 6,847,295,509 +14.8% 51
Indonesia Indonesia 37,713,203,480 +12% 18
India India 96,307,365,994 +18.8% 7
Ireland Ireland 15,226,469,271 +19.3% 35
Iran Iran 12,009,983,021 +50.1% 38
Iraq Iraq 9,467,956,151 +13% 45
Iceland Iceland 1,747,944,210 +15.7% 83
Israel Israel 26,726,547,894 +17.5% 24
Italy Italy 82,644,080,011 +11.7% 10
Jamaica Jamaica 743,932,862 +6.59% 109
Jordan Jordan 1,293,170,980 +7.6% 93
Japan Japan 135,877,190,270 -1.79% 6
Kazakhstan Kazakhstan 5,645,573,739 +10.8% 55
Kenya Kenya 5,293,812,407 +9.87% 57
Kyrgyzstan Kyrgyzstan 414,972,632 +4.3% 127
Cambodia Cambodia 450,783,578 +2.95% 125
Kiribati Kiribati 22,939,153 +11.4% 174
St. Kitts & Nevis St. Kitts & Nevis 13,736,001 -21.7% 180
South Korea South Korea 70,322,481,122 +10.4% 13
Laos Laos 462,266,362 -0.917% 124
Lebanon Lebanon 466,870,746 -27.5% 123
Liberia Liberia 120,670,200 +14.2% 155
Libya Libya 922,727,736 -14.7% 101
St. Lucia St. Lucia 53,730,905 +9.45% 164
Sri Lanka Sri Lanka 1,421,132,078 +4.59% 89
Lesotho Lesotho 178,295,268 +13.3% 147
Lithuania Lithuania 2,480,346,523 +15.7% 75
Luxembourg Luxembourg 2,927,472,438 +16.8% 67
Latvia Latvia 1,491,156,612 +13.1% 88
Macao SAR China Macao SAR China 1,358,693,852 +2.09% 91
Morocco Morocco 7,327,930,133 +17.3% 47
Moldova Moldova 778,749,163 +14.7% 107
Madagascar Madagascar 294,781,477 +11.9% 139
Maldives Maldives 195,961,505 +43.1% 146
Mexico Mexico 53,035,474,843 +17.5% 15
Marshall Islands Marshall Islands 37,412,229 -0.0952% 168
North Macedonia North Macedonia 431,740,896 +11% 126
Mali Mali 825,274,084 +13.6% 105
Malta Malta 761,149,563 +18.9% 108
Myanmar (Burma) Myanmar (Burma) 1,046,096,529 -17.1% 99
Mongolia Mongolia 597,334,583 +8.31% 113
Mozambique Mozambique 831,109,940 +12.4% 104
Mauritania Mauritania 288,602,855 +18.7% 140
Mauritius Mauritius 558,095,068 +0.679% 116
Malawi Malawi 573,111,341 +3.31% 114
Malaysia Malaysia 14,104,673,434 +9.8% 36
Namibia Namibia 1,076,906,742 +14.6% 96
Niger Niger 497,552,574 +15.4% 122
Nigeria Nigeria 3,602,999,648 +1.79% 62
Nicaragua Nicaragua 537,687,206 +11.5% 117
Netherlands Netherlands 46,535,054,513 +12.5% 16
Norway Norway 33,946,846,000 +33.6% 21
Nepal Nepal 1,055,139,595 +7.85% 98
New Zealand New Zealand 18,099,871,340 +18% 30
Oman Oman 5,340,740,883 +16.3% 56
Pakistan Pakistan 6,971,294,424 +16.6% 50
Panama Panama 1,659,316,400 +13.4% 85
Peru Peru 7,281,745,308 -1.79% 48
Philippines Philippines 7,510,397,902 +4.88% 46
Papua New Guinea Papua New Guinea 1,759,476,910 +8.15% 82
Poland Poland 29,338,059,895 +12.3% 23
Puerto Rico Puerto Rico 6,346,307,407 +4.36% 53
Portugal Portugal 11,496,432,254 +11.1% 40
Paraguay Paraguay 1,233,772,672 +11.9% 94
Palestinian Territories Palestinian Territories 874,123,828 +18.9% 103
Qatar Qatar 4,332,080,552 +25.1% 59
Romania Romania 9,509,489,016 +12.9% 44
Russia Russia 76,943,674,209 +19.3% 11
Rwanda Rwanda 273,757,027 +4.48% 142
Sudan Sudan 718,999,676 +29% 111
Senegal Senegal 1,349,041,458 +13.1% 92
Singapore Singapore 9,636,648,366 +16.7% 43
Solomon Islands Solomon Islands 163,954,213 +4.92% 149
Sierra Leone Sierra Leone 283,665,667 +9.97% 141
El Salvador El Salvador 908,915,042 +16.6% 102
Somalia Somalia 75,188,104 +10.8% 161
Serbia Serbia 2,243,744,586 +17.2% 78
São Tomé & Príncipe São Tomé & Príncipe 18,525,912 +11.5% 178
Suriname Suriname 89,275,242 +5.95% 160
Slovakia Slovakia 4,747,444,985 +9.18% 58
Slovenia Slovenia 2,821,727,520 +14.1% 69
Sweden Sweden 46,291,445,352 +15.5% 17
Eswatini Eswatini 307,552,780 +21.5% 134
Seychelles Seychelles 63,151,618 +14.9% 162
Turks & Caicos Islands Turks & Caicos Islands 21,854,684 +6.55% 175
Chad Chad 200,945,132 +14.4% 145
Togo Togo 301,269,615 +11.1% 138
Thailand Thailand 19,040,157,909 +0.0693% 29
Tajikistan Tajikistan 381,211,211 +11% 130
Timor-Leste Timor-Leste 60,188,769 -20.9% 163
Tonga Tonga 14,515,585 -5.84% 179
Trinidad & Tobago Trinidad & Tobago 967,445,131 +21.8% 100
Tunisia Tunisia 2,663,696,617 +9.74% 70
Turkey Turkey 33,223,496,788 +13.5% 22
Tanzania Tanzania 2,522,530,278 +8.47% 73
Uganda Uganda 601,226,293 +5.07% 112
Ukraine Ukraine 9,792,653,192 +21.9% 42
Uruguay Uruguay 2,516,634,622 +7.31% 74
United States United States 1,046,599,480,745 +9.99% 1
Uzbekistan Uzbekistan 3,429,104,042 +16.3% 63
St. Vincent & Grenadines St. Vincent & Grenadines 46,529,865 +3.68% 166
Vietnam Vietnam 15,881,094,038 +4.7% 34
Vanuatu Vanuatu 21,295,508 +6.52% 176
Samoa Samoa 35,126,460 -1.18% 169
South Africa South Africa 26,699,435,798 +33% 25
Zambia Zambia 720,819,580 +14.9% 110
Zimbabwe Zimbabwe 528,539,986 +31.6% 118

                    
# Install missing packages
import sys
import subprocess

def install(package):
subprocess.check_call([sys.executable, "-m", "pip", "install", package])

# Required packages
for package in ['wbdata', 'country_converter']:
try:
__import__(package)
except ImportError:
install(package)

# Import libraries
import wbdata
import country_converter as coco
from datetime import datetime

# Define World Bank indicator code
dataset_code = 'NY.ADJ.AEDU.CD'

# Download data from World Bank API
data = wbdata.get_dataframe({dataset_code: 'value'},
date=(datetime(1960, 1, 1), datetime.today()),
parse_dates=True,
keep_levels=True).reset_index()

# Extract year
data['year'] = data['date'].dt.year

# Convert country names to ISO codes using country_converter
cc = coco.CountryConverter()
data['iso2c'] = cc.convert(names=data['country'], to='ISO2', not_found=None)
data['iso3c'] = cc.convert(names=data['country'], to='ISO3', not_found=None)

# Filter out rows where ISO codes could not be matched — likely not real countries
data = data[data['iso2c'].notna() & data['iso3c'].notna()]

# Sort for calculation
data = data.sort_values(['iso3c', 'year'])

# Calculate YoY absolute and percent change
data['value_change'] = data.groupby('iso3c')['value'].diff()
data['value_change_percent'] = data.groupby('iso3c')['value'].pct_change() * 100

# Calculate ranks (higher GDP per capita = better rank)
data['rank'] = data.groupby('year')['value'].rank(ascending=False, method='dense')

# Calculate rank change from previous year
data['rank_change'] = data.groupby('iso3c')['rank'].diff()

# Select desired columns
final_df = data[['country', 'iso2c', 'iso3c', 'year', 'value',
'value_change', 'value_change_percent', 'rank', 'rank_change']].copy()

# Optional: Add labels as metadata (could be useful for export or UI)
column_labels = {
'country': 'Country name',
'iso2c': 'ISO 2-letter country code',
'iso3c': 'ISO 3-letter country code',
'year': 'Year',
'value': 'GDP per capita (current US$)',
'value_change': 'Year-over-Year change in value',
'value_change_percent': 'Year-over-Year percent change in value',
'rank': 'Country rank by GDP per capita (higher = richer)',
'rank_change': 'Change in rank from previous year'
}

# Display first few rows
print(final_df.head(10))

# Optional: Save to CSV
#final_df.to_csv("gdp_per_capita_cleaned.csv", index=False)
                    
                
                    
# Check and install required packages
required_packages <- c("WDI", "countrycode", "dplyr")

for (pkg in required_packages) {
  if (!requireNamespace(pkg, quietly = TRUE)) {
    install.packages(pkg)
  }
}

# Load the necessary libraries
library(WDI)
library(dplyr)
library(countrycode)

# Define the dataset code (World Bank indicator code)
dataset_code <- 'NY.ADJ.AEDU.CD'

# Download data using WDI package
dat <- WDI(indicator = dataset_code)

# Filter only countries using 'is_country' from countrycode
# This uses iso2c to identify whether the entry is a recognized country
dat <- dat %>%
  filter(countrycode(iso2c, origin = 'iso2c', destination = 'country.name', warn = FALSE) %in%
           countrycode::codelist$country.name.en)

# Ensure dataset is ordered by country and year
dat <- dat %>%
  arrange(iso3c, year)

# Rename the dataset_code column to "value" for easier manipulation
dat <- dat %>%
  rename(value = !!dataset_code)

# Calculate year-over-year (YoY) change and percentage change
dat <- dat %>%
  group_by(iso3c) %>%
  mutate(
    value_change = value - lag(value),                              # Absolute change from previous year
    value_change_percent = 100 * (value - lag(value)) / lag(value) # Percent change from previous year
  ) %>%
  ungroup()

# Calculate rank by year (higher value => higher rank)
dat <- dat %>%
  group_by(year) %>%
  mutate(rank = dense_rank(desc(value))) %>% # Rank countries by descending value
  ungroup()

# Calculate rank change (positive = moved up, negative = moved down)
dat <- dat %>%
  group_by(iso3c) %>%
  mutate(rank_change = rank - lag(rank)) %>% # Change in rank compared to previous year
  ungroup()

# Select and reorder final columns
final_data <- dat %>%
  select(
    country,
    iso2c,
    iso3c,
    year,
    value,
    value_change,
    value_change_percent,
    rank,
    rank_change
  )

# Add labels (variable descriptions)
attr(final_data$country, "label") <- "Country name"
attr(final_data$iso2c, "label") <- "ISO 2-letter country code"
attr(final_data$iso3c, "label") <- "ISO 3-letter country code"
attr(final_data$year, "label") <- "Year"
attr(final_data$value, "label") <- "GDP per capita (current US$)"
attr(final_data$value_change, "label") <- "Year-over-Year change in value"
attr(final_data$value_change_percent, "label") <- "Year-over-Year percent change in value"
attr(final_data$rank, "label") <- "Country rank by GDP per capita (higher = richer)"
attr(final_data$rank_change, "label") <- "Change in rank from previous year"

# Print the first few rows of the final dataset
print(head(final_data, 10))