Diabetes prevalence (% of population ages 20 to 79)

Source: worldbank.org, 01.09.2025

Year: 2024

Flag Country Value Value change, % Rank
Aruba Aruba 4.6 -62.9% 108
Afghanistan Afghanistan 11.7 +53.9% 46
Angola Angola 4.9 +69% 106
Albania Albania 10.6 +279% 54
Andorra Andorra 10.1 +87% 59
United Arab Emirates United Arab Emirates 20.7 +10.1% 13
Argentina Argentina 14 +155% 32
Armenia Armenia 7.7 -9.41% 81
Antigua & Barbuda Antigua & Barbuda 11.6 -7.2% 47
Australia Australia 7.4 +12.1% 84
Austria Austria 5.4 -18.2% 101
Azerbaijan Azerbaijan 10.2 +264% 58
Burundi Burundi 4.3 +59.3% 111
Belgium Belgium 5.9 +22.9% 97
Benin Benin 8.1 +305% 77
Burkina Faso Burkina Faso 4.5 +50% 109
Bangladesh Bangladesh 13.2 +25.7% 36
Bulgaria Bulgaria 7.4 +10.4% 84
Bahrain Bahrain 22.1 +13.3% 9
Bahamas Bahamas 8.9 -26.4% 71
Bosnia & Herzegovina Bosnia & Herzegovina 10.3 +37.3% 57
Belarus Belarus 5.1 -36.3% 104
Belize Belize 14.1 -17.1% 31
Bermuda Bermuda 13.4 +11.7% 35
Bolivia Bolivia 3.4 -48.5% 115
Brazil Brazil 10.6 +4.95% 54
Barbados Barbados 13.2 +6.45% 36
Brunei Brunei 13.7 +45.7% 34
Bhutan Bhutan 12 +111% 44
Botswana Botswana 4.6 -57.4% 108
Central African Republic Central African Republic 7.6 +138% 82
Canada Canada 7.7 -8.33% 81
Switzerland Switzerland 5.3 -10.2% 102
Chile Chile 12.2 +28.4% 42
China China 11.9 +35.2% 45
Côte d’Ivoire Côte d’Ivoire 5 +2.04% 105
Cameroon Cameroon 6.9 +13.1% 89
Congo - Kinshasa Congo - Kinshasa 7.7 +148% 81
Congo - Brazzaville Congo - Brazzaville 8.1 +47.3% 77
Colombia Colombia 8.4 -14.3% 74
Comoros Comoros 10.8 +28.6% 52
Cape Verde Cape Verde 6.8 +25.9% 90
Costa Rica Costa Rica 9.8 +2.08% 62
Cuba Cuba 9.4 0% 66
Curaçao Curaçao 13.4 35
Cayman Islands Cayman Islands 11.1 -7.5% 50
Cyprus Cyprus 10 +7.53% 60
Czechia Czechia 7.6 +43.4% 82
Germany Germany 7.8 +47.2% 80
Djibouti Djibouti 6.5 +3.17% 92
Dominica Dominica 12.9 +44.9% 37
Denmark Denmark 6.4 +14.3% 93
Dominican Republic Dominican Republic 17.6 +117% 22
Algeria Algeria 17.5 +150% 23
Ecuador Ecuador 4.9 -25.8% 106
Egypt Egypt 22.4 +34.9% 8
Eritrea Eritrea 4.4 +22.2% 110
Spain Spain 9.7 +54% 63
Estonia Estonia 6.9 -1.43% 89
Ethiopia Ethiopia 4.4 +29.4% 110
Finland Finland 6.9 +19% 89
Fiji Fiji 16.6 +52.3% 25
France France 6.5 +20.4% 92
Faroe Islands Faroe Islands 5.3 102
Micronesia (Federated States of) Micronesia (Federated States of) 19.2 +22.3% 20
Gabon Gabon 8.5 -17.5% 73
United Kingdom United Kingdom 7.4 +42.3% 84
Georgia Georgia 6.7 +139% 91
Ghana Ghana 2.7 -46% 119
Guinea Guinea 4.6 +4.55% 108
Gambia Gambia 5.5 +175% 100
Guinea-Bissau Guinea-Bissau 4.8 +60% 107
Equatorial Guinea Equatorial Guinea 8.2 +95.2% 76
Greece Greece 8 +56.9% 78
Grenada Grenada 11.3 +31.4% 49
Greenland Greenland 4.3 111
Guatemala Guatemala 13.2 +41.9% 36
Guam Guam 20.3 +136% 15
Guyana Guyana 16.4 -1.8% 27
Hong Kong SAR China Hong Kong SAR China 8.2 +7.89% 76
Honduras Honduras 5 -25.4% 105
Croatia Croatia 10.5 +102% 55
Haiti Haiti 8.5 +28.8% 73
Hungary Hungary 8.3 +38.3% 75
Indonesia Indonesia 11.3 +122% 49
Isle of Man Isle of Man 7.5 83
India India 10.5 +16.7% 55
Ireland Ireland 3.6 -30.8% 114
Iran Iran 9 -18.9% 70
Iraq Iraq 13.4 +47.3% 35
Iceland Iceland 6.9 +116% 89
Israel Israel 10.1 +36.5% 59
Italy Italy 7.7 +51% 81
Jamaica Jamaica 12.5 -20.4% 39
Jordan Jordan 20.5 +69.4% 14
Japan Japan 8.1 +5.19% 77
Kazakhstan Kazakhstan 6.8 -11.7% 90
Kenya Kenya 3.1 -39.2% 117
Kyrgyzstan Kyrgyzstan 7.6 +20.6% 82
Cambodia Cambodia 7.5 +159% 83
Kiribati Kiribati 24.6 -2.77% 5
St. Kitts & Nevis St. Kitts & Nevis 13.8 +62.4% 33
South Korea South Korea 9.6 +28% 64
Kuwait Kuwait 25.6 +23.7% 3
Laos Laos 6.7 +103% 91
Lebanon Lebanon 12.3 -37.2% 41
Liberia Liberia 9.2 +179% 68
Libya Libya 15.8 +14.5% 29
St. Lucia St. Lucia 11.4 +35.7% 48
Liechtenstein Liechtenstein 7.2 +53.2% 86
Sri Lanka Sri Lanka 10.2 +36% 58
Lesotho Lesotho 6.2 +82.4% 95
Lithuania Lithuania 7.5 -3.85% 83
Luxembourg Luxembourg 5.8 +28.9% 98
Latvia Latvia 7.1 -8.97% 87
Macao SAR China Macao SAR China 8.1 +12.5% 77
Morocco Morocco 11.9 +75% 45
Monaco Monaco 6.9 +23.2% 89
Moldova Moldova 6.3 +133% 94
Madagascar Madagascar 4.6 -2.13% 108
Maldives Maldives 9.5 +3.26% 65
Mexico Mexico 16.4 +5.13% 27
Marshall Islands Marshall Islands 25.7 +17.9% 2
North Macedonia North Macedonia 7.4 -3.9% 84
Mali Mali 4.8 +153% 107
Malta Malta 10 +51.5% 60
Myanmar (Burma) Myanmar (Burma) 6.7 -5.63% 91
Montenegro Montenegro 10.7 +39% 53
Mongolia Mongolia 10.3 +45.1% 57
Mozambique Mozambique 3 -3.23% 118
Mauritania Mauritania 5.2 +20.9% 103
Mauritius Mauritius 20.1 +35.8% 16
Malawi Malawi 5.7 +1.79% 99
Malaysia Malaysia 21.1 +74.4% 12
Namibia Namibia 5.3 -32.1% 102
New Caledonia New Caledonia 22 +156% 10
Niger Niger 4.1 -2.38% 112
Nigeria Nigeria 3 -37.5% 118
Nicaragua Nicaragua 10.4 -5.45% 56
Netherlands Netherlands 5 -5.66% 105
Norway Norway 4.8 +2.13% 107
Nepal Nepal 7.7 +114% 81
Nauru Nauru 21.8 +6.86% 11
New Zealand New Zealand 6.7 -22.1% 91
Oman Oman 17 +61.9% 24
Pakistan Pakistan 31.4 +297% 1
Panama Panama 11.1 +18.1% 50
Peru Peru 6.4 +6.67% 93
Philippines Philippines 7.5 -22.7% 83
Palau Palau 19.3 +73.9% 19
Papua New Guinea Papua New Guinea 14.1 +85.5% 31
Poland Poland 8.1 -10% 77
Puerto Rico Puerto Rico 10.9 -16.2% 51
North Korea North Korea 9.9 +17.9% 61
Portugal Portugal 10.5 +9.38% 55
Paraguay Paraguay 9.4 +44.6% 66
Palestinian Territories Palestinian Territories 15.5 +68.5% 30
French Polynesia French Polynesia 22.8 +165% 7
Qatar Qatar 24.6 +24.2% 5
Romania Romania 7.5 -2.6% 83
Russia Russia 5.9 -39.2% 97
Rwanda Rwanda 2.1 -32.3% 121
Saudi Arabia Saudi Arabia 23.1 +17.9% 6
Sudan Sudan 19 +121% 21
Senegal Senegal 3.8 +18.8% 113
Singapore Singapore 11.4 +20% 48
Solomon Islands Solomon Islands 12 -21.6% 44
Sierra Leone Sierra Leone 4.8 +50% 107
El Salvador El Salvador 12.7 +35.1% 38
San Marino San Marino 8.6 +56.4% 72
Somalia Somalia 5.8 +34.9% 98
Serbia Serbia 10.5 +36.4% 55
South Sudan South Sudan 4.6 108
São Tomé & Príncipe São Tomé & Príncipe 12.1 +120% 43
Suriname Suriname 13.8 +55.1% 33
Slovakia Slovakia 7.1 +24.6% 87
Slovenia Slovenia 7 -6.67% 88
Sweden Sweden 5.8 +38.1% 98
Eswatini Eswatini 7.9 +155% 79
Seychelles Seychelles 9.3 -23.1% 67
Syria Syria 19 +91.9% 21
Chad Chad 7.3 +87.2% 85
Togo Togo 4.8 +45.5% 107
Thailand Thailand 10.2 +36% 58
Tajikistan Tajikistan 8 +27% 78
Turkmenistan Turkmenistan 7.1 +163% 87
Timor-Leste Timor-Leste 3.2 -57.3% 116
Tonga Tonga 19.6 +54.3% 18
Trinidad & Tobago Trinidad & Tobago 12.4 -2.36% 40
Tunisia Tunisia 16 +68.4% 28
Turkey Turkey 16.5 +109% 26
Tuvalu Tuvalu 19 -1.04% 21
Tanzania Tanzania 9.8 +250% 62
Uganda Uganda 2.2 -21.4% 120
Ukraine Ukraine 6 +107% 96
Uruguay Uruguay 7.8 +36.8% 80
United States United States 13.7 +45.7% 34
Uzbekistan Uzbekistan 7.5 +17.2% 83
St. Vincent & Grenadines St. Vincent & Grenadines 8.6 -2.27% 72
Venezuela Venezuela 8.6 -15.7% 72
U.S. Virgin Islands U.S. Virgin Islands 9.1 -24.8% 69
Vietnam Vietnam 3.4 +6.25% 115
Vanuatu Vanuatu 19.7 +22.4% 17
Samoa Samoa 25.4 +230% 4
Kosovo Kosovo 10.4 56
Yemen Yemen 5.5 -42.7% 100
South Africa South Africa 7.2 +2.86% 86
Zambia Zambia 10.3 +115% 57
Zimbabwe Zimbabwe 1.5 -84.7% 122

                    
# 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 = 'SH.STA.DIAB.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 <- 'SH.STA.DIAB.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))