Skip to main content

Fetches macroeconomic data from World Bank.

Project description

worldbankpy

  • Interacts with the World Bank API to retrieve macroeconomic data.

Requirements & Installation :

  • Requirements: datetime, requests, pandas.

Example:

import worldbankpy

# Instantiate the World Bank API client:
instance = worldbankpy.Instance()

You can filter countries using the filtered_countries method. Available filters include region, income level, admin region, lending type. Values for these filters can be obtained using the following attributes:

regions = instance.list_regions  # Display all regions

>>> [
    'Latin America & Caribbean',
    'Aggregates',
    'South Asia',
    'Sub-Saharan Africa',
    'Europe & Central Asia',
    'Middle East & North Africa',
    'East Asia & Pacific',
    'North America'
    ]

countries = instance.list_available_countries  # Display all countries

>>> [
    'Aruba',
    'Africa Eastern and Southern',
    'Afghanistan',
    ...
    'South Africa',
    'Zambia',
    'Zimbabwe'
    ]

income_levels = instance.list_income_levels  # Display all income levels

>>> [
    'High income',
    'Aggregates',
    'Low income',
    'Lower middle income',
    'Upper middle income',
    'Not classified'
    ]

admin_regions = instance.list_admin_regions  # Display all admin regions

>>> [
    'South Asia',
    'Sub-Saharan Africa (excluding high income)',
    'Europe & Central Asia (excluding high income)',
    'Latin America & Caribbean (excluding high income)',
    'East Asia & Pacific (excluding high income)',
    'Middle East & North Africa (excluding high income)'
    ]

lending_types = instance.list_lending_types  # Display all lending types

>>> ['Not classified', 'Aggregates', 'IDA', 'IBRD', 'Blend']

For example, you can filter the countries in Europe & Central Asia with high income:

eu_central_asia_high_inc = instance.filtered_countries(region="Europe & Central Asia", income_level="High income")

>>>{
    'Andorra': 'AND',
    'Austria': 'AUT',
    'Belgium': 'BEL',
    ...
    'Slovak Republic': 'SVK',
    'Slovenia': 'SVN',
    'Sweden': 'SWE'
    }

You can then filter indicators using the filtered_indicators method. Available filters include topics & sources. Values for these filters can be obtained using the following attributes:

topics = instance.list_topics  # Display all topics

>>> [
    'Poverty','Education','Social Protection & Labor','Economy & Growth','Agriculture & Rural Development',
    'Climate Change','Urban Development','External Debt','Public Sector','Financial Sector','Aid Effectiveness',
    'Millenium development goals','Environment','Energy & Mining','Infrastructure','Science & Technology',
    'Private Sector','Trade','Gender','Health'
    ]

sources = instance.list_sources  # Display all sources

>>> [
    'LAC Equity Lab', 'Sustainable Energy for All','Global Partnership for Education',
    'International Comparison Program (ICP) 2005','ICP 2017',
    'Exporter Dynamics Database – Indicators at Country-Year Level','Global Financial Inclusion',
    'G20 Financial Inclusion Indicators','Disability Data Hub (DDH)','Education Statistics',
    ...
    'Indicators of Resilience and Equity','PEFA 2016','PEFA 2011','Joint External Debt Hub',
    'Health Nutrition and Population Statistics','Education Policy',
    'Health Nutrition and Population Statistics by Wealth Quintile','Universal Health Coverage',
    'Jobs','Subnational Malnutrition Database','Subnational Population','Statistical Performance Indicators (SPI)'
    ]


categories = instance.list_available_categories  # Display all categories (similar to topics)

You can acces a list of popular indicators using the list_popular_indicators attribute:

popular_indicators = instance.list_popular_indicators

>>> [
    {'Population, total': 'SP.POP.TOTL'},
    {'Population growth (annual %)': 'SP.POP.GROW'},
    {'Surface area (sq. km)': 'AG.SRF.TOTL.K2'},
    ...
    {'GDP per capita (current US$)': 'NY.GDP.PCAP.CD'},
    {'Foreign direct investment, net (BoP, current US$)': 'BN.KLT.DINV.CD'},
    {'Inflation, consumer prices (annual %)': 'FP.CPI.TOTL.ZG'}
    ]

