Total greenhouse gas emissions excluding LULUCF (Mt CO2e)

Source: worldbank.org, 03.09.2025

Year: 2023

Flag Country Value Value change, % Rank
Aruba Aruba 0.562 +5.23% 181
Afghanistan Afghanistan 29.5 +2.96% 108
Angola Angola 67.7 +0.729% 66
Albania Albania 7.67 -1.77% 146
United Arab Emirates United Arab Emirates 268 +0.0711% 32
Argentina Argentina 366 -2.42% 24
Armenia Armenia 10.8 +4.55% 139
American Samoa American Samoa 0.0085 0% 199
Antigua & Barbuda Antigua & Barbuda 0.389 +4.38% 184
Australia Australia 572 +0.497% 15
Austria Austria 72.9 -3.3% 64
Azerbaijan Azerbaijan 62.6 +5.97% 68
Burundi Burundi 7.05 +0.756% 148
Belgium Belgium 106 -5.26% 50
Benin Benin 16.7 +0.509% 124
Burkina Faso Burkina Faso 34.5 +1.28% 98
Bangladesh Bangladesh 281 +1.04% 31
Bulgaria Bulgaria 53.4 -16.9% 75
Bahrain Bahrain 63.7 +1.97% 67
Bahamas Bahamas 2.05 +4.74% 165
Bosnia & Herzegovina Bosnia & Herzegovina 29.4 -2.78% 109
Belarus Belarus 84.3 -2.91% 58
Belize Belize 0.92 +3.24% 174
Bermuda Bermuda 0.379 +5.05% 185
Bolivia Bolivia 55.2 +3.15% 74
Brazil Brazil 1,300 +0.129% 5
Barbados Barbados 0.989 +3.91% 173
Brunei Brunei 12.2 +2.28% 136
Bhutan Bhutan 3.25 +1.16% 159
Botswana Botswana 12.7 +2.58% 134
Central African Republic Central African Republic 12.5 -4.01% 135
Canada Canada 748 +0.326% 10
Switzerland Switzerland 43.4 -0.267% 87
Chile Chile 121 -3.13% 45
China China 15,944 +5.17% 1
Côte d’Ivoire Côte d’Ivoire 32.2 +0.0476% 105
Cameroon Cameroon 39.4 -0.284% 96
Congo - Kinshasa Congo - Kinshasa 56.1 +0.929% 73
Congo - Brazzaville Congo - Brazzaville 23.7 -0.105% 114
Colombia Colombia 224 +5.1% 35
Comoros Comoros 0.762 +0.541% 175
Cape Verde Cape Verde 1.23 -2.32% 172
Costa Rica Costa Rica 16.5 +3.4% 126
Cuba Cuba 39.4 +3.04% 95
Cayman Islands Cayman Islands 0.39 +5.15% 183
Cyprus Cyprus 10.3 +2.46% 141
Czechia Czechia 114 -7.66% 47
Germany Germany 682 -10.5% 12
Djibouti Djibouti 2.13 +0.495% 164
Dominica Dominica 0.147 +3.02% 191
Denmark Denmark 41.8 -3.23% 90
Dominican Republic Dominican Republic 48.4 +4.27% 80
Algeria Algeria 257 -2.44% 33
Ecuador Ecuador 73.6 +4.16% 63
Egypt Egypt 336 +0.787% 27
Eritrea Eritrea 6.4 +0.515% 152
Spain Spain 285 -6.4% 30
Estonia Estonia 14.4 -7.74% 129
Ethiopia Ethiopia 170 +1.92% 38
Finland Finland 43.5 -9.89% 86
Fiji Fiji 3.4 +2.79% 157
France France 386 -7.35% 20
Faroe Islands Faroe Islands 0.0507 +0.198% 195
Micronesia (Federated States of) Micronesia (Federated States of) 0.0492 +1.03% 196
Gabon Gabon 21.4 +8.33% 118
United Kingdom United Kingdom 379 -6.69% 22
Georgia Georgia 19 +1.73% 123
Ghana Ghana 48.3 +0.127% 81
Gibraltar Gibraltar 0.712 +2% 177
Guinea Guinea 28.6 +2.41% 111
Gambia Gambia 1.89 -1.54% 168
Guinea-Bissau Guinea-Bissau 3 -0.0533% 162
Equatorial Guinea Equatorial Guinea 6.98 -14.6% 149
Greece Greece 69.3 -5.32% 65
Grenada Grenada 0.2 +4.21% 188
Greenland Greenland 0.647 +1.01% 179
Guatemala Guatemala 44 +3.95% 84
Guam Guam 0.0154 +1.32% 198
Guyana Guyana 8.19 -1.14% 143
Hong Kong SAR China Hong Kong SAR China 40.2 +5.63% 94
Honduras Honduras 22.9 +3.68% 115
Croatia Croatia 25 +0.0924% 112
Haiti Haiti 13.7 +1.07% 130
Hungary Hungary 60.9 -5.2% 69
Indonesia Indonesia 1,200 +4.12% 6
India India 4,134 +6.06% 3
Ireland Ireland 57.9 -4.18% 70
Iran Iran 997 +3.77% 8
Iraq Iraq 363 -0.687% 26
Iceland Iceland 4.17 -4.56% 155
Israel Israel 79.6 -1.44% 61
Italy Italy 374 -7.19% 23
Jamaica Jamaica 8.16 +6.62% 144
Jordan Jordan 33.4 +4.98% 101
Japan Japan 1,041 -6.01% 7
Kazakhstan Kazakhstan 320 -0.177% 29
Kenya Kenya 108 +3.54% 48
Kyrgyzstan Kyrgyzstan 21.7 +1.28% 116
Cambodia Cambodia 48.8 +2.47% 79
Kiribati Kiribati 0.13 +3.01% 192
St. Kitts & Nevis St. Kitts & Nevis 0.175 +5.44% 189
South Korea South Korea 654 -2.17% 13
Kuwait Kuwait 168 +1.53% 39
Laos Laos 42.1 +4.94% 89
Lebanon Lebanon 24.7 +2.94% 113
Liberia Liberia 4.53 -0.699% 154
Libya Libya 95.9 +7.79% 53
St. Lucia St. Lucia 0.451 +4.47% 182
Sri Lanka Sri Lanka 38.4 +1.94% 97
Lesotho Lesotho 2.6 -1.92% 163
Lithuania Lithuania 20.7 -0.576% 120
Luxembourg Luxembourg 7.86 -3.26% 145
Latvia Latvia 11 -1.14% 138
Macao SAR China Macao SAR China 3.12 +3.1% 160
Morocco Morocco 107 +0.142% 49
Moldova Moldova 13.5 +4.54% 131
Madagascar Madagascar 33.2 -0.432% 102
Maldives Maldives 3.09 +3.4% 161
Mexico Mexico 712 +3.57% 11
Marshall Islands Marshall Islands 0.0027 0% 202
North Macedonia North Macedonia 11.4 +3.35% 137
Mali Mali 45.5 +1.4% 82
Malta Malta 2.03 -3.71% 166
Myanmar (Burma) Myanmar (Burma) 115 -2.76% 46
Mongolia Mongolia 83.7 +25.2% 60
Northern Mariana Islands Northern Mariana Islands 0.0029 0% 201
Mozambique Mozambique 34 -1.39% 100
Mauritania Mauritania 16.5 +0.43% 125
Mauritius Mauritius 6.2 +3.75% 153
Malawi Malawi 19.7 +5.99% 122
Malaysia Malaysia 325 +3.05% 28
Namibia Namibia 12.9 +0.84% 133
New Caledonia New Caledonia 6.61 +5.36% 151
Niger Niger 42.3 +3.46% 88
Nigeria Nigeria 385 +1.3% 21
Nicaragua Nicaragua 20.6 +2.04% 121
Netherlands Netherlands 151 -6.47% 42
Norway Norway 56.7 -0.923% 72
Nepal Nepal 56.8 +1.76% 71
Nauru Nauru 0.0012 0% 203
New Zealand New Zealand 84.2 +0.984% 59
Oman Oman 127 +1.76% 44
Pakistan Pakistan 532 -0.686% 16
Panama Panama 21.3 +15.3% 119
Peru Peru 94 +2% 55
Philippines Philippines 256 +4.75% 34
Palau Palau 1.5 +2.7% 169
Papua New Guinea Papua New Guinea 9.64 +1.42% 142
Poland Poland 364 -8.42% 25
Puerto Rico Puerto Rico 16.1 +7.98% 127
North Korea North Korea 90.1 +5.2% 56
Portugal Portugal 53 -5.72% 77
Paraguay Paraguay 41.6 +0.0425% 92
French Polynesia French Polynesia 1.37 +3.22% 170
Qatar Qatar 154 +6.87% 40
Romania Romania 106 -4.6% 51
Russia Russia 2,672 +1.93% 4
Rwanda Rwanda 7.49 +0.247% 147
Saudi Arabia Saudi Arabia 805 +2.31% 9
Sudan Sudan 139 +0.736% 43
Senegal Senegal 28.8 +0.174% 110
Singapore Singapore 74.3 +3.4% 62
Solomon Islands Solomon Islands 0.721 +2.75% 176
Sierra Leone Sierra Leone 6.94 +0.16% 150
El Salvador El Salvador 13.1 +4.22% 132
Somalia Somalia 32.5 +0.425% 103
São Tomé & Príncipe São Tomé & Príncipe 0.304 +3.65% 187
Suriname Suriname 3.74 +2.17% 156
Slovakia Slovakia 44.8 -1.56% 83
Slovenia Slovenia 16 -6.82% 128
Sweden Sweden 49.1 -2.02% 78
Eswatini Eswatini 3.29 +1.4% 158
Seychelles Seychelles 1.34 +2.83% 171
Syria Syria 41.2 +2.49% 93
Turks & Caicos Islands Turks & Caicos Islands 0.11 +4.75% 193
Chad Chad 95.4 +4.77% 54
Togo Togo 10.6 +1.29% 140
Thailand Thailand 441 -0.386% 19
Tajikistan Tajikistan 21.4 +1.14% 117
Turkmenistan Turkmenistan 98.8 -1.02% 52
Timor-Leste Timor-Leste 2.01 -0.407% 167
Tonga Tonga 0.342 +2.33% 186
Trinidad & Tobago Trinidad & Tobago 34.2 -1.77% 99
Tunisia Tunisia 43.6 +2.69% 85
Turkey Turkey 606 +1.27% 14
Tuvalu Tuvalu 0.004 0% 200
Tanzania Tanzania 89.8 +2.55% 57
Uganda Uganda 53.4 +0.547% 76
Ukraine Ukraine 216 -0.176% 36
Uruguay Uruguay 41.6 -1.23% 91
United States United States 5,961 -1.41% 2
Uzbekistan Uzbekistan 215 -0.817% 37
St. Vincent & Grenadines St. Vincent & Grenadines 0.151 +3.5% 190
Venezuela Venezuela 152 +5.89% 41
British Virgin Islands British Virgin Islands 0.0911 +4.71% 194
U.S. Virgin Islands U.S. Virgin Islands 0.0244 0% 197
Vietnam Vietnam 524 +10.7% 17
Vanuatu Vanuatu 0.67 +1.75% 178
Samoa Samoa 0.646 +1.64% 180
Yemen Yemen 32.2 -2.81% 104
South Africa South Africa 522 -2.05% 18
Zambia Zambia 30.5 +2.14% 107
Zimbabwe Zimbabwe 31 +4% 106

                    
# 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 = 'EN.GHG.ALL.MT.CE.AR5'

# 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 <- 'EN.GHG.ALL.MT.CE.AR5'

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