Final consumption expenditure (constant 2015 US$)

Source: worldbank.org, 03.09.2025

Year: 2024

Flag Country Value Value change, % Rank
Angola Angola 57,066,420,817 -0.00909% 60
Albania Albania 12,929,420,681 +3.5% 101
Argentina Argentina 484,464,905,939 -4.07% 20
Armenia Armenia 12,686,775,537 +1.6% 104
Australia Australia 1,311,911,677,367 +1.88% 10
Austria Austria 298,154,858,805 +0.511% 32
Belgium Belgium 396,753,570,419 +2.21% 24
Benin Benin 14,239,738,538 +4.46% 98
Burkina Faso Burkina Faso 15,706,981,560 +5.6% 94
Bangladesh Bangladesh 249,905,651,448 +6.32% 35
Bulgaria Bulgaria 54,645,324,624 +4.3% 62
Bahamas Bahamas 10,562,136,666 +2.76% 113
Bosnia & Herzegovina Bosnia & Herzegovina 19,036,487,549 +2.14% 90
Belarus Belarus 50,589,653,028 +9.57% 65
Bermuda Bermuda 3,998,054,270 +2.21% 122
Brazil Brazil 1,701,735,908,341 +4.17% 7
Brunei Brunei 7,919,547,620 +3.66% 117
Botswana Botswana 14,157,610,161 +3.5% 99
Central African Republic Central African Republic 3,034,220,875 +21.5% 124
Canada Canada 1,493,252,303,478 +2.6% 9
Switzerland Switzerland 499,175,705,194 +1.79% 19
Chile Chile 230,202,018,026 +1.44% 37
China China 10,235,073,320,942 +3.86% 2
Côte d’Ivoire Côte d’Ivoire 53,741,251,068 +5.93% 63
Cameroon Cameroon 37,068,903,782 +3.76% 75
Congo - Kinshasa Congo - Kinshasa 39,218,625,375 +3.44% 71
Congo - Brazzaville Congo - Brazzaville 6,325,031,681 +5.67% 120
Colombia Colombia 333,391,973,184 +1.24% 27
Comoros Comoros 1,462,909,522 +4.47% 129
Cape Verde Cape Verde 2,256,110,620 +4.49% 125
Costa Rica Costa Rica 58,306,460,547 +3.34% 59
Cyprus Cyprus 24,459,453,862 +3.28% 83
Czechia Czechia 147,233,512,693 +2.48% 46
Germany Germany 2,800,893,782,427 +1.19% 3
Djibouti Djibouti 3,754,693,620 +6.73% 123
Denmark Denmark 249,703,567,411 +1.08% 36
Dominican Republic Dominican Republic 82,812,301,043 +4.46% 55
Ecuador Ecuador 85,862,415,375 -1.28% 53
Egypt Egypt 457,955,329,740 +7.41% 21
Spain Spain 1,083,990,912,907 +3.22% 14
Estonia Estonia 20,485,304,892 -0.131% 86
Ethiopia Ethiopia 92,863,938,978 +8.96% 51
Finland Finland 198,024,751,042 +0.496% 40
France France 2,121,902,800,831 +1.34% 6
Gabon Gabon 7,695,585,137 +3.1% 118
United Kingdom United Kingdom 2,752,294,833,461 +1.24% 4
Georgia Georgia 22,450,202,385 +13% 85
Ghana Ghana 64,427,423,991 +4.52% 58
Guinea Guinea 12,459,571,391 +4.1% 106
Gambia Gambia 1,706,331,426 +4.67% 128
Guinea-Bissau Guinea-Bissau 1,717,504,815 +2.89% 127
Equatorial Guinea Equatorial Guinea 9,143,162,701 +1.59% 115
Greece Greece 199,825,645,376 +0.702% 39
Guatemala Guatemala 83,916,937,302 +5.06% 54
Hong Kong SAR China Hong Kong SAR China 268,313,852,437 -0.344% 34
Honduras Honduras 28,712,057,612 +4.48% 78
Croatia Croatia 56,255,898,480 +5.31% 61
Haiti Haiti 16,858,804,346 -4.42% 93
Hungary Hungary 114,791,939,597 +2.27% 47
Indonesia Indonesia 797,624,158,873 +5.29% 15
India India 2,409,262,857,836 +7.07% 5
Ireland Ireland 188,953,347,484 +2.81% 43
Iran Iran 327,039,345,702 +2.53% 28
Iraq Iraq 158,958,363,505 +7.86% 45
Iceland Iceland 17,469,092,575 +1.24% 92
Israel Israel 319,820,322,782 +6.9% 29
Italy Italy 1,528,810,325,412 +0.561% 8
Kenya Kenya 90,044,418,094 +3.75% 52
Cambodia Cambodia 25,888,643,478 +2.49% 81
Libya Libya 38,496,047,579 +3.89% 73
Sri Lanka Sri Lanka 69,719,550,322 +3.19% 57
Lithuania Lithuania 39,006,172,443 +2.99% 72
Luxembourg Luxembourg 38,476,408,232 +2.63% 74
Latvia Latvia 25,425,659,064 +2.32% 82
Macao SAR China Macao SAR China 18,363,531,531 +1.76% 91
Morocco Morocco 105,435,275,953 +3.73% 49
Moldova Moldova 9,506,121,823 +1.62% 114
Madagascar Madagascar 12,102,459,292 +1.86% 109
Mexico Mexico 1,134,210,908,037 +2.66% 13
North Macedonia North Macedonia 10,809,501,094 +2.63% 112
Mali Mali 19,949,154,349 +4.41% 87
Malta Malta 12,768,903,953 +6.14% 103
Montenegro Montenegro 5,637,263,245 +7.36% 121
Mongolia Mongolia 15,160,357,532 +14.1% 95
Mozambique Mozambique 19,597,949,021 -5.78% 88
Mauritius Mauritius 11,540,908,312 +3.56% 110
Malaysia Malaysia 311,523,667,172 +5.02% 31
Namibia Namibia 14,556,274,133 +10.8% 97
Niger Niger 12,468,478,115 +2.49% 105
Nicaragua Nicaragua 14,588,396,479 +7.25% 96
Netherlands Netherlands 640,545,021,047 +2.03% 16
Norway Norway 294,613,826,572 +1.63% 33
Nepal Nepal 32,415,269,853 +1.94% 77
Pakistan Pakistan 427,278,258,727 +4.59% 22
Peru Peru 187,269,962,053 +2.85% 44
Philippines Philippines 389,145,856,246 +5.25% 25
Poland Poland 501,004,297,652 +4.3% 18
Portugal Portugal 195,966,631,438 +2.74% 41
Paraguay Paraguay 35,973,714,965 +5.52% 76
Palestinian Territories Palestinian Territories 12,277,600,000 -31.3% 108
Romania Romania 203,366,698,788 +4.85% 38
Russia Russia 1,212,695,764,303 +5.2% 11
Rwanda Rwanda 13,533,657,292 +6.12% 100
Saudi Arabia Saudi Arabia 639,032,151,532 +2.44% 17
Sudan Sudan 28,088,886,108 -14.4% 79
Senegal Senegal 22,471,151,003 +3.74% 84
Singapore Singapore 192,273,610,344 +5.67% 42
Sierra Leone Sierra Leone 10,812,495,172 +3.98% 111
El Salvador El Salvador 27,267,217,291 +3.05% 80
Somalia Somalia 12,294,461,038 +6.19% 107
Serbia Serbia 45,490,559,799 +3.82% 67
Slovakia Slovakia 78,820,196,786 +3.15% 56
Slovenia Slovenia 40,162,690,724 +3.47% 69
Sweden Sweden 406,795,685,988 +0.661% 23
Seychelles Seychelles 2,039,541,447 +10.6% 126
Chad Chad 12,889,770,289 +2.97% 102
Togo Togo 7,522,834,591 +5.97% 119
Thailand Thailand 356,130,001,865 +3.97% 26
Tunisia Tunisia 45,215,800,857 +3.1% 68
Turkey Turkey 1,141,726,191,260 +3.21% 12
Tanzania Tanzania 47,646,608,504 +4.1% 66
Uganda Uganda 40,154,781,606 +2.24% 70
Ukraine Ukraine 96,282,264,297 +2.13% 50
Uruguay Uruguay 52,395,531,647 +1.73% 64
United States United States 18,628,805,573,102 +2.71% 1
Uzbekistan Uzbekistan 113,086,665,770 +6.35% 48
Samoa Samoa 929,257,072 +10.2% 130
Kosovo Kosovo 8,955,758,046 +4.99% 116
South Africa South Africa 317,476,863,821 +0.885% 30
Zimbabwe Zimbabwe 19,464,529,225 +3.19% 89

                    
# 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 = 'NE.CON.TOTL.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 <- 'NE.CON.TOTL.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))