Net official development assistance received (constant 2021 US$)

Source: worldbank.org, 03.09.2025

Year: 2022

Flag Country Value Value change, % Rank
Afghanistan Afghanistan 3,959,649,902 -15.6% 7
Angola Angola 96,580,002 -60.9% 108
Albania Albania 338,769,989 -46.5% 79
Argentina Argentina 407,309,998 +162% 72
Armenia Armenia 322,529,999 +99.2% 81
Azerbaijan Azerbaijan 47,480,000 +386% 123
Burundi Burundi 600,179,993 -1.33% 62
Benin Benin 873,530,029 +2.77% 47
Burkina Faso Burkina Faso 1,446,619,995 -10.2% 32
Bangladesh Bangladesh 5,743,330,078 +12.9% 4
Bosnia & Herzegovina Bosnia & Herzegovina 295,260,010 -47.7% 85
Belarus Belarus 11,680,000 -91.6% 133
Belize Belize 20,790,001 -73.1% 126
Bolivia Bolivia 356,760,010 -29.6% 77
Brazil Brazil 602,469,971 -45.9% 61
Bhutan Bhutan 208,770,004 +63.9% 93
Botswana Botswana 88,500,000 -8.22% 112
Central African Republic Central African Republic 700,840,027 +6.31% 55
China China -380,579,987 -32.5% 136
Côte d’Ivoire Côte d’Ivoire 2,091,419,922 +32.7% 17
Cameroon Cameroon 1,228,920,044 +7.71% 37
Congo - Kinshasa Congo - Kinshasa 3,330,239,990 -7.75% 10
Congo - Brazzaville Congo - Brazzaville 738,789,978 +262% 52
Colombia Colombia 1,941,589,966 +1.29% 21
Comoros Comoros 146,770,004 -4.47% 98
Cape Verde Cape Verde 86,559,998 -40.4% 113
Costa Rica Costa Rica 665,599,976 +739% 57
Cuba Cuba 145,179,993 -4.74% 101
Djibouti Djibouti 65,570,000 -62.7% 117
Dominica Dominica 62,480,000 -21% 118
Dominican Republic Dominican Republic 408,880,005 -8.82% 71
Algeria Algeria 232,929,993 +8.62% 91
Ecuador Ecuador 397,079,987 +32% 74
Egypt Egypt 6,080,490,234 -23.4% 3
Eritrea Eritrea 57,270,000 +30.3% 121
Ethiopia Ethiopia 4,993,240,234 +22.7% 5
Fiji Fiji 384,350,006 -36.9% 76
Micronesia (Federated States of) Micronesia (Federated States of) 146,880,005 +12.3% 97
Gabon Gabon 145,809,998 +48% 99
Georgia Georgia 400,000,000 -48% 73
Ghana Ghana 1,077,420,044 -13% 41
Guinea Guinea 525,710,022 -11.2% 66
Gambia Gambia 284,880,005 +14.9% 86
Guinea-Bissau Guinea-Bissau 156,160,004 -7.65% 95
Equatorial Guinea Equatorial Guinea 11,930,000 -6.58% 132
Grenada Grenada -97,019,997 -242% 135
Guatemala Guatemala 437,029,999 -14.7% 70
Guyana Guyana 204,809,998 +47.5% 94
Honduras Honduras 817,440,002 +32.4% 49
Haiti Haiti 895,489,990 -5.88% 45
Indonesia Indonesia 606,830,017 -3.05% 60
India India 3,427,169,922 +9.31% 9
Iran Iran 311,820,007 +2.65% 82
Iraq Iraq 1,710,560,059 -5.53% 25
Jamaica Jamaica 95,419,998 +62.9% 109
Jordan Jordan 2,058,090,088 -40.3% 19
Kazakhstan Kazakhstan 70,349,998 +22.2% 115
Kenya Kenya 2,732,570,068 -14% 11
Kyrgyzstan Kyrgyzstan 755,520,020 +67% 51
Cambodia Cambodia 1,685,550,049 +23.3% 26
Kiribati Kiribati 94,769,997 +30.1% 110
Laos Laos 576,460,022 +0.135% 63
Lebanon Lebanon 1,470,430,054 +5.08% 31
Liberia Liberia 494,630,005 -18.4% 68
Libya Libya 274,390,015 -20.1% 87
St. Lucia St. Lucia 36,299,999 -63.7% 125
Sri Lanka Sri Lanka 18,570,000 -88% 128
Lesotho Lesotho 152,809,998 -14.7% 96
Morocco Morocco 1,507,130,005 +56% 30
Moldova Moldova 932,710,022 +56.4% 44
Madagascar Madagascar 1,042,920,044 -2.37% 42
Maldives Maldives 125,570,000 +11.7% 105
Mexico Mexico 515,369,995 -8.57% 67
Marshall Islands Marshall Islands 138,520,004 +29.3% 102
North Macedonia North Macedonia 233,610,001 -30.9% 90
Mali Mali 1,233,219,971 -14.2% 36
Myanmar (Burma) Myanmar (Burma) 1,078,780,029 -28.4% 40
Montenegro Montenegro 106,470,001 -20.1% 106
Mongolia Mongolia 297,089,996 +5.34% 84
Mozambique Mozambique 2,623,939,941 +14.9% 13
Mauritania Mauritania 342,730,011 -20.2% 78
Mauritius Mauritius 81,900,002 -72.1% 114
Malawi Malawi 1,368,479,980 +16.2% 33
Malaysia Malaysia -5,500,000 -138% 134
Namibia Namibia 332,329,987 +82% 80
Niger Niger 2,106,570,068 +16.5% 16
Nigeria Nigeria 4,544,700,195 +28.8% 6
Nicaragua Nicaragua 1,168,380,005 +55% 38
Nepal Nepal 1,263,869,995 -20.9% 35
Nauru Nauru 36,660,000 +8.59% 124
Pakistan Pakistan 1,871,550,049 -36% 22
Panama Panama 145,630,005 +59.3% 100
Peru Peru 850,559,998 +180% 48
Philippines Philippines 1,840,770,020 +12.7% 24
Palau Palau 59,630,001 +20.6% 119
Papua New Guinea Papua New Guinea 681,590,027 -42.5% 56
North Korea North Korea 13,340,000 -33.7% 131
Paraguay Paraguay 101,199,997 -42.2% 107
Palestinian Territories Palestinian Territories 2,336,330,078 +8.15% 14
Rwanda Rwanda 1,120,550,049 -15.8% 39
Sudan Sudan 1,574,569,946 -58.8% 28
Senegal Senegal 1,521,969,971 +9.54% 29
Solomon Islands Solomon Islands 264,420,013 -0.11% 89
Sierra Leone Sierra Leone 545,580,017 -23.1% 65
El Salvador El Salvador 730,419,983 +243% 53
Somalia Somalia 1,969,079,956 -18.2% 20
Serbia Serbia 558,000,000 +4.63% 64
South Sudan South Sudan 2,061,469,971 -2.72% 18
São Tomé & Príncipe São Tomé & Príncipe 56,849,998 -21.2% 122
Suriname Suriname 59,090,000 +105% 120
Eswatini Eswatini 94,190,002 -24.7% 111
Syria Syria 8,198,959,961 -15.4% 2
Chad Chad 726,409,973 -0.552% 54
Togo Togo 450,250,000 +28.4% 69
Thailand Thailand 627,530,029 +374% 58
Tajikistan Tajikistan 611,820,007 +10% 59
Turkmenistan Turkmenistan 15,160,000 -47.2% 130
Timor-Leste Timor-Leste 232,789,993 -8.83% 92
Tonga Tonga 306,510,010 +171% 83
Tunisia Tunisia 1,289,650,024 +17.9% 34
Turkey Turkey 892,169,983 -15.8% 46
Tuvalu Tuvalu 66,180,000 +83.8% 116
Tanzania Tanzania 2,728,719,971 +4.23% 12
Uganda Uganda 2,146,659,912 -16.3% 15
Ukraine Ukraine 29,293,019,531 +1,223% 1
Uzbekistan Uzbekistan 1,671,670,044 +43.9% 27
St. Vincent & Grenadines St. Vincent & Grenadines 15,760,000 -87.5% 129
Venezuela Venezuela 271,769,989 -0.505% 88
Vietnam Vietnam 19,450,001 -96.3% 127
Vanuatu Vanuatu 129,070,007 -22.7% 104
Samoa Samoa 130,619,995 +54.7% 103
Kosovo Kosovo 395,480,011 -12.8% 75
Yemen Yemen 3,695,959,961 -4.98% 8
South Africa South Africa 1,030,119,995 -1.1% 43
Zambia Zambia 1,864,969,971 +71.5% 23
Zimbabwe Zimbabwe 788,750,000 -20% 50

                    
# 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 = 'DT.ODA.ODAT.KD'

# 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 <- 'DT.ODA.ODAT.KD'

# 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))