Commercial bank branches (per 100,000 adults)

Source: worldbank.org, 01.09.2025

Year: 2023

Flag Country Value Value change, % Rank
Aruba Aruba 10 -0.47% 82
Angola Angola 7.16 -5.63% 99
Albania Albania 16.9 -2.03% 43
United Arab Emirates United Arab Emirates 7.71 -2.38% 97
Argentina Argentina 12.4 -3.3% 69
Armenia Armenia 24.7 -5.06% 24
Antigua & Barbuda Antigua & Barbuda 16.9 -14.2% 45
Australia Australia 16.9 -12.7% 44
Austria Austria 11 -3.91% 75
Azerbaijan Azerbaijan 6.39 -3.16% 104
Bangladesh Bangladesh 8.81 -0.334% 90
Bulgaria Bulgaria 92 +16.4% 2
Bahrain Bahrain 14.6 -13.2% 58
Bahamas Bahamas 21.7 -7.66% 31
Bosnia & Herzegovina Bosnia & Herzegovina 29.2 -0.934% 19
Belize Belize 14.7 +0.277% 57
Bolivia Bolivia 62.6 -15.5% 3
Brazil Brazil 16 -3.17% 51
Barbados Barbados 13.2 +2.83% 65
Botswana Botswana 8.16 +5.6% 94
Canada Canada 19 -3.77% 39
Switzerland Switzerland 34.1 -2.67% 9
Chile Chile 9.48 -5.28% 85
China China 8.77 -0.263% 91
Colombia Colombia 12.8 +0.149% 66
Cape Verde Cape Verde 29.9 -1.51% 17
Cyprus Cyprus 21.1 -3.38% 34
Czechia Czechia 15.4 -7.25% 54
Germany Germany 6.62 -5.75% 102
Djibouti Djibouti 9.69 +3.51% 84
Dominica Dominica 10.2 -25.5% 81
Denmark Denmark 16.7 -4.75% 46
Dominican Republic Dominican Republic 10.8 +0.0374% 76
Algeria Algeria 5.26 -0.505% 111
Ecuador Ecuador 8.84 -1% 89
Egypt Egypt 6.21 -0.788% 105
Spain Spain 32.4 -3.4% 12
Estonia Estonia 6.56 -4% 103
Ethiopia Ethiopia 14.5 +20.3% 59
Finland Finland 5.87 -1.51% 107
France France 31.3 -2.75% 14
Micronesia (Federated States of) Micronesia (Federated States of) 12.4 -1.47% 70
Georgia Georgia 31.2 -0.55% 15
Ghana Ghana 4.44 -22.8% 116
Guinea Guinea 2.8 +2.37% 123
Gambia Gambia 5.72 -2.14% 108
Greece Greece 15.7 -3.92% 52
Grenada Grenada 16.6 -16.5% 48
Guatemala Guatemala 22.8 -1.95% 29
Hong Kong SAR China Hong Kong SAR China 18.2 -4.38% 41
Honduras Honduras 15.6 +1.9% 53
Croatia Croatia 24.7 -5.79% 23
Hungary Hungary 16.6 -4.48% 47
Indonesia Indonesia 11.7 -5.44% 74
India India 14.5 +1.06% 60
Iraq Iraq 3.2 -6.24% 120
Iceland Iceland 23.3 -8.06% 27
Israel Israel 14.2 -2.12% 64
Italy Italy 31.5 -4.78% 13
Jamaica Jamaica 6.68 +3.64% 101
Jordan Jordan 12.2 -2.44% 72
Japan Japan 33.7 +0.0283% 11
Kenya Kenya 4.48 -0.561% 115
Kyrgyzstan Kyrgyzstan 7.35 -1.42% 98
Cambodia Cambodia 14.3 +13.7% 62
St. Kitts & Nevis St. Kitts & Nevis 33.7 -7.65% 10
South Korea South Korea 12.7 -1.38% 67
Kuwait Kuwait 12.3 -0.987% 71
Lebanon Lebanon 19 -8.46% 38
Liberia Liberia 3.05 +0.0553% 122
St. Lucia St. Lucia 14.8 -4.9% 56
Lesotho Lesotho 3.5 -1.27% 118
Lithuania Lithuania 10.3 -2.84% 80
Luxembourg Luxembourg 48.4 -7.53% 6
Latvia Latvia 4.65 -10% 113
Macao SAR China Macao SAR China 44.3 -0.316% 7
Morocco Morocco 20.9 -3.12% 36
Moldova Moldova 28.2 -2.03% 20
Maldives Maldives 14.9 +0.52% 55
Mexico Mexico 12.2 -1.44% 73
Marshall Islands Marshall Islands 28 -1.75% 21
North Macedonia North Macedonia 24.7 -0.606% 25
Malta Malta 21.7 -2.05% 32
Montenegro Montenegro 35.6 -21.8% 8
Mongolia Mongolia 59.8 -1.44% 4
Mozambique Mozambique 3.48 -3.56% 119
Mauritius Mauritius 14.3 -2.18% 63
Malaysia Malaysia 8.07 -1.72% 95
Nicaragua Nicaragua 7.71 -0.878% 96
Netherlands Netherlands 4.58 -11.5% 114
Nepal Nepal 22.9 -0.815% 28
New Zealand New Zealand 16 -5.17% 50
Pakistan Pakistan 10.8 +0.627% 77
Panama Panama 18.6 -2.68% 40
Peru Peru 4.76 -8.04% 112
Poland Poland 21.8 -3.63% 30
Portugal Portugal 29.2 -2.17% 18
Paraguay Paraguay 10 +1.48% 83
Palestinian Territories Palestinian Territories 12.5 -1.28% 68
Romania Romania 21.1 -1.74% 35
Russia Russia 21.6 +1.22% 33
Saudi Arabia Saudi Arabia 7.02 -3.17% 100
Singapore Singapore 6.09 -5.2% 106
Solomon Islands Solomon Islands 3.76 -2.53% 117
Sierra Leone Sierra Leone 2.52 -2.08% 124
El Salvador El Salvador 9.28 +2.03% 87
San Marino San Marino 122 -0.454% 1
Serbia Serbia 24 -1.42% 26
South Sudan South Sudan 1.58 -0.144% 126
Suriname Suriname 10.4 -1.15% 79
Slovakia Slovakia 20 -3.32% 37
Sweden Sweden 10.5 -0.58% 78
Thailand Thailand 8.35 -4.13% 93
Timor-Leste Timor-Leste 5.36 -2.16% 110
Trinidad & Tobago Trinidad & Tobago 9.3 -1.45% 86
Turkey Turkey 14.4 -1.72% 61
Uganda Uganda 2.26 -3.36% 125
Ukraine Ukraine 0.39 -0.616% 127
Uruguay Uruguay 8.95 -6.45% 88
United States United States 26.6 -2.07% 22
Uzbekistan Uzbekistan 54.3 +4.36% 5
St. Vincent & Grenadines St. Vincent & Grenadines 17.2 -12.5% 42
Vietnam Vietnam 3.06 +1.66% 121
Samoa Samoa 30.5 +32.2% 16
Kosovo Kosovo 16.3 +11.6% 49
South Africa South Africa 8.72 -4.23% 92
Zimbabwe Zimbabwe 5.4 -2.65% 109

                    
# 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 = 'FB.CBK.BRCH.P5'

# 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 <- 'FB.CBK.BRCH.P5'

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