Gross value added at basic prices (GVA) (current US$)

Source: worldbank.org, 03.09.2025

Year: 2024

Flag Country Value Value change, % Rank
Angola Angola 79,475,398,391 -5.2% 64
Albania Albania 23,587,243,498 +14.9% 99
Andorra Andorra 3,668,490,475 +6.25% 134
Argentina Argentina 527,691,100,507 -2.92% 22
Armenia Armenia 23,205,983,245 +7.98% 101
Australia Australia 1,642,326,669,385 +1.32% 11
Austria Austria 467,433,503,079 +1.72% 25
Azerbaijan Azerbaijan 67,043,529,412 +1.98% 72
Belgium Belgium 601,317,010,604 +3.18% 19
Benin Benin 19,440,737,887 +9.28% 107
Burkina Faso Burkina Faso 20,573,690,746 +13.5% 104
Bangladesh Bangladesh 435,169,307,541 +2.87% 28
Bulgaria Bulgaria 97,774,312,136 +8.9% 59
Bahamas Bahamas 13,826,200,000 +1.97% 120
Bosnia & Herzegovina Bosnia & Herzegovina 23,889,576,801 +2.72% 98
Belarus Belarus 66,280,059,836 +4.21% 73
Brazil Brazil 1,879,146,595,904 -1.81% 9
Brunei Brunei 15,710,552,026 +2.28% 114
Botswana Botswana 18,346,448,677 -0.437% 110
Central African Republic Central African Republic 2,497,692,331 +10.1% 135
Canada Canada 2,091,190,402,270 +3.22% 7
Switzerland Switzerland 912,056,517,142 +4.63% 17
Chile Chile 297,490,353,197 -1.37% 38
Côte d’Ivoire Côte d’Ivoire 78,598,462,523 +8.69% 65
Cameroon Cameroon 47,721,239,172 +4.11% 79
Congo - Kinshasa Congo - Kinshasa 67,695,187,914 +5.85% 71
Congo - Brazzaville Congo - Brazzaville 14,865,276,002 +2.56% 117
Colombia Colombia 378,923,781,001 +14.6% 32
Comoros Comoros 1,397,453,324 +4.78% 143
Cape Verde Cape Verde 2,339,914,470 +8.31% 136
Costa Rica Costa Rica 87,772,634,133 +10% 61
Cyprus Cyprus 32,123,572,070 +7.33% 88
Czechia Czechia 314,779,534,964 -0.115% 37
Germany Germany 4,220,679,859,823 +2.16% 2
Djibouti Djibouti 3,824,868,464 +4.32% 133
Dominica Dominica 572,055,556 +4.31% 149
Denmark Denmark 381,249,890,767 +5.62% 31
Dominican Republic Dominican Republic 115,570,763,015 +2.95% 55
Ecuador Ecuador 116,130,029,500 +1.77% 54
Egypt Egypt 370,412,453,753 -1.5% 33
Spain Spain 1,569,333,700,216 +6.12% 12
Estonia Estonia 37,408,913,376 +2.71% 86
Finland Finland 262,428,556,551 +1.59% 43
Fiji Fiji 4,597,355,264 +4.23% 132
France France 2,826,258,843,357 +3.05% 5
Gabon Gabon 19,732,895,013 +3.58% 106
United Kingdom United Kingdom 3,282,534,684,825 +7.56% 4
Georgia Georgia 29,481,795,897 +10.2% 92
Ghana Ghana 77,346,420,782 +2.68% 66
Guinea Guinea 23,413,222,513 +13.1% 100
Gambia Gambia 2,326,067,539 +3.8% 137
Guinea-Bissau Guinea-Bissau 2,024,453,782 +1.91% 139
Equatorial Guinea Equatorial Guinea 12,633,644,533 +3.4% 123
Greece Greece 222,884,145,475 +4.89% 44
Grenada Grenada 1,140,420,933 +5.12% 144
Guatemala Guatemala 105,676,933,928 +8.41% 58
Guyana Guyana 24,103,460,850 +46.8% 97
Honduras Honduras 33,441,403,666 +8.12% 87
Croatia Croatia 76,786,991,177 +9.04% 67
Haiti Haiti 24,601,634,933 +27.8% 96
Hungary Hungary 191,654,418,464 +3.42% 46
Indonesia Indonesia 1,336,246,185,948 +1.91% 13
India India 3,547,657,179,666 +7.14% 3
Ireland Ireland 541,254,636,013 +3.38% 21
Iran Iran 425,307,080,235 +7.98% 29
Iraq Iraq 279,641,257,615 +4% 39
Iceland Iceland 29,777,745,592 +5.72% 91
Israel Israel 492,635,568,250 +4.62% 24
Italy Italy 2,119,798,419,876 +2.45% 6
Jamaica Jamaica 16,496,233,085 +2.59% 112
Jordan Jordan 46,635,900,563 +4.7% 80
Kazakhstan Kazakhstan 269,824,713,703 +11.3% 40
Kenya Kenya 116,241,901,116 +17% 53
Kyrgyzstan Kyrgyzstan 14,942,185,004 +16.7% 116
Cambodia Cambodia 43,535,449,507 +9.69% 81
St. Kitts & Nevis St. Kitts & Nevis 926,318,519 +0.554% 147
Kuwait Kuwait 171,757,321,462 -2.97% 48
Laos Laos 14,745,851,367 +2.65% 118
Libya Libya 48,687,059,829 +3.28% 78
St. Lucia St. Lucia 2,212,111,111 +4.56% 138
Sri Lanka Sri Lanka 90,351,411,392 +15.1% 60
Lesotho Lesotho 1,943,330,018 +6.77% 140
Lithuania Lithuania 76,005,906,004 +5.79% 68
Luxembourg Luxembourg 84,860,864,948 +6.07% 62
Latvia Latvia 37,892,383,507 +1.32% 85
Morocco Morocco 136,479,086,279 +5.12% 50
Moldova Moldova 15,680,134,232 +8.74% 115
Madagascar Madagascar 15,972,805,386 +9% 113
Maldives Maldives 5,991,940,937 +6.43% 131
Mexico Mexico 1,733,854,556,151 +2.85% 10
North Macedonia North Macedonia 14,651,368,049 +6.72% 119
Mali Mali 24,681,851,366 +7.7% 95
Malta Malta 22,478,433,580 +8.92% 102
Montenegro Montenegro 6,369,402,521 +5.48% 130
Mongolia Mongolia 21,138,836,356 +14.9% 103
Mozambique Mozambique 20,002,765,280 +8.45% 105
Mauritania Mauritania 9,943,837,950 +0.203% 126
Mauritius Mauritius 12,924,942,381 +5.66% 122
Malawi Malawi 10,263,282,003 -13.4% 125
Malaysia Malaysia 416,998,864,616 +5.51% 30
Namibia Namibia 12,117,131,188 +7.13% 124
Niger Niger 18,953,057,491 +17% 109
Nigeria Nigeria 182,209,045,535 -48.9% 47
Nicaragua Nicaragua 17,487,608,831 +10.3% 111
Netherlands Netherlands 1,103,437,098,389 +6.07% 16
Norway Norway 439,430,228,771 -0.127% 26
Nepal Nepal 37,985,553,424 +4.4% 84
Oman Oman 107,737,321,196 +1.16% 57
Pakistan Pakistan 351,100,174,218 +9.66% 35
Panama Panama 84,227,907,400 +3.62% 63
Peru Peru 263,255,682,008 +6.71% 42
Papua New Guinea Papua New Guinea 31,166,345,640 +6.15% 89
Poland Poland 813,178,211,422 +10.8% 18
Puerto Rico Puerto Rico 126,096,100,000 +6.4% 52
Portugal Portugal 267,867,083,289 +6.26% 41
Paraguay Paraguay 40,875,604,538 +2.35% 83
Qatar Qatar 216,845,329,670 +2.3% 45
Romania Romania 347,445,263,570 +8.49% 36
Russia Russia 1,977,958,353,778 +5.96% 8
Rwanda Rwanda 13,267,819,240 -0.487% 121
Saudi Arabia Saudi Arabia 1,169,894,400,000 +1.25% 14
Sudan Sudan 49,909,807,052 +25.1% 76
Senegal Senegal 29,051,783,119 +5.29% 93
Singapore Singapore 516,918,007,563 +7.81% 23
Sierra Leone Sierra Leone 7,362,394,282 +18% 129
El Salvador El Salvador 31,070,030,000 +3.82% 90
Serbia Serbia 75,671,104,486 +9.01% 69
São Tomé & Príncipe São Tomé & Príncipe 705,993,380 +12.5% 148
Slovakia Slovakia 128,319,938,783 +4.9% 51
Slovenia Slovenia 64,135,015,110 +4.25% 74
Sweden Sweden 546,726,700,509 +4.39% 20
Seychelles Seychelles 1,744,835,393 -3.87% 141
Turks & Caicos Islands Turks & Caicos Islands 1,436,868,000 +5.09% 142
Chad Chad 19,264,414,695 +4.48% 108
Togo Togo 8,936,587,812 +8.23% 127
Turkey Turkey 1,169,212,457,509 +17.9% 15
Tanzania Tanzania 63,450,669,445 -0.205% 75
Uganda Uganda 49,676,475,649 +10.3% 77
Ukraine Ukraine 165,472,113,760 +3.94% 49
Uruguay Uruguay 71,603,889,827 +3.75% 70
United States United States 28,558,231,000,000 +5.26% 1
Uzbekistan Uzbekistan 109,593,623,739 +12.2% 56
St. Vincent & Grenadines St. Vincent & Grenadines 987,900,000 +7.97% 145
Vietnam Vietnam 437,631,944,204 +9.95% 27
Samoa Samoa 934,723,253 +20.9% 146
Kosovo Kosovo 8,789,708,200 +4.79% 128
South Africa South Africa 360,253,975,342 +5.32% 34
Zambia Zambia 24,855,519,521 -4.28% 94
Zimbabwe Zimbabwe 41,098,049,864 +25.7% 82

                    
# 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.GDP.FCST.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.GDP.FCST.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))