Mobile cellular subscriptions

Source: worldbank.org, 03.09.2025

Year: 2023

Flag Country Value Value change, % Rank
Afghanistan Afghanistan 23,027,100 +0.855% 53
Angola Angola 25,744,000 +8.47% 49
Albania Albania 2,614,760 -6.02% 126
Andorra Andorra 126,214 +11.2% 156
United Arab Emirates United Arab Emirates 21,222,800 +5.92% 56
Argentina Argentina 62,709,200 +5.03% 28
Armenia Armenia 3,959,450 +5.28% 118
Australia Australia 29,761,000 +3.76% 45
Austria Austria 11,116,000 +1.21% 80
Azerbaijan Azerbaijan 11,111,300 +0.39% 81
Burundi Burundi 8,646,690 +15.4% 87
Belgium Belgium 12,087,300 +2.11% 75
Benin Benin 16,373,900 +12.5% 65
Bangladesh Bangladesh 196,081,000 +5.36% 9
Bulgaria Bulgaria 8,014,470 +0.629% 90
Bahrain Bahrain 2,415,720 +12.8% 128
Bahamas Bahamas 399,630 -1.08% 150
Bosnia & Herzegovina Bosnia & Herzegovina 3,749,900 -1.63% 120
Belarus Belarus 11,757,300 -0.113% 76
Brazil Brazil 213,295,000 +0.173% 8
Brunei Brunei 582,919 +10.3% 147
Bhutan Bhutan 751,989 +1.23% 143
Botswana Botswana 4,440,310 +2.12% 114
Canada Canada 37,000,000 +4.46% 42
Switzerland Switzerland 11,411,100 +4.69% 77
Chile Chile 26,710,700 +1.1% 47
China China 1,824,420,000 +3.07% 1
Côte d’Ivoire Côte d’Ivoire 53,601,500 +9.38% 32
Cameroon Cameroon 27,374,500 +10.3% 46
Congo - Kinshasa Congo - Kinshasa 56,268,400 +12.9% 30
Congo - Brazzaville Congo - Brazzaville 5,865,800 +3.81% 105
Colombia Colombia 87,365,900 +8.11% 20
Comoros Comoros 934,198 +11.4% 142
Cape Verde Cape Verde 590,354 +0.299% 146
Costa Rica Costa Rica 7,443,280 -5.5% 97
Cuba Cuba 7,667,310 +0.884% 94
Curaçao Curaçao 173,926 +1.19% 154
Cyprus Cyprus 1,433,500 +2.95% 137
Czechia Czechia 13,620,800 -0.382% 70
Germany Germany 105,400,000 +0.958% 18
Djibouti Djibouti 558,607 +5.02% 148
Denmark Denmark 7,549,290 +1.11% 96
Dominican Republic Dominican Republic 10,409,800 +2.56% 82
Algeria Algeria 51,522,100 +5.11% 35
Ecuador Ecuador 18,165,600 +3.86% 62
Egypt Egypt 106,319,000 +4.11% 17
Spain Spain 61,190,500 +3.68% 29
Estonia Estonia 2,053,470 -0.113% 131
Finland Finland 7,140,000 +0.14% 99
France France 77,526,000 +0.881% 24
Gabon Gabon 3,046,520 +1.7% 123
United Kingdom United Kingdom 84,340,000 +3.23% 21
Georgia Georgia 5,911,130 +1.14% 104
Ghana Ghana 33,384,500 -16.6% 43
Guinea-Bissau Guinea-Bissau 2,758,650 +4.04% 124
Greece Greece 11,348,300 -0.0361% 78
Guatemala Guatemala 20,609,600 +0.275% 59
Hong Kong SAR China Hong Kong SAR China 23,779,100 +8.78% 50
Honduras Honduras 7,921,350 -0.202% 91
Croatia Croatia 4,562,730 +1.84% 112
Hungary Hungary 10,176,100 -0.676% 83
Indonesia Indonesia 352,157,000 +2.79% 4
India India 1,158,550,000 +1.37% 2
Ireland Ireland 5,757,780 +1.87% 106
Iran Iran 150,664,000 +3.43% 11
Iraq Iraq 45,700,000 +4.6% 38
Iceland Iceland 478,176 +4.66% 149
Israel Israel 14,193,300 +3.16% 69
Italy Italy 78,462,900 -0.051% 23
Jamaica Jamaica 3,268,370 +8.85% 122
Jordan Jordan 7,726,690 +1.33% 92
Japan Japan 221,918,000 +5.3% 7
Kazakhstan Kazakhstan 25,842,600 +2.66% 48
Kenya Kenya 66,745,700 +1.53% 26
Kyrgyzstan Kyrgyzstan 7,681,220 +3.28% 93
Cambodia Cambodia 21,049,600 +7.92% 58
Kiribati Kiribati 67,927 +6.01% 158
St. Kitts & Nevis St. Kitts & Nevis 55,592 +1.79% 159
South Korea South Korea 83,891,800 +8.96% 22
Kuwait Kuwait 8,113,880 +5.01% 89
Laos Laos 4,963,760 +3.65% 108
Liechtenstein Liechtenstein 50,313 +1.31% 160
Sri Lanka Sri Lanka 32,683,400 -5.67% 44
Lesotho Lesotho 1,603,040 +2.97% 134
Lithuania Lithuania 3,915,930 +2.34% 119
Luxembourg Luxembourg 960,900 +5.32% 141
Latvia Latvia 2,257,180 +4.16% 129
Macao SAR China Macao SAR China 1,374,130 +13.3% 138
Morocco Morocco 55,873,000 +5.5% 31
Monaco Monaco 40,538 +4.06% 161
Moldova Moldova 4,010,870 -3.82% 117
Madagascar Madagascar 23,539,300 +19.4% 52
Maldives Maldives 744,814 +4.14% 145
Mexico Mexico 144,740,000 +6.46% 12
North Macedonia North Macedonia 1,920,400 -6.24% 133
Malta Malta 749,302 +6.77% 144
Myanmar (Burma) Myanmar (Burma) 65,516,900 +13.3% 27
Montenegro Montenegro 1,312,960 +3.06% 139
Mongolia Mongolia 4,841,940 +0.133% 109
Mauritania Mauritania 4,559,000 -14.9% 113
Mauritius Mauritius 2,104,700 +0.377% 130
Malawi Malawi 12,892,000 +5.08% 72
Malaysia Malaysia 50,136,500 +4.56% 37
Namibia Namibia 2,597,930 -10.6% 127
Niger Niger 17,196,200 +7.19% 63
Nigeria Nigeria 224,413,000 +0.985% 6
Nicaragua Nicaragua 7,222,330 +2.9% 98
Netherlands Netherlands 21,232,000 +2.39% 55
New Zealand New Zealand 6,562,000 +10.2% 103
Oman Oman 6,984,830 +3.49% 101
Pakistan Pakistan 189,439,000 -1.73% 10
Panama Panama 6,981,820 +4.33% 102
Peru Peru 41,283,200 -0.641% 39
Philippines Philippines 134,739,000 -19.8% 13
Palau Palau 24,000 0% 162
Papua New Guinea Papua New Guinea 3,538,600 -29.5% 121
Poland Poland 52,386,600 -0.385% 34
Puerto Rico Puerto Rico 4,036,760 +3.61% 116
Portugal Portugal 12,830,000 +0.295% 73
Paraguay Paraguay 8,665,060 +0.0659% 86
Palestinian Territories Palestinian Territories 4,148,420 +2.13% 115
French Polynesia French Polynesia 333,905 +1.9% 151
Qatar Qatar 4,701,610 +0.184% 111
Romania Romania 23,564,000 +1.49% 51
Russia Russia 263,017,000 +7.24% 5
Rwanda Rwanda 12,763,100 +16% 74
Saudi Arabia Saudi Arabia 52,482,900 +8.89% 33
Senegal Senegal 22,400,200 +7.41% 54
Singapore Singapore 10,026,700 +2.58% 84
El Salvador El Salvador 11,338,800 -1.48% 79
Somalia Somalia 9,905,940 +12% 85
Serbia Serbia 8,532,020 -1.03% 88
South Sudan South Sudan 5,353,000 +0.168% 107
São Tomé & Príncipe São Tomé & Príncipe 146,497 -25.4% 155
Suriname Suriname 988,899 +6.47% 140
Slovakia Slovakia 7,627,770 +2.45% 95
Slovenia Slovenia 2,737,560 +2.34% 125
Sweden Sweden 14,800,100 +0.243% 68
Eswatini Eswatini 1,579,960 +6.69% 135
Seychelles Seychelles 236,586 +15.3% 153
Syria Syria 17,092,100 -3.26% 64
Chad Chad 13,559,500 +12.3% 71
Togo Togo 7,051,820 +7.43% 100
Thailand Thailand 120,921,000 -4.35% 15
Timor-Leste Timor-Leste 1,559,360 +5.29% 136
Trinidad & Tobago Trinidad & Tobago 2,017,390 +0.918% 132
Tunisia Tunisia 16,365,100 +2.39% 66
Turkey Turkey 92,231,000 +2.14% 19
Tanzania Tanzania 70,215,100 +16.7% 25
Uganda Uganda 37,123,400 +11.9% 41
Ukraine Ukraine 50,328,100 +2.08% 36
Uruguay Uruguay 4,801,570 +1.27% 110
United States United States 386,106,000 +3.92% 3
Uzbekistan Uzbekistan 38,106,900 +3.41% 40
St. Vincent & Grenadines St. Vincent & Grenadines 102,976 -1.39% 157
Venezuela Venezuela 19,872,800 +5.98% 61
Vietnam Vietnam 131,453,000 -4.34% 14
Vanuatu Vanuatu 286,107 +12% 152
Yemen Yemen 20,047,500 +12.9% 60
South Africa South Africa 108,415,000 +8.13% 16
Zambia Zambia 21,151,200 +6.62% 57
Zimbabwe Zimbabwe 14,973,800 +4.71% 67

                    
# 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 = 'IT.CEL.SETS'

# 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 <- 'IT.CEL.SETS'

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