For example, let's filter the indicators related to Economy & Growth:

gdp_indicators = instance.filtered_indicators(topic="Economy & Growth")
gdp_indicators_v2 = instance.category_indicators('Economy & Growth')

Otherwise, you can search for indicators by keywords:

indicators = instance.search_indicator_by_keywords(["GDP", "growth", "annual"])

An example use:

countries = instance.filtered_countries(region="Europe & Central Asia", income_level="High income")

>>>{
    'Andorra': 'AND',
    'Austria': 'AUT',
    'Belgium': 'BEL',
    ...
    'Slovak Republic': 'SVK',
    'Slovenia': 'SVN',
    'Sweden': 'SWE'
    }

countries_codes = [v for k, v in countries.items()]

>>> [
    'AND','AUT','BEL','BGR','CHE','CHI','CYP','CZE','DEU','DNK',
    'ESP','EST','FIN','FRA','FRO','GBR','GIB','GRC','GRL','HRV',
    'HUN','IMN','IRL','ISL','ITA','LIE','LTU','LUX','LVA','MCO',
    'NLD','NOR','POL','PRT','ROU','RUS','SMR','SVK','SVN','SWE'
    ]

indicators = instance.search_indicator_by_keywords(["GDP", "growth", "annual"])

>>> [
    {'name': 'GDP growth (annual %)', 'code': 'NY.GDP.MKTP.KN.87.ZG'},
    {'name': 'GDP per capita, PPP annual growth (%)','code': 'NY.GDP.PCAP.PP.KD.ZG'},
    {'name': 'GDP per person employed (annual % growth)','code': 'SL.GDP.PCAP.EM.KD.ZG'},
    {'name': 'GDP growth (annual %)', 'code': 'NY.GDP.MKTP.KD.ZG'},
    {'name': 'GDP per capita growth (annual %)', 'code': 'NY.GDP.PCAP.KD.ZG'}
    ]

indicator_id = indicators[-2]['code']
indicator_name = indicators[-2]['name']


>>> 'NY.GDP.MKTP.KD.ZG'

data = instance.indicator(countries_codes, indicator_id)
Date AND AUT BEL BGR CHE CHI CYP CZE DEU DNK … NLD NOR POL PRT ROU RUS SMR SVK SVN SWE
1961-01-01 NaN 5.537979 4.978423 NaN 8.108672 NaN NaN NaN 4.298440 6.378832 … 0.295547 6.273336 NaN 5.534903 NaN NaN NaN NaN NaN 5.681293
1962-01-01 NaN 2.648675 5.212004 NaN 4.789941 NaN NaN NaN 4.623471 5.666822 … 6.843507 2.813945 NaN 6.614448 NaN NaN NaN NaN NaN 4.259047
1963-01-01 NaN 4.138268 4.351584 NaN 4.879199 NaN NaN NaN 2.735296 0.637021 … 3.624622 3.785043 NaN 5.873702 NaN NaN NaN NaN NaN 5.327934
1964-01-01 NaN 6.124354 6.956685 NaN 5.256351 NaN NaN NaN 6.639470 9.269938 … 8.274904 5.009651 NaN 6.310747 NaN NaN NaN NaN NaN 6.821164
1965-01-01 NaN 3.480175 3.560660 NaN 2.104555 NaN NaN NaN 5.244164 4.555255 … 8.643095 5.285609 NaN 7.468989 NaN NaN NaN NaN NaN 3.821508
… … … … … … … … … … … … … … … … … … … … … …
2019-01-01 2.015548 1.754976 2.442890 3.788850 1.141982 1.573355 5.875591 3.565777 0.987893 1.711401 … 2.300092 1.123778 4.580458 2.745685 3.923264 2.198076 2.065685 2.275899 3.505252 2.549648
2020-01-01 -11.183940 -6.318255 -4.792984 -3.215737 -2.141737 -8.896780 -3.220634 -5.304880 -4.095137 -1.780106 … -3.867953 -1.278172 -2.035569 -8.204632 -3.674384 -2.653655 -6.647911 -2.585513 -4.084998 -2.005338
2021-01-01 8.286779 4.795329 6.202554 7.780615 5.391888 9.936801 11.387763 4.029018 3.670000 7.382066 … 6.276831 3.908687 6.927183 5.558758 5.545710 5.614290 13.897790 5.726989 8.389650 5.937509
2022-01-01 9.564612 5.277894 4.233432 4.038778 2.568328 5.341962 7.365623 2.847171 1.369731 1.540173 … 5.007235 3.005635 5.255457 6.985842 3.965308 -2.069712 7.898441 0.449674 2.699238 1.459289
2023-01-01 2.583555 -0.954962 1.251701 1.886815 0.716067 3.715006 2.611901 -0.085330 -0.266438 2.495184 … 0.074561 0.479647 0.138833 2.526281 2.404272 3.600000 NaN 1.378337 2.112592 -0.310670

