Urban population (% of total population)

Source: worldbank.org, 01.09.2025

Year: 2024

Flag Country Value Value change, % Rank
Aruba Aruba 44.5 +0.497% 152
Afghanistan Afghanistan 27.3 +1.23% 185
Angola Angola 69.3 +0.863% 84
Albania Albania 65.4 +1.2% 96
Andorra Andorra 87.7 -0.0308% 31
United Arab Emirates United Arab Emirates 88 +0.261% 30
Argentina Argentina 92.6 +0.125% 14
Armenia Armenia 63.9 +0.298% 100
American Samoa American Samoa 87.3 +0.0562% 32
Antigua & Barbuda Antigua & Barbuda 24.3 +0.0247% 191
Australia Australia 86.8 +0.154% 34
Austria Austria 59.8 +0.485% 112
Azerbaijan Azerbaijan 58 +0.729% 121
Burundi Burundi 15.2 +2.54% 203
Belgium Belgium 98.2 +0.0356% 3
Benin Benin 50.7 +1.14% 138
Burkina Faso Burkina Faso 33.2 +1.99% 173
Bangladesh Bangladesh 41.2 +1.87% 160
Bulgaria Bulgaria 77 +0.438% 63
Bahrain Bahrain 90 +0.145% 20
Bahamas Bahamas 83.8 +0.166% 40
Bosnia & Herzegovina Bosnia & Herzegovina 50.7 +0.873% 137
Belarus Belarus 81.1 +0.488% 51
Belize Belize 46.8 +0.493% 147
Bermuda Bermuda 100 0% 1
Bolivia Bolivia 71.5 +0.504% 77
Brazil Brazil 88 +0.26% 29
Barbados Barbados 31.5 +0.391% 177
Brunei Brunei 79.4 +0.366% 53
Bhutan Bhutan 45 +1.47% 150
Botswana Botswana 73.5 +0.855% 71
Central African Republic Central African Republic 44.1 +1.18% 153
Canada Canada 82 +0.144% 46
Switzerland Switzerland 74.3 +0.168% 70
Chile Chile 88.1 +0.118% 28
China China 65.5 +1.51% 95
Côte d’Ivoire Côte d’Ivoire 53.6 +0.931% 134
Cameroon Cameroon 59.9 +0.973% 109
Congo - Kinshasa Congo - Kinshasa 48.1 +1.29% 144
Congo - Brazzaville Congo - Brazzaville 69.6 +0.65% 82
Colombia Colombia 82.7 +0.362% 44
Comoros Comoros 30.4 +0.949% 180
Cape Verde Cape Verde 68.4 +0.633% 90
Costa Rica Costa Rica 83.2 +0.66% 42
Cuba Cuba 77.7 +0.173% 62
Curaçao Curaçao 89 +0.0112% 22
Cayman Islands Cayman Islands 100 0% 1
Cyprus Cyprus 67.1 +0.142% 91
Czechia Czechia 74.7 +0.249% 69
Germany Germany 77.9 +0.167% 58
Djibouti Djibouti 78.7 +0.229% 57
Dominica Dominica 72.3 +0.425% 74
Denmark Denmark 88.6 +0.148% 25
Dominican Republic Dominican Republic 85 +0.669% 37
Algeria Algeria 75.7 +0.638% 66
Ecuador Ecuador 65 +0.366% 98
Egypt Egypt 43.3 +0.367% 156
Eritrea Eritrea 43.9 +1.49% 154
Spain Spain 81.8 +0.307% 49
Estonia Estonia 70 +0.299% 80
Ethiopia Ethiopia 23.7 +2.18% 192
Finland Finland 85.9 +0.115% 35
Fiji Fiji 59.2 +0.816% 115
France France 82 +0.326% 45
Faroe Islands Faroe Islands 43.2 +0.509% 157
Micronesia (Federated States of) Micronesia (Federated States of) 23.6 +0.753% 193
Gabon Gabon 91.3 +0.305% 19
United Kingdom United Kingdom 84.9 +0.286% 38
Georgia Georgia 61.2 +0.716% 104
Ghana Ghana 59.9 +1.04% 111
Gibraltar Gibraltar 100 0% 1
Guinea Guinea 38.5 +1.13% 166
Gambia Gambia 65.1 +0.943% 97
Guinea-Bissau Guinea-Bissau 45.9 +0.939% 148
Equatorial Guinea Equatorial Guinea 74.9 +0.572% 68
Greece Greece 81 +0.386% 52
Grenada Grenada 37.3 +0.561% 170
Greenland Greenland 88.1 +0.238% 27
Guatemala Guatemala 53.5 +0.836% 136
Guam Guam 95.2 +0.0778% 7
Guyana Guyana 27.3 +0.567% 184
Hong Kong SAR China Hong Kong SAR China 100 0% 1
Honduras Honduras 60.8 +1.01% 105
Croatia Croatia 58.9 +0.632% 116
Haiti Haiti 60.5 +1.37% 106
Hungary Hungary 73.2 +0.432% 72
Indonesia Indonesia 59.2 +1.08% 114
Isle of Man Isle of Man 53.7 +0.423% 133
India India 36.9 +1.38% 171
Ireland Ireland 64.8 +0.456% 99
Iran Iran 77.7 +0.571% 61
Iraq Iraq 71.9 +0.355% 76
Iceland Iceland 94.1 +0.0553% 10
Israel Israel 92.9 +0.0991% 13
Italy Italy 72.3 +0.443% 75
Jamaica Jamaica 57.8 +0.669% 122
Jordan Jordan 92.2 +0.202% 16
Japan Japan 92.1 +0.0989% 18
Kazakhstan Kazakhstan 58.4 +0.358% 119
Kenya Kenya 30 +1.79% 181
Kyrgyzstan Kyrgyzstan 38.2 +0.966% 168
Cambodia Cambodia 26 +1.82% 188
Kiribati Kiribati 58.4 +1.19% 118
St. Kitts & Nevis St. Kitts & Nevis 31.2 +0.402% 178
South Korea South Korea 81.5 +0.0516% 50
Kuwait Kuwait 100 0% 1
Laos Laos 38.9 +1.72% 165
Lebanon Lebanon 89.6 +0.191% 21
Liberia Liberia 54.1 +0.952% 132
Libya Libya 81.9 +0.369% 47
St. Lucia St. Lucia 19.3 +0.699% 198
Liechtenstein Liechtenstein 14.7 +0.616% 204
Sri Lanka Sri Lanka 19.4 +1.07% 197
Lesotho Lesotho 30.9 +1.58% 179
Lithuania Lithuania 68.9 +0.352% 86
Luxembourg Luxembourg 92.3 +0.204% 15
Latvia Latvia 68.8 +0.21% 88
Macao SAR China Macao SAR China 100 0% 1
Morocco Morocco 65.6 +0.802% 94
Monaco Monaco 100 0% 1
Moldova Moldova 43.6 +0.521% 155
Madagascar Madagascar 41.2 +1.66% 159
Maldives Maldives 42.4 +1.04% 158
Mexico Mexico 81.9 +0.343% 48
Marshall Islands Marshall Islands 79.2 +0.431% 54
North Macedonia North Macedonia 59.9 +0.654% 110
Mali Mali 46.9 +1.61% 145
Malta Malta 95 +0.0685% 8
Myanmar (Burma) Myanmar (Burma) 32.5 +1.11% 176
Montenegro Montenegro 68.8 +0.493% 87
Mongolia Mongolia 69.3 +0.252% 85
Northern Mariana Islands Northern Mariana Islands 92.2 +0.103% 17
Mozambique Mozambique 39.3 +1.48% 164
Mauritania Mauritania 58.5 +1.32% 117
Mauritius Mauritius 40.9 +0.188% 161
Malawi Malawi 18.6 +1.74% 199
Malaysia Malaysia 79.2 +0.616% 55
Namibia Namibia 55.8 +1.66% 125
New Caledonia New Caledonia 73.1 +0.532% 73
Niger Niger 17.2 +1.04% 202
Nigeria Nigeria 55 +1.38% 126
Nicaragua Nicaragua 60.2 +0.511% 108
Netherlands Netherlands 93.5 +0.294% 12
Norway Norway 84.3 +0.385% 39
Nepal Nepal 22.4 +2.11% 195
Nauru Nauru 100 0% 1
New Zealand New Zealand 87.1 +0.122% 33
Oman Oman 89 +0.676% 23
Pakistan Pakistan 38.4 +0.854% 167
Panama Panama 69.9 +0.541% 81
Peru Peru 79.1 +0.275% 56
Philippines Philippines 48.6 +0.677% 142
Palau Palau 82.8 +0.523% 43
Papua New Guinea Papua New Guinea 13.9 +1.14% 205
Poland Poland 60.3 +0.186% 107
Puerto Rico Puerto Rico 93.7 +0.032% 11
North Korea North Korea 63.5 +0.475% 101
Portugal Portugal 68.4 +0.761% 89
Paraguay Paraguay 63.5 +0.538% 102
Palestinian Territories Palestinian Territories 77.9 +0.38% 60
French Polynesia French Polynesia 62.4 +0.212% 103
Qatar Qatar 99.4 +0.0332% 2
Romania Romania 54.9 +0.38% 127
Russia Russia 75.5 +0.288% 67
Rwanda Rwanda 18.1 +1.06% 200
Saudi Arabia Saudi Arabia 85.2 +0.26% 36
Sudan Sudan 36.8 +1.13% 172
Senegal Senegal 50.1 +1.01% 141
Singapore Singapore 100 0% 1
Solomon Islands Solomon Islands 26.5 +1.73% 186
Sierra Leone Sierra Leone 44.8 +1.08% 151
El Salvador El Salvador 76 +0.8% 65
San Marino San Marino 97.9 +0.0981% 4
Somalia Somalia 48.5 +1.25% 143
Serbia Serbia 57.4 +0.452% 123
South Sudan South Sudan 21.6 +1.72% 196
São Tomé & Príncipe São Tomé & Príncipe 77 +0.802% 64
Suriname Suriname 66.5 +0.184% 93
Slovakia Slovakia 54.2 +0.268% 131
Slovenia Slovenia 56.4 +0.624% 124
Sweden Sweden 89 +0.268% 24
Eswatini Eswatini 25 +0.9% 189
Sint Maarten Sint Maarten 100 0% 1
Seychelles Seychelles 59.2 +0.717% 113
Syria Syria 58 +1.11% 120
Turks & Caicos Islands Turks & Caicos Islands 94.4 +0.197% 9
Chad Chad 24.7 +1.33% 190
Togo Togo 45.1 +1.29% 149
Thailand Thailand 54.3 +1.33% 130
Tajikistan Tajikistan 28.5 +1.02% 182
Turkmenistan Turkmenistan 54.5 +0.965% 129
Timor-Leste Timor-Leste 32.8 +1.19% 174
Tonga Tonga 23.2 +0.216% 194
Trinidad & Tobago Trinidad & Tobago 53.6 +0.23% 135
Tunisia Tunisia 70.9 +0.476% 78
Turkey Turkey 77.9 +0.555% 59
Tuvalu Tuvalu 66.9 +1.04% 92
Tanzania Tanzania 38.1 +1.94% 169
Uganda Uganda 27.4 +2.31% 183
Ukraine Ukraine 70.3 +0.27% 79
Uruguay Uruguay 95.9 +0.0846% 6
United States United States 83.5 +0.261% 41
Uzbekistan Uzbekistan 50.6 +0.186% 139
St. Vincent & Grenadines St. Vincent & Grenadines 54.7 +0.785% 128
Venezuela Venezuela 88.5 +0.0758% 26
British Virgin Islands British Virgin Islands 50.2 +0.85% 140
U.S. Virgin Islands U.S. Virgin Islands 96.3 +0.0904% 5
Vietnam Vietnam 40.2 +1.81% 163
Vanuatu Vanuatu 26.1 +0.658% 187
Samoa Samoa 17.4 -0.503% 201
Yemen Yemen 40.5 +1.62% 162
South Africa South Africa 69.3 +0.696% 83
Zambia Zambia 46.9 +1.25% 146
Zimbabwe Zimbabwe 32.7 +0.471% 175

The indicator of urban population as a percentage of total population is a critical metric for understanding the dynamics of human settlement patterns across the globe. It reflects the extent to which populations are migrating from rural areas to cities and urban centers. This shift can be attributed to various factors such as economic opportunities, better access to services, and the search for improved living conditions. In recent years, the world has witnessed a significant increase in urbanization, with the median value of urban population reaching approximately 64.47% in 2023. This means that over half of the global population resides in urban areas, marking a paradigm shift in where people choose to live and work.

The importance of urban population statistics cannot be overstated. They not only inform government policy and urban planning but also drive investment and resource allocation. High levels of urbanization can lead to economic growth as cities tend to concentrate resources, talent, and innovations. However, unchecked urbanization may also strain infrastructure, housing, and social services, leading to challenges such as congestion, pollution, and inequity.

Urban population percentage is closely related to several other indicators, including GDP per capita, employment rates, and quality of life statistics. For instance, countries with high urban populations often exhibit higher GDP per capita due to the concentration of economic activities. Additionally, urban environments typically offer better job opportunities, which can lower unemployment rates compared to rural areas where job markets may be less vibrant. Furthermore, the quality of life in urban settings can vary significantly, influenced by factors such as access to healthcare, education, and public services.

Many factors affect urban population rates. One significant determinant is economic development; as nations industrialize, job opportunities in cities frequently attract rural dwellers seeking better livelihoods. Demographic trends also play a role, with factors such as age distribution, birth rates, and migration patterns exhibiting a profound impact on urbanization. For example, younger populations are more likely to migrate to urban areas in search of educational opportunities and employment, thereby increasing urban population percentages.

To address the challenges posed by rapid urbanization, various strategies and solutions can be implemented. Effective urban planning is essential, focusing on creating sustainable cities that can accommodate growing populations without compromising quality of life. Strategies may include developing efficient public transit systems, expanding green spaces, and investing in affordable housing projects. Moreover, policies that promote integrated urban-rural development can mitigate the pressure on urban centers while improving living conditions in rural areas.

However, the pursuit of urbanization is not without its flaws. While urban areas present numerous advantages, they also exacerbate social inequalities and environmental issues. The urban poor often face inadequate access to essential services and housing, leading to the proliferation of informal settlements. Additionally, urban centers are significant contributors to climate change, consuming vast amounts of energy and resources, necessitating a balanced approach that acknowledges both the benefits and drawbacks of urban living.

Examining the 2023 data highlights the diversity of urbanization across different regions. The highest urban population percentages are seen in jurisdictions like Bermuda, Cayman Islands, Gibraltar, Hong Kong SAR China, and Kuwait, each boasting an impressive 100% urban population. This raises questions regarding the implications of such complete urbanization: while these regions enjoy efficient service delivery and a high concentration of opportunities, they may also face challenges related to sustainability and livability.

In stark contrast, countries such as Papua New Guinea (13.72%), Liechtenstein (14.62%), and Burundi (14.78%) demonstrate significantly lower urbanization levels. These figures illustrate how geographical, economic, and historical contexts shape settlement patterns. Low urban population percentages can indicate challenges in infrastructure development, limited economic opportunities, and a reliance on primary industries, which impede the growth of urban centers.

Over the decades, the global trend has leaned toward increasing urbanization, illustrated by historical data from 1960 to 2023. The world witnessed a steady rise in urban population percentages, growing from 33.65% in 1960 to over 57.25% in recent years. This trajectory signifies a shift in global demographics and the resulting implications for economies and ecosystems alike. One notable observation from the historical data is that while urbanization can spur economic growth, it also necessitates robust governance and strategic planning to manage the associated challenges effectively.

As we move forward, understanding the implications of urban population figures will be crucial for policymakers and stakeholders. There must be a focus on developing sustainable urban centers that promote economic opportunities while ensuring equitable access to vital services. Moreover, pro-active measures should be taken to address environmental concerns stemming from urbanization, such as investing in renewable energy, improving waste management systems, and enhancing urban green spaces. By considering these factors and strategies, cities can harness the benefits of increased urban populations while working to alleviate the associated challenges.

                    
# 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.URB.TOTL.IN.ZS'

# 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.URB.TOTL.IN.ZS'

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