Population ages 25-29, male (% of male population)

Source: worldbank.org, 03.09.2025

Year: 2024

Flag Country Value Value change, % Rank
Aruba Aruba 5.8 +0.101% 187
Afghanistan Afghanistan 8.45 +1.04% 49
Angola Angola 7.14 -0.598% 130
Albania Albania 8.22 -2.55% 58
Andorra Andorra 6.54 +0.72% 163
United Arab Emirates United Arab Emirates 13.9 -4.97% 1
Argentina Argentina 7.84 -0.746% 85
Armenia Armenia 6.98 -2.16% 139
American Samoa American Samoa 5.15 -6.11% 208
Antigua & Barbuda Antigua & Barbuda 8.08 -1.37% 68
Australia Australia 7.06 -1.72% 136
Austria Austria 6.34 -3.39% 168
Azerbaijan Azerbaijan 7.26 -5.49% 121
Burundi Burundi 6.65 -0.0525% 160
Belgium Belgium 6.14 -1.25% 176
Benin Benin 7.87 -0.184% 82
Burkina Faso Burkina Faso 7.79 +0.845% 89
Bangladesh Bangladesh 7.96 -1.33% 75
Bulgaria Bulgaria 4.86 -2.23% 213
Bahrain Bahrain 9.12 -2.91% 20
Bahamas Bahamas 8.17 -2.46% 62
Bosnia & Herzegovina Bosnia & Herzegovina 5.99 +4.52% 182
Belarus Belarus 5.6 -3.64% 195
Belize Belize 9.51 -0.153% 12
Bermuda Bermuda 5.26 +1.1% 206
Bolivia Bolivia 8.71 -0.39% 36
Brazil Brazil 7.9 -0.227% 81
Barbados Barbados 6.63 +1.32% 161
Brunei Brunei 9.04 -3.1% 21
Bhutan Bhutan 9.61 -4.12% 11
Botswana Botswana 9.8 -3.08% 8
Central African Republic Central African Republic 7.16 +2.96% 129
Canada Canada 7.3 +0.162% 119
Switzerland Switzerland 6.04 -2.83% 178
Chile Chile 7.95 -2.17% 76
China China 6.25 -2.29% 171
Côte d’Ivoire Côte d’Ivoire 7.24 +0.899% 125
Cameroon Cameroon 7.73 -0.424% 94
Congo - Kinshasa Congo - Kinshasa 7.37 -0.296% 114
Congo - Brazzaville Congo - Brazzaville 7.18 -0.0596% 128
Colombia Colombia 8.84 -1.03% 29
Comoros Comoros 7.32 +3.43% 118
Cape Verde Cape Verde 8.56 -3.34% 45
Costa Rica Costa Rica 8.01 -1.06% 74
Cuba Cuba 6.33 +0.507% 169
Curaçao Curaçao 9.74 -2.32% 9
Cayman Islands Cayman Islands 6.72 -5.16% 154
Cyprus Cyprus 6.82 -4.94% 146
Czechia Czechia 5.31 -5.54% 203
Germany Germany 6.03 -1.11% 180
Djibouti Djibouti 8.59 +0.0082% 43
Dominica Dominica 7.38 -4.15% 113
Denmark Denmark 6.96 -1.22% 141
Dominican Republic Dominican Republic 8.22 -1.34% 59
Algeria Algeria 6.56 -5.68% 162
Ecuador Ecuador 8.64 -0.461% 37
Egypt Egypt 7.79 +0.308% 91
Eritrea Eritrea 8.57 +2.59% 44
Spain Spain 5.35 -0.94% 202
Estonia Estonia 5.35 -4.07% 201
Ethiopia Ethiopia 8.63 +0.119% 38
Finland Finland 6.15 -2.3% 175
Fiji Fiji 7.94 -1.37% 77
France France 6.04 +2.18% 179
Faroe Islands Faroe Islands 6.02 +2.49% 181
Micronesia (Federated States of) Micronesia (Federated States of) 9.16 +0.183% 19
Gabon Gabon 7.49 -2.6% 106
United Kingdom United Kingdom 6.72 -1.01% 155
Georgia Georgia 6.45 -1.36% 165
Ghana Ghana 7.83 -0.353% 86
Gibraltar Gibraltar 6.79 +2.06% 148
Guinea Guinea 8.59 -0.046% 42
Gambia Gambia 8.3 -0.345% 55
Guinea-Bissau Guinea-Bissau 8.29 +0.328% 56
Equatorial Guinea Equatorial Guinea 7.22 -2.75% 126
Greece Greece 5.47 -0.707% 199
Grenada Grenada 7.86 -1.18% 84
Greenland Greenland 7.22 -4.7% 127
Guatemala Guatemala 9.44 +0.225% 13
Guam Guam 7.24 -1.35% 124
Guyana Guyana 9.28 +0.273% 16
Hong Kong SAR China Hong Kong SAR China 5.72 -5.81% 189
Honduras Honduras 9.22 +0.0371% 17
Croatia Croatia 5.93 +0.993% 184
Haiti Haiti 8.77 -0.453% 32
Hungary Hungary 6.22 -3.56% 172
Indonesia Indonesia 7.92 -0.372% 80
Isle of Man Isle of Man 5.3 +1.05% 204
India India 8.72 -0.103% 34
Ireland Ireland 6.19 +1.99% 173
Iran Iran 6.74 -3.97% 151
Iraq Iraq 8.45 +0.14% 50
Iceland Iceland 7.7 -3.59% 95
Israel Israel 7 +0.279% 138
Italy Italy 5.61 +0.738% 194
Jamaica Jamaica 9.38 -2.53% 14
Jordan Jordan 8.49 -4.21% 48
Japan Japan 5.15 +0.794% 207
Kazakhstan Kazakhstan 6.41 -5.58% 166
Kenya Kenya 8.1 +0.948% 67
Kyrgyzstan Kyrgyzstan 7.57 -2.89% 104
Cambodia Cambodia 7.46 -3.21% 107
Kiribati Kiribati 8.71 -0.664% 35
St. Kitts & Nevis St. Kitts & Nevis 7.55 +0.826% 105
South Korea South Korea 7.25 -2.32% 123
Kuwait Kuwait 9.33 -6.19% 15
Laos Laos 8.93 -0.064% 24
Lebanon Lebanon 7.36 +4.66% 115
Liberia Liberia 7.66 +1.87% 98
Libya Libya 7.46 +0.209% 108
St. Lucia St. Lucia 8.96 -2.62% 23
Liechtenstein Liechtenstein 5.95 -2.94% 183
Sri Lanka Sri Lanka 7.41 -0.62% 111
Lesotho Lesotho 8.81 -1.44% 31
Lithuania Lithuania 7.04 -0.62% 137
Luxembourg Luxembourg 7.33 -3.8% 117
Latvia Latvia 5.12 -3.57% 210
Macao SAR China Macao SAR China 7.08 -5.67% 134
Saint Martin (French part) Saint Martin (French part) 3.6 -18.9% 216
Morocco Morocco 7.62 -1.16% 101
Monaco Monaco 5.05 +3.39% 212
Moldova Moldova 5.48 -6.92% 198
Madagascar Madagascar 8.44 +1.16% 51
Maldives Maldives 11.8 -10.6% 3
Mexico Mexico 8.3 -0.581% 54
Marshall Islands Marshall Islands 5.13 -2.09% 209
North Macedonia North Macedonia 6.3 -2.66% 170
Mali Mali 7.08 +0.674% 135
Malta Malta 7.42 -6.92% 110
Myanmar (Burma) Myanmar (Burma) 8.21 -0.694% 61
Montenegro Montenegro 6.41 -0.361% 167
Mongolia Mongolia 6.94 -3.11% 143
Northern Mariana Islands Northern Mariana Islands 4.5 -7.84% 215
Mozambique Mozambique 7.93 +0.629% 79
Mauritania Mauritania 7.36 +0.36% 116
Mauritius Mauritius 8.02 -2.77% 73
Malawi Malawi 8.21 +1.18% 60
Malaysia Malaysia 9.17 -1.07% 18
Namibia Namibia 8.62 -0.502% 41
New Caledonia New Caledonia 6.67 -0.83% 159
Niger Niger 7.26 +1.57% 122
Nigeria Nigeria 7.66 +0.618% 97
Nicaragua Nicaragua 8.98 -0.957% 22
Netherlands Netherlands 6.86 +0.851% 144
Norway Norway 6.78 -0.453% 149
Nepal Nepal 8.62 -0.18% 39
Nauru Nauru 7.29 -5.27% 120
New Zealand New Zealand 6.98 -2.02% 140
Oman Oman 11.7 -2.51% 4
Pakistan Pakistan 8.15 -0.199% 64
Panama Panama 7.79 -0.194% 90
Peru Peru 8.03 -0.748% 72
Philippines Philippines 8.92 +0.291% 26
Palau Palau 5.67 -10.5% 192
Papua New Guinea Papua New Guinea 8.53 -0.0933% 46
Poland Poland 5.93 -4.43% 185
Puerto Rico Puerto Rico 6.77 +4.38% 150
North Korea North Korea 7.6 -1.32% 102
Portugal Portugal 5.68 +1.05% 191
Paraguay Paraguay 8.73 -1.29% 33
Palestinian Territories Palestinian Territories 8.11 -2.48% 66
French Polynesia French Polynesia 6.46 -0.349% 164
Qatar Qatar 12.7 -6.35% 2
Romania Romania 5.55 -0.231% 196
Russia Russia 5.5 -3.49% 197
Rwanda Rwanda 7.69 -0.551% 96
Saudi Arabia Saudi Arabia 10.6 -4.49% 7
Sudan Sudan 8.31 -0.115% 53
Senegal Senegal 8.29 +1.12% 57
Singapore Singapore 11 -0.198% 5
Solomon Islands Solomon Islands 7.77 +2.18% 93
Sierra Leone Sierra Leone 8.37 +0.98% 52
El Salvador El Salvador 10.6 +0.664% 6
San Marino San Marino 5.27 +2.19% 205
Somalia Somalia 7.58 +0.499% 103
Serbia Serbia 5.86 -2.26% 186
South Sudan South Sudan 6.68 +5.41% 158
São Tomé & Príncipe São Tomé & Príncipe 7.1 +1.45% 132
Suriname Suriname 8.12 +1.77% 65
Slovakia Slovakia 5.71 -4.5% 190
Slovenia Slovenia 5.61 -2.06% 193
Sweden Sweden 6.18 -2.7% 174
Eswatini Eswatini 8.91 +0.213% 27
Sint Maarten Sint Maarten 5.42 -0.414% 200
Seychelles Seychelles 8.81 -3.98% 30
Syria Syria 9.62 +8.12% 10
Turks & Caicos Islands Turks & Caicos Islands 6.69 -2.77% 157
Chad Chad 7.64 +2.81% 100
Togo Togo 7.66 -0.12% 99
Thailand Thailand 7.4 -0.943% 112
Tajikistan Tajikistan 8.17 -0.376% 63
Turkmenistan Turkmenistan 8.87 -3.94% 28
Timor-Leste Timor-Leste 8.62 +2.34% 40
Tonga Tonga 5.08 -1.9% 211
Trinidad & Tobago Trinidad & Tobago 6.82 -2.33% 145
Tunisia Tunisia 6.96 -3.67% 142
Turkey Turkey 8.06 +0.35% 69
Tuvalu Tuvalu 7.77 -4.37% 92
Tanzania Tanzania 7.94 +0.567% 78
Uganda Uganda 8.5 +0.378% 47
Ukraine Ukraine 5.73 -1.46% 188
Uruguay Uruguay 7.81 -0.324% 88
United States United States 6.73 -1.15% 152
Uzbekistan Uzbekistan 7.87 -5.23% 83
St. Vincent & Grenadines St. Vincent & Grenadines 7.43 -1.25% 109
Venezuela Venezuela 6.73 +1.23% 153
British Virgin Islands British Virgin Islands 7.09 -0.169% 133
U.S. Virgin Islands U.S. Virgin Islands 4.85 -1.08% 214
Vietnam Vietnam 6.79 -5.63% 147
Vanuatu Vanuatu 7.13 -2.98% 131
Samoa Samoa 6.08 -1.64% 177
Kosovo Kosovo 7.82 -1.59% 87
Yemen Yemen 8.06 -1.95% 70
South Africa South Africa 8.92 -1.95% 25
Zambia Zambia 8.06 +0.274% 71
Zimbabwe Zimbabwe 6.69 +4.91% 156

                    
# 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 = 'SP.POP.2529.MA.5Y'

# 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 <- 'SP.POP.2529.MA.5Y'

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