Renewable internal freshwater resources per capita (cubic meters)

Source: worldbank.org, 01.09.2025

Year: 2021

Flag Country Value Value change, % Rank
Afghanistan Afghanistan 1,179 -2.33% 122
Angola Angola 4,286 -3.13% 68
Albania Albania 9,567 +0.931% 48
Andorra Andorra 4,027 -1.26% 71
United Arab Emirates United Arab Emirates 15.7 -1.82% 180
Argentina Argentina 6,444 -0.266% 60
Armenia Armenia 2,315 -0.027% 96
Antigua & Barbuda Antigua & Barbuda 563 -0.545% 154
Australia Australia 19,155 -0.141% 32
Austria Austria 6,141 -0.435% 63
Azerbaijan Azerbaijan 800 -0.44% 140
Burundi Burundi 776 -2.69% 143
Belgium Belgium 1,036 -0.411% 125
Benin Benin 768 -2.56% 144
Burkina Faso Burkina Faso 568 -2.35% 153
Bangladesh Bangladesh 626 -0.812% 148
Bulgaria Bulgaria 3,227 +0.667% 79
Bahrain Bahrain 2.66 -2.14% 182
Bahamas Bahamas 1,766 -0.129% 107
Bosnia & Herzegovina Bosnia & Herzegovina 10,940 +1.68% 42
Belarus Belarus 3,655 +0.832% 74
Belize Belize 38,599 -1.15% 14
Bolivia Bolivia 25,424 -1.01% 26
Brazil Brazil 27,015 -0.424% 24
Barbados Barbados 284 -0.159% 162
Brunei Brunei 18,817 -0.956% 33
Bhutan Bhutan 100,588 -0.701% 4
Botswana Botswana 999 -1.48% 129
Central African Republic Central African Republic 27,582 -1.67% 22
Canada Canada 74,530 -0.552% 6
Switzerland Switzerland 4,641 -0.763% 67
Chile Chile 45,486 -0.441% 12
China China 1,992 -0.0892% 106
Côte d’Ivoire Côte d’Ivoire 2,592 -2.44% 90
Cameroon Cameroon 10,143 -2.62% 44
Congo - Kinshasa Congo - Kinshasa 9,077 -3.19% 50
Congo - Brazzaville Congo - Brazzaville 37,677 -2.37% 16
Colombia Colombia 41,904 -1.09% 13
Comoros Comoros 1,467 -1.96% 112
Cape Verde Cape Verde 581 -0.381% 152
Costa Rica Costa Rica 22,332 -0.507% 29
Cuba Cuba 3,427 +0.487% 76
Cyprus Cyprus 592 -1.14% 151
Czechia Czechia 1,252 +1.83% 119
Germany Germany 1,286 -0.0423% 117
Djibouti Djibouti 268 -1.43% 163
Dominica Dominica 2,976 +0.552% 84
Denmark Denmark 1,024 -0.432% 126
Dominican Republic Dominican Republic 2,113 -1.04% 105
Algeria Algeria 251 -1.61% 164
Ecuador Ecuador 25,019 -0.771% 27
Egypt Egypt 9.01 -1.48% 181
Eritrea Eritrea 836 -1.76% 137
Spain Spain 2,344 -0.178% 95
Estonia Estonia 9,550 -0.106% 49
Ethiopia Ethiopia 999 -2.64% 130
Finland Finland 19,311 -0.207% 31
Fiji Fiji 31,144 -0.191% 19
France France 2,948 -0.356% 85
Gabon Gabon 69,003 -2.28% 8
United Kingdom United Kingdom 2,165 -0.358% 104
Georgia Georgia 15,674 +0.38% 39
Ghana Ghana 932 -1.94% 132
Guinea Guinea 16,484 -2.47% 37
Gambia Gambia 1,165 -2.34% 123
Guinea-Bissau Guinea-Bissau 7,771 -2.21% 55
Equatorial Guinea Equatorial Guinea 14,783 -2.41% 40
Greece Greece 5,488 +1.22% 66
Grenada Grenada 1,714 -0.297% 108
Guatemala Guatemala 6,205 -1.37% 62
Guyana Guyana 295,531 -0.981% 2
Honduras Honduras 8,811 -1.65% 53
Croatia Croatia 9,719 +0.908% 46
Haiti Haiti 1,144 -1.15% 124
Hungary Hungary 623 +0.41% 150
Indonesia Indonesia 7,294 -0.702% 56
India India 1,022 -0.819% 127
Ireland Ireland 9,588 -1.39% 47
Iran Iran 1,453 -0.828% 113
Iraq Iraq 817 -2.22% 138
Iceland Iceland 456,351 -1.63% 1
Israel Israel 80 -1.67% 174
Italy Italy 3,086 +0.517% 83
Jamaica Jamaica 3,814 -0.245% 72
Jordan Jordan 61.6 -1.82% 176
Japan Japan 3,421 +0.461% 77
Kazakhstan Kazakhstan 3,259 -1.32% 78
Kenya Kenya 389 -1.88% 157
Kyrgyzstan Kyrgyzstan 7,142 -1.82% 57
Cambodia Cambodia 7,105 -1.47% 58
St. Kitts & Nevis St. Kitts & Nevis 513 +0.229% 155
South Korea South Korea 1,253 +0.129% 118
Kuwait Kuwait 0 183
Laos Laos 25,546 -1.43% 25
Lebanon Lebanon 839 -0.275% 136
Liberia Liberia 38,028 -2.09% 15
Libya Libya 98.1 -1.26% 170
St. Lucia St. Lucia 1,680 -0.152% 109
Sri Lanka Sri Lanka 2,383 -1.07% 94
Lesotho Lesotho 2,313 -1.14% 98
Lithuania Lithuania 5,505 +0.0708% 65
Luxembourg Luxembourg 1,562 -1.51% 110
Latvia Latvia 8,989 +0.847% 51
Morocco Morocco 785 -1% 141
Moldova Moldova 624 +1.51% 149
Madagascar Madagascar 11,350 -2.48% 41
Maldives Maldives 58.1 -2.72% 177
Mexico Mexico 3,204 -0.665% 80
North Macedonia North Macedonia 2,939 +1.03% 86
Mali Mali 2,680 -3.01% 89
Malta Malta 97.5 -0.513% 171
Myanmar (Burma) Myanmar (Burma) 18,784 -0.694% 34
Mongolia Mongolia 10,284 -1.67% 43
Mozambique Mozambique 3,163 -2.91% 81
Mauritania Mauritania 84.5 -2.85% 172
Mauritius Mauritius 2,172 -0.0253% 103
Malawi Malawi 805 -2.56% 139
Malaysia Malaysia 16,918 -1.15% 36
Namibia Namibia 2,192 -2.91% 100
Niger Niger 143 -3.2% 168
Nigeria Nigeria 1,011 -2.07% 128
Nicaragua Nicaragua 23,509 -1.2% 28
Netherlands Netherlands 627 -0.522% 147
Norway Norway 70,632 -0.533% 7
Nepal Nepal 6,724 -1.72% 59
Nauru Nauru 854 -0.564% 133
New Zealand New Zealand 63,976 -0.413% 9
Oman Oman 311 +0.49% 161
Pakistan Pakistan 230 -1.87% 165
Panama Panama 31,436 -1.2% 18
Peru Peru 49,493 -0.957% 11
Philippines Philippines 4,235 -0.902% 69
Papua New Guinea Papua New Guinea 79,997 -1.97% 5
Poland Poland 1,449 +1.44% 114
Puerto Rico Puerto Rico 2,176 +0.579% 102
North Korea North Korea 2,554 -0.367% 91
Portugal Portugal 3,667 -0.625% 73
Paraguay Paraguay 17,504 -1.2% 35
Palestinian Territories Palestinian Territories 165 -2.43% 167
Qatar Qatar 22.4 +11.5% 179
Romania Romania 2,216 +0.749% 99
Russia Russia 29,790 +0.344% 20
Rwanda Rwanda 711 -2.17% 146
Saudi Arabia Saudi Arabia 78 +2.5% 175
Sudan Sudan 83.2 -2.66% 173
Senegal Senegal 1,498 -2.51% 111
Singapore Singapore 110 +4.26% 169
Solomon Islands Solomon Islands 58,616 -2.37% 10
Sierra Leone Sierra Leone 19,766 -2.25% 30
El Salvador El Salvador 2,498 -0.337% 92
Somalia Somalia 347 -3.59% 159
Serbia Serbia 1,230 +0.948% 121
South Sudan South Sudan 2,393 -1.54% 93
São Tomé & Príncipe São Tomé & Príncipe 9,822 -2.04% 45
Suriname Suriname 160,221 -0.903% 3
Slovakia Slovakia 2,313 +0.213% 97
Slovenia Slovenia 8,856 -0.268% 52
Sweden Sweden 16,417 -0.599% 38
Eswatini Eswatini 2,188 -1.15% 101
Syria Syria 330 -2.68% 160
Chad Chad 841 -3.39% 135
Togo Togo 1,295 -2.35% 116
Thailand Thailand 3,130 -0.12% 82
Tajikistan Tajikistan 6,367 -2.18% 61
Turkmenistan Turkmenistan 198 -2% 166
Timor-Leste Timor-Leste 6,085 -1.78% 64
Trinidad & Tobago Trinidad & Tobago 2,808 -0.0609% 87
Tunisia Tunisia 348 -0.619% 158
Turkey Turkey 2,698 -0.906% 88
Tanzania Tanzania 1,337 -2.96% 115
Uganda Uganda 849 -3.17% 134
Ukraine Ukraine 1,244 +0.861% 120
Uruguay Uruguay 27,144 +0.0669% 23
United States United States 8,485 -0.157% 54
Uzbekistan Uzbekistan 477 -1.92% 156
St. Vincent & Grenadines St. Vincent & Grenadines 972 +0.666% 131
Venezuela Venezuela 28,508 +0.73% 21
Vietnam Vietnam 3,633 -0.865% 75
Vanuatu Vanuatu 32,694 -2.29% 17
Yemen Yemen 56.5 -2.71% 178
South Africa South Africa 728 -1.53% 145
Zambia Zambia 4,091 -2.78% 70
Zimbabwe Zimbabwe 776 -1.71% 142

                    
# 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 = 'ER.H2O.INTR.PC'

# 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 <- 'ER.H2O.INTR.PC'

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