The returned pandas.DataFrame has attributes providing relevant informations about the data:

data.attrs

>>>{
'Country Codes':['AND','AUT','BEL', ..., 'SVK','SVN','SWE'],
'Countries': ['Andorra', 'Austria', 'Belgium', ...,  'Slovak Republic', 'Slovenia', 'Sweden'],
'Indicator': 'GDP growth (annual %)',
'Indicator Code': 'NY.GDP.MKTP.KD.ZG',
'Unit': '',
'Last Updated': '2025-04-15',
'Source': 'World Bank',
'Source URLs': [
  'https://api.worldbank.org/v2/country/AND/indicator/NY.GDP.MKTP.KD.ZG?date=1930:2025&per_page=10000&format=json',
  'https://api.worldbank.org/v2/country/AUT/indicator/NY.GDP.MKTP.KD.ZG?date=1930:2025&per_page=10000&format=json',
  'https://api.worldbank.org/v2/country/BEL/indicator/NY.GDP.MKTP.KD.ZG?date=1930:2025&per_page=10000&format=json',
  ...
  'https://api.worldbank.org/v2/country/SVK/indicator/NY.GDP.MKTP.KD.ZG?date=1930:2025&per_page=10000&format=json',
  'https://api.worldbank.org/v2/country/SVN/indicator/NY.GDP.MKTP.KD.ZG?date=1930:2025&per_page=10000&format=json',
  'https://api.worldbank.org/v2/country/SWE/indicator/NY.GDP.MKTP.KD.ZG?date=1930:2025&per_page=10000&format=json'
  ]
}

You can then analyze/ visualize the data:

plt.figure(figsize=(11, 10))
for country in data:
    plt.plot(data.index, data[country], label=country)

plt.title(f"{indicator_name} in Europe & Central Asia (High Income)")
plt.xlabel("Year")
plt.ylabel(indicator_name)
plt.show()

Project details


Release history Release notifications | RSS feed

This version

0.1

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

worldbankpy-0.1.tar.gz (13.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

worldbankpy-0.1-py3-none-any.whl (11.1 kB view details)

Uploaded Python 3

File details

Details for the file worldbankpy-0.1.tar.gz.

File metadata

  • Download URL: worldbankpy-0.1.tar.gz
  • Upload date:
  • Size: 13.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.2

File hashes

Hashes for worldbankpy-0.1.tar.gz
Algorithm Hash digest
SHA256 0c276db86ea553369ce4c3bc28cc75c38e898e77951ffd08fa07c9093549d458
MD5 6e687c01ede4cfa07ce20de187ba9938
BLAKE2b-256 33d4e97203c5fa3f5eeabe79e8513e13d57c28128b48be6e0a4324a5a7265e03

See more details on using hashes here.

File details

Details for the file worldbankpy-0.1-py3-none-any.whl.

File metadata

  • Download URL: worldbankpy-0.1-py3-none-any.whl
  • Upload date:
  • Size: 11.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.2

File hashes

Hashes for worldbankpy-0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 30bae30edc76ef8d0283a80ae4bd8d1e6f0027818e89b1b032b777316101ba46
MD5 2d3c30db2449197436ca90bf05e9aa42
BLAKE2b-256 6f132404f7c04543d64c4ef0555a571eaa182d57030dc921f476e1dc5b5fda49

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page