Secondary income receipts (BoP, current US$)

Source: worldbank.org, 03.09.2025

Year: 2024

Flag Country Value Value change, % Rank
Angola Angola 22,365,933 +42.9% 110
Albania Albania 1,631,157,094 +10.3% 76
Argentina Argentina 3,713,140,288 +12.1% 55
Armenia Armenia 1,192,388,993 -3.26% 80
Antigua & Barbuda Antigua & Barbuda 51,410,237 -9.58% 106
Australia Australia 9,855,115,364 +9.25% 38
Austria Austria 9,339,962,560 +8.64% 39
Azerbaijan Azerbaijan 1,246,543,000 -29.6% 79
Belgium Belgium 24,193,974,617 +2.65% 17
Bangladesh Bangladesh 27,812,035,942 +21.7% 14
Bulgaria Bulgaria 2,865,940,000 -19.1% 64
Bahamas Bahamas 368,568,336 +14.8% 92
Bosnia & Herzegovina Bosnia & Herzegovina 3,369,335,465 +8.34% 60
Belarus Belarus 3,045,074,328 +8.78% 62
Belize Belize 209,501,995 +7.66% 98
Brazil Brazil 13,964,368,206 +0.303% 29
Brunei Brunei 66,966,191 +16.5% 105
Bhutan Bhutan 163,547,106 -3.48% 100
Canada Canada 15,100,040,057 +9% 28
Switzerland Switzerland 65,182,770,332 +4.15% 5
Chile Chile 4,904,264,504 -18.5% 53
China China 37,939,513,092 +12.2% 9
Colombia Colombia 17,125,912,712 +18.8% 21
Cape Verde Cape Verde 520,909,474 +10.8% 89
Costa Rica Costa Rica 1,373,814,241 +10.1% 77
Cyprus Cyprus 858,317,385 +2.55% 85
Czechia Czechia 5,803,233,036 +3.92% 47
Germany Germany 135,274,097,551 +10.4% 2
Djibouti Djibouti 31,675,670 +2.26% 109
Dominica Dominica 45,481,684 +7.92% 107
Denmark Denmark 5,719,417,795 -0.59% 48
Dominican Republic Dominican Republic 11,899,600,000 +5.57% 32
Ecuador Ecuador 7,082,746,359 +19.4% 46
Spain Spain 32,194,562,297 +8.18% 12
Estonia Estonia 1,082,723,814 +0.861% 81
Finland Finland 3,046,365,160 +21.2% 61
France France 59,452,893,000 +9.04% 6
United Kingdom United Kingdom 38,474,577,158 +5.78% 8
Georgia Georgia 3,424,279,481 -0.903% 58
Gambia Gambia 520,646,127 +3.37% 90
Greece Greece 7,388,057,634 +23.8% 44
Grenada Grenada 76,523,226 +1.53% 104
Guatemala Guatemala 22,860,713,100 +8.26% 18
Hong Kong SAR China Hong Kong SAR China 2,189,080,367 -3.29% 67
Honduras Honduras 10,441,042,362 +7.4% 36
Croatia Croatia 5,353,184,044 +4.21% 49
Hungary Hungary 3,509,435,893 +23% 57
Indonesia Indonesia 16,847,635,497 +10.4% 24
India India 132,961,766,118 +15.2% 3
Iceland Iceland 332,976,354 +10.3% 93
Israel Israel 16,903,400,000 +8.49% 23
Italy Italy 25,300,380,397 +1.94% 15
Jamaica Jamaica 3,663,952,751 -0.617% 56
Japan Japan 38,882,254,369 +22.6% 7
Kazakhstan Kazakhstan 2,012,874,281 -1.91% 70
Cambodia Cambodia 3,403,145,909 -0.301% 59
St. Kitts & Nevis St. Kitts & Nevis 31,900,940 -2.46% 108
South Korea South Korea 10,598,100,000 +12.7% 35
Kuwait Kuwait 7,806,195 +29.8% 111
St. Lucia St. Lucia 82,444,980 +1.48% 103
Lesotho Lesotho 705,925,314 +21.8% 86
Lithuania Lithuania 1,830,992,478 +11.8% 73
Luxembourg Luxembourg 15,943,267,914 +6.34% 26
Latvia Latvia 2,056,316,241 +4.78% 69
Moldova Moldova 2,131,470,000 -5.51% 68
Maldives Maldives 96,178,464 -0.344% 102
Mexico Mexico 65,695,106,854 +2.27% 4
North Macedonia North Macedonia 2,899,061,802 -6.69% 63
Malta Malta 1,055,147,486 +4.69% 82
Montenegro Montenegro 618,669,479 +2.93% 87
Mozambique Mozambique 1,320,491,944 -16.4% 78
Malaysia Malaysia 8,507,975,458 +16.2% 41
Namibia Namibia 1,896,583,872 +21.2% 72
Nigeria Nigeria 24,421,867,960 +8.4% 16
Nicaragua Nicaragua 5,271,700,000 +12.4% 51
Netherlands Netherlands 19,140,341,160 -0.633% 20
Norway Norway 9,966,178,122 +13.6% 37
Nepal Nepal 15,350,163,730 +33.6% 27
New Zealand New Zealand 2,370,607,525 -14.1% 65
Pakistan Pakistan 37,387,000,000 +31.9% 10
Panama Panama 879,734,141 -3.62% 84
Peru Peru 7,942,927,207 +11.1% 43
Philippines Philippines 32,876,852,142 +2.05% 11
Poland Poland 11,953,000,000 -2.06% 31
Portugal Portugal 13,601,314,517 +3.94% 30
Paraguay Paraguay 899,866,057 +17.7% 83
Palestinian Territories Palestinian Territories 1,801,275,767 -26.8% 74
Qatar Qatar 4,991,483,516 +41.6% 52
Romania Romania 8,067,385,879 -2.72% 42
Russia Russia 11,431,150,000 +1.08% 34
Singapore Singapore 29,953,975,104 +1.55% 13
Solomon Islands Solomon Islands 193,540,717 +1.87% 99
El Salvador El Salvador 8,740,202,335 +2.45% 40
Suriname Suriname 224,277,648 +8.19% 97
Slovakia Slovakia 1,794,710,689 -5.81% 75
Slovenia Slovenia 1,957,855,704 +4.47% 71
Sweden Sweden 7,338,588,700 -3.46% 45
Thailand Thailand 16,048,171,041 +0.538% 25
Tajikistan Tajikistan 2,289,482,736 +41% 66
Timor-Leste Timor-Leste 262,187,145 -3.84% 95
Tonga Tonga 237,084,499 -4.23% 96
Trinidad & Tobago Trinidad & Tobago 412,163,953 -15% 91
Turkey Turkey 5,296,000,000 +3.1% 50
Ukraine Ukraine 22,807,000,000 -6.38% 19
Uruguay Uruguay 560,290,229 +2.5% 88
United States United States 201,683,000,000 +2.56% 1
Uzbekistan Uzbekistan 11,603,653,580 +19.8% 33
St. Vincent & Grenadines St. Vincent & Grenadines 109,578,294 +7.85% 101
Vietnam Vietnam 17,122,000,000 +6.27% 22
Samoa Samoa 327,704,822 +8.47% 94
South Africa South Africa 4,608,784,990 +12.7% 54

                    
# 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 = 'BX.TRF.CURR.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 <- 'BX.TRF.CURR.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))