Services, value added (current US$)

Source: worldbank.org, 03.09.2025

Year: 2024

Flag Country Value Value change, % Rank
Angola Angola 31,636,094,165 -6.28% 75
Albania Albania 13,285,509,321 +17.6% 101
Andorra Andorra 3,134,476,423 +5.75% 136
Argentina Argentina 337,883,463,973 -1.6% 25
Armenia Armenia 15,849,382,527 +10.7% 97
Australia Australia 1,148,451,933,428 +4.54% 11
Austria Austria 340,751,661,628 +5.27% 24
Azerbaijan Azerbaijan 31,447,764,706 +9.19% 76
Belgium Belgium 479,160,416,806 +4.55% 19
Benin Benin 10,500,617,429 +11.8% 107
Burkina Faso Burkina Faso 9,356,035,397 +5.48% 113
Bangladesh Bangladesh 231,436,358,544 +3.52% 33
Bulgaria Bulgaria 70,225,146,335 +9.72% 57
Bahamas Bahamas 12,220,700,000 +1.87% 103
Bosnia & Herzegovina Bosnia & Herzegovina 16,437,633,190 +6.55% 95
Belarus Belarus 37,738,032,747 +6.68% 72
Brazil Brazil 1,292,712,664,358 -0.307% 8
Brunei Brunei 5,984,994,407 +2.09% 126
Botswana Botswana 12,317,948,662 +7.2% 102
Central African Republic Central African Republic 1,113,555,267 +7.56% 144
Switzerland Switzerland 674,605,474,341 +4.52% 15
Chile Chile 185,205,452,183 -4.17% 42
China China 10,636,797,478,788 +3.34% 2
Côte d’Ivoire Côte d’Ivoire 46,618,815,965 +11.1% 70
Cameroon Cameroon 25,614,951,628 +3.58% 82
Congo - Kinshasa Congo - Kinshasa 23,354,613,455 +7.02% 85
Congo - Brazzaville Congo - Brazzaville 7,074,152,692 +14.2% 122
Colombia Colombia 243,561,917,882 +17.2% 31
Comoros Comoros 774,168,431 +7% 148
Cape Verde Cape Verde 1,920,676,189 +8.59% 140
Costa Rica Costa Rica 65,585,211,690 +11.5% 60
Cyprus Cyprus 27,944,808,365 +7.59% 78
Czechia Czechia 205,289,280,048 +0.241% 36
Germany Germany 2,978,122,235,025 +4.2% 3
Djibouti Djibouti 3,086,866,915 +2.68% 137
Dominica Dominica 392,259,259 +2.02% 153
Denmark Denmark 275,019,640,841 +4.86% 28
Dominican Republic Dominican Republic 74,335,936,084 +3.56% 55
Ecuador Ecuador 71,260,660,200 +0.341% 56
Egypt Egypt 190,376,567,783 -6.9% 39
Spain Spain 1,189,616,231,311 +6.94% 10
Estonia Estonia 27,830,625,542 +4.43% 79
Finland Finland 188,688,139,976 +3.53% 40
Fiji Fiji 3,283,205,601 +9.45% 135
France France 2,226,104,850,566 +4.71% 5
Gabon Gabon 7,833,467,261 +5.74% 119
United Kingdom United Kingdom 2,652,248,629,345 +8.57% 4
Georgia Georgia 21,209,713,991 +11% 92
Ghana Ghana 36,324,579,168 +4.6% 73
Guinea Guinea 9,497,766,599 +13.9% 112
Gambia Gambia 1,352,467,822 +5.23% 142
Guinea-Bissau Guinea-Bissau 892,655,968 -6.34% 147
Equatorial Guinea Equatorial Guinea 6,522,995,166 +4.96% 124
Greece Greece 174,858,090,644 +4.61% 43
Grenada Grenada 906,531,603 +6.1% 146
Guatemala Guatemala 70,002,470,891 +9.23% 58
Guyana Guyana 3,810,470,983 +20% 133
Honduras Honduras 21,665,982,104 +9.54% 90
Croatia Croatia 55,277,818,272 +10.9% 64
Haiti Haiti 12,186,536,304 +29.1% 104
Hungary Hungary 133,140,643,850 +6.97% 46
Indonesia Indonesia 611,187,317,103 +3.95% 16
India India 1,950,581,186,121 +8.29% 6
Ireland Ireland 357,100,043,383 +6.37% 23
Iran Iran 209,471,251,362 +7.26% 35
Iraq Iraq 127,981,126,077 +9% 47
Iceland Iceland 21,931,531,903 +7.03% 88
Israel Israel 391,973,961,625 +6.08% 22
Italy Italy 1,556,560,095,353 +4.17% 7
Jamaica Jamaica 12,010,058,864 +2.82% 105
Jordan Jordan 32,220,555,352 +3.77% 74
Kazakhstan Kazakhstan 167,881,224,831 +13.8% 44
Kenya Kenya 69,647,643,049 +16.3% 59
Kyrgyzstan Kyrgyzstan 9,113,133,076 +17% 115
Cambodia Cambodia 16,499,095,965 +7.8% 94
St. Kitts & Nevis St. Kitts & Nevis 698,311,111 +1.28% 151
Kuwait Kuwait 89,493,878,432 +3.92% 50
Laos Laos 7,184,494,233 +3.07% 121
Liberia Liberia 1,999,000,000 +30% 138
Libya Libya 16,017,646,591 +39.7% 96
St. Lucia St. Lucia 1,934,692,593 +4.41% 139
Sri Lanka Sri Lanka 56,873,659,126 +13.5% 63
Lesotho Lesotho 1,090,890,669 +1.86% 145
Lithuania Lithuania 53,967,161,128 +7.21% 65
Luxembourg Luxembourg 76,302,755,342 +7.6% 54
Latvia Latvia 27,462,460,320 +3.64% 80
Morocco Morocco 83,620,568,651 +6.68% 53
Moldova Moldova 11,332,616,349 +10.2% 106
Madagascar Madagascar 8,086,819,136 +5.16% 118
Maldives Maldives 5,150,104,099 +10.6% 128
Mexico Mexico 1,077,974,449,897 +4.22% 12
North Macedonia North Macedonia 9,873,057,301 +9.48% 109
Mali Mali 9,763,131,648 +9.58% 110
Malta Malta 19,648,659,472 +9.07% 93
Myanmar (Burma) Myanmar (Burma) 30,634,543,733 +15.6% 77
Montenegro Montenegro 5,013,251,014 +6.96% 130
Mongolia Mongolia 10,418,330,719 +24.9% 108
Mozambique Mozambique 8,602,411,426 +0.564% 117
Mauritania Mauritania 4,648,703,225 -0.431% 132
Mauritius Mauritius 9,623,982,070 +5.1% 111
Malawi Malawi 4,943,721,160 -18.2% 131
Malaysia Malaysia 226,109,148,687 +5.89% 34
Namibia Namibia 7,282,398,148 +10.1% 120
Niger Niger 8,865,262,927 +14.1% 116
Nigeria Nigeria 88,326,418,401 -43.2% 51
Nicaragua Nicaragua 9,222,378,486 +11.4% 114
Netherlands Netherlands 863,515,561,305 +7.41% 13
Norway Norway 250,369,972,858 +3.77% 30
Nepal Nepal 23,696,598,088 +4.26% 84
Oman Oman 49,745,123,537 +3.64% 69
Pakistan Pakistan 188,569,297,144 +9.94% 41
Panama Panama 59,348,435,500 +5.86% 62
Peru Peru 152,499,012,598 +11.6% 45
Philippines Philippines 291,850,724,241 +7.01% 27
Papua New Guinea Papua New Guinea 13,490,115,533 +4.16% 100
Poland Poland 548,302,934,372 +16% 18
Puerto Rico Puerto Rico 64,855,100,000 +5.11% 61
Portugal Portugal 204,983,124,656 +6.08% 37
Paraguay Paraguay 21,671,167,689 +4.41% 89
Qatar Qatar 100,079,945,055 +3.76% 49
Romania Romania 239,107,950,592 +12.2% 32
Russia Russia 1,250,512,350,341 +6.4% 9
Rwanda Rwanda 6,776,676,822 +3.43% 123
Saudi Arabia Saudi Arabia 583,610,400,000 +7.01% 17
Sudan Sudan 27,391,619,865 +65.9% 81
Senegal Senegal 15,843,456,611 +4.09% 98
Singapore Singapore 399,751,315,826 +8.8% 21
Sierra Leone Sierra Leone 3,382,601,389 +25% 134
El Salvador El Salvador 21,585,600,000 +4.94% 91
Serbia Serbia 52,148,002,486 +11.3% 67
São Tomé & Príncipe São Tomé & Príncipe 585,598,291 +13.7% 152
Slovakia Slovakia 84,999,336,046 +5.65% 52
Slovenia Slovenia 42,204,168,414 +5.69% 71
Sweden Sweden 402,045,246,952 +5.27% 20
Seychelles Seychelles 1,425,297,575 -3.21% 141
Turks & Caicos Islands Turks & Caicos Islands 1,267,767,000 +5.13% 143
Chad Chad 6,514,077,485 +9.22% 125
Togo Togo 5,158,057,645 +8.73% 127
Thailand Thailand 311,398,052,527 +3.25% 26
Turkey Turkey 751,921,586,855 +24.2% 14
Tanzania Tanzania 22,402,585,203 -1.26% 87
Uganda Uganda 23,103,869,807 +11.4% 86
Ukraine Ukraine 115,619,531,670 +4.23% 48
Uruguay Uruguay 52,837,703,403 +3.19% 66
United States United States 23,253,371,000,000 +6% 1
Uzbekistan Uzbekistan 51,954,918,016 +15.2% 68
St. Vincent & Grenadines St. Vincent & Grenadines 768,407,407 +7.95% 150
Vietnam Vietnam 201,796,160,870 +9.97% 38
Samoa Samoa 774,135,530 +21.8% 149
Kosovo Kosovo 5,098,132,993 +4.59% 129
South Africa South Africa 250,845,504,638 +5.24% 29
Zambia Zambia 14,516,724,852 -7.35% 99
Zimbabwe Zimbabwe 24,637,206,771 +12% 83

                    
# 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 = 'NV.SRV.TOTL.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 <- 'NV.SRV.TOTL.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))