# Table of Contents - [ONE Data Docs](#one-data-docs) - [Getting Started - ONE Data Docs](#getting-started-one-data-docs) - [Global Health Expenditure Database (GHED) - ONE Data Docs](#global-health-expenditure-database-ghed-one-data-docs) - [Data Sources - ONE Data Docs](#data-sources-one-data-docs) - [Official Development Assistance (ODA) - ONE Data Docs](#official-development-assistance-oda-one-data-docs) - [Data - ONE Data Docs](#data-one-data-docs) - [Hidden Impacts of Rising Interest Rates - ONE Data Docs](#hidden-impacts-of-rising-interest-rates-one-data-docs) - [Metadata catalog - ONE Data Docs](#metadata-catalog-one-data-docs) - [The Great Reversal - ONE Data Docs](#the-great-reversal-one-data-docs) - [Get places - ONE Data Docs](#get-places-one-data-docs) - [Chart layout - ONE Data Docs](#chart-layout-one-data-docs) - [bblocks-datacommons-tools - ONE Data Docs](#bblocks-datacommons-tools-one-data-docs) - [Climate Finance Files - ONE Data Docs](#climate-finance-files-one-data-docs) - [Typography - ONE Data Docs](#typography-one-data-docs) - [Colour palette - ONE Data Docs](#colour-palette-one-data-docs) - [Interactivity - ONE Data Docs](#interactivity-one-data-docs) - [Data Commons schemas - ONE Data Docs](#data-commons-schemas-one-data-docs) - [Getting started - ONE Data Docs](#getting-started-one-data-docs) - [Preparing data - ONE Data Docs](#preparing-data-one-data-docs) - [How to design a chart - ONE Data Docs](#how-to-design-a-chart-one-data-docs) - [Human Development Report - ONE Data Docs](#human-development-report-one-data-docs) - [Loading data - ONE Data Docs](#loading-data-one-data-docs) - [bblocks-places - ONE Data Docs](#bblocks-places-one-data-docs) - [UNAIDS - ONE Data Docs](#unaids-one-data-docs) - [World Economic Outlook - ONE Data Docs](#world-economic-outlook-one-data-docs) - [Why bblocks-places - ONE Data Docs](#why-bblocks-places-one-data-docs) - [International Debt Statistics - ONE Data Docs](#international-debt-statistics-one-data-docs) - [World Food Programme - ONE Data Docs](#world-food-programme-one-data-docs) - [Data viz principles - ONE Data Docs](#data-viz-principles-one-data-docs) - [World Bank - ONE Data Docs](#world-bank-one-data-docs) - [Modelling data - ONE Data Docs](#modelling-data-one-data-docs) - [Quick introduction - ONE Data Docs](#quick-introduction-one-data-docs) - [Contributing - ONE Data Docs](#contributing-one-data-docs) - [Trillions Tracker - ONE Data Docs](#trillions-tracker-one-data-docs) - [Africa's Vaccine Industry - ONE Data Docs](#africa-s-vaccine-industry-one-data-docs) - [Hidden Trend in Health Financing - ONE Data Docs](#hidden-trend-in-health-financing-one-data-docs) - [Publishing checklist - ONE Data Docs](#publishing-checklist-one-data-docs) - [Getting started - ONE Data Docs](#getting-started-one-data-docs) - [Accessibility - ONE Data Docs](#accessibility-one-data-docs) - [Data visualisation guidelines - ONE Data Docs](#data-visualisation-guidelines-one-data-docs) - [Available Data importers - ONE Data Docs](#available-data-importers-one-data-docs) - [The knowledge graph - ONE Data Docs](#the-knowledge-graph-one-data-docs) - [Sectoral Imputed Multilateral Aid - ONE Data Docs](#sectoral-imputed-multilateral-aid-one-data-docs) --- # ONE Data Docs [Skip to content](https://docs.one.org/#welcome-to-the-documentation-hub-for-one-data) Welcome to the documentation hub for ONE Data ============================================= * [**Tools**](https://docs.one.org/tools) * * * Tools for code-driven analysis, data processing, and other tasks. * [**Methodologies**](https://docs.one.org/methodologies) * * * Our research methodologies behind our publications. * [**ETL**](https://docs.one.org/etl) * * * Our data pipeline that powers our Data Commons knowledge graph. * [**Guidelines**](https://docs.one.org/guidelines) * * * Guidelines to maintain consistency and quality in our work. * [**Resources**](https://docs.one.org/resources) * * * Code books and other resources to help you understand the data we use Back to top --- # Getting Started - ONE Data Docs [Skip to content](https://docs.one.org/tools/oda-data/getting-started/#getting-started) Getting Started =============== This guide will help you install the ODA Data Package and get your first ODA data in minutes. Installation ------------ The package requires Python 3.11 or higher. Install it using pip: `[](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-0-1) pip install oda-data --upgrade` Your First ODA Data ------------------- ### Set Up Data Storage Before fetching data, tell the package where to cache downloaded files: `[](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-1-1) from oda_data import set_data_path [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-1-2)[](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-1-3) # This creates a folder to store cached data [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-1-4) set_data_path("data")` Choose Your Data Path Pick a location where you want to cache ODA data. The package will create this folder if it doesn't exist. Cached data speeds up subsequent queries significantly. ### Example 1: Get Total ODA Let's get total ODA (net disbursements) for all donors from 2020 to 2022: Get Total ODA for All Donors `[](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-2-1) from oda_data import OECDClient [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-2-2)[](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-2-3) # Create a client for specific years [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-2-4) client = OECDClient(years=range(2020, 2023)) [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-2-5)[](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-2-6) # Get Total ODA data [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-2-7) data = client.get_indicators("DAC1.10.1010") [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-2-8)[](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-2-9) # View the results [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-2-10) print(data.head())` **Output:** `[](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-3-1) donor_code donor_name year value [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-3-2) 0 20000 DAC Members 2020 183776.35 [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-3-3) 1 20000 DAC Members 2021 205638.09 [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-3-4) 2 20000 DAC Members 2022 240675.09` Understanding the Data The data includes values in millions of USD (current prices) by default. This is indicated by the `unit_multiplier` column (typically '6'). For example, a value of 3245.68 with unit\_multiplier '6' means $3.246 billion. ### Example 2: Filter by Specific Donors Get bilateral ODA for France (code 4) and the USA (code 302): Get Bilateral ODA for France and USA `[](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-4-1) from oda_data import OECDClient [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-4-2)[](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-4-3) client = OECDClient( [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-4-4) years=[2021, 2022], [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-4-5) providers=[4, 302] # France and USA [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-4-6) ) [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-4-7)[](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-4-8) data = client.get_indicators("DAC1.10.1015") # Bilateral ODA [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-4-9)[](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-4-10) print(data[["donor_code", "year", "value"]])` **Output:** `[](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-5-1) donor_code year value [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-5-2) 0 4 2021 10312.19 [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-5-3) 1 4 2022 10533.46 [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-5-4) 2 302 2021 38229.28 [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-5-5) 3 302 2022 52001.97` Values in Millions The values shown are in millions of USD (unit\_multiplier='6'). To get actual amounts, multiply by 1,000,000. What's Next? ------------ Now that you've fetched your first ODA data, you can: * **Learn about indicators**: See [Working with Indicators](https://docs.one.org/tools/oda-data/oecd-client/) to discover thousands of available indicators * **Convert currencies**: Read [Currencies and Prices](https://docs.one.org/tools/oda-data/currencies-prices/) to work with EUR, GBP, or constant prices * **Analyze policy markers**: Explore [Policy Marker Analysis](https://docs.one.org/tools/oda-data/policy-markers/) for gender, climate, and other themes Common Options -------------- Here are some commonly used client options: `[](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-6-1) client = OECDClient( [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-6-2) years=range(2018, 2023), # Filter by year range [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-6-3) providers=[4, 12, 302], # Filter by donors (France, UK, USA) [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-6-4) recipients=[249, 258], # Filter by recipients (Kenya, Mozambique) [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-6-5) currency="EUR", # Get data in Euros instead of USD [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-6-6) base_year=2021, # Adjust to constant 2021 prices [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-6-7) measure="grant_equivalent", # Use grant equivalents instead of flows [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-6-8) use_bulk_download=True # Use bulk files for better performance (when accessing many indicators) [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-6-9) )` Finding Codes ------------- Need to find provider or recipient codes? `[](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-7-1) from oda_data import OECDClient [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-7-2)[](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-7-3) # Get all available providers (returns dict of code: name) [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-7-4) providers = OECDClient.available_providers() [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-7-5) print(f"Total providers: {len(providers)}") [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-7-6)[](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-7-7) # Get all available recipients (returns dict of code: name) [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-7-8) recipients = OECDClient.available_recipients() [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-7-9) print(f"Total recipients: {len(recipients)}") [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-7-10)[](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-7-11) # Get all available currencies (returns list of currency codes) [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-7-12) currencies = OECDClient.available_currencies() [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-7-13) print(f"Available currencies: {currencies}") [](https://docs.one.org/tools/oda-data/getting-started/#__codelineno-7-14) # Returns: ['USD', 'EUR', 'GBP', 'CAD', 'LCU']` Currency Codes * **USD**: United States Dollars (default) * **EUR**: Euros * **GBP**: British Pounds * **CAD**: Canadian Dollars * **LCU**: Local Currency Units (donor's own currency) Back to top --- # Global Health Expenditure Database (GHED) - ONE Data Docs [Skip to content](https://docs.one.org/etl/data-sources/ghed/#global-health-expenditure-database-ghed) Global Health Expenditure Database (GHED) ========================================= ![đŸ‘·](https://cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f477.svg ":construction_worker:") Page Under Construction This page is currently under construction and will be updated soon. This page contains information about the ETL pipeline for the Global Health Expenditure Database (GHED) Back to top --- # Data Sources - ONE Data Docs [Skip to content](https://docs.one.org/etl/data-sources/#data-sources) Data Sources ============ ![đŸ‘·](https://cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f477.svg ":construction_worker:") Page Under Construction This page is currently under construction and will be updated soon. This page contains information about the data sources used in the ETL pipeline, including information about the data provider, how the data is access and transformed, update frequency and more. Back to top --- # Official Development Assistance (ODA) - ONE Data Docs [Skip to content](https://docs.one.org/methodologies/data/oda/#official-development-assistance-oda) Official Development Assistance (ODA) ===================================== **Methodologies related to Official Development Assistance (ODA) data analysis.** This section documents the methodologies ONE uses to process, analyze, and present ODA data. These methodologies ensure consistency and transparency in how we report on aid flows. Available Methodologies ----------------------- * [**Sectoral Imputed Multilateral Aid**](https://docs.one.org/methodologies/data/oda/imputed-multilateral-sectors/) : How we calculate imputed multilateral aid by sector for DAC donor countries, based on the OECD's discontinued approach but using disbursements rather than commitments. Back to top --- # Data - ONE Data Docs [Skip to content](https://docs.one.org/methodologies/data/#data) Data ==== **Methodological documentation for ONE Data's data processing and analysis approaches.** This section documents the methodologies behind how we process, transform, and analyze data from various sources. These methodologies ensure consistency and transparency in our data work. Available Methodologies ----------------------- ### [ODA](https://docs.one.org/methodologies/data/oda/) Methodologies related to Official Development Assistance (ODA) data analysis. * [Sectoral Imputed Multilateral Aid](https://docs.one.org/methodologies/data/oda/imputed-multilateral-sectors/) : How we calculate imputed multilateral aid by sector for DAC donor countries. Back to top --- # Hidden Impacts of Rising Interest Rates - ONE Data Docs [Skip to content](https://docs.one.org/methodologies/deep-dives/hidden-impacts-of-rising-interest-rates/#the-hidden-impacts-of-rising-interest-rates) The hidden impacts of rising interest rates =========================================== This notebook contains an explanation of the different methodologies we use in our _Hidden impacts of rising interest rates_ report. The key research in the report uses data from the [World Bank's International Debt Statistics (IDS)](https://databank.worldbank.org/source/international-debt-statistics) database. With this data, we attempt to answer the following question: **How much are countries expected to pay in interest on the money borrowed in a given year?** A note on the IDS data ---------------------- The IDS data contains a wealth of information on external public and publicly guaranteed (PPG) debt. The different indicators can be viewed from a debtor perspective, and are broken down by the 'counterpart-area' (i.e. the creditor) to which different types of debt are owed. The level of detail found in the data varies for each indicator. The IDS data is not presented on an individual loan basis. Instead, for _interest payments_ for example, the data is broken down by year, debtor, creditor and by type of debt. That means we cannot tell how much interest is being paid on specific loans, but we have a single number for each type of debt/creditor (bilateral, multilateral, private banks, bonds). Data on the terms of individual loans is unavailable. But data on maturities, grace periods, and interest rates are provided as weighted averages for a given creditor-debtor in a given year. The data is weighted by the amount lent by a specific creditor to a debtor in a given year. On interest payments -------------------- In a given year, interest payments reflect the composition of the outstanding debt. Given different interest rates, maturities, grace periods, and borrowed amounts, the relationship between the interest rates and the interest payments in a given year isn't that straightforward. However, we can use different data available through the IDS to estimate the expected interest payments for loans committed in a given year. For that, we use this data: * _Loan commitments (PPG)_: this data is in current dollars and reflects the total of all loans 'committed' by a given creditor to a given borrower in a given year. * _Average interest rate_: this data is a weighted average of the interest rates of loans for a given debtor based on all the loans 'committed' by a given creditor in a given year. The data is weighted by the amounts committed. * _Average grace period_: this data is a weighted average of the grace periods of loans for a given debtor based on all the loans 'committed' by a given creditor in a given year. The data is weighted by the amounts committed. For bonds, in most cases, the grace period is equal to the maturity of the bond (since the principal is only paid at maturity in most cases). We assume that interest payments are made during the grace period, and that principal payments are not. * _Average maturity_: this data is a weighted average of the length maturities of loans (in years) for a given debtor based on all the loans 'committed' by a given creditor in a given year. The data is weighted by the amounts committed. We use this data in order to calculate the expected time during which the loans will generate interest payments. ### A note on Net Present Value and our use of discount rates Like the IMF in its [Debt Sustainability Assessments](https://www.imf.org/en/Topics/sovereign-debt/debt-limits-policy#:~:text=The%20discount%20rate%20used%20to,least%20equal%20to%2035%20percent) , we use Net Present Value (NPV) in our calculations. This means we take each cash flow in the repayments and we discount it back to the 'present day' (the year of the loan commitment), using a discount rate. NPV better reflects the "burden" of debt than the face value. For example, US$100 million payable in 10 years is less burdensome than a debt of US$100 million payable tomorrow. The NPV takes this time factor into account. When looking at loans with maturities spanning decades this becomes especially significant. ### Calculating expected interest payments To calculate the expected interest payments over the lifetime of loans or bonds we: - Use the amount committed and the interest rate provided. We assume that interest rates are fixed for the duration of the loan/bond. - Assume Equal Principal Payments with a single annual payment. - Assume yearly interest payments. We assume interest is paid during grace periods (but not principal), and that both interest and principal are paid after the grace period. - Assume there will not be defaults, rescheduling, restructuring or refinancing over the lifetime of the loans. - Use a [discount rate of 5%](https://www.imf.org/en/Topics/sovereign-debt/debt-limits-policy#:~:text=The%20discount%20rate%20used%20to,least%20equal%20to%2035%20percent) to discount future cash flows. We do this to reflect the fact that money today (or at the time of commitment) is worth more than the same amount of money in the future. We calculate the total interest due over the lifetime of loans (in NPV) in the following way: We denote: > * _C_ as the committed value or principal > * _rate_ as the interest rate > * _g_ as the grace period (if any) > * _m_ as the maturity of the loan > * _DiscountRate_ as the discount rate used > * _y_ as the year of the payment First, the yearly principal payments (in nominal terms) are calculated as YearlyPrincipal\=Cm−g For the NPV of total interest payments, we sum the interest paid during and after the grace period. Note that for bonds, the grace period may be equal to the bond maturity. The interest due during the grace period (in NPV terms) is calculated as follows: InterestGracePeriod\=∑y\=1gC⋅rate(1+DiscountRate)y The interest due after the grace period (in NPV terms), once principal payments are also being made, is calculated as: InterestAfterGrace\=∑y\=1m−g(C−y⋅YearlyPrincipal)⋅rate(1+DiscountRate)y+g And, finally, the total expected interest payments (in NPV of the year of the commitment) are calculated as: InterestTotal\=InterestGracePeriod+InterestAfterGrace * * * Expected interest payments -------------------------- The chart below shows how much a country/region is expected to pay in interest on the loans it agreed in a given year. **These amounts are for the lifetime of the loan.** You can also apply a discount rate—a rate of 0 means that the data stays in nominal terms. Use the controls below to select a group of countries, creditor, a discount rate, and a 'new' interest rate for comparison. Comparing the World Bank IBRD interest rates to Bonds ----------------------------------------------------- The chart below looks at the weighted average interest rates for Africa (and for 'other' non-African countries as a dropdown option). To produce these aggregates, the rates are weighted by the total loans 'committed' to a given debtor in a given year. * * * Health versus external debt service spending -------------------------------------------- This chart plots government health spending (x-axis) against interest payments on external debt (y-axis), both as a share of total spending. The countries shown in purple, which are above the dotted line, spend more on debt service than they do on health. The data is for 2020, based on health spending data from the [WHO Global Health Expenditure](https://apps.who.int/nha/database) database, and GDP and government expenditure data from the [IMF World Economic Outlook](https://www.imf.org/en/Publications/WEO/weo-database/2023/April) database. ### Many countries spend more servicing debt than on health * * * US Fed interest rate hikes by cycle ----------------------------------- The chart below shows the pace at which the US has raised interest rates in the current cycle, and in other interest rate rising cycles in the past. The lines track the amount by which the rate is changing, compared to the rate in place at the beginning of the cycle (in percentage points). The actual rate is shown on hover. The x-axis tracks the number of weeks that have passed since the interest rate hiking cycle began. Data sources ------------ **Interest cost analysis** The key research in the report uses data from the World Bank's [International Debt Statistics (IDS)](https://databank.worldbank.org/source/international-debt-statistics) database. We use the following indicators: * Interest rates: `DT.INR.DPPG` * Maturities: `DT.MAT.DPPG` * Grace periods: `DT.GPA.DPPG` * New loan commitments: * `DT.COM.MLAT.CD` (multilateral) * `DT.COM.PRT.CD` (private) **FED rates analysis** The US FED rates chart uses data from [The Federal Reserve Bank of Saint Louis,](https://fred.stlouisfed.org/) and is updated automatically as new data becomes available. **Health spending** The health versus debt spending chart uses data from the [WHO Global Health Expenditure Database](https://apps.who.int/nha/database) . **Additional data and replication code** For more information, as well as all code to replicate all of our analysis, please visit this report's [GitHub repository.](https://github.com/ONEcampaign/interest_rates) Back to top --- # Metadata catalog - ONE Data Docs [Skip to content](https://docs.one.org/etl/metadata-catalog/#metadata-catalog) Metadata Catalog ================ ![đŸ‘·](https://cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f477.svg ":construction_worker:") Page Under Construction This page is currently under construction and will be updated soon. This page contains information about the metadata maintained by ONE, including special entities, topics, statistical variable groups, units, measurement methods, etc. Back to top --- # The Great Reversal - ONE Data Docs [Skip to content](https://docs.one.org/methodologies/great-reversal/#the-great-reversal) The Great Reversal ================== This page describes the methodology and data used for the _Great Reversal_ report produced by ONE Data for the Development Finance Observatory. You can read the [report here](http://data.one.org/greatreversal) . For this research, we use data from: * The World Bank’s [International Debt Statistics (IDS)](https://databank.worldbank.org/source/international-debt-statistics) * The OECD DAC [Creditor Reporting System](https://stats.oecd.org/Index.aspx?DataSetCode=crs1) . * The International Forum on Total Official Support for Sustainable Development ([TOSSD](http://tossd.online/) ) Data and code to replicate the analysis are available on [this GitHub repository.](https://github.com/ONEcampaign/DFO-Net-Flows) Inflows ------- In terms of **inflows** we focus on: * OECD Development Assistance Committee (DAC) data for grants from DAC, non-DAC countries, and multilateral institutions from the Creditor Reporting System (CRS) database. * OECD DAC data for loans and other non-grant flows (e.g. private sector instruments) from DAC, non-DAC countries, and multilateral institutions from the CRS. The net flows dataset only includes this data for provider-recipient pairs that are not included in the World Bank International Debt Statistics database. * Additional data from the International Forum on Total Official Support for Sustainable Development (TOSSD) for grants, loans, and other non-grant flows from TOSSD reporting parties. The dataset only includes TOSSD data that is not included in the CRS. Since 2024 data is not yet available for TOSSD, when needed we assign the 2020-2023 yearly average (in real terms) to 2024. * World Bank International Debt Statistics data for new long-term, external public and publicly guaranteed debt disbursements, including from private sources like bondholders and commercial banks. This does not include foreign direct investment or other forms of private capital flows. Outflows -------- In terms of **outflows** we focus on: * Debt service payments (including both principal and interest payments) on PPG long-term external debt (from the World Bank IDS database) Net flows --------- For this report, **net flows** mean PPG debt, grants, and other official inflows minus debt service payments on PPG debt. All debt is Public and Publicly Guaranteed long-term debt. In other words, “private” debt (for example) is public or publicly guaranteed debt owed to private creditors. All numbers are presented in constant 2024 US dollars, using currency and price deflators for debtor / recipient countries. Note Note Except where noted otherwise, for this analysis we only include low and lower-middle income countries. We include Ethiopia in this group, even though it is not currently classified by income by the World Bank. We exclude Ukraine given the exceptional flows following Russia's invasion. Additional Notes ---------------- ### On Double-Counting Because we combine data from multiple sources (DAC/CRS, TOSSD, and World Bank IDS), we apply rules to prevent double-counting flows that appear in more than one database: * **DAC non-grant flows** (loans, Other Official Flows, Private Sector Instruments) are only included for provider-recipient pairs where the counterpart has a DAC code but **no World Bank code** in our concordance table. This prevents overlap with IDS debt data, which captures the same underlying loans. * **TOSSD non-grant flows** are only included for providers that do **not appear** in the World Bank IDS database (providers with no `wb_code` in our concordance). * **Grants from all sources** (DAC and TOSSD) are included without deduplication since grants are not captured in the IDS debt statistics. Note that we only include the TOSSD data which does not appear on the CRS. The concordance tables mapping provider codes across systems are available in the repository at `source_data/counterpart_concordance.csv` and `source_data/recipient_concordance.csv`. ### Coverage of Non-Traditional Providers #### China China does not report to OECD DAC or TOSSD systems. **All Chinese development finance data in this analysis comes from the World Bank International Debt Statistics**, which captures: * Debt disbursements from Chinese bilateral lenders * Debt service payments to Chinese creditors This means our analysis of China data: * **Captures loans** but may miss grants or technical assistance * Represents **debtor-reported data** rather than provider-reported data * Does not distinguish between policy banks (e.g., China Development Bank, Export-Import Bank of China), commercial banks, or other Chinese lenders For more granular data on Chinese development finance commitments, users may consult [AidData's Global Chinese Development Finance Dataset](https://www.aiddata.org/data/aiddatas-global-chinese-development-finance-dataset-version-3-0) , though that dataset tracks commitments rather than disbursements. #### Other Non-DAC Providers Middle Eastern and other emerging providers (including Kuwait, Qatar, Saudi Arabia, Turkey, and UAE) are partially captured through: * **TOSSD reporting** (where they participate as reporting parties) * **World Bank IDS** (debt component, as reported by debtor countries) Coverage varies by provider and year. These providers have uneven reporting practices, so data completeness cannot be guaranteed. ### Price Deflation Methodology All values are presented in **constant 2024 US dollars**. Deflation is performed **from the debtor/recipient country perspective**, which accounts for both price changes and exchange rate movements as experienced by the recipient. | Data Source | Deflator Used | Library | | --- | --- | --- | | DAC/CRS data | DAC deflators | `oda_data` | | TOSSD data | DAC deflators | `oda_data` | | World Bank IDS data | World Bank GDP deflators | `pydeflate` | | Net flows aggregations | IMF GDP deflators | `pydeflate` | This debtor-perspective deflation means that the purchasing power represented by flows is measured from the recipient country's viewpoint, rather than the provider's. ### Country Inclusion and Exclusion Criteria #### Income Groups The analysis focuses on **low-income countries (LICs)** and **lower-middle-income countries (LMICs)** based on World Bank income classifications. #### Special Cases | Country | Treatment | Rationale | | --- | --- | --- | | **Ethiopia** | Included as LIC | Ethiopia is not currently classified by the World Bank due to data gaps, but we include it given its significance and historical LIC status | | **Ukraine** | Excluded | Exceptional inflows following Russia's 2022 invasion would distort trend analysis | #### Regional Recipients Data sometimes reports flows to regional programs rather than individual countries (e.g., "West Africa, regional"). These are mapped to a "REGIONAL" entity code and: * Excluded from country-level analysis * Included in aggregate regional and global totals where appropriate #### Provider Classification Providers are classified as **Bilateral**, **Multilateral**, or **Private** using a concordance table (`counterpart_concordance.csv`) that maps each provider code to a counterpart type: | Type | Definition | Examples | | --- | --- | --- | | **Bilateral** | Sovereign governments providing official finance | United States, Germany, Japan, China | | **Multilateral** | International organizations including MDBs, UN agencies, and regional development banks | World Bank, IMF, African Development Bank, Asian Infrastructure Investment Bank | | **Private** | Bondholders, commercial banks, and other private creditors (for PPG debt only) | International bondholders, commercial banks | Back to top --- # Get places - ONE Data Docs [Skip to content](https://docs.one.org/tools/bblocks/places/get-places/#get-places) Get places ========== Sometimes you want to know what places belong to a particular category, rather than resolving or filtering places. `bblocks-places` makes it easy to get list of places that fit different categories. For example, you want to know what countries are official UN member states or all African countries. You can use the `get_places` function to do this. Get all African countries and territories `[](https://docs.one.org/tools/bblocks/places/get-places/#__codelineno-0-1) african_countries = places.get_places({"region": "Africa"}, place_format="name_official") [](https://docs.one.org/tools/bblocks/places/get-places/#__codelineno-0-2)[](https://docs.one.org/tools/bblocks/places/get-places/#__codelineno-0-3) print(african_countries) [](https://docs.one.org/tools/bblocks/places/get-places/#__codelineno-0-4) # Output: [](https://docs.one.org/tools/bblocks/places/get-places/#__codelineno-0-5) # ['Algeria', 'Angola', 'Benin', 'Botswana', 'British Indian Ocean Territory', 'Burkina Faso', .... ]` You may have noticed that the previous example contains some countries and some territories (such as British Indian Ocean Territory). The default concordance table used maps countries to different formats according to those available in the M49 list of countries and some additional countries/territories such as Taiwan. To see the full concordance table as a pandas DataFrame use the `get_default_concordance_table` function. `[](https://docs.one.org/tools/bblocks/places/get-places/#__codelineno-1-1) df = places.get_default_concordance_table()` You can also get places that fit into multiple categories. Using the previous example, let's say we want all African countries that are UN member states. `[](https://docs.one.org/tools/bblocks/places/get-places/#__codelineno-2-1) africa_un_members = places.get_places({"region": "Africa", "un_member": True}, [](https://docs.one.org/tools/bblocks/places/get-places/#__codelineno-2-2) place_format="name_official") [](https://docs.one.org/tools/bblocks/places/get-places/#__codelineno-2-3)[](https://docs.one.org/tools/bblocks/places/get-places/#__codelineno-2-4) print(africa_un_members) [](https://docs.one.org/tools/bblocks/places/get-places/#__codelineno-2-5) # Output: [](https://docs.one.org/tools/bblocks/places/get-places/#__codelineno-2-6) # # ['Algeria', 'Angola', 'Benin', 'Botswana', 'Burkina Faso', .... ]` The entire list of filters available is: * `region` - UN region name * `region_code` - UN region code * `subregion` - UN subregion * `subregion_code` - UN subregion code * `intermediate_region_code` - UN intermediate region code * `intermediate_region` - UN intermediate region name * `income_level` - World Bank income level * `m49_member` - M49 country list member (True if member) * `ldc` - Less developed country * `lldc` - Land locked less developed country * `sids` - Small Island Developing State * `un_member` - UN official member * `un_observer` - UN observer state * `un_former_member` - UN former member state Convenience functions --------------------- Several convenience functions exist to get places for common categories: * `get_un_members` - get all official UN members * `get_un_observers` - get all UN observer states * `get_m49_places` - get all M49 places * `get_sids` - get all Small Island Developing States * `get_ldc` - get all Least Developed Countries * `get_lldc` - get all Landlocked Developing Countries * `get_african_countries` - get all African countries Back to top --- # Chart layout - ONE Data Docs [Skip to content](https://docs.one.org/guidelines/data-visualisation-guidelines/style-guide/layout/#chart-layout) Chart layout ============ Different charts may require a specific layout, but for standard charts, the following layout should be used. If you are using the ONE Flourish editor to create your chart, the preset theme will automatically apply this styling. ![](https://docs.one.org/assets/data-viz/layout.svg) Back to top --- # bblocks-datacommons-tools - ONE Data Docs [Skip to content](https://docs.one.org/tools/bblocks/datacommons-tools/#bblocks-datacommons-tools) bblocks-datacommons-tools ========================= **Tools to manage and load data for custom [Data Commons](https://datacommons.org/) instances** [![GitHub Repo](https://img.shields.io/badge/GitHub-bblocks--datacommons--tools-181717?style=flat-square&labelColor=%23ddd&logo=github&color=%23555&logoColor=%23000)](https://github.com/ONEcampaign/bblocks-datacommons-tools) [![GitHub License](https://img.shields.io/github/license/ONEcampaign/bblocks-datacommons-tools?style=flat-square&labelColor=%23ddd)](https://github.com/ONEcampaign/bblocks-datacommons-tools/blob/main/LICENSE) [![PyPI - Version](https://img.shields.io/pypi/v/bblocks-datacommons-tools?style=flat-square&labelColor=%23ddd)](https://pypi.org/project/bblocks-datacommons-tools/) [![Codecov](https://img.shields.io/codecov/c/github/ONEcampaign/bblocks-datacommons-tools?style=flat-square&labelColor=ddd)](https://codecov.io/gh/ONEcampaign/bblocks-datacommons-tools) The `bblocks-datacommons_tools` package simplifies the process of preparing and loading data to custom Data Commons instances. It provides utilities for building and editing configuration, metadata, and data files, and automating the data load pipeline. [Data Commons](https://datacommons.org/) is a Google initiative that brings together public data from a wide range of sources into a unified knowledge graph, making it easier to explore and analyze information across domains. Organisations can create custom instances of Data Commons to host their own datasets, integrate them into the graph, and build tailored tools on top of the platform. Custom instances allow you to take advantage of core features such as natural language search and interactive visualisations, while combining your own data with everything available in the base Data Commons. `bblocks-datacommons_tools` is designed to simplify and automate steps to build your custom instance—removing much of the manual work involved in formatting and loading data, and helping you get your custom knowledge graph up and running quickly. **Key features** * Build and edit `config.json` files programmatically * Generate MCF files from simple metadata * Upload CSV, MCF, and config files to Google Cloud Storage * Trigger the data load job and redeploy your custom instance * Use as a Python module or from the command line Ready to get started using `bblocks-datacommons-tools`? **Read [Getting started ↗](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/) .** Want to learn more about Data Commons? **Read the official [Custom Data Commons documentation ↗](https://docs.datacommons.org/custom_dc/index.html) .** Back to top --- # Climate Finance Files - ONE Data Docs [Skip to content](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#the-climate-finance-files-methodology) The Climate Finance Files Methodology ===================================== > This page was last updated on 4 December 2023 Climate finance data is notoriously difficult to access and understand. The different reporting systems, methodologies, sources, and types of finance can make it hard to provide straightforward answers to key questions. We started this work to quantify annual climate finance contributions by specific countries. But asking a question as simple as _"How much does France spend on mitigation and adaptation in developing countries?"_ raised a myriad of questions: According to which source? Commitments or disbursements? Grants or loans? ODA or other official flows? Bilaterally or multilaterally... and so on. Finding answers to these questions isn't easy. Different organisations have different motivations for how they report and present this data. And analysing climate finance in a robust way requires going back to messy and complex raw data. We realise that many organisations have a strong track record of analysing climate finance data. We have learnt a lot from that work. But we think that **accessing clean, comparable data on climate finance should be much easier than it is now**. As part of this work, we are releasing tools to more easily extract, clean, and work with the data reported to UNFCCC and the OECD, without relying on the many individual spreadsheets and databases where it is currently stored. We are also making clean versions of the data available for others to analyse. This should meaningfully lower the barriers to access that many organisations face when seeking to conduct research or advocacy on these topics. TL;DR All climate data is pretty terrible. But we think _The Climate Finance Files_ data is better and more comparable than anything else publicly available. We provide estimates of climate finance using the latest, most granular, publicly available climate finance data. We apply a consistent methodology to minimise overcounting and to more clearly distinguish between adaptation and mitigation financing. And, where possible, we focus on disbursements (money actually provided) instead of commitments (the intention to provide money). What is _climate finance_? -------------------------- The Climate Finance Files look specifically at international public financial support for climate change adaptation and mitigation. That's a mouthful, but an important one. International public climate finance refers to public money going from provider countries and multilateral institutions to (developing country) recipients. That means it doesn't include things that aren't money, domestic spending, or money for other purposes outside mitigation and adaptation. ### Is it the same as climate finance counted towards the US$100 billion goal? It's part of it... but not all of it. In 2009, developed countries committed to jointly mobilise US$100 billion annually in climate finance by 2020 to support developing countries in reducing emissions and adapting to climate change. They didn't define that objective very well: there is no universally agreed definition of what exactly[1](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fn:1) counts and what doesn't, or how to count it. At a minimum, the goal includes mobilised private finance and export credits, which The Climate Finance Files don't (yet) track. How do we count it? ------------------- An innovation of The Climate Finance Files is applying the same methodology for all providers.[2](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fn:2) That means our data is comparable across providers. We standardise what providers report in three main ways: 1. To reduce over-counting (what we sometimes call _inflation_), for Rio Markers data we count 100% of the value of projects with a _principal_ focus on climate change, and 40% of the value of projects with a _significant_ climate focus. 2. We split climate finance into _adaptation_, _mitigation_, and _cross-cutting_ finance. We do that by attributing projects to the 'highest' marker used by providers,[3](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fn:3) and counting them as _cross-cutting_ when both markers are equal. As a nice side-effect, this eliminates double counting.[4](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fn:4) 3. We _strongly_ favour disbursements. A lot of our number crunching was to figure out how much is actually being spent. The Climate Finance Files, however, also include commitments data. ### 1\. Reducing Rio Markers inflation The Rio Markers were not designed to report flows... but they often are, in ways that inflate how much is being provided (see [below](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#counting-100-of-the-value-of-projects-using-the-rio-markers-results-in-overcounting) for more). To address this, for providers that use the Rio Markers to track and report climate finance: > The Climate Finance Files count 100% of the value of projects with a _principal_ focus on climate change, and 40% of the value of projects with a _significant_ focus, as explained in more detail above. Counting 40% of _significant_ projects (instead of 100%) likely doesn't entirely eliminate inflation. It's also quite arbitrary. Our objective is to ensure maximum comparability across providers. We know this doesn't eliminate the inflation that may happen for "principal" projects — but there is no common practise for discounting those activities. We also know that 40% may be overly generous in some cases, and perhaps miserly in cases when providers are very conservative with their Rio marking. #### Counting 100% of the value of projects using the Rio markers results in overcounting Use the sliders to choose how much to count of each type of project. > _Note: this chart takes into account only climate finance reported to the OECD through the Creditor Reporting System (CRS) database. Projects reported only to the Climate-related Development Finance (CRDF) database, which are missing key information, are excluded. Only providers who use the Rio Markers are included._ The alternative would be to assess how much of each project is spent on climate change. But only providers can do that, and they mostly don't (only a few do it when reporting to the United Nations Framework Convention on Climate Change, or UNFCCC). Given how crucial climate finance data is, it's rather incredible that there aren't better, universally accepted standards. **We count only 40% of _significant_ projects** because: * It is better than just counting 100% * It is a fairly common percentage used when reporting to the UNFCCC. * Data that calculates a percentage for each project is not available for most providers.[5](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fn:5) The current system used to track spending on climate adaptation and mitigation is antiquated and inadequate. The [Rio Markers](https://www.oecd.org/dac/financing-sustainable-development/development-finance-standards/FAQ_Tracking%20climate%20finance%20and%20Rio%20markers_February%202016.pdf) were introduced to the OECD Development Assistance Committee (DAC) statistical systems in 1998 to identify projects targeting the 1992 Rio Conventions. They were not designed to _track flows_. Instead, they were designed to _identify projects_.[6](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fn:6) But in practise, they are being used to track flows. When climate finance data is presented in the OECD databases,[7](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fn:7) the entire value of commitments for projects marked as _principal_ or _significant_ using the Rio Markers is counted as climate finance. And when providers report data to the UNFCCC, they choose how much of each marker they count as climate finance. Here's an overview of how messy that can get. **The climate share of each project should be assessed on a case-by-case basis** That rarely happens.... ![](https://docs.one.org/methodologies/deep-dives/climate-finance-files/image@1.png) This chart shows how providers report to the UNFCCC. 100% means that the entire value of a project marked as _principal_ or as _significant_ is counted as climate finance. Case-by-case means the provider estimates how much of a project's value is actually for climate change adaptation or mitigation. ### 2\. Tracking the "highest" marker Understanding how much finance is targeting adaptation and mitigation is key. But the current system makes that task confusing and problematic. A project can be marked as "principal"[8](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fn:8) or "significant"[9](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fn:9) for adaptation or mitigation, or both.[10](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fn:10) Given how markers work, any permutation is possible. That means a project can be marked, for example, "principal" for mitigation and "significant" for adaptation. Or "not targeted" for mitigation and "significant" for adaptation. Or "principal" for adaptation and "principal" for mitigation... and so on. Without finding a way to disentangle the data, adding all adaptation and all mitigation data can result in double counting. That is because the same project can be for both adaptation and mitigation.[11](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fn:11) The Climate Finance Files follow a **highest marker** approach when allocating funding between adaptation, mitigation, and cross-cutting climate finance. That means that we assign the value of a project to whichever marker is the highest ("principal" is higher than "significant," which is higher than "not targeted"). When the project is marked the same way for both adaptation and mitigation, it becomes cross-cutting. #### The highest marker approach eliminates the risk of double counting Use the controls below to select a provider and the years to show. > This chart shows the effect of following the _highest marker_ methodology. As presented by the OECD, the total for adaptation contains projects which also count towards mitigation, and vice versa. That means that there is an "overlap" which must be subtracted from total climate finance in order to avoid double counting. Instead, the _highest marker_ approach counts each project as the objective (adaptation or mitigation) towards which it contributes the most. When it contributes equally to adaptation and mitigation, it is called "cross-cutting." Many providers also follow this approach when reporting to the UNFCCC because: - It reduces the amount of funding that is ambiguously considered to be cross-cutting. - It prevents double counting when presenting totals for both adaptation and mitigation separately. Using the "highest marker" approach doesn't change climate finance totals. But it presents a much clearer picture of how much money is _primarily_ supporting adaptation or mitigation. ### 3\. Using disbursements The Climate Finance Files use disbursements whenever possible. Surprisingly, disbursements data is largely missing from most presentations of climate finance data. Tracking commitments is a _peculiar_ choice. Commitments are a (formal) intention to provide funds. They may or may not fully materialise. By definition, they don't reflect the reality of what providers are actually spending.[12](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fn:12) Measuring intentions and measuring flows is not the same thing. Intentions are probably not the best way to address climate change. ÂŻ\\(ツ)/ÂŻ To address this, The Climate Finance Files: - Use the Creditor Reporting System (CRS) database to track climate finance from providers that use the Rio Markers. The CRS is the most detailed accounting of flows, and includes both policy markers and disbursements information. An unfortunate side effect, however, is that - for a small number of providers - it does not include all the projects reported in the OECD Climate-related Development Finance (CRDF) dataset. - Use the CRDF data for multilateral institutions that use the "Climate Components" reporting method. To add disbursements information, we match the CRDF data to the CRS at a project level. That is a very difficult task and, for some multilateral institutions, we are unable to match 100% of projects. ### Differences when using the 'climate components' data Certain multilateral banks and institutions report their climate finance data using the _climate components_ methodology (instead of the Rio Markers). This methodology identifies the share of projects that directly contribute to climate change adaptation or mitigation. The _components_ are calculated using the joint MDB methodology for [mitigation](https://www.eib.org/attachments/documents/mdb_idfc_mitigation_common_principles_en.pdf) and [adaptation](https://www.eib.org/en/publications/20220242-mdbs-joint-methodology-for-tracking-climate-change-adaptation-finance) finance. Project-level assessment should be the gold-standard for all reporting. It would allow for a much more precise accounting of climate finance. When looking at _climate components_ data, The Climate Finance Files: - Use the commitment amounts as reported by the providers that use this methodology. - Use this information, combined with CRS data on the full value of projects, to calculate the share of each project that is considered climate finance. To calculate climate disbursements, those shares are applied to the corresponding disbursement numbers reported on the CRS. ### Imputed multilateral flows Governments can provide climate finance directly (often called _bilateral_ flows) or through their core contributions to multilateral institutions (often called _multilateral_ flows). A substantial portion of the climate finance provided by countries may be _multilateral_. To provide a more complete picture of their support, we need a way to impute multilateral spending to the countries that provided the funds. All approaches for doing this share some similarities: they assess multilateral spending and impute it to bilateral providers based on their core[13](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fn:13) contributions to multilateral agencies. Any methodology for imputing multilateral flows can only ever be an approximation.[14](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fn:14) Delays in reporting, incomplete data on multilateral outflows, and other factors mean that multilateral outflows in a given year do not exactly match bilateral providers' core contributions to the multilateral system. To produce imputed multilateral flows, The Climate Finance Files: - Calculate the share of climate adaptation, mitigation, and cross-cutting spending. We do that by recipient, sector/purpose, and instrument type. We calculate the shares based on average spending over a two-year rolling period. - Use data from the Members Total Use of the Multilateral System [database](https://stats.oecd.org/Index.aspx?DataSetCode=MULTISYSTEM) to calculate core contributions to multilateral agencies that report climate finance spending. - Calculate imputed multilateral climate finance for each provider by multiplying the contributions made to each multilateral agency in a given year, by the climate spending shares of that agency. Multilateral agencies (development banks in particular), spend more than the resources they receive as core contributions. That is because they are able to mobilise additional finance. That additional spending can also be attributed back to specific provider countries. In the near future, The Climate Finance Files will include estimates for "attributed" multilateral climate finance. How do The Climate Finance Files compare to other existing data? ---------------------------------------------------------------- The quality, detail, and completeness of The Climate Finance Files is enabled by existing data compiled by the OECD. It is also limited by how the OECD presents the data, its use of different databases, and its inconsistent use of project, channel, and provider identifiers. The Climate Finance Files build upon data released by the OECD: - For all Rio markers providers, we use CRS data. Though the data is available on the Climate-relevant Development Finance (CRDF) dataset, it is less detailed (notably is missing disbursements). Unfortunately, some data reported on the CRDF is not reported on the CRS (though it ideally should be). That means we are missing some of the data reported only on the CRDF. - For climate components providers, we use the CRDF to understand what is being reported as climate finance. We then add that information to the corresponding CRS data to get disbursements information. Since that process is imperfect in some cases, our commitments data includes all the data reported by climate components providers (including what is only reported on the CRDF). In the near future, The Climate Finance Files will include tools to more easily access and work with data reported to the UNFCCC. For certain providers, the data reporte to the UNFCCC provides a better assessment of climate finance than the equivalent data presented on the OECD databases. That data, however, is not comparable across providers and mostly lacks disbursements information. To complicate things further, reporting to the UNFCCC is not sufficiently standardised, and the resulting data is of questionable timeliness, quality, and reliability. * * * Using the data -------------- We designed The Climate Finance Files to make using and analysing climate finance data much easier than was possible before. We are releasing the data on ONE Data Commons, starting on 30 November 2023. In early December 2023, a python package (`climate-finance`) will be available to get, rebuild, remix, and create using our tools and methodologies — all with only a few lines of code. Sources ------- The Climate Finance Files build upon and use data from various sources: * [OECD CRS](https://stats.oecd.org/Index.aspx?DataSetCode=crs1) * [OECD CRDF, recipient perspective (2000-2021)](https://webfs.oecd.org/climate/RecipientPerspective/CRDF-RP-2000-2021.xlsx) * [OECD Development Finance for Climate Change](https://www.oecd.org/dac/financing-sustainable-development/development-finance-topics/climate-change.htm) * [OECD Members' total use of the multilateral system](https://stats.oecd.org/Index.aspx?DataSetCode=MULTISYSTEM) * [UNFCCC Climate Finance Data Portal](https://unfccc.int/climatefinance?home) * [UNFCCC Fifth Biennial Reports](https://unfccc.int/BR5) * [Compiled list of MDB reports for capital subscription and voting power data](https://docs.google.com/spreadsheets/d/19dK3sR7v5BzJxXuRIJ9_d5XE3gV--1KMHbuTrOl4cB4/edit?usp=sharing) * * * * * * 1. Developed UNFCCC parties agreed to mobilise [US$100 billion](https://unfccc.int/process-and-meetings/bodies/constituted-bodies/standing-committee-on-finance-scf/progress-report) from a "wide variety of sources, including public and private, bilateral and multilateral, and alternative sources." In other words, anything counts if it is counted. [↩](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fnref:1 "Jump back to footnote 1 in the text") 2. We agree — this shouldn't be so innovative. To be precise, we apply the same methodology to all providers that report using the Rio Markers. For multilaterals that use the _Climate Components_ approach, we use their data as-is. [↩](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fnref:2 "Jump back to footnote 2 in the text") 3. For example, if a project were marked "principal" for adaptation and "significant" for mitigation, we would count it as adaptation finance. If it were marked as "significant" for both adaptation and mitigation, we would count it as cross-cutting. [↩](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fnref:3 "Jump back to footnote 3 in the text") 4. Double-counting is a risk in the OECD's presentation of this data. The OECD considers adaptation finance to include all projects marked _adaptation_. It also considers mitigation finance to include all projects marked _mitigation_. This creates an overlap of all projects marked as both adaptation and mitigation, which must be subtracted from climate finance totals. [↩](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fnref:4 "Jump back to footnote 4 in the text") 5. A few providers report case-by-case data to the UNFCCC. However, that data is not reported in a way that makes it readily comparable to data from other providers, or to the data used in OECD reporting. In those cases, our version of the data is worse at identifying the actual share of projects that is climate-relevant. But it is better in its granularity and at enabling comparisons among providers. [↩](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fnref:5 "Jump back to footnote 5 in the text") 6. As the OECD [explains](https://www.oecd.org/dac/financing-sustainable-development/development-finance-standards/FAQ_Tracking%20climate%20finance%20and%20Rio%20markers_February%202016.pdf) , "the markers are descriptive rather than strictly quantitative." Providers use the Rio Markers in different ways. The OECD [issues guidance](https://www.oecd.org/dac/environment-development/Revised%20climate%20marker%20handbook_FINAL.pdf) , but providers are ultimately responsible for how they mark each project. [↩](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fnref:6 "Jump back to footnote 6 in the text") 7. Including the Creditor Reporting System ([CRS](https://stats.oecd.org/Index.aspx?DataSetCode=crs1) ), the Climate-related Development Finance [dataset](https://www.oecd.org/dac/financing-sustainable-development/development-finance-topics/climate-change.htm) , and its reports using their own data. [↩](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fnref:7 "Jump back to footnote 7 in the text") 8. Mitigation or adaptation are explicitly stated as fundamental to the project. The project wouldn't have been funded without that objective. [↩](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fnref:8 "Jump back to footnote 8 in the text") 9. Mitigation or adaptation are explicitly mentioned, but they are not the fundamental driver or motivation for undertaking the project. [↩](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fnref:9 "Jump back to footnote 9 in the text") 10. The project can also be marked as "not targeted," which means it is not climate finance. [↩](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fnref:10 "Jump back to footnote 10 in the text") 11. The OECD tries to mitigate that risk by identifying the "overlap," which is to be subtracted when presenting climate finance totals. [↩](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fnref:11 "Jump back to footnote 11 in the text") 12. Commitments are meant to be a "firm, written obligation \[...\] to provide resources" (Statistical Reporting [Directives](https://one.oecd.org/document/DCD/DAC/STAT(2023)9/FINAL/en/pdf) ). At the same time, commitments measure "donors' intentions \[...\] they give an _indication_ of future flows" ([DAC](https://www.oecd.org/dac/financing-sustainable-development/development-finance-data/faq.htm) , emphasis added). [↩](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fnref:12 "Jump back to footnote 12 in the text") 13. In general, contributions to the multilateral system can be _core_ / _un-earmarked_ (providers don't have a direct say on how funds are spent), and _earmarked_, which means they are counted as "bilateral" flows instead. [↩](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fnref:13 "Jump back to footnote 13 in the text") 14. The OECD explains some of the challenges [here](https://www.oecd.org/dac/stats/oecdmethodologyforcalculatingimputedmultilateraloda.htm) . [↩](https://docs.one.org/methodologies/deep-dives/climate-finance-files/#fnref:14 "Jump back to footnote 14 in the text") Back to top --- # Typography - ONE Data Docs [Skip to content](https://docs.one.org/guidelines/data-visualisation-guidelines/style-guide/typography/#typography) Typography ========== For all non-chart/non-data visualization text, Colfax is the default font that should be used. For all chart and data visualization text, Italian Plate No.2 should be used. Please use this font for all chart elements including titles, footers, and labels. **The font size should be minimum 1.2x the default font size.** Using a secondary font for data visualization helps to differentiate between the data and the surrounding text, creates a more visually appealing chart, and helps establish ONE's data visualization style. Chart title, subtitles, notes etc should be coloured black ⏀ `#000000` by default. Axis text elements and footer text elements should be coloured `#3d3d3d`⏀. Italian Plate No.2 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 1234567890 Regular Bold Italic Access the font files [here](https://theonecampaign.sharepoint.com/sites/BrandGuide/SitePages/Fonts.aspx) . Back to top --- # Colour palette - ONE Data Docs [Skip to content](https://docs.one.org/guidelines/data-visualisation-guidelines/style-guide/colour-palette/#colour-palette) Colour palette ============== Whenever possible, use the colour ⏀ `#1A9BA3` as the primary colour in your visualisations, with the secondary colours (in order or preference from left to right) and gray scale as needed. When it is necessary to emphasise or de-emphasise certain colours, consider using different shades shown below. Main colour ----------- Secondary colours ----------------- Gray scale ---------- Colour shades ------------- Brand colours ------------- ONE's brand colours are ⏀ black `#000000` and ⏀ white `#ffffff`, ⏀ "Bring it ne-on" `#00ffd9` and ⏀ “Equali-teal” `#10827b`. Secondary colours are ⏀ “Free Peach” `#ffa07a`, ⏀ “Girls are the Fuchsia” `#e465ab`, ⏀ “Action Azul” `#081248` and ⏀ “Power Plum” `#73165a`. While these brand colours can be used for content, they may not be suitable for the density of information that data visualizations usually convey. They can fail in terms of accessibility, contrast, and equal visual weight. The colour palette above is developed specifically for ONE's data visualizations while maintaining the feeling and purpose shown through the brand colours and the brand guidelines. Back to top --- # Interactivity - ONE Data Docs [Skip to content](https://docs.one.org/guidelines/data-visualisation-guidelines/guidelines/interactivity/#interactive-data-visualisations) Interactive data visualisations =============================== Interactivity can greatly enhance the effectiveness and engagement of a data visualisation, especially when communicating complex ideas. Interactive elements can help users explore, discover, and understand data more deeply. However, when poorly implemented, interactivity can confuse, overwhelm, or distract. It should always be applied intentionally and with care. Here are key considerations to keep in mind: **Purpose-driven design** It is easy to add interactive elements with modern editors like Flourish. But just because interactivity is possible doesn’t mean it’s necessary. Use it only when it meaningfully enhances the chart’s purpose. If interactivity detracts from the main message or makes interpretation harder, a static version is likely more effective. **Support clarity—don’t depend on it** Unless the chart is explicitly designed as a tool for exploration, it should still make sense as a static image. **Interactivity should enhance understanding, not be required for it**. Users should grasp the main insight immediately, with interactive elements revealing additional information layers or nuance. **User-centered approach** Design interactivity with your audience in mind—their familiarity with data visualisations, comfort with digital tools, and the devices they’ll use. Interactive elements must be intuitive, accessible, and clearly explained. Provide clear prompts or instructions where needed. Always test your interactive charts with users to identify confusion or usability issues. Finally, if the final version of the chart will be static (e.g. for print or a PDF report), avoid using interactive elements in your build. Including them in a non-interactive context can confuse viewers and reduce the professionalism of the final product. Back to top --- # Data Commons schemas - ONE Data Docs [Skip to content](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#data-commons-schemas) Data Commons Schemas ==================== You can choose to structure your data for Data Commons using either an **implicit** or **explicit** schema, each serving different needs and levels of complexity. Implicit schema --------------- The implicit schema is the simpler way of importing data into Data Commons. It does not require that you write MCF files, but it is more constraining on the structure of your data. You don't need to specify details about the variables or specify entities in `DCID` format (they will be automatically resolved). Naming conventions are loose, and the Data Commons importer will automatically generate `DCIDs` for your variables based on the column names in your CSV files if they are not specified in the `config.json`. Using the implicit schema is convenient for simple and small datasets when loading the data quickly is more important than having a fully detailed schema. ### Example implicit schema workflow Here is a very simple example of a workflow using the implicit schema. Let's say we have some data on GDP for different countries that we want to import into Data Commons. We don't have any other data in the knowledge graph (so we are starting from scratch). The data comes from the IMF World Economic Outlook, and we have already done the hard work of cleaning and formatting it as a pandas DataFrame: `[](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-0-1) df = pd.DataFrame({ [](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-0-2) "Country": ["USA", "Canada", "Mexico"], [](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-0-3) "Year": [2020, 2020, 2020], [](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-0-4) "gdp": [21000000, 1700000, 1200000] [](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-0-5) })` This dataframe is structured for the implicit schema where there is a variable per columns - in this case `gdp` - and the other columns are used to specify the entity "Country" and the time period "Year". The entities and the time period don't need to be `DCIDs` or follow any convention, but the columns must always be specified in the sequence: ENTITY, OBSERVATION\_DATE, STATISTICAL\_VARIABLE1, STATISTICAL\_VARIABLE2, ... Now let's use the `CustomDataManager` to prepare the data for import into Data Commons: First we need to create a `CustomDataManager` instance: `[](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-1-1) from bblocks.datacommons_tools import CustomDataManager [](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-1-2)[](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-1-3) manager = CustomDataManager()` This creates a new `CustomDataManager` instance with a blank `config.json` file. We are forward looking data engineers, so we know that our data will grow over time. So we might want to organise the files in subdirectories. Let's allow subdirectories in the `config.json` file: `[](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-2-1) manager.set_includeInputSubdirs(True)` Next, let's add the source and the provenance of the data to the `config.json` file. `[](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-3-1) manager.add_provenance(provenance_name="World Economic Outlook (WEO)", [](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-3-2) provenance_url="https://www.imf.org/en/Publications/WEO", [](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-3-3) source_name="International Monetary Fund (IMF)", [](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-3-4) source_url="https://www.imf.org/en/Home" [](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-3-5) )` Now let's register the variable `gdp` in the `config.json` file. This is optional but recommended, as it allows you to add details about the variable. If this is not done, the Data Commons importer will automatically generate a `DCID` for the variable based on the data file. `[](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-4-1) manager.add_variable_to_config(statVar="gdp", [](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-4-2) name="Gross Domestic Product", [](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-4-3) description="Gross Domestic Product (GDP) is the total value of all goods and services produced in a country in a given year.", [](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-4-4) group="Economy", [](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-4-5) )` Now we can add the data and the data file to the manager object. This will update the `config.json` file with the data file information and keep track of the data in the `CustomDataManager` instance. `[](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-5-1) manager.add_implicit_schema_file(file_name="ecomomy/gdp.csv", # store the data in the gdp file in the ecomomy subdirectory [](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-5-2) provenance="World Economic Outlook (WEO)", [](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-5-3) data=df, # pandas DataFrame with the GDP data [](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-5-4) entityType="Country", [](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-5-5) observationProperties={"unit": "USDollar"} # specify the unit of the variable [](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-5-6) )` We have added the provenance and source, registered the variable, and added the data file with the GDP data. Now we are ready to export the files and import them into Data Commons. `[](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/#__codelineno-6-1) manager.export_all("output_directory")` The `config.json` and the data file as a CSV file in the `economy` subdirectory will be created in the `output_directory`. Now you are ready to import your implicit schema data into Data Commons! Next, read about the explicit schema or jump to [loading the data into Data Commons](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/) . Explicit schema =============== ### Example explicit schema workflow Back to top --- # Getting started - ONE Data Docs [Skip to content](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#getting-started-with-bblocks-datacommons-tools) Getting started with `bblocks-datacommons-tools` ================================================ This page walks you through the basic steps to install and start using `bblocks-datacommonst-tools` to prepare and load the data for your custom instance. About custom Data Commons instances ----------------------------------- Anyone can build and manage their own Data Commons instance—combining their own datasets with the base data available from datacommons.org, and taking advantage of built-in features like natural language queries, interactive visualisations, and data exploration tools. For many organisations, a custom instance is a practical way to publish data with exploration and visualisation tools without building infrastructure from scratch. However, preparing your data for a Data Commons knowledge graph, uploading the necessary files to Google Cloud Platform (GCP), and deploying the service can be a repetitive and error-prone process. For smaller projects with limited data and infrequent updates, managing the workflow manually may be sufficient. But for larger datasets or pipelines with regular refreshes, the process quickly becomes tedious and difficult to maintain. `bblocks-datacommons-tools` streamlines this workflow by allowing you to programmatically prepare and load data using a Python-based pipeline. Before you get started, you should have a basic understanding of how custom Data Commons instances work and what the data loading process involves. You can find the [official documentation here](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/docs.datacommons.org/custom_dc/custom_data.html) . At a top level, you should be familiar with: * **The `config.json` file**: the [JSON configuration](https://docs.datacommons.org/custom_dc/custom_data.html#step-2-write-the-json-config-file) file that specifies how to map and resolve data to the Data Commons schema knowledge graph. * **The data files**: CSV files containing the data formatted for a specified schema, either [implicit](https://docs.datacommons.org/custom_dc/custom_data.html#prepare-your-data-using-implicit-schema) or [explicit](https://docs.datacommons.org/custom_dc/custom_data.html#explicit) . * **Meta Content Framework ([MCF](https://docs.datacommons.org/custom_dc/custom_data.html#step-1-define-statistical-variables-in-mcf) ) files**: files that provide additional flexibility form modeling data for the knowledge graph. * **Uploading data and deploying**: Files need to be loaded to GCP, and the service needs to be [deployed](https://docs.datacommons.org/custom_dc/deploy_cloud.html) . Installation ------------ The package can be installed in various ways. Directly as `[](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-0-1) pip install bblocks-datacommons-tools` Or from the main `bblocks` package with an extra: `[](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-1-1) pip install "bblocks[datacommons-tools]"` Preparing data -------------- `bblocks-datacommons-tools` offers convenient functionality to prepare configuration JSON, MCF, and custom data files without having to manually edit these files. To access this functionality, create an instance of the `CustomDataManager` class. `[](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-2-1) from bblocks.datacommons_tools import CustomDataManager [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-2-2)[](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-2-3) manager = CustomDataManager()` The `CustomDataManager` lets you create or edit the `config.json` file without editing it manually. You can register variables, sources or provenances, and data files. Add provenance and source `[](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-3-1) manager.add_provenance( [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-3-2) provenance_name="ONE Climate Finance", [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-3-3) provenance_url="https://datacommons.one.org/data/climate-finance-files", [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-3-4) source_name="ONE Data", [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-3-5) source_url="https://data.one.org", [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-3-6) )` Register an indicator `[](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-4-1) manager.add_variable_to_config( [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-4-2) statVar="climateFinanceProvidedCommitments", [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-4-3) name="Climate Finance Commitments (bilateral)", [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-4-4) group="ONE/Environment/Climate finance/Provider perspective/Commitments", [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-4-5) description="Funding for climate adaptation and mitigation projects", [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-4-6) searchDescriptions=[ [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-4-7) "Climate finance commitments provided", [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-4-8) "Adaptation and mitigation finance provided", [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-4-9) ], [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-4-10) properties={"measurementMethod": "Commitment"}, [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-4-11) )` You can pass pandas DataFrames to the manager, specifying what schema is being used, and the manager will handle exporting the data as CSVs in the correct format. \`\`\`python title="Add implicit schema data import pandas as pd df = pd.DataFrame(...) manager.add\_implicit\_schema\_file( file\_name="climate\_finance/one\_cf\_provider\_commitments.csv", provenance="ONE Climate Finance", entityType="Country", data=df, ignoreColumns=\["oecd\_provider\_code"\], observationProperties={"unit": "USDollar"}, ) `[](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-5-1) [//]: # (<--- TODO: Add explicit schema data example --->) [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-5-2) ```python title="Add explicit schema data"``` [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-5-3) [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-5-4)[](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-5-5) Once you are finished adding and editing data and configuration, you can [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-5-6) validate and export all the files for your custom Data Commons instance. [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-5-7)[](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-5-8) ```python [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-5-9) manager.export_all("path/to/output/folder")` **Read more detailed documentation about preparing data with the `CustomDataManager` [here ↗](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/) ** Loading data ------------ You can programmatically push the data and config to a Google Cloud Storage Bucket, trigger the data load job, and redeploy your Data Commons instance. First, specify all the configuration settings needed to add files to the storage bucket. For convenience these can be specified in a `.env` file (read more about the configuration settings [here](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/) ). `[](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-6-1) from bblocks.datacommons_tools.gcp_utilities import get_kg_settings [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-6-2)[](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-6-3) settings = get_kg_settings(source="env", env_file="customDC.env")` Now we can load data and configuration files to the storage bucket, run the data load job on GCP, and redeploy the custom Data Commons instance. `[](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-7-1) from bblocks.datacommons_tools.gcp_utilities import ( [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-7-2) upload_to_cloud_storage, [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-7-3) run_data_load, [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-7-4) redeploy_service, [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-7-5) ) [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-7-6)[](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-7-7) upload_to_cloud_storage(settings=settings, directory="path/to/folder/with/data_and_config") [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-7-8) run_data_load(settings=settings) [](https://docs.one.org/tools/bblocks/datacommons-tools/getting-started/#__codelineno-7-9) redeploy_service(settings=settings)` Back to top --- # Preparing data - ONE Data Docs [Skip to content](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#preparing-data-for-data-commons) Preparing data for Data Commons =============================== `bblocks-datacommons-tools` offers convenient functionality to prepare configuration JSON, MCF, and custom data files without having to manually edit these files. The `CustomDataManager` lets you create or edit an existing `config.json` file, work with MCF files, export data stored as pandas DataFrames in correct CSV formats, and validate all the files ensuring they are correctly structured for Data Commons. Creating a `CustomDataManager` ------------------------------ To start preparing your data, create a `CustomDataManager` instance. `[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-0-1) from bblocks.datacommons_tools import CustomDataManager [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-0-2)[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-0-3) manager = CustomDataManager()` This will create a custom data manager without a blank `config.json` and no MCF files, which you can use if you are building the files from scratch. If you already have a `config.json` or any MCF files you can specify them at instantiation. `[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-1-1) manager = CustomDataManager(config_file="path/to/config.json", mcf_file="path/to/mcf_file.mcf")` You might store several config files in subdirectories. You can create a `CustomDataManager` instance specifying the directory containing the `config.json` files which will be merged into a single `config.json` file. `[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-2-1) manager = CustomDataManager.from_config_files_in_directory("path/to/directory")` Managing provenances and sources -------------------------------- The `CustomDataManager` allows you to manage the sources and provenances in the `config.json` file. You can add a provenance and source using the `add_provenance` methods. `[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-3-1) manager.add_provenance(provenance_name="Provenance Name", [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-3-2) provenance_url="https://example.com/provenance", [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-3-3) source_name="Source Name", [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-3-4) source_url="https://example.com/source" [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-3-5) )` If the source already exists in the `config.json`, it will not be added again. But if the source does not exist yet, you should specify the source URL. If the provenance already exists, you can override it by setting the `overwrite` parameter to `True`. Additional methods exist to manage sources and provenances: * `remove_source` - removes a source and all its provenances from the `config.json`. * `remove_provenance` - removes a provenance from the `config.json`. * `rename_source` - renames a source in the `config.json`. * `rename_provenance` - renames a provenance in the `config.json`. Managing variables ------------------ The `CustomDataManager` lets you easily add variables to the `config.json` or MCF files based on whether you are using the implicit or explicit schema. Read more about implicit and explicit schemas [here](https://docs.one.org/tools/bblocks/datacommons-tools/dc-schemas/) . If you are using the implicit schema, you can specify details about the variables in the `config.json` file in the `variables` section. Adding a `variable` section to the `config.json` is optional, but recommended to specify variable names and associate properties with the variables. For each variable you can specify: - `statVar`: The statistical variable ID - `name`: A human-friendly readable name - `description`: A more detailed name or description - `searchDescriptions`: A comma-separated list of natural-language text descriptions of the variable used to generate embeddings for the NL query interface - `group`: The group the variable belongs to - `properties`: Any properties associated with the variable for example `Gender` - `Male`, `Female`, `Other` etc. `[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-4-1) manager.add_variable_to_config(statVar="ghed_che", [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-4-2) name="Current health expenditure", [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-4-3) description="The total expenditure on health from domestic and foreign sources", [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-4-4) group="Health", [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-4-5) searchDescriptions=["Total health spending", "Health financing"], [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-4-6) properties={"measurementMethod": "WHOEstimate"} [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-4-7) )` If the variable already exists, you can overwrite it by setting the `override` parameter to `True`. You can rename variables using the `rename_variable` method, optionally specifying the MCF file if you are using the explicit schema. `[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-5-1) manager.rename_variable("ghed_che", "ghed_current_health_expenditure", [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-5-2) mcf_file="path/to/mcf_file.mcf")` You can also remove variables from the `config.json` or MCF files using the `remove_variable` method. `[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-6-1) manager.remove_variable("ghed_che", mcf_file="path/to/mcf_file.mcf")` Managing the data files ----------------------- The `CustomDataManager` allows you to manage the data files you want to import into Data Commons. **Note:** This doesn't mean formatting or transforming the data, but rather managing the files that will be used to import the data into Data Commons and registering them according to the schema you are using. The `CustomDataManager` provides support for working with pandas DataFrames, allowing you to register data stored in a DataFrame to the manager which will export the data to a CSV file in the correct format for Data Commons. To register a data file using the implicit schema, use the `add_implicit_schema_file` method: `[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-7-1) import pandas as pd [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-7-2)[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-7-3) df = pd.DataFrame({ [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-7-4) "Country": ["USA", "Canada", "Mexico"], [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-7-5) "Year": [2020, 2020, 2020], [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-7-6) "gdp": [21000000, 1700000, 1200000] [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-7-7) }) [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-7-8)[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-7-9) manager.add_implicit_schema_file(file_name="gdp.csv", [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-7-10) provenance="IMF", [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-7-11) data=df, [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-7-12) entityType="Country", [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-7-13) observationProperties={"unit": "USDollar"} [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-7-14) )` Adding data when registering a data file is optional. You can also add the data later using the `add_data` method: `[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-8-1) manager.add_data(data=df, file_name="gdp.csv")` Removing variables and data files --------------------------------- You have already seen above how to remove variables and data files using the `remove_variable` and `remove_data_file` methods. You can also remove variables and files based on their associated provenance or source. Remove variables by provenance `[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-9-1) manager.remove_by_provenance("World Economic Outlook")` Remove data files by source `[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-10-1) manager.remove_by_source("IMF")` Adding and merging config files ------------------------------- Additional settings ------------------- There are some additional settings you can configure in the `CustomDataManager`: `[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-11-1) manager.set_includeInputSubdirs(True) # Include input subdirectories in the config.json` This method will add the `includeInputSubdirs` field to the `config.json` file, which allows you to place data files in subdirectories inside the main output directory. This is useful for organizing your data files and keeping them structured. By default, this is not set and the Data Commons importer will expect all data files to be in the main output directory. If this is set to `True`, You can specify the subdirectory when adding a data file: `[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-12-1) manager.add_implicit_schema_file(file_name="economics/gdp.csv", [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-12-2) ... # other parameters as before [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-12-3) )` You can also set the `groupStatVarsByProperty` field in the `config.json` file, which allows you to group statistical variables by their properties. `[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-13-1) manager.set_groupStatVarsByProperty(True)` You can control the generated StatVar and StatVarGroup identifiers in the `config.json` file. `[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-14-1) manager.set_customIdNamespace("ONE") [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-14-2) manager.set_customSvgPrefix("ONE/g/") # Optional – overrides the default of "geo/g/" [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-14-3) manager.set_defaultCustomRootStatVarGroupName("ONE Data")` Finally, you can update the hierarchy blocklist used when generating StatVar groups from the config. Any duplicates you provide are ignored automatically: `[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-15-1) manager.set_svHierarchyPropsBlocklist([ [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-15-2) "WhoCode", [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-15-3) "aggregationDimensions", [](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-15-4) ])` Validating and exporting files ------------------------------ To ensure that your `config.json` is correctly strucured, you can validate it using the `validate_config` method: `[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-16-1) manager.validate_config()` The config is automatically validated when you export it. You can export the `config.json` file to disk or get the config as a dictionary. Export config to disk `[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-17-1) manager.export_config("path/to/output/config.json")` Get config as dictionary `[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-18-1) config_dict = manager.config_to_dict()` Additionally, you can export the data or MCF files to disk. Export data files `[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-19-1) manager.export_data("path/to/output/folder")` Export MCF files `[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-20-1) manager.export_mfc_file("path/to/output/folder")` To export all files at once, you can use the `export_all` method: `[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-21-1) manager.export_all("path/to/output/folder")` **Note**: By default this will export the `config.json` and all data files. MCF files are not exported by default. To export MCF files as well, you should specify the `mcf_file_names` parameter: `[](https://docs.one.org/tools/bblocks/datacommons-tools/preparing-data/#__codelineno-22-1) manager.export_all("path/to/output/folder", mcf_file_names=["mcf_file1.mcf", "mcf_file2.mcf"])` Back to top --- # How to design a chart - ONE Data Docs [Skip to content](https://docs.one.org/guidelines/data-visualisation-guidelines/guidelines/design-process/#how-to-design-a-chart) How to design a chart ===================== Creating an effective chart involves much more than selecting a chart type and plugging in data. A thoughtful, step-by-step process helps ensure your visualisation is clear, engaging, and fit for purpose. Below are the key stages to follow: 1\. Define the Objective and Audience ------------------------------------- Before doing anything else, clearly define the goal of your visualisation. What question are you answering or story are you telling? Consider: * What topic are you exploring? * How have others visualised this topic? * Do you have enough data—or is more data needed? * Are there any assumptions or biases you should be aware of? Equally important: **know your audience**. What is their familiarity with the subject? What is their level of data and graph literacy? 2\. Explore and Understand the Data ----------------------------------- To create a compelling and truthful chart, you need a deep understanding of the data. Use exploratory visualisation techniques to uncover patterns, outliers, or hidden stories (e.g. see Anscombe’s quartet). Avoid selectively seeking evidence for a predetermined argument. Instead, approach the data openly and allow your insights to emerge through exploration. (See also: principles of quantitative analysis.) 3\. Choose the Right Chart Type ------------------------------- Once your message is clear, choose a chart type—standard or non-standard—that best supports your insight. Don’t default to the familiar; choose the chart that communicates the story most effectively and intuitively. 4\. Prepare the Data and Build the Visual Elements -------------------------------------------------- This is the hands-on stage. Prepare and format your data to suit the visualisation tool you're using (Flourish, Tableau, Excel, or a scripting language like R or Python). If you need help, reach out to the data team. Then begin building: * Decide which variables go on the x-axis, y-axis, or are represented by size, colour, shape, or animation. * Think about layering, grouping, and how to direct the viewer’s attention. 5\. Add Titles, Annotations, and Explanations --------------------------------------------- Guide your viewer through the visual: * Write a **clear, active title** that communicates your main message. * Use annotations to explain key insights or unusual data points. * Include legends, labels, and notes where needed to reduce cognitive load and prevent misinterpretation. 6\. Check for Accessibility and Accuracy ---------------------------------------- Ensure your visualisation is inclusive and accurate: * Use colour palettes that are accessible for people with colour blindness or low vision. * If you are publishing online, write **alt text** to describe the chart for screen readers. * Know your audience’s comfort level with data and design accordingly. * Clearly **cite your data sources**, explain your calculations, and be transparent about any transformations or assumptions. 7\. Review, Test, Iterate (and Collaborate) ------------------------------------------- Share your draft with others: * Ask for feedback to see how viewers interpret your chart. * Watch for confusion, misinterpretation, or missed messages. * Iterate—revise, refine, and retest—until the visualisation communicates exactly what you intend. **Lastly, collaborate with the data team. We can provide support, peer review, and suggestions to strengthen your work.** Back to top --- # Human Development Report - ONE Data Docs [Skip to content](https://docs.one.org/tools/bblocks/data-importers/importers/hdr/#human-development-index-hdi-importer) Human Development Index (HDI) Importer ====================================== The HumanDevelopmentIndex importer provides structured access to indicators in the United Nations Development Programme’s (UNDP) Human Development Report, including the Human Development Index (HDI) and its complementary measures. About the Human Development Report ---------------------------------- The Human Development Report (HDR), published annually by UNDP offers key indicators tracking human development. At the center of the HDR is the Human Development Index (HDI) — a composite measure of average achievement in key dimensions of human development: a long and healthy life, being knowledgeable and having a decent standard of living. In addition to HDI, the HDR also publishes measures that capture broader dimensions of human development, identify groups falling behind in human progress and monitor the distribution of human development. These include Inequality-adjusted Human Development Index (IHDI), Gender Inequality Index (GII), Gender Development Index (GDI) and Planetary pressures-adjusted HDI (PHDI), among others. For more information visit the [Human Development Reports website](https://hdr.undp.org/) . Basic usage ----------- To start using the importer, instantiate the importer and use the `get_data` method to get the latest data from the Human Development Report. `[](https://docs.one.org/tools/bblocks/data-importers/importers/hdr/#__codelineno-0-1) from bblocks.data_importers import HumanDevelopmentIndex [](https://docs.one.org/tools/bblocks/data-importers/importers/hdr/#__codelineno-0-2)[](https://docs.one.org/tools/bblocks/data-importers/importers/hdr/#__codelineno-0-3) # Create an importer instance [](https://docs.one.org/tools/bblocks/data-importers/importers/hdr/#__codelineno-0-4) hdi = HumanDevelopmentIndex() [](https://docs.one.org/tools/bblocks/data-importers/importers/hdr/#__codelineno-0-5)[](https://docs.one.org/tools/bblocks/data-importers/importers/hdr/#__codelineno-0-6) # Get the latest data [](https://docs.one.org/tools/bblocks/data-importers/importers/hdr/#__codelineno-0-7) df = hdi.get_data() [](https://docs.one.org/tools/bblocks/data-importers/importers/hdr/#__codelineno-0-8)[](https://docs.one.org/tools/bblocks/data-importers/importers/hdr/#__codelineno-0-9) # Preview [](https://docs.one.org/tools/bblocks/data-importers/importers/hdr/#__codelineno-0-10) print(df.head()) [](https://docs.one.org/tools/bblocks/data-importers/importers/hdr/#__codelineno-0-11)[](https://docs.one.org/tools/bblocks/data-importers/importers/hdr/#__codelineno-0-12) # Output: [](https://docs.one.org/tools/bblocks/data-importers/importers/hdr/#__codelineno-0-13) # entity_code entity_name region_code ... value year indicator_name [](https://docs.one.org/tools/bblocks/data-importers/importers/hdr/#__codelineno-0-14) # 0 AFG Afghanistan SA ... 182.0 2022 HDI Rank [](https://docs.one.org/tools/bblocks/data-importers/importers/hdr/#__codelineno-0-15) # 1 ALB Albania ECA ... 74.0 2022 HDI Rank [](https://docs.one.org/tools/bblocks/data-importers/importers/hdr/#__codelineno-0-16) # ...` This will return a DataFrame containing the data for all available indicators in the latest Human Development Resport including HDI and all associated measures and components. Access metadata --------------- The `get_metadata()` method provides information about the indicators and components featured in the data. `[](https://docs.one.org/tools/bblocks/data-importers/importers/hdr/#__codelineno-1-1) metadata = hdi.get_metadata()` Data caching ------------ The data and metadata are cached to avoid repeated downloads within a session. Cached data is tied to the importer instance and cleared automatically when the session ends. You can also manually clear the cache if needed. `[](https://docs.one.org/tools/bblocks/data-importers/importers/hdr/#__codelineno-2-1) hdi.clear_cache()` Back to top --- # Loading data - ONE Data Docs [Skip to content](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#loading-data-to-the-knowledge-graph) Loading data to the knowledge graph =================================== This page walks through the process of loading data into a custom Data Commons knowledge graph. There are three main steps involved: - Pushing data files, MCF files and the `config.json` file to Google Cloud Storage. - Triggering the Data Commons load job. - Redeploying the custom Data Commons service. Before starting, specify all the settings to connect to GCP, push data to Google Cloud Storage, and trigger the Data Commons load job. This can be done using a `.env` file, a `.json` file, or by instantiating a `KGSettings` object directly. The settings should include the following information: * `local_path`: Path to the local directory that will be exported. * `gcp_project_id`: GCP project ID. * `gcp_credentials`: GCP credentials in JSON format. * `gcs_bucket_name`: Google Cloud Storage bucket name. * `gcs_input_folder_path`: Google Cloud Storage input folder path. * `gcs_output_folder_path`: Google Cloud Storage output folder path. * `cloud_sql_db_name`: Cloud SQL database name. * `cloud_sql_region`: Cloud SQL region. * `cloud_job_region`: Cloud job region. * `cloud_service_region`: Cloud service region. * `cloud_run_job_name`: Cloud Run job name. * `cloud_run_service_name`: Cloud Run service name. create a KGSettings object from a `.env` file, a `.json` file, or directly instantiating an object. settings from .env file `[](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-0-1) from bblocks.datacommons_tools.gcp_utilities import get_kg_settings [](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-0-2)[](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-0-3) settings = get_kg_settings(source="env", env_file="customDC.env")` settings from .json file `[](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-1-1) from bblocks.datacommons_tools.gcp_utilities import get_kg_settings [](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-1-2)[](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-1-3) settings = get_kg_settings(source="json", env_file="customDC.json")` settings from KGSettings object `[](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-2-1) from bblocks.datacommons_tools.gcp_utilities import KGSettings [](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-2-2)[](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-2-3) settings = KGSettings( [](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-2-4) local_path="path/to/local/directory", [](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-2-5) gcp_project_id="your-gcp-project-id", [](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-2-6) gcp_credentials="path/to/credentials.json", [](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-2-7) gcs_bucket_name="your-gcs-bucket-name", [](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-2-8) gcs_input_folder_path="input/folder/path", [](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-2-9) gcs_output_folder_path="output/folder/path", [](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-2-10) cloud_sql_db_name="your-cloud-sql-db-name", [](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-2-11) cloud_sql_region="your-cloud-sql-region", [](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-2-12) cloud_job_region="your-cloud-job-region", [](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-2-13) cloud_service_region="your-cloud-service-region", [](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-2-14) cloud_run_job_name="your-cloud-run-job-name", [](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-2-15) cloud_run_service_name="your-cloud-run-service-name" [](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-2-16) )` Load data and deploy the custom Data Commons instance ----------------------------------------------------- Once you have specified the settings, you can take the next steps to load data into your custom Data Commons knowledge graph. First, you need to upload the directory containing the `config.json` file and any CSV or MCF files to Google Cloud Storage. Upload to GCS `[](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-3-1) from bblocks.datacommons_tools.gcp_utilities import ( [](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-3-2) upload_to_cloud_storage, [](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-3-3) run_data_load, [](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-3-4) redeploy_service, [](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-3-5) ) [](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-3-6)[](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-3-7) upload_to_cloud_storage(settings=settings, directory="path/to/output/folder")` Next, we'll run the data load job on Google Cloud Platform. `[](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-4-1) run_data_load(settings=settings)` Last, we need to redeploy the Custom Data Commons instance. `[](https://docs.one.org/tools/bblocks/datacommons-tools/loading-data/#__codelineno-5-1) redeploy_service(settings=settings)` **Read more about deploying your custom instance to Google Cloud [here ↗](https://docs.datacommons.org/custom_dc/deploy_cloud.html) ** Back to top --- # bblocks-places - ONE Data Docs [Skip to content](https://docs.one.org/tools/bblocks/places/#bblocks-places) `bblocks-places` ================ **Resolve and standardize places and work with political and geographic groupings.** [![GitHub Repo](https://img.shields.io/badge/GitHub-bblocks_places-181717?style=flat-square&labelColor=%23ddd&logo=github&color=%23555&logoColor=%23000)](https://github.com/ONEcampaign/bblocks-places) [![GitHub License](https://img.shields.io/github/license/ONEcampaign/bblocks-places?style=flat-square&labelColor=%23ddd)](https://github.com/ONEcampaign/bblocks_places/blob/main/LICENSE) [![PyPI - Version](https://img.shields.io/pypi/v/bblocks_places?style=flat-square&labelColor=%23ddd)](https://pypi.org/project/bblocks_places/) [![Codecov](https://img.shields.io/codecov/c/github/ONEcampaign/bblocks-places?style=flat-square&labelColor=ddd)](https://codecov.io/gh/ONEcampaign/bblocks-places) Working with country data can be tedious. One source calls it “_South Korea_” another says “_Republic of Korea_” a third uses “_KOR_” — and suddenly your analysis breaks and you spend hours manually standardizing all the names. These inconsistencies are common in cross-geographic datasets and can lead to data cleaning headaches, merge errors, or misleading conclusions. `bblocks-places` eliminates this hassle by offering a simple, reliable interface to resolve, standardize, and work with country, region, and other place names. **Key features**: * Disambiguate and standardize free-text country names (e.g. "Ivory Coast" → “CĂŽte d’Ivoire”) * Convert between place formats like ISO codes and official names * Filter and retrieve countries by attributes like region, income group, or UN membership * Customize resolution logic with your own concordance or override mappings **Built on top of Google's [Data Commons](https://datacommons.org/) **, an open knowledge graph integrating public data from the UN, World Bank, and more. Back to top --- # UNAIDS - ONE Data Docs [Skip to content](https://docs.one.org/tools/bblocks/data-importers/importers/unaids/#unaids-importer) UNAIDS importer =============== The `UNAIDS` importer fetches HIV/AIDS data from UNAIDS. About UNAIDS ------------ UNAIDS leads the most extensive collection of data on HIV epidemiology, programme coverage, and finance, in collaboration with UNICEF and the WHO. It published the most authoritative data and information on the HIV epidemic. Visit the [UNAIDS data portal](https://aidsinfo.unaids.org/) for more information and to explore the data. Basic usage ----------- To start using the importer, instantiate the importer and use the `get_data` method to get the latest UNAIDS data. `[](https://docs.one.org/tools/bblocks/data-importers/importers/unaids/#__codelineno-0-1) from bblocks.data_importers import UNAIDS [](https://docs.one.org/tools/bblocks/data-importers/importers/unaids/#__codelineno-0-2)[](https://docs.one.org/tools/bblocks/data-importers/importers/unaids/#__codelineno-0-3) # Create an importer instance [](https://docs.one.org/tools/bblocks/data-importers/importers/unaids/#__codelineno-0-4) unaids = UNAIDS() [](https://docs.one.org/tools/bblocks/data-importers/importers/unaids/#__codelineno-0-5)[](https://docs.one.org/tools/bblocks/data-importers/importers/unaids/#__codelineno-0-6) # Get the data [](https://docs.one.org/tools/bblocks/data-importers/importers/unaids/#__codelineno-0-7) df = unaids.get_data() [](https://docs.one.org/tools/bblocks/data-importers/importers/unaids/#__codelineno-0-8)[](https://docs.one.org/tools/bblocks/data-importers/importers/unaids/#__codelineno-0-9) # Preview [](https://docs.one.org/tools/bblocks/data-importers/importers/unaids/#__codelineno-0-10) print(df.head()) [](https://docs.one.org/tools/bblocks/data-importers/importers/unaids/#__codelineno-0-11)[](https://docs.one.org/tools/bblocks/data-importers/importers/unaids/#__codelineno-0-12) # Output: [](https://docs.one.org/tools/bblocks/data-importers/importers/unaids/#__codelineno-0-13) # indicator_name unit subgroup entity_name entity_code year source value value_formatted footnote [](https://docs.one.org/tools/bblocks/data-importers/importers/unaids/#__codelineno-0-14) # 0 AIDS mortality per 1000 population Rate Females estimate All countries 03M49WLD 1990 UNAIDS_Estimates_ 0.070517 0.070517 [](https://docs.one.org/tools/bblocks/data-importers/importers/unaids/#__codelineno-0-15) # 1 AIDS mortality per 1000 population Rate Females estimate All countries 03M49WLD 1991 UNAIDS_Estimates_ 0.089257 0.089257` SSL certificate verification The UNAIDS data portal currently has an SSL certificate verification issue. By default the `UNAIDS` importer will not verify the SSL certificate. If you want to enable SSL certificate verification, you can set the `verify_ssl` parameter to `True` when creating the importer instance Selecting a dataset ------------------- UNAIDS provides multiple datasets. By default, the `UNAIDS` importer will fetch the most common dataset, which is the HIV/AIDS Estimates dataset containing the latest estimates of HIV/AIDS indicators such as prevalence, incidence, and mortality. The available datasets include: - `Estimates` - `Laws and Policies` - `Key Populations` - `GAM` (Global AIDS Monitoring) To fetch data for a specific dataset, you can pass the `dataset` parameter when calling the `get_data` method. Get data from a specific dataset `[](https://docs.one.org/tools/bblocks/data-importers/importers/unaids/#__codelineno-1-1) df = unaids.get_data(dataset="Laws and Policies") [](https://docs.one.org/tools/bblocks/data-importers/importers/unaids/#__codelineno-1-2)[](https://docs.one.org/tools/bblocks/data-importers/importers/unaids/#__codelineno-1-3) # Output: [](https://docs.one.org/tools/bblocks/data-importers/importers/unaids/#__codelineno-1-4) # indicator_name unit subgroup entity_name entity_code year source value [](https://docs.one.org/tools/bblocks/data-importers/importers/unaids/#__codelineno-1-5) # 0 3-test strategy/algorithm for an HIV-positive diagnosis used SingleChoiceWithNo From national authorities Total Afghanistan AFG 2022 WHO_NCPI_2022 Yes [](https://docs.one.org/tools/bblocks/data-importers/importers/unaids/#__codelineno-1-6) # 1 3-test strategy/algorithm for an HIV-positive diagnosis used SingleChoiceWithNo From national authorities Total Afghanistan AFG 2024 WHO_NCPI_2024 Yes [](https://docs.one.org/tools/bblocks/data-importers/importers/unaids/#__codelineno-1-7) # ...` Data caching ------------ The `UNAIDS` importer caches the data to avoid unnecessary API calls. The cached data is tied to the importer instance and cleared automatically when the session ends. You can also manually clear the cache whenever you need. `[](https://docs.one.org/tools/bblocks/data-importers/importers/unaids/#__codelineno-2-1) unaids.clear_cache()` Back to top --- # World Economic Outlook - ONE Data Docs [Skip to content](https://docs.one.org/tools/bblocks/data-importers/importers/weo/#world-economic-outlook-weo-importer) World Economic Outlook (WEO) Importer ===================================== The `WEO` importer provides structured access to macroeconomic indicators from the World Economic Outlook database published by the International Monetary Fund (IMF). About the WEO database ---------------------- The World Economic Outlook (WEO) is a flagship publication of the International Monetary Fund (IMF), released twice a year, generally in April and October. It provides historical data and forecasts for key economic indicators such as: * GDP, growth rates, and deflators * Inflation * Trade balances * Public debt and fiscal indicators * Commodity prices The WEO database includes data for over 190 countries and regions, making it a central resource for economic analysis, forecasting, and global comparisons. The data is made available as Excel files or in SDMX (Statistical Data and Metadata eXchange) format. The `WEO` importer fetches the latest data in the SDMX format. However, SDMX data releases begin in April 2017, so the importer only supports data from that date onwards. Visit the WEO database [here](https://www.imf.org/en/Publications/WEO/weo-database) Basic usage ----------- To start using the importer, instantiate the importer and use the `get_data` method to get the latest WEO data. `[](https://docs.one.org/tools/bblocks/data-importers/importers/weo/#__codelineno-0-1) from bblocks.data_importers import WEO [](https://docs.one.org/tools/bblocks/data-importers/importers/weo/#__codelineno-0-2)[](https://docs.one.org/tools/bblocks/data-importers/importers/weo/#__codelineno-0-3) # Create an importer instance [](https://docs.one.org/tools/bblocks/data-importers/importers/weo/#__codelineno-0-4) weo = WEO() [](https://docs.one.org/tools/bblocks/data-importers/importers/weo/#__codelineno-0-5)[](https://docs.one.org/tools/bblocks/data-importers/importers/weo/#__codelineno-0-6) # Get all data from the latest release [](https://docs.one.org/tools/bblocks/data-importers/importers/weo/#__codelineno-0-7) df = weo.get_data() [](https://docs.one.org/tools/bblocks/data-importers/importers/weo/#__codelineno-0-8)[](https://docs.one.org/tools/bblocks/data-importers/importers/weo/#__codelineno-0-9) # Preview [](https://docs.one.org/tools/bblocks/data-importers/importers/weo/#__codelineno-0-10) print(df.head()) [](https://docs.one.org/tools/bblocks/data-importers/importers/weo/#__codelineno-0-11)[](https://docs.one.org/tools/bblocks/data-importers/importers/weo/#__codelineno-0-12) # Output: [](https://docs.one.org/tools/bblocks/data-importers/importers/weo/#__codelineno-0-13) # entity_code indicator_code year value unit indicator_name entity_name ... [](https://docs.one.org/tools/bblocks/data-importers/importers/weo/#__codelineno-0-14) # 0 111 NGDP_D 1980 39.372 Index Gross domestic product, deflator United States ... [](https://docs.one.org/tools/bblocks/data-importers/importers/weo/#__codelineno-0-15) # 1 111 NGDP_D 1981 43.097 Index Gross domestic product, deflator United States ... [](https://docs.one.org/tools/bblocks/data-importers/importers/weo/#__codelineno-0-16) # ...` Specifying a version -------------------- By default, the `get_data` method will return the data from the latest released report. You can also specify a specific particular release. Generally, the WEO report is released twice a year in April and October. Specify the version by passing the month and year of the release as a tuple. Get data from a specific release `[](https://docs.one.org/tools/bblocks/data-importers/importers/weo/#__codelineno-1-1) df = weo.get_data(version = ("April", 2023))` Supported versions include both April and October editions from past years, starting from April 2017 where SDMX data is available. Data caching ------------ The data is cached to avoid repeated downloads within a session. Cached data is tied to the importer instance and cleared automatically when the session ends. You can also manually clear the cache whenever you need. `[](https://docs.one.org/tools/bblocks/data-importers/importers/weo/#__codelineno-2-1) weo.clear_cache()` Back to top --- # Why bblocks-places - ONE Data Docs [Skip to content](https://docs.one.org/tools/bblocks/places/why-bblocks-places/#why-bblocks-places) Why `bblocks-places` ==================== Working with geographic data is a common headache for data analysts/engineers/researchers especially in international development organisations. There are many great libraries that facilitate this work including: * [country\_converter](https://github.com/IndEcol/country_converter) : versatile regex conversions for countries to different formats * [pycountry](https://github.com/pycountry/pycountry) : access to detailed ISO metadata on countries and languages * [iso3166](https://github.com/deactivated/python-iso3166) : direct access to ISO 3166 country codes. * [HDX Python Country Library](https://github.com/OCHA-DAP/hdx-python-country/) : provides country mappings including ISO 2, ISO 3 codes, and regions using live official data from the UN OCHA `bblocks-places` adds to the strength of this ecosystem by offering a tool designed for accuracy, flexibility, and extensibility. Accurate and transparent disambiguation --------------------------------------- One of the core challenges in resolving place names is ambiguity. A name like "Congo" might refer to either the Republic of the Congo or the Democratic Republic of the Congo. "Georgia" could indicate the U.S. state or the independent country. "Ivory Coast" might also appear as "CĂŽte d’Ivoire", depending on the source. Different tools address disambiguation in various ways—often relying on techniques like regular expressions or fuzzy matching. However, these methods are not foolproof: they can miss valid matches or return incorrect ones. Analysts must remain vigilant when working with ambiguous or inconsistently labeled geographic data. `bblocks-places` helps address this problem by flagging unresolved or ambiguous cases. When multiple possible matches exist, the tool surfaces all candidates to the user and gives you control over how to handle them. **No matches?** → Choose to raise an error, return None, or provide a fallback value. **Multiple matches?** → Choose to raise an error, select the most likely candidate, or return all possible matches. This explicit and flexible handling makes disambiguation transparent, auditable, and user-controlled. Broad support for many types of places -------------------------------------- Most datasets focus on country-level data. `bblocks-places` offers extensive support to work with country-level data by default, allowing easy resolution and standardization of country names, mapping to different formats, and grouping countries according to different categories like regions and income level. Beyond that, `bblocks-places` can be used to work with other place types like provinces, countries, cities and any other place in the Data Commons knowledge graph. This flexibility allows you to work seamlessly across geographic levels and extend support to new or custom place types. Customizable concordance ------------------------ `bblocks-places` uses a custom concordance table and custom mappings based on the UN's [M49 list](https://unstats.un.org/unsd/methodology/m49/) of countries and the [World Bank's income groups](https://datahelpdesk.worldbank.org/knowledgebase/articles/906519-world-bank-country-and-lending-groups) to easily resolve and standardize places out of the box. You can also customize this by using your own concordance table to override and extend mappings. This flexibility ensures you are not locked in to the default mappings and you can adapt and build on the package based on your specific requirements and data. Limitations ----------- While `bblocks-places` offers broad and flexible support for resolving place names, it does come with a few constraints. The primary limitation is its dependence on the Data Commons API for resolving places. This means an active internet connection is required to perform place lookups. In environments with limited or unstable connectivity—or when working with large datasets containing many unique places—this dependency can introduce latency due to the volume of API requests. These limitations were known and carefully considered in the design of the package, and we’ve taken steps to minimize their impact as much as possible. Future enhancements may include features like offline resolution and caching to further improve performance and usability in constrained environments. Back to top --- # International Debt Statistics - ONE Data Docs [Skip to content](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#international-debt-statistics-ids-importer) International Debt Statistics (IDS) importer ============================================ The `InternationalDebtStatistics` importer is a specialized [`WorldBank` data importer](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/) for the IDS database (id=`6`) containing debt stock and flow data. About IDS --------- IDS provides comprehensive annual external debt stocks and flows data for low- and middle-income countries that report public and publicly guaranteed external debt to the World Bank's Debtor Reporting System (DRS). Visit the IDS [here](https://www.worldbank.org/en/programs/debt-statistics/ids) . Basic Usage ----------- To start using the IDS importer, instantiate an instance of the importer `[](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-0-1) from bblocks.data_importers import InternationalDebtStatistics [](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-0-2)[](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-0-3) ids = InternationalDebtStatistics()` This object is built on top of the `WorldBank` importer connected to the IDS database (id=`6`). You can fetch data for indicators by calling the `get_data` method. `[](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-1-1) principal_data = ids.get_data('DT.AMT.MLAT.CD', years=[2023]) [](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-1-2)[](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-1-3) print(principal_data.head()) [](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-1-4) # Output: [](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-1-5) # year entity_code entity_name indicator_code value counterpart_code ... [](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-1-6) # 0 2023 ZWE Zimbabwe DT.AMT.MLAT.CD 0.0 913 ... [](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-1-7) # 1 2023 ZMB Zambia DT.AMT.MLAT.CD 33223157.7 913 ... [](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-1-8) # 2 2023 UGA Uganda DT.AMT.MLAT.CD 32692206.2 913 ... [](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-1-9) # ...` Get debt stock or service indicators ------------------------------------ The import offers convenient functionality to get all indicators and data for debt stocks and service. To see the indicators for debt stocks or service: `[](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-2-1) # debt service indicators [](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-2-2) debt_service_indicators = ids.debt_service_indicators() [](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-2-3)[](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-2-4) # debt stock indicators [](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-2-5) ids.debt_stocks_indicators() [](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-2-6)[](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-2-7) print(debt_service_indicators) [](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-2-8) # Output: [](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-2-9) # {'DT.AMT.BLAT.CD': 'Bilateral', [](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-2-10) # 'DT.AMT.MLAT.CD': 'Multilateral', [](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-2-11) # 'DT.AMT.PBND.CD': 'Private', [](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-2-12) # ...}` To fetch all data for debt stock or debt service indicators: `[](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-3-1) # get all debt service data [](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-3-2) debt_service_data = ids.get_debt_service_data(years=[2022,2023], economies="GTM") [](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-3-3)[](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-3-4) # get all debt stock data [](https://docs.one.org/tools/bblocks/data-importers/importers/ids/#__codelineno-3-5) ids.get_debt_stocks_data(detailed_category=True, years=[2023], economies="GTM")` Back to top --- # World Food Programme - ONE Data Docs [Skip to content](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#world-food-programme-wfp-importers) from bblocks.data\_importers import WFPFoodSecurity World Food Programme (WFP) Importers ==================================== The `WFPInflation` and `WFPFoodSecurity` importers provide access to data on inflation and food security published by the World Food Programme (WFP). About the databases ------------------- **Inflation** data is available for various countries and indicators and can be accessed through the [VAM data portal](https://dataviz.vam.wfp.org/economic/inflation) . **Food security** data is available at the national and subnational levels and can be accessed through the WFP's [Hunger Map tool](https://hungermap.wfp.org/) . Basic usage ----------- ### Inflation Instantiate the object and call the `get_data()` method to retrieve a pandas DataFrame. It is recommended to specify `indicators` and `countries` to reduce wait time. If no arguments are passed, the returned data will contain all indicators and countries. `[](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-0-1) from bblocks.data_importers import WFPInflation [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-0-2)[](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-0-3) # Create an importer instance [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-0-4) wfp_infl = WFPInflation() [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-0-5)[](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-0-6) # Get the data for specific indicators and countries [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-0-7) df_infl = wfp_infl.get_data( [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-0-8) indicators = "Headline inflation (YoY)", [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-0-9) countries = ["KEN", "UGA"] # use ISO3 codes to retrieve countries [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-0-10) ) [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-0-11)[](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-0-12) # Preview [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-0-13) print(df_infl.head()) [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-0-14)[](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-0-15) # Output: [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-0-16) # data value source indicator_name iso3_code country_name unit [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-0-17) # 0 2025-05-31 00:00:00 3.8 Trading Economics Headline inflation (YoY) UGA Uganda percent [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-0-18) # 1 2025-04-30 00:00:00 3.5 Trading Economics Headline inflation (YoY) UGA Uganda percent [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-0-19) # ...` To view the available indicators, use the `available_indicators` property `[](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-1-1) indicators_infl = wfp_infl.available_indicators` ### Food security Instantiate the object and call the `get_data()` method to retrieve a pandas DataFrame. You can optionally filter by country using ISO3 codes and chose data at the national or subnational level. `[](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-2-1) from bblocks.data_importers import WFPFoodSecurity [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-2-2)[](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-2-3) # Create an importer instance [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-2-4) wfp_fs = WFPFoodSecurity() [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-2-5)[](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-2-6) # Get the data for specific countries [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-2-7) df_fs = wfp_fs.get_data( [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-2-8) countries = ["KEN", "UGA"], # use ISO3 codes to retrieve countries [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-2-9) level = "subnational" # defaults to "national" [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-2-10) ) [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-2-11)[](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-2-12) # Preview [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-2-13) print(df_fs.head()) [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-2-14)[](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-2-15) # Output [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-2-16) # date value value_upper value_lower iso3_code country_name indicator_name source [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-2-17) # 0 2024-06-14 00:00:00 18095724 19991955 16601037 UGA Uganda people with insufficient food consumption World Food Programme [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-2-18) # 1 2024-06-15 00:00:00 18111164 19992427 16605079 UGA Uganda people with insufficient food consumption World Food Programme [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-2-19) # ...` To view the available countries, use the `available_countries` property `[](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-3-1) countries_fs = wfp_fs.available_countries` API request settings -------------------- ### Inflation You may set the timeout for specific requests (in seconds) when creating an importer instance. The default value is `20`. `[](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-4-1) wfp_infl = WFPInflation(timeout = 30)` ### Food security You may set both `timeout` (in seconds) and `retries` (number of retry attempts on failure). Defaults are `20` and `2` respectively. `[](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-5-1) wfp_fs = WFPFoodSecurity(timeout = 30, retries = 3)` Data caching ------------ Data is cached per importer instance to prevent repeated downloads. The cache is cleared automatically at the end of the session, but you can also clear it manually: `[](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-6-1) wfp_infl.clear_cache() [](https://docs.one.org/tools/bblocks/data-importers/importers/wfp/#__codelineno-6-2) wfp_fs.clear_cache()` Back to top --- # Data viz principles - ONE Data Docs [Skip to content](https://docs.one.org/guidelines/data-visualisation-guidelines/guidelines/principles/#data-visualisation-principles) Data visualisation principles ============================= **We build charts that are clear, engaging and fit for purpose.** Our charts illustrate a clear point, and help our audience understand an argument and react to it. We are competing for space and attention, so every decision we make must be justified. Simplicity and accuracy are important, but engagement is just as important, so we balance perceptual accuracy and engagement based on our goals. * **Clear single objective** * * * A chart should have one single clear objective. Charts with a single focus are easy to understand; those with multiple or unclear goals are often confusing. * **Tell a story** * * * Add context to guide the viewer—use headings, annotations, and explanations to highlight key insights and make your chart clearer and more engaging. * **High data-to-ink ratio** * * * Maximise information while minimising non-data elements. Remove clutter—like unnecessary labels, decorations, or even axes—while keeping the chart clear and visually appealing. Design choices should enhance, not hinder, understanding. * **Use colour purposefully** * * * Colour affects clarity, credibility, and engagement—don’t use it randomly. Start with muted tones to test your message, then add colour purposefully, using few hues and more shades of similar colours. * **Balance Simplicity and Detail** * * * Visualising complex issues requires careful judgment. Show the right amount of data to support your story: sometimes simple charts with totals or averages work best; other times, detailed data reveals important nuances, outliers, or hidden trends. Back to top --- # World Bank - ONE Data Docs [Skip to content](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#world-bank-importer) World Bank Importer =================== The `WorldBank` importer provides access to World Bank databases accessible through the World Bank public API. About World Bank data --------------------- The World Bank is one of the best known aggregators and publishers of development data on a broad range of topics including poverty, debt, health, environmental sustainability and many others. The World Bank makes its data available through several databases such as the [World Development Indicators (WDI)](https://datatopics.worldbank.org/world-development-indicators/) and the [International Debt Statistics (IDS)](https://www.worldbank.org/en/programs/debt-statistics/ids) . The `WorldBank` importer is built on top of the [wbgapi](https://pypi.org/project/wbgapi/) Python package, a powerful and complete wrapper for the World Bank API. The `WorldBank` importer offers simple access to World Bank data with a consistent interface. For more granular control of API settings and additional functionality, consider using the [wbgapi](https://pypi.org/project/wbgapi/) package. Basic Usage ----------- Before getting data you should know which database you want to access (there are several). Luckily you can easily get the available databases `[](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-0-1) from bblocks.data_importers import get_wb_databases [](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-0-2)[](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-0-3) print(get_wb_databases())` ### WorldBank importer This will return a dataframe with the available World Bank databases and their IDs. The ID is necessary to specify which database you want to access. To start accessing World Bank data, first instantiate a `WorldBank` importer. `[](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-1-1) from bblocks.data_importers import WorldBank [](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-1-2)[](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-1-3) wb = WorldBank()` The most commonly accessed database for development indicators is the World Development Indicators (WDI) database with ID `2`. By default, the `WorldBank` importer connects to this database. You can specify a different database by passing the database ID when instantiating the importer. `[](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-2-1) wb = WorldBank(database=1) # Doing Business database` ### Get available indicators and entities To see which indicators are available in the selected database, use the `get_available_indicators` method. `[](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-3-1) indicators = wb.get_available_indicators()` This will return a dataframe with the available indicators in the selected database, including their codes and names. The indicator codes are necessary to request specific data series. Similarly, to see which entities (such as countries) are available in the selected database, use the `get_available_entities` method. `[](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-4-1) entities = wb.get_available_entities()` ### Get indicator metadata To get metadata for a specific indicator, use the `get_indicator_metadata` method. `[](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-5-1) metadata = wb.get_indicator_metadata("NY.GDP.MKTP.CD") # GDP indicator` This will return a dataframe with metadata for the specified indicator. Multiple indicators can be specified by passing a list of indicator codes. ### Access data To access data use the `get_data` method. For example, to get GDP data (indicator code `NY.GDP.MKTP.CD`): `[](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-6-1) df = wb.get_data(indicator_code="NY.GDP.MKTP.CD")` This will return a dataframe with GDP data for all available countries and years. You can specify additional parameters such as entities (such as countries), years, whether to skip missing values and aggregates, and whether to include labels for entities and indicators. `[](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-7-1) df = wb.get_data(indicator_code="NY.GDP.MKTP.CD", [](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-7-2) entity_code=["ZWE", "NGA"], # Zimbabwe and Nigeria [](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-7-3) start_year=2000, [](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-7-4) end_year=2020, [](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-7-5) skip_aggs=True, # skip aggregates like "World" [](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-7-6) skip_blanks=True, # skip missing values [](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-7-7) labels=True # include labels [](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-7-8) )` Multiple indicators can be specified by passing a list of indicator codes. `[](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-8-1) df = wb.get_data(indicator_code=["NY.GDP.MKTP.CD", "SP.POP.TOTL"]) # GDP and population indicators` Since World Bank data can be large and the API requests can be slow, this importer batches indicators and uses multi-threading to speed up data retrieval. By default, batches of 1 indicator are used with 4 threads. You can adjust these settings by passing the `batch_size` and `thread_num` parameters when instantiating the importer. `[](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-9-1) df = wb.get_data(indicator_code=["NY.GDP.MKTP.CD", "SP.POP.TOTL"], [](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-9-2) batch_size=5, # use batches of 5 indicators [](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-9-3) thread_num=10 # use 10 threads [](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-9-4) )` Other API parameters can be set in the params argument of the `get_data` method. For example, to get the most recent value: `[](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-10-1) df = wb.get_data(indicator_code=["NY.GDP.MKTP.CD", "SP.POP.TOTL"], params={"mrv": 1})` See the wbgapi documentation for more details on available parameters. NOTE that some of these additional parameters may not work as expected with certain databases. Pagination is handled automatically by the importer. By default, the importer will retrieve 50,000 records per request. You can adjust this by setting the `per_page` attribute. `[](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-11-1) df = wb.get_data(indicator_code=["NY.GDP.MKTP.CD", "SP.POP.TOTL"], params={"per_page": 100000})` ### Caching data Data is cached for efficiency. Data is cached in disk up to 3 hours by default. The cache can be cleared in different ways but **NOTE** that clearing the cache will remove all cached World Bank data If have instantiated a World Bank importer, you can clear the cache using the `clear_cache` method. `[](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-12-1) wb.clear_cache()` Alternatively, you can use the `clear_wb_cache` function. `[](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-13-1) from bblocks.data_importers import clear_wb_cache [](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-13-2)[](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-13-3) clear_wb_cache()` Either of these methods will clear all cached World Bank data. Convenience methods ------------------- If you want to quickly access available indicators, entities, and metadata without instantiating a WorldBank object, you can use the following convenience functions: `[](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-14-1) from bblocks.data_importers import ( [](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-14-2) get_wb_entities, [](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-14-3) get_wb_indicator_metadata, [](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-14-4) get_wb_indicators, [](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-14-5) ) [](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-14-6) [](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-14-7)[](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-14-8) inds = get_wb_indicators(db=2) # Get indicators from WDI database [](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-14-9) ents = get_wb_entities(db=2) # Get entities from WDI database [](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-14-10) meta = get_wb_indicator_metadata(indicator_code = "NY.GDP.MKTP.CD", db=2) # Get metadata` To get all the entities or indicators in all databases, set `db=None`. Specialised World Bank Importers -------------------------------- For commonly accessed World Bank databases, specialised importers exist with additional functionality. These include: - InternationalDebtStatistics - Access International Debt Statistics (IDS) data on long-term debt ### International Debt Statistics Importer To access data from the International Debt Statistics (IDS) database, use the `InternationalDebtStatistics` importer. `[](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-15-1) from bblocks.data_importers import InternationalDebtStatistics [](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-15-2)[](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-15-3) ids = InternationalDebtStatistics()` The importer contains all the methods of the base `WorldBank` importer, plus additional methods specific to the IDS database. To see PPG debt stock indicators use the `debt_stock_indicators` property. `[](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-16-1) ids.debt_stock_indicators` This will return a dataframe with all PPG debt stock indicators available in the IDS database and their metadata Similarly to see all PPG debt service indicators use the `debt_service_indicators` property. `[](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-17-1) ids.debt_service_indicators` To see the date the database was last updated, use the `last_updated` property. `[](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-18-1) ids.last_updated` Caching works the same way as in the base `WorldBank` importer. To clear the cache, use the `clear_cache` method. `[](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank/#__codelineno-19-1) ids.clear_cache()` **NOTE** this will clear all cached World Bank data for any other `WorldBank` importers as well. Back to top --- # Modelling data - ONE Data Docs [Skip to content](https://docs.one.org/etl/modelling-data/#modelling-data-for-the-one-knowledge-graph) Modelling data for the ONE knowledge graph ========================================== This page explains the **transformation** step of the ETL pipeline, which is responsible for structuring the raw data to be loaded into the knowledge graph, and enhancing the data by adding metadata and other information. Understanding how to structure data for a Data Commons knowledge graph is essential to correctly load data into the ONE knowledge graph and make the best use of knowledge graph features. Custom Data Commons requires that data is provided in a specific schema, format, and file structure. This page focuses on the approach used by ONE to model data for the knowledge graph. For more information about modelling data for the Data Commons knowledge graph, refer to the [Data Commons documentation](https://docs.datacommons.org/custom_dc/custom_data.html) . ONE's data model ---------------- ONE models data using the [Explicit Schema](https://docs.datacommons.org/custom_dc/custom_data.html#schema) , which required DCIDs to be explicitly defined for all variables (and entity types if needed) as nodes in MCF files. Data must be provided in CSV files referencing these DCIDs. This approach allows for a more flexible and detailed representation of data, enabling the specification of variables in a variable-per-row format and the inclusion of additional properties for variables or entities. At a top level, the following components need to be provided: **CSV data files**: All data must be in CSV format. **JSON configuration file**: A JSON configuration file, named `config.json`, that specifies how to map and resolve the CSV contents to the Data Commons schema knowledge graph. **MCF file**: MCF files that describe the statistical variables, variable peer groups, variable groups, topics, custom entities, and other nodes that are needed to model the data. Directory structure ------------------- You can organize data into as many CSV and MCF files as needed, and the directory can be structured with multiple subdirectories. But there can only be one `config.json` file in the root directory. The structure of the directory should aim to be clear and logical, making it easy to find and maintain the files. Generally the files for each source should be grouped into a subdirectory. `[](https://docs.one.org/etl/modelling-data/#__codelineno-0-1) data directory/ [](https://docs.one.org/etl/modelling-data/#__codelineno-0-2) ├── config.json [](https://docs.one.org/etl/modelling-data/#__codelineno-0-3) ├── source1/ [](https://docs.one.org/etl/modelling-data/#__codelineno-0-4) │ ├── nodes1.mcf [](https://docs.one.org/etl/modelling-data/#__codelineno-0-5) │ ├── datafile1.csv [](https://docs.one.org/etl/modelling-data/#__codelineno-0-6) │ └── datafile2.csv [](https://docs.one.org/etl/modelling-data/#__codelineno-0-7) └── source2/ [](https://docs.one.org/etl/modelling-data/#__codelineno-0-8) ├── nodes2.mcf [](https://docs.one.org/etl/modelling-data/#__codelineno-0-9) ├── datafile3.csv [](https://docs.one.org/etl/modelling-data/#__codelineno-0-10) └── datafile4.csv` Data structure -------------- The explicit schema uses a variable-per-row format. Generally, it would be formatted as below: | entity | date | variable | value | unit | measurementMethod | | --- | --- | --- | --- | --- | --- | | country/FRA | 2019 | ONE/OECD\_DAC1\_10\_1010-GE-USD | 12200000000 | USDollar | GrantEquivalent | | country/GER | 2020 | ONE/OECD\_DAC1\_10\_1010-GE-USD | 28700000000 | USDollar | GrantEquivalent | | country/FRA | 2019 | ONE/OECD\_DAC1\_10\_1010-ND-USD | 10700000000 | USDollar | NetDisbursement | | country/GER | 2020 | ONE/OECD\_DAC1\_10\_1010-ND-USD | 25700000000 | USDollar | NetDisbursement | | country/FRA | 2020 | ONE/OECD\_DAC1\_10\_1820-GD-EUR24 | 1210000000 | ConstantEUR\_2024 | GrossDisbursement | | country/GER | 2020 | ONE/OECD\_DAC1\_10\_1820-GD-EUR24 | 2760000000 | ConstantEUR\_2024 | GrossDisbursement | While not shown, `scalingFactor` and `observationPeriod` can also be added as columns and specified for some or all rows. See [facets](https://docs.one.org/etl/knowledge-graph/#facet) The names and order of the columns aren’t important, as you can map them to the expected columns in the JSON file. However, the entity and variable codes must be valid DCIDs. If such DCIDs don’t already exist in the base Data Commons, you must provide definitions of them in MCF files. The type of the entities in a single file should be unique; do not mix multiple entity types in the same CSV file. For example, if you have observations for cities and counties, put all the city data in one CSV file and all the county data in another one. Defining Statistical Variables ------------------------------ Nodes in the Data Commons knowledge graph are defined in MCF format. When you define a variable, you must explicitly assign a DCID. You can define your statistical variables in a single MCF file, or split them into as many separate MCF files. MCF files must have a `.mcf` suffix. Here’s an example of defining the same statistical variables. These are the same variables shown in the [data structure section](https://docs.one.org/etl/modelling-data/#data-structure) . You will notice that they represent the same concept (“Official Development Assistance”). However, each node (StatVar) models a specific version (with constraints like grant equivalent, or constant US dollars). `[](https://docs.one.org/etl/modelling-data/#__codelineno-1-1) Node: ONE/DAC1_10_1010-GE-USD [](https://docs.one.org/etl/modelling-data/#__codelineno-1-2) name: "Official Development Assistance (ODA) [Grant Equivalent]" [](https://docs.one.org/etl/modelling-data/#__codelineno-1-3) typeOf: dcid:StatisticalVariable [](https://docs.one.org/etl/modelling-data/#__codelineno-1-4) description: "DAC1 data for Official Development Assistance (ODA), as Grant Equivalents, in current US Dollars." [](https://docs.one.org/etl/modelling-data/#__codelineno-1-5) shortDisplayName: "Official Development Assistance (ODA)" [](https://docs.one.org/etl/modelling-data/#__codelineno-1-6) statType: dcid:measuredValue [](https://docs.one.org/etl/modelling-data/#__codelineno-1-7) measuredProperty: dcid:value [](https://docs.one.org/etl/modelling-data/#__codelineno-1-8) measurementQualifier: dcid:Nominal [](https://docs.one.org/etl/modelling-data/#__codelineno-1-9) memberOf: dcid:ONE/g/dac1_FlowsByProvider [](https://docs.one.org/etl/modelling-data/#__codelineno-1-10) searchDescription: "Total aid", "total ODA", "Total foreign aid" [](https://docs.one.org/etl/modelling-data/#__codelineno-1-11) populationType: dcid:EconomicActivity [](https://docs.one.org/etl/modelling-data/#__codelineno-1-12) flowType: dcid:ODA [](https://docs.one.org/etl/modelling-data/#__codelineno-1-13) dac1Measure: 1010 [](https://docs.one.org/etl/modelling-data/#__codelineno-1-14) aidIndicator: dcid:dc/svpg/DAC1_10_1010 [](https://docs.one.org/etl/modelling-data/#__codelineno-1-15)[](https://docs.one.org/etl/modelling-data/#__codelineno-1-16) Node: ONE/DAC1_10_1010-ND-USD [](https://docs.one.org/etl/modelling-data/#__codelineno-1-17) name: "Official Development Assistance (ODA) [Net Disbursements]" [](https://docs.one.org/etl/modelling-data/#__codelineno-1-18) typeOf: dcid:StatisticalVariable [](https://docs.one.org/etl/modelling-data/#__codelineno-1-19) description: "DAC1 data for Official Development Assistance (ODA) as net disbursements, in current US Dollars." [](https://docs.one.org/etl/modelling-data/#__codelineno-1-20) shortDisplayName: "Official Development Assistance (ODA)" [](https://docs.one.org/etl/modelling-data/#__codelineno-1-21) statType: dcid:measuredValue [](https://docs.one.org/etl/modelling-data/#__codelineno-1-22) measuredProperty: dcid:value [](https://docs.one.org/etl/modelling-data/#__codelineno-1-23) measurementQualifier: dcid:Nominal [](https://docs.one.org/etl/modelling-data/#__codelineno-1-24) memberOf: dcid:ONE/g/dac1_FlowsByProvider [](https://docs.one.org/etl/modelling-data/#__codelineno-1-25) searchDescription: "Total aid", "total ODA", "Total foreign aid" [](https://docs.one.org/etl/modelling-data/#__codelineno-1-26) populationType: dcid:EconomicActivity [](https://docs.one.org/etl/modelling-data/#__codelineno-1-27) flowType: dcid:ODA [](https://docs.one.org/etl/modelling-data/#__codelineno-1-28) dac1Measure: 1010 [](https://docs.one.org/etl/modelling-data/#__codelineno-1-29) aidIndicator: dcid:dc/svpg/DAC1_10_1010 [](https://docs.one.org/etl/modelling-data/#__codelineno-1-30)[](https://docs.one.org/etl/modelling-data/#__codelineno-1-31) Node: ONE/DAC1_10_1820-GD-EUR24 [](https://docs.one.org/etl/modelling-data/#__codelineno-1-32) name: "Refugees in donor countries [Gross Disbursements]" [](https://docs.one.org/etl/modelling-data/#__codelineno-1-33) typeOf: dcid:StatisticalVariable [](https://docs.one.org/etl/modelling-data/#__codelineno-1-34) description: "DAC1 data for Refugees in donor countries as gross disbursements, in current 2024 constant Euros" [](https://docs.one.org/etl/modelling-data/#__codelineno-1-35) shortDisplayName: "Refugees in donor countries" [](https://docs.one.org/etl/modelling-data/#__codelineno-1-36) searchDescription: "IDRC", "in-donor refugee costs" [](https://docs.one.org/etl/modelling-data/#__codelineno-1-37) statType: dcid:measuredValue [](https://docs.one.org/etl/modelling-data/#__codelineno-1-38) measuredProperty: dcid:value [](https://docs.one.org/etl/modelling-data/#__codelineno-1-39) measurementQualifier: dcid:RealValue [](https://docs.one.org/etl/modelling-data/#__codelineno-1-40) memberOf: dcid:ONE/g/otherIn-DonorExpenditures [](https://docs.one.org/etl/modelling-data/#__codelineno-1-41) populationType: dcid:EconomicActivity [](https://docs.one.org/etl/modelling-data/#__codelineno-1-42) flowType: dcid:ODA [](https://docs.one.org/etl/modelling-data/#__codelineno-1-43) dac1Measure: 1820 [](https://docs.one.org/etl/modelling-data/#__codelineno-1-44) aidIndicator: dcid:dc/svpg/DAC1_10_1820` The following fields are always required: * **`Node`**: This is the DCID of the entity you are defining. You should add `ONE/` as the prefix to differentiate our custom variables from base DC variables. The prefix acts as a namespace. * **`typeOf`**: For statistical variables, this is always `dcid:StatisticalVariable`. * **`name`**: This is the descriptive name of the variable, that is displayed in the Statistical Variable Explorer and various other places in the UI. * `populationType`: This is the type of thing being measured, and its value must be an existing `Class` type. * `measuredProperty`: This is a property of the thing being measured. It must be a `domainIncludes` property of the `populationType` you have specified. We additionally aim to always include: * **`description`**: A description and/or definition of the variable. It should include information about the constraints. * **`memberOf`**: the `StatVarGroup` to which the variable belongs. * **`searchDescription`**: sentences or strings that would match what users may search for in natural language. * **`measurementQualifier`**: This is similar to the `observationPeriod` field for CSV files and applies to all observations of the variable. It Provides additional qualification to an observation. This is particularly useful when modelling economic flows, when it can be `Nominal`, `RealValue` or `PurchasingPowerParity`, for example. It can be also any string representing additional properties of the variable, e.g., `Weekly`, `Monthly`, `Annual` The following fields are optional: * **`statType`**: By default, this is `dcid:measuredValue`, which is simply a raw value of an observation. If your variable is a calculated value, such as an average, a minimum or maximum, you can use `minValue`, `maxValue`, `meanValue`, `medianValue`, `sumvalue`, `varianceValue`, `marginOfError`, `stdErr`. * **`measurementDenominator`**: For percentages or ratios, this refers to another statistical variable. For example, for per capita, the `measurementDenominator` is `Count_Person`. The MCF definition of a node (StatVar in this case) can include additional properties. In the example above, we also include `flowType: dcid: ODA`. Custom properties must appear after standard Data Commons properties. Their values must also be defined as MCF nodes. Note All fields that reference another node in the graph must be prefixed by `dcid:`. All fields that do not reference another node must be in quotation marks. Modeling bilateral variables ---------------------------- In most datasets, we’re accustomed to working with data about a single place—for example, GDP of France in 2020. These are usually stock or aggregated flow indicators that can be cleanly attributed to one entity. However, some indicators—especially in domains like finance, trade, or aid—involve flows between two places, such as aid from France to Togo. Modelling this **bilateral** data is more involved. In Data Commons a statistical observation ([`StatVarObservation`](https://datacommons.org/browser/StatVarObservation) ) is about a specific variable ([`variableMeasured`](https://datacommons.org/browser/variableMeasured) ), for a single specific entity ([`observationAbout`](https://datacommons.org/browser/observationAbout) ) at a specific time ([`observationDate`](https://datacommons.org/browser/observationDate) ). When modelling bilateral flows with a provider (e.g. "France") and a recipient (e.g. "Togo") either: 1. The `observationAbout` could be “France” (the provider), where the flow is to “Togo” (the recipient). 2. The `observationAbout` could be “Togo” (the recipient), where the flow is from “France” (the provider). It may be that both perspectives are equivalent (harmonised), but it may also be the case that they represent different values (unharmonized). We therefore have to consider the perspective from which to structure the data (the provider or the recipient). The ‘other’ entity would become a ‘constraint’, which means a new statistical variable would be minted to identify it. A general _schema_ rule is that every property that describes a variable must be represented as either: * The `statType`, `measuredProperty`, `populationType` * A constraint property on the statistical value (like `recipientEntity`, `aidType`, etc.) A general _observation_ rule is that an observation has exactly one slot for an entity/place (`observationAbout`) and everything else must be represented as either: * The value and date * A facet (`measurementMethod`, `unit`, etc.). Facets can’t hold `Places`. For the example above, there are two ways to model the data: **Option1: Provider-centric** * `observationAbout: provider` * Included in the statVar as constraint: recipientEntity (+aidType, flowType, etc.) **Option2: Recipient-centric** * `observationAbout: recipient` * Included in the statVar as constraint: providerEntity (+aidType, flowType, etc) You should model the data according to the perspective which is customarily used to query and present the data. For flow-like data, you should default to the “source” as `observationAbout` and the “target” as the constraint. The name you give to StatVars should clearly reflect the directionality of the flow. In other cases, you should choose the lower-cardinality option as the `observationAbout`. You should not duplicate the data by modelling both perspectives. If the perspective matters (e.g., if the provider perspective doesn’t agree with the recipient perspective), the perspective could be modelled as a `measurementMethod`. `[](https://docs.one.org/etl/modelling-data/#__codelineno-2-1) Node: ONE/DAC2A_10_206-ND-USD-TOG [](https://docs.one.org/etl/modelling-data/#__codelineno-2-2) name: "Bilateral Official Development Assistance (ODA) [Net Disbursements to Togo]" [](https://docs.one.org/etl/modelling-data/#__codelineno-2-3) typeOf: dcid:StatisticalVariable [](https://docs.one.org/etl/modelling-data/#__codelineno-2-4) description: "Net disbursements of bilateral Official Development Assistance (ODA) to Togo" [](https://docs.one.org/etl/modelling-data/#__codelineno-2-5) shortDisplayName: "Bilateral ODA [to Togo]" [](https://docs.one.org/etl/modelling-data/#__codelineno-2-6) statType: dcid:measuredValue [](https://docs.one.org/etl/modelling-data/#__codelineno-2-7) measuredProperty: dcid:value [](https://docs.one.org/etl/modelling-data/#__codelineno-2-8) measurementQualifier: dcid:Nominal [](https://docs.one.org/etl/modelling-data/#__codelineno-2-9) memberOf: dcid:ONE/g/dac2a_Bilateral [](https://docs.one.org/etl/modelling-data/#__codelineno-2-10) searchDescription: "Bilateral aid to Togo", "Net disbursements to Togo" [](https://docs.one.org/etl/modelling-data/#__codelineno-2-11) populationType: dcid:EconomicActivity [](https://docs.one.org/etl/modelling-data/#__codelineno-2-12) recipientCountry: dcid:country/TGO [](https://docs.one.org/etl/modelling-data/#__codelineno-2-13) flowType: dcid:ODA [](https://docs.one.org/etl/modelling-data/#__codelineno-2-14) dac2aMeasure: 206 [](https://docs.one.org/etl/modelling-data/#__codelineno-2-15) aidIndicator: dcid:dc/svpg/DAC2A_10_206 [](https://docs.one.org/etl/modelling-data/#__codelineno-2-16)[](https://docs.one.org/etl/modelling-data/#__codelineno-2-17) Node: ONE/DAC2A_10_206-ND-USD-NGA [](https://docs.one.org/etl/modelling-data/#__codelineno-2-18) name: "Bilateral Official Development Assistance (ODA) [Net Disbursements to Nigeria]" [](https://docs.one.org/etl/modelling-data/#__codelineno-2-19) typeOf: dcid:StatisticalVariable [](https://docs.one.org/etl/modelling-data/#__codelineno-2-20) description: "Net disbursements of bilateral Official Development Assistance (ODA) to Nigeria" [](https://docs.one.org/etl/modelling-data/#__codelineno-2-21) shortDisplayName: "Bilateral ODA [to Nigeria]" [](https://docs.one.org/etl/modelling-data/#__codelineno-2-22) statType: dcid:measuredValue [](https://docs.one.org/etl/modelling-data/#__codelineno-2-23) measuredProperty: dcid:value [](https://docs.one.org/etl/modelling-data/#__codelineno-2-24) measurementQualifier: dcid:Nominal [](https://docs.one.org/etl/modelling-data/#__codelineno-2-25) memberOf: dcid:ONE/g/dac2a_Bilateral [](https://docs.one.org/etl/modelling-data/#__codelineno-2-26) searchDescription: "Bilateral aid to Nigeria", "Net disbursements to Nigeria" [](https://docs.one.org/etl/modelling-data/#__codelineno-2-27) populationType: dcid:EconomicActivity [](https://docs.one.org/etl/modelling-data/#__codelineno-2-28) recipientCountry: dcid:country/NGA [](https://docs.one.org/etl/modelling-data/#__codelineno-2-29) flowType: dcid:ODA [](https://docs.one.org/etl/modelling-data/#__codelineno-2-30) dac2aMeasure: 206 [](https://docs.one.org/etl/modelling-data/#__codelineno-2-31) aidIndicator: dcid:dc/svpg/DAC2A_10_206` Defining Statistical Variable Groups ------------------------------------ StatVarGroups are a specific type of Node in the Data Commons knowledge graph. As with other Nodes, they are defined in MCF files. When you define any Node in MCF, you must explicitly assign them DCIDs. For example, the variable `ONE/DAC1_10_1010-GE-USD` is part of the `dac1_FlowsByProvider` group, which is part of the `officialDevelopmentAssistance` group, which itself is part of the `Development` group, which belongs to the ‘top’ group `ONE`. `[](https://docs.one.org/etl/modelling-data/#__codelineno-3-1) Node: dcid:ONE/g/ONE [](https://docs.one.org/etl/modelling-data/#__codelineno-3-2) name: "ONE" [](https://docs.one.org/etl/modelling-data/#__codelineno-3-3) typeOf: dcid:StatVarGroup [](https://docs.one.org/etl/modelling-data/#__codelineno-3-4) specializationOf: dcid:dc/g/Root [](https://docs.one.org/etl/modelling-data/#__codelineno-3-5)[](https://docs.one.org/etl/modelling-data/#__codelineno-3-6) Node: dcid:ONE/g/development [](https://docs.one.org/etl/modelling-data/#__codelineno-3-7) name: "Development" [](https://docs.one.org/etl/modelling-data/#__codelineno-3-8) typeOf: dcid:StatVarGroup [](https://docs.one.org/etl/modelling-data/#__codelineno-3-9) specializationOf: dcid:ONE/g/ONE [](https://docs.one.org/etl/modelling-data/#__codelineno-3-10)[](https://docs.one.org/etl/modelling-data/#__codelineno-3-11) Node: dcid:ONE/g/officialDevelopmentAssistance [](https://docs.one.org/etl/modelling-data/#__codelineno-3-12) name: "Official Development Assistance" [](https://docs.one.org/etl/modelling-data/#__codelineno-3-13) typeOf: dcid:StatVarGroup [](https://docs.one.org/etl/modelling-data/#__codelineno-3-14) specializationOf: dcid:ONE/g/development [](https://docs.one.org/etl/modelling-data/#__codelineno-3-15)[](https://docs.one.org/etl/modelling-data/#__codelineno-3-16) Node: dcid:ONE/g/dac1_FlowsByProvider [](https://docs.one.org/etl/modelling-data/#__codelineno-3-17) name: "DAC1: Flows by Provider" [](https://docs.one.org/etl/modelling-data/#__codelineno-3-18) typeOf: dcid:StatVarGroup [](https://docs.one.org/etl/modelling-data/#__codelineno-3-19) specializationOf: dcid:ONE/g/officialDevelopmentAssistance` The following fields are always required: * **`Node`**: This is the DCID of the group you are defining. It must be prefixed by `g/` and may include an additional prefix before the `g`. * **`typeOf`**: In the case of a statistical variable group, this is always `dcid:StatVarGroup`. * **`name`**: This is the name of the heading that will appear in the Statistical Variable Explorer. * **`specializationOf`**: For a top-level group, this must be `dcid:dc/g/Root`, which is the root group in the statistical variable hierarchy in the knowledge graph.To create a subgroup, specify the DCID of another node you have already defined. For example, if you wanted to create a subgroup of `WHO` called `Smoking`, you would create a `Smoking` node with `specializationOf: dcid:who/g/WHO`. We additionally aim to always include * **`description`**: A description and/or definition of the variable. It should include information about the constraints. * **`searchDescription`**: sentences or strings that would match what users may search for in natural language. You can assign a Statistical Variable to as many group nodes as you like by using a comma-separated list of group DCIDs in the `memberOf` field. Defining Statistical Variable Peer Groups ----------------------------------------- `StatVarPeerGroups` are a specific type of Node in the Data Commons knowledge graph. As with other Nodes, they are defined in MCF files. When you define any Node in MCF, you must explicitly assign them DCIDs. `[](https://docs.one.org/etl/modelling-data/#__codelineno-4-1) Node: dcid:ONE/svpg/DAC1_10_1010 [](https://docs.one.org/etl/modelling-data/#__codelineno-4-2) name: "Total Official Development Assistance (ODA)" [](https://docs.one.org/etl/modelling-data/#__codelineno-4-3) description: "DAC1 data for Official Development Assistance (ODA), by measurement method" [](https://docs.one.org/etl/modelling-data/#__codelineno-4-4) typeOf: dcid:StatVarPeerGroup [](https://docs.one.org/etl/modelling-data/#__codelineno-4-5) member: ONE/DAC1_10_1010-GE-USD, ONE/DAC1_10_1010-ND-USD, ONE/DAC1_10_1010-GD-USD, ONE/DAC1_10_1010-GE-EUR_2024` The following fields are always required: - **`Node`**: This is the DCID of the peer group you are defining. It must be prefixed by `svpg/` and may include an additional prefix before the `svpg`. - **`typeOf`**: In the case of statistical variable peer group, this is always `dcid:StatVarPeerGroup`. - **`name`**: This is the name of the heading that will appear in the Statistical Variable Explorer. - **`member`**: `StatVarPeerGroups` contain related variables, which must be listed as member, separated by commas. We additionally aim to always include: * **`description`**: A description and/or definition of the peer group. It should include information about the constraints. * **`searchDescription`**: sentences or strings that would match what users may search for in natural language. Defining Topics --------------- Topics are a specific type of Node in the Data Commons knowledge graph. As with other Nodes, they are defined in MCF. When you define any Node in MCF, you must explicitly assign them DCIDs. The following fields are always required: * **`Node`**: This is the DCID of the topic you are defining. It must be prefixed by `topic/` and may include an additional prefix before the `topic`. * **`typeOf`**: In the case of statistical variable peer group, this is always `dcid:Topic`. * **`name`**: This is the name of the heading that will appear in the Statistical Variable Explorer. * **`relevantVariable`**: Topics may contain other `Topics`, `StatisticalVariablePeerGroups` or `StatisticalVariables` related variables, which must be listed as member, separated by commas. We additionally aim to always include: * **`description`**: A description and/or definition of the topic. * **`searchDescription`**: sentences or strings that would match what users may search for in natural language. Conventions ----------- We follow several conventions to ensure consistency, clarity and ease of maintaining the data in the knowledge graph. ### Naming conventions We mainly curate and aggregate data from other sources. Most of the data we maintain in our knowledge graph is collected from other data providers. We aim to name the Statistical Variables in a way that is consistent with how the original sources name indicators. That will make it easier to identify and trace the linage of the data we’re modelling. There are a few conventions to follow: * StatVar DCIDs must start with `dcid:`, include only ASCII letters (`A-Z / a-z`), digits, underscores (`_`) and hyphens (`-`) only. There can be no spaces, periods, or other punctuation marks. * Make DCIDs and names stable—once published, never change a DCID. * For property Nodes, prefer descriptive over cryptic DCIDs. ### Other Data Commons conventions You should try to align to the standards and practices used by Data Commons. While there is no official documentation on the conventions used by the Data Commons team, exploring the knowledge graph is usually a good way to get a sense of their approach. Below is some general guidance on how to think about each Node type: #### `StatVar` `/-` The namespace should generally be “ONE”. The constraints should be listed in this order: counterpart-measurementMethod-unit-observationPeriod. Not all constraints are required. Others, not listed here, may be required, and they should be appended after the ones on this list. #### `StatVarGroup` `/g/` The namespace should generally be “ONE”. Group names should not be cryptic. #### StatVarPeerGroup `/svpg/` The namespace should generally be `ONE`. We use peer groups to link Nodes that all relate to a specific indicator (hence without the constraints), and this structure reflects that. You may need to create other `StatVarPeerGroups` that don’t follow this pattern. In that case, give it a name with `lowerCamelCase`. #### Topic `/topic/` The namespace should generally be `ONE`. Topics are conceptual, so their name should always be short and human-readable. If you must use multiple words, use `CamelCase`. #### Entity `/` With rare exceptions, you should always specify the entity type. You can then use codes or names to identify the entity. Back to top --- # Quick introduction - ONE Data Docs [Skip to content](https://docs.one.org/guidelines/data-visualisation-guidelines/quick-intro/#a-quick-introduction-to-data-visualisation) A quick introduction to data visualisation ========================================== Data visualisation is one of the most powerful tools we have to understand the world and raise awareness about important issues. It is not about creating fancy charts. Encoding information onto visual elements can and has changed the world. ![Florence Nightingale's chart](https://docs.one.org/assets/data-viz/florence_nightingale.jpg) _Thanks to [Florence Nightingale’s visualisations](https://www.scientificamerican.com/article/how-florence-nightingale-changed-data-visualization-forever/) about deaths during the Crimean War we learned the true importance of sanitation._ _If it weren’t for [John Snow’s visualisation](https://www.theguardian.com/news/datablog/2013/mar/15/john-snow-cholera-map) of cholera cases in London, we might still think the disease spreads through the air and many more people might have died._ ![John Snow's cholera map](https://docs.one.org/assets/data-viz/john_snow.png) ![W.E.B Du Bois visualisations](https://docs.one.org/assets/data-viz/du_bois.png) _[W.E.B Du Bois’ iconic charts](https://www.smithsonianmag.com/history/first-time-together-and-color-book-displays-web-du-bois-visionary-infographics-180970826/) played a significant role in advancing civil rights in the US and pointing out racial disparities._ _Ed Hawkins’ [climate stripes](https://showyourstripes.info/) have become a symbol of the climate crisis and have been used by many organisations to raise awareness about global warming._ ![Ed Hawking's climate stripes](https://docs.one.org/assets/data-viz/climate_stripes.jpg) Charts and visuals are becoming more and more common in publications, and some are becoming iconic like those of the FT or the Economist. And for ONE's work, it can be a secret weapon to get people to care about what we stand for and make a real difference. Next, read the guidelines to help you make impactful charts or read the ONE data viz style guide to ensure your charts meet our standards. Back to top --- # Contributing - ONE Data Docs [Skip to content](https://docs.one.org/etl/contributing/#contributing-to-the-etl-pipeline) Contributing to the ETL pipeline ================================ ![đŸ‘·](https://cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f477.svg ":construction_worker:") Page Under Construction This page is currently under construction and will be updated soon. This page contains information about how to contribute to the ETL pipeline, including how to add new data sources, update existing data sources, and contribute to the ETL codebase. Back to top --- # Trillions Tracker - ONE Data Docs [Skip to content](https://docs.one.org/methodologies/deep-dives/trillions-tracker/#the-trillions-tracker-methodology) The Trillions Tracker Methodology ================================= > This page describes the methodology and data used for The Trillions Tracker, [available here](https://data.one.org/trillionstracker/) > . This research builds on previous work by the [Independent Research Group of the Indian G20](https://icrier.org/g20-ieg/pdf/The_Triple_Agenda_G20-IEG_Report_Volume1_2023.pdf) (The Triple Agenda, 2023), [Bhattacharya A et al.](https://www.lse.ac.uk/granthaminstitute/wp-content/uploads/2022/05/Financing-the-big-investment-push-in-emerging-markets-and-developing-economies-for-sustainable-resilient-and-inclusive-recovery-and-growth-1.pdf) (Financing a big investment push in emerging markets and developing countries for sustainable, resilient and inclusive recovery and growth, 2022), and [Songwe, Stern and Bhattacharya](https://icrier.org/g20-ieg/pdf/The_Triple_Agenda_G20-IEG_Report_Volume1_2023.pdf) (Finance for climate action: scaling up investment for climate and development, 2022). For this research, we use data from: * The IMF World Economic Outlook ([link](https://www.imf.org/en/Publications/WEO) ) * The IMF Financial Data Query Tool ([link](https://www.imf.org/external/np/fin/tad/query.aspx) ) * IMF Staff Reports on the Poverty Reduction and Growth Trust (PRGT) and Resilience and Sustainability Trust (RST) * ONE Special Drawing Rights Tracker ([link](https://data.one.org/data-dives/sdr/) ) * The World Bank's International Debt Statistics (IDS) ([link](https://www.worldbank.org/en/programs/debt-statistics/ids) ) * The OECD DAC Creditor Reporting System (CRS) database ([link](https://www.oecd-ilibrary.org/development/data/creditor-reporting-system_dev-cred-data-en) ) Data and code to replicate the analysis are available on this [GitHub repository](https://github.com/ONEcampaign/trillions_tracker/) . * * * TL;DR The Trillions Tracker maps additional public finance available towards closing the $3 trillion gap identified by researchers for development and climate needs in low and middle income countries. It uses 2019 as a baseline, pulling from the initial work, compared to resources available in 2022 (as well as some projected spending by MDBs and innovative finance). This work focuses on the US$2.5 trillion yearly official financing gap that must be closed by 2030, and does not track the $500 billion needed in private finance. The Trillions Tracker considers: * Domestic resource mobilisation (DRM) via _General Government Revenue_ data from the IMF, for developing and emerging economies, excluding China. * Gross disbursements of Official Development Assistance, from all official donors who report data to the OECD DAC. * Gross disbursements of non-concessional loans, from official bilateral and official multilateral sources (long-term, public and publicly guaranteed debt data from the World Bank International Debt Statistics) * Channelled special drawing rights (or currency equivalents) that have been committed via the IMF's Poverty Reduction and Growth Trust (PRGT) and the Resilience and Sustainability Trust (RST) All data is presented in 2019 US dollars, in constant prices and exchange rates. The decision of which data sources and specifications to choose came from a desire to match as closely as possible to the baseline funding presented in the research by Bhattacharya A et al (2022, p.46). * * * Overview -------- Domestic Resources ------------------ We focus on resources from Emerging and Developing Economies (EMDEs), excluding China. The current list of EMDEs can be found [here](https://www.imf.org/en/Publications/WEO/weo-database/2024/April/groups-and-aggregates#oem) . The source of "DRM" data is the IMF World Economic Outlook (WEO, April 2024). We use _General Government Revenue, as a share of GDP_ indicator (`GGR_NGDP`). This indicator measures the total revenue collected by the government (which includes central, state, and local governments) as a share of the country's nominal Gross Domestic Product (GDP). This encompasses all revenues collected by the government, including taxes, social contributions, and other receipts (e.g., fines, fees, and income from government-owned enterprises). We convert data to US dollars by multiplying the share of nominal GDP by the nominal GDP value in US dollars (indicator `NGDPD`). Last, we convert to constant prices using GDP deflators data from the IMF World Economic Outlook. We calculate "progress" (i.e additional finance) as the additional total General Government Revenue in 2022, compared to 2019. **Note:** small differences in the 2019 baselines numbers between the Trillions Tracker and analysis by Bhattacharya A et al. are related to the version of the World Economic Outlook used. The Trillions Tracker uses the most recent data, from April 2024. Official Development Assistance ------------------------------- We focus on total gross disbursements from all official donors who report to the OECD Development Assistance Committee. That includes DAC members, non-DAC members, and multilateral organisations. Gross disbursements are different from what is considered as headline ODA by the OECD. Since 2018, the OECD reports on a grant equivalent basis. That means that loans don't get reported at face value, but at discounted amounts considered to be equivalent to a grant. By definition, gross disbursements are higher than net disbursements or grant equivalents because in any given year they take all the money disbursed, even if some will have to be paid back (with interest) in the future. In their 2019 baseline figures, Bhattacharya A et al. use gross disbursements to all developing countries. This amount includes money that is reported as 'Developing Countries, unspecified' but that is actually spent in donor countries. That includes in-donor refugee costs (IDRC), in-donor student costs, and other non-flows like debt relief or development awareness spending. For consistency we align with their methodology. We convert data to 2019 US dollars in constant prices using the OECD DAC price and currency exchange deflators. Non-concessional finance ------------------------ We focus on multilateral and bilateral non-concessional lending. In both cases we look at Public and Publicly Guaranteed (PPG) long-term external debt from official sources. We use data from the World Bank International Debt Statistics database. Additionally, we look at special drawing rights (or currency equivalents) that have been channelled and committed via the IMF's PRGT and RST. ### Multilateral In order to get non-concessional lending, we use two indicators: * Multilateral disbursements (`DT.DIS.MLAT.CD`) * Multilateral concessional disbursements (`DT.DIS.MLTC.CD`) Non-concessional disbursements are calculated as (total) multilateral disbursements minus multilateral concessional disbursements. The latest actual lending figures are from 2022. In addition, we look at projected additional lending to 2030 based on MDB reforms. The [July 2024 communique](https://www.gov.br/fazenda/pt-br/assuntos/g20/declaracoes/2-3rd-fmcbg-communique.pdf) of the 3rd meeting of the G20 Finance Ministers and Central Bank Governors (FMCBG) highlights that capital adequacy framework reforms have unlocked $357 billion in additional MDB lending headroom over the next decade. Whilst we don't know at what speed this lending headroom will become available, for the purposes of this analysis, we assume increases are spread evenly over the next decade. That means $35.7 billion in additional lending room each year. By 2030, we will be seven years into the decade, thus $249.9 billion in MDB lending headroom would be unlocked, $185.8 billion in 2019 prices. Lending headroom is different from actual disbursements. However, we use it as a proxy to assess potential additional spending from MDBs. ### Bilateral In order to get non-concessional lending, we use two indicators: * Bilateral disbursements (`DT.DIS.BLAT.CD`) * Bilateral concessional disbursements (`DT.DIS.BLTC.CD`) Non-concessional disbursements are calculated as total Bilateral debt disbursements minus bilateral concessional debt disbursements. As with other sources, the Trillions Tracker aligns with Bhattacharya A et al. in using gross debt disbursements. The Independent Research Group considers a higher lending baseline for 2019, focusing instead on new debt commitments. We convert to constant prices using GDP deflators data from the IMF World Economic Outlook. Innovative Finance: Special Drawing Rights (SDRs) ------------------------------------------------- The research by Bhattacharya A et al. doesn't include SDRs, as they were not yet being channelled when the report came out. However, in their analysis, they group innovative finance (SDRs) targets with bilateral non-concessional. In 2021, G7 countries (and later affirmed by the G20) committed to channel US$100 billion of their SDRs (or equivalent contributions) to countries most in need. These were pledged through two IMF trust funds to on-lend the resources to low and vulnerable countries. The Trillions Tracker includes estimates of official and expected SDR lending through 2030 based on committed amounts. **Analysis was completed in partnership with Mark Plant and Charley Ward of the Center for Global Development.** They are calculated using: * SDR (or currency equivalents) channelling pledges that have been committed via the IMF's Poverty Reduction and Growth Trust (PRGT) and the Resilience and Sustainability Trust (RST) ([ONE](https://data.one.org/data-dives/sdr/#sdr-pledges-modal) ). * Annual IMF Staff Reports on the Resource Adequacy of the PRGT and RST ([2022 PRGT only](https://www.imf.org/en/Publications/Policy-Papers/Issues/2022/04/21/2022-Review-of-Adequacy-of-Poverty-Reduction-and-Growth-Trust-Finances-517091) , [2023](https://www.imf.org/en/Publications/Policy-Papers/Issues/2023/04/25/2023-Review-of-Resource-Adequacy-of-the-Poverty-Reduction-and-Growth-Trust-Resilience-and-532788) , [2024 PRGT](https://www.imf.org/en/Publications/Policy-Papers/Issues/2024/04/25/2024-Update-of-Resource-Adequacy-of-the-Poverty-Reduction-and-Growth-Trust-and-the-Debt-548307) , and [2024 RST](https://www.imf.org/en/Publications/Policy-Papers/Issues/2024/06/24/Interim-Review-of-The-Resilience-and-Sustainability-Trust-and-Review-of-Adequacy-of-550939) ) for data on fundraising and projections on demand and lending * IMF financial data on PRGT and RST lending ([Financial Data Query Tool](https://www.imf.org/external/np/fin/tad/query.aspx) and [Quarterly Report on IMF Finances: For the Quarter Ended July 31, 2024](https://www.imf.org/-/media/Files/Data/IMF-Finance/Quarterly-Financial-Statements/2024/fy25q1-quarterly-financial-report.ashx) ). We add together RST and PRGT lending estimates and projections (as detailed below) to get one average annual figure for innovative finance, which is then added to the bilateral non-concessional flows. ### Poverty Reduction and Growth Trust (PRGT) We have official lending figures through 2023. In order to estimate future lending up to 2030, we look at two scenarios - a high and a low scenario, and then we take a midpoint between the two as our projected figures. #### Low scenario * For 2021-2023: We use data on PRGT commitments from IMF Staff Reports. * For 2024: we use a baseline of SDR 7 billion, in line with IMF staff projections for PRGT commitments (SDR 4-10 billion, with a baseline estimate of about SDR 7 billion). * For 2025-2030: We use IMF Staff Projections of average annual lending (2025-2034), of SDR 2.65 billion per year. Based on the above, we estimate total PRGT commitments at SDR 3.85 billion per year, or SDR 38.5 billion between 2021 and 2030. | In SDR billions | 2021 | 2022 | 2023 | 2024 | 2025 | 2026 | 2027 | 2028 | 2029 | 2030 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | Committed | 6 | 3.3 | | 6.3 | | | | | | | | Projected | | | | 7 | 2.65 | 2.65 | 2.65 | 2.65 | 2.65 | 2.65 | **Total:** SDR 38.53 billion | **Average:** SDR 3.85 billion per year over the 2021-2030 period #### High scenario * For 2021-2023: We use data on PRGT commitments from IMF Staff Reports. * For 2024: we use a baseline of SDR 7 billion, in line with IMF staff projections for PRGT commitments (SDR 4-10 billion, with a baseline estimate of about SDR 7 billion). * For 2025-2030: We calculate an outer limit of possible PRGT commitments, given that there are SDR 19.68 billion in PRGT channelling pledges that have not yet been converted into signed commitments. This is on top of SDR 20.37 billion of uncommitted and undrawn resources already in the PRGT's coffers. Taken together, the PRGT's potential lending would be SDR30.05 for 2025-2030, or an annual average of SDR 6.68 billion. Based on the above, we estimate total PRGT commitments at SDR 6.27 billion per year, or SDR 62.65 billion between 2021 and 2030. | In SDR billions | 2021 | 2022 | 2023 | 2024 | 2025 | 2026 | 2027 | 2028 | 2029 | 2030 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | Committed | 6 | 3.3 | 6.3 | | | | | | | | | Projected | | | | 7 | 6.68 | 6.68 | 6.68 | 6.68 | 6.68 | 6.68 | **Total:** SDR 62.65 billion | **Average:** SDR 6.27 billion per year over the 2021-2030 period #### Mid-point scenario - used in the Trillions Tracker * For 2021-2023: We use data on PRGT commitments from IMF Staff Reports. * For 2024: We use a baseline of SDR 7 billion, in line with IMF staff projections for PRGT commitments (SDR 4-10 billion, with a baseline estimate of about SDR 7 billion). * For 2025-2030: We use SDR 5.06 billion per year, which is the average of the low and high scenarios, described above. Based on the above, we estimate total PRGT commitments at SDR 5.3 billion per year, or SDR 52.96 billion between 2021 and 2030. | In SDR billions | 2021 | 2022 | 2023 | 2024 | 2025 | 2026 | 2027 | 2028 | 2029 | 2030 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | Committed | 6 | 3.3 | 6.3 | | | | | | | | | Projected | | | | 7 | 5.06 | 5.06 | 5.06 | 5.06 | 5.06 | 5.06 | **Total:** SDR 52.96 billion | **Average:** SDR 5.3 billion per year over the 2021-2030 period We convert to current USD using the September 17, 2024 exchange rate (1 USD = SDR 0.739792) then convert this into constant prices using GDP deflators data from the IMF World Economic Outlook. ### Resilience and Sustainability Trust (RST) For 2022 to 2026, we use IMF Staff reports for RST commitments (approved and projected), which is in line with estimated medium-term demand. Since we don't have projections for 2027-2030, we assume that the remainder of the unspecified SDR pledges - SDR 8.4 billion (based on data from ONE's SDR Tracker) can be channelled through the RST. After setting aside resources for the Deposit and Reserve Accounts as well as for the liquidity buffer, we find that usable loan resources will stand at SDR 5.3 billion — annual average of SDR 1.3 billion. | In SDR billions | 2022 | 2023 | 2024 | 2025 | 2026 | 2027 | 2028 | 2029 | 2030 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | Committed | 0.9 | 4.2 | | | | | | | | | Projected | | | 8 | 5 | 3.9 | 1.3 | 1.3 | 1.3 | 1.3 | **Total:** SDR 27.2 billion | **Average:** SDR 3 billion per year over the 2022-2030 period We convert to current USD using the September 17, 2024 exchange rate (`1 USD = SDR 0.739792`) then convert this to constant prices using GDP deflators data from the IMF World Economic Outlook. ### Total Innovative Finance We add together the average annual RST and PRGT figures, in 2019 prices, to get one total for SDR lending/Innovative finance - $8.3 billion per year through 2030. Back to top --- # Africa's Vaccine Industry - ONE Data Docs [Skip to content](https://docs.one.org/methodologies/deep-dives/africa-vaccine-industry/#behind-the-scenes-of) ### Behind the scenes of _What will it take to build Africa’s vaccine industry?_ ======================================================= This notebook describes the methodology and data used for our data dive on [what it will take to build Africa's vaccine industry](https://data.one.org/data-dives/manufacturing/#Why-dispersing-vaccine-manufacturing-matters) . You can see our data processes in our [Vaccine Manufacturing GitHub repository](https://github.com/ONEcampaign/vaccine_manufacturing_without_data) . We hold transparency and reproducibility central in all our data work. However, for this project we are unable to share the raw vaccine supply and demand datasets, as per the arrangements through which we received the data from WHO and Linksbridge. Despite this limitation, here we go through each data source and explain where we got the data, how we use it, and why we use it that way. The analysis in this Data Dive can be divided into the following four subjects / data sources: - [Vaccine Supply: WHO MI4A Dataset (Provided by WHO)](https://docs.one.org/methodologies/deep-dives/africa-vaccine-industry/#vaccine-supply) - [Vaccine Demand: Linksbridge's Vaccine Almanac](https://docs.one.org/methodologies/deep-dives/africa-vaccine-industry/#vaccine-demand) - [Manufacturing Facility Commitments: PATH/CHAI](https://docs.one.org/methodologies/deep-dives/africa-vaccine-industry/#commitments) - [Gavi-related Statistics: Gavi](https://docs.one.org/methodologies/deep-dives/africa-vaccine-industry/#gavi) Vaccine Supply: Complemented WHO MI4A dataset --------------------------------------------- For vaccine supply (or production) data, we use the complemented version of the WHO Market Information for Access to Vaccines (MI4A) dataset. The MI4A describes the total volume of vaccines distributed by manufacturers worldwide. It contains information on where these vaccines are distributed, the headquarter location of the manufacturer, price of vaccines, etc. The [publicly available dataset](https://www.who.int/teams/immunization-vaccines-and-biologicals/vaccine-access/mi4a/mi4a-vaccine-purchase-data) contains data provided by participating countries that have agreed to share vaccine price and procurement data. This dataset is incomplete and yields different results to WHO's annual [Global Vaccine Market Report](https://cdn.who.int/media/docs/default-source/immunization/mi4a/who_gat_008_global_vaccine_market_report_march_12.pdf?sfvrsn=a61f4733_1&download=true) . We reached out to the WHO to understand the differences. WHO complements the publicly available dataset, reported by participating governments, with additional sources, including WHO's dataset on the global vaccine markets (which includes self-reported data from manufacturers themselves). WHO kindly offered to share a view of this data with us. Given privacy considerations (including relationships with self-reporting private companies), this dataset cannot be shared publicly. Data notes 1. Information contained in the MI4A database is provided by participating countries that have agreed to share vaccine price and procurement data. The data used in this analysis are complemented with additional sources, including WHO's dataset on the global vaccine markets. 2. The classification by continent is performed using the OWID convention. The WHO uses a different classification based on six world regions. The choice to use the classification by continent is the sole responsibility of the author (The ONE Campaign) and does not imply the expression of any opinion whatsoever on the part of the WHO concerning the legal status of any country, territory, city or area of its authorities. 3. Values are for 2022 reported in 2023. Data includes COVID-19 vaccines. The data we received was structured as follows: - Number of vaccine doses distributed to World and to Africa by WHO Region and Continent - Figures including and excluding COVID-19 vaccines - Data for 2022 This data led to some important decisions. **We include COVID-19 vaccines in all supply/production analysis:** the DataDive focusses on the productive capacity of Africa in relation to the rest of the world. By excluding COVID-19, we would omit a large portion of continents' vaccine production capacity, especially in 2022. **Our analysis is completed by Continent:** The Partnerships for African Vaccine Manufacturing (PAVM) target focuses on Africa as a whole. It makes sense for our analysis to follow [Our World in Data's](https://ourworldindata.org/world-region-map-definitions) definition of Africa instead of the WHO region which excludes North Africa. This data is used in two data visualisations: ### Current versus target production chart This chart shows the scale of increase required for Africa's current production capacity to be able to cover 60% of their population by 2040. The [Africa Union and Africa CDC](https://africacdc.org/download/partnerships-for-african-vaccine-manufacturing-pavm-framework-for-action/) estimate that 60% of African vaccines will be around 1.5 billion vaccines in 2040. From the MI4A data, we know Africa distributed 20.7 million vaccines to the world in 2022. Africa needs to increase this production capacity 73-fold to reach the 1.5 billion target. ### Africa produces a fraction of the world's vaccines (bar chart) The bar chart shows how Africa's production capacity compares to other continents'. Each bar represents the continent's total number of vaccine doses distributed to the world (including COVID-19 vaccines), as a share of total vaccine doses distributed to the world in 2022. Vaccine Demand: Linksbridge's Vaccine Almanac --------------------------------------------- For vaccine demand data, we use [Linksbridge's Vaccine Almanac (VA)](https://linksbridge.com/) . This data is not publicly available, so we cannot share the raw vaccine demand data. The VA showcases market information across multiple vaccine markets. You can see an outline of the data available in the latest [Vaccine Almanac](https://4550bf57-cdn.agilitycms.cloud/vaccine-almanac/2024%20Vaccine%20Almanac.pdf?utm_medium=email&_hsmi=295322802&utm_content=295322802&utm_source=hs_email) report. Data for the VA comes from the Global Vaccine Market Model (GVMM), a data-sharing collaboration supported by the Gates Foundation’s Global Delivery Programs (GDP) team using information from the foundation, CDC, CHAI, PAHO, PATH, UNICEF and WHO that is curated by Linksbridge SPC. Not all of the data available in the GVMM appears in the Vaccine Almanac. The VA includes three vaccine demand data tables: "Total Required Supply", "Total Required Supply by Country", and "Childhood Immunisation Schedule". Vaccine demand is estimated using a series of factors, including target population, immunisation schedule, new vaccine introduction, number of doses per vaccine, etc. You can see more detail in the ['Use of GVMM Data' slide deck (slide 9)](https://dcvmn.org/wp-content/uploads/2015/07/use_of_gvmm_data_in_decision_making_circulation.pdf) . For our analysis, we use the "Total Required Supply by Country" data table. This has the number of vaccine doses required for each country, each year, by vaccine name for 2000 to 2030. It excludes COVID-19 data. Linksbridge separates COVID-19 data into another dataset. They informed us that they are currently refining their COVID-19 forecast, and are planning on publishing COVID-19 demand data in Q3 2024. As demand for COVID-19 becomes more clear (Q3, 2024), we will update our analysis. It is unclear when data represents recorded or forecasted data. The Vaccine Almanac Report shows "a forecast of global public demand for vaccines for 2022 through 2033", suggesting data is projected from 2022. Based on exchanges with Linksbridge about the start date of forecasts, we have set all data points beyond and including 2024 as projections. Some projections could start from 2023, however. We used this data to produce one visualisation: ### Africa's share of global vaccine demand is increasing The area chart shows Africa's increasing share of global vaccine demand. For a more detailed understanding of the data processes behind this graph, please refer to the [vaccine\_demand.py](https://github.com/ONEcampaign/vaccine_manufacturing_without_data/blob/main/scripts/vaccine_demand/vaccine_demand.py) file. In short, we: - Assigned individual countries to their respective continents, as per [OWID's classification](https://ourworldindata.org/world-region-map-definitions) . We counted "global stockpile" data as its own "global" continent. **Note:** India's data is dissagregated by region in the format 'India: Region'. There is also entries for 'India' as a whole. After inspecting the data, the India entries appear to be for the centralised distribution of certain vaccines, while the regional entries contain a seperate set of vaccines. As such, we count all 'India' and 'India: Region' rows as India. - Aggregated data by continent and year. - Calculated Africa's share of total vaccine doses, by year, including global stockpile. Manufacturing Facility Commitments: PATH/CHAI --------------------------------------------- As commonly reported, 30 vaccine manufacturing facility projects have been announced in Africa. This figure was meant to provide information on the location of the facilities, the manufacturer, and an update on the status of the project. The primary aim was to show the inconsistent progress of projects. However, getting the most up to date data on the location and status of these projects is notoriously difficult to find. Depending on the source, you can get different locations (see [Gavi, figure 4](https://www.gavi.org/news-resources/knowledge-products/expanding-sustainable-vaccine-manufacturing-africa-priorities-support) , versus [Gavi, Slide 3](https://www.unicef.org/supply/media/19216/file/UNICEF-VIC2023-Session12-AVMAUpdate-Gavi-2023.pdf) ). And desk-based research into updates of each projects had various degrees of success. We reached out to PATH and CHAI, who have partnered to produce detailed research on these projects. They provided us with their most up-to-date list of manufacturing commitments, containing data on the country location of the project, the manufacturer, and the current status of the project. This data is extremely helpful. We have utilised the country location and the manufacturing name in our data visualisation. However, the status of each project can quickly become outdated. PATH/CHAI are currently updating their research and plan to publish in upcoming weeks. While we wait for this updated status data, we have opted to include additional information for specific 'case studies' for the manufacturing commitments where we are most confident our research is accurate. We will update our data visualisation with the new PATH/CHAI data once it is released. Gavi-related Statistics: Gavi ----------------------------- > _"Thirty-nine African countries are currently supported by Gavi, the Vaccine Alliance, which accelerates access to new and under-used vaccines and improves childhood immunisation coverage. Six of those countries — SĂŁo TomĂ© and PrĂ­ncipe, Nigeria, Kenya, Ghana, Djibouti, and CĂŽte d'Ivoire — are projected to transition out of Gavi support by 2030. **These countries represented 18% of vaccine doses fully supported by Gavi funding in 2023**"_ We calculated this statistic using the ['Gavi Shipments 2023 Vaccines - All Regions'](https://www.unicef.org/supply/media/20656/file/Gavi-shipments-2023.pdf) dataset. For a more detailed understanding of the data processes behind this stat, please refer to the [gavi\_supply.py](https://github.com/ONEcampaign/vaccine_manufacturing_without_data/blob/main/scripts/vaccine_supply/gavi_supply.py) file. In short, we: - Use Python to scrape the PDF into a pandas DataFrame. - Remove non-vaccine rows from the dataset. This includes "AD-Syringe, 0.5 ml", "AD-Syringe, 0.1 ml", "RUP-2.0 ml", "RUP-5.0 ml", "Safety Box, 5 Litre" - Remove Co-financing rows. We focus only on vaccines fully funded by Gavi. - Aggregate by country. - From this data subset, we divide each countries total number of vaccine doses fully financed by Gavi by the global total. - Sum the shares of SĂŁo TomĂ© and PrĂ­ncipe, Nigeria, Kenya, Ghana, Djibouti, and CĂŽte d'Ivoire. These are the six African countries are projected to transition away from Gavi support by 2030, as per [Gavi, figure 9, p.28](https://www.gavi.org/sites/default/files/investing/funding/resource-mobilisation/MTR23_Report_FULL_eng.pdf) . Back to top --- # Hidden Trend in Health Financing - ONE Data Docs [Skip to content](https://docs.one.org/methodologies/deep-dives/hidden-trend-in-health-financing/#surge-financing-for-covid-19-is-disguising-a-downward-trend-in-health-aid) **_Behind the scenes of_** Surge financing for COVID-19 is disguising a downward trend in health aid ========================================================================= This page describes the methodology and data used for ONE's data story on the effects of COVID-19 aid for overall Health ODA. TL;DR This story looks at the trend in health ODA from 2008 to 2022, the year with the latest data. It compares headline Health ODA spending with health ODA excluding COVID-19 related aid. All data is presented in 2022 US dollars, in constant prices and exchange rates. This analysis is based in gross ODA disbursements to all developing countries (which, per OECD definitions, may include in-donor spending). The analysis which looks at specific donors (e.g the US, UK, France, etc.) is based on _bilateral_ plus _imputed multilateral_ health aid (as gross disbursements). While the OECD does not provide sector-specific multilateral imputations, ONE has been calculating and releasing this data since 2019. The troubling hidden trend in health aid ---------------------------------------- When COVID-19 hit, donor assistance for health surged to help countries respond to the pandemic. But this surge financing has disguised a concerning trend in official development assistance (ODA) for health: excluding COVID-19 funding, health official development assistance (ODA) for health reached a 13 year low in 2021 and only rebounded slightly in 2022. The following chart compares gross ODA disbursements for all health sectors against the same data excluding activities related to COVID-19. * * * ### Health definition ONE's definition of 'Health' ODA includes all purpose codes under DAC Code 120-123 (`Health`), plus all purpose codes under DAC Code 130 (`Population Policies/Programmes & Reproductive Health`): * * * ### Calculating COVID-19 related health ODA COVID-19 related flows can be logged in a few different ways: 1. Donors can flag that a project/activity is related to COVID-19 by using a keyword. For this analysis, we identify all projects/activities that include the string `covid` in the keyword field. 2. Projects / activities can be reported as "COVID-19 control", which is purpose code 12281, within Basic Health (122). 3. Financing can be provided by the _COVID-19 Response and Recovery Multi-Partner Trust Fund_ (donor code `1047`) This system has quite significant limitations. According to the OECD, the purpose code "includes actions in immunisation, testing, pandemic prevention, treatment and post-recovery therapies." In contrast, the keyword "captures providers' response to the pandemic across other sectors and non-sector aid" ([OECD 2024](https://www.oecd-ilibrary.org/sites/2dcf1367-en/1/3/4/1/index.html?itemId=/content/publication/2dcf1367-en&_csp_=177392f5df53d89c9678d0628e39a2c2&itemIGO=oecd&itemContentType=book) ). However, the keyword can be used within the health sector, and donors [were instructed](https://one.oecd.org/document/DCD/DAC/STAT(2021)29/REV1/en/pdf) to use it together with the purpose code when reporting vaccine donations. When studying Health financing for COVID-19 related financing, we consider the projects/activities that fit into one of the 3 categories outlined above. Keywords do not indicate what percentage of a project was used for COVID-19 related objectives. It is therefore likely that this methodology represents an upper-bound estimate for COVID-19 related finance. But we take the data as it is reported by donors to the OECD DAC. * * * Health aid is declining across many major donors ------------------------------------------------ When COVID-19 funding is excluded, health funding from many major donors has not rebounded to pre-pandemic levels. When excluding COVID-19 funding, health ODA in 2022 remains below pre-pandemic levels in the UK, Canada, EU Institutions, France, and the Netherlands. It also declined between 2021 and 2022 in the US, UK, Germany, France, and Italy. * * * ### Calculating total health aid (from a donor's perspective) Aid flows can be considered from two perspectives: * Amounts provided by specific donors (i.e the donor perspective) * Amounts received by recipient countries (i.e the recipient perspective) The donor perspective is important when studying the final use of a donors' ODA spending in a given year. A portion of the funding they provide is 'bilateral', and a portion goes to core funding to multilateral institutions (who in turn provide financing to developing countries). Getting a complete picture of the final purpose and destination of specific donors' spending means studying where and how multilateral financing is spent. This is known as "imputed multilateral aid". Imputed multilateral aid are estimates produced by mapping money provided to specific countries (or sectors) back to bilateral donors, based on the amounts that they provide as core funding to multilateral institutions. The OECD DAC does not publish multilateral imputations by sector. ONE has been producing and releasing this data since 2019. More information on our methodology can be [found here](https://cdn.one.org/international/media/international/2021/05/04101117/Imputed-Multilateral-Sectors-Methodology.pdf) . In short: 1. Using data from the Creditor Reporting System, we calculate each multilateral agency's total flows to a given sector as a share of its total spending (core resources only). 2. Using data from the Members Total Use of the Multilateral System database, we calculate the bilateral donor’s core ODA contributions to each multilateral agency (for year _n_) 3. For each donor, sectoral imputed multilateral aid figures are calculated by multiplying the contributions made to each multilateral organisation (obtained through step 2) by the sector spending shares for each specific multilateral organisation (obtained through step 1). Sources and other data notes ---------------------------- This analysis uses data from the OECD DAC databases: * Creditor Reporting System (CRS), last accessed October 2024 * Members total use of the multilateral system database, last accessed October 2024 Figures are converted to 2022 constant prices using the OECD DAC deflators. For more information on ONE's methodology for multilateral sector imputations, please see [this document](https://cdn.one.org/international/media/international/2021/05/04101117/Imputed-Multilateral-Sectors-Methodology.pdf) . All of ONE's research and analysis is open source. Code to reproduce this analysis can be found in this [GitHub repository](https://github.com/ONEcampaign/health_oda) . For more of ONE's ODA analysis: * ONE's [ODA topic](https://data.one.org/topics/official-development-assistance/) page. * ONE's [Aid Dashboard](https://data.one.org/aid-dashboard) . ONE develops several python packages and tools to work with OECD DAC data, including: * [oda-reader](https://github.com/ONEcampaign/oda_reader) : a python package to access OECD DAC data from the data-explorer API. * [oda-data](https://github.com/ONEcampaign/oda_data_package) : a python package to reproduce all of ONE's ODA analysis with a few lines of code * [pydeflate](https://github.com/jm-rivera/pydeflate) : a python package to convert flows to constant prices and exchange rates, using IMF, World Bank, or DAC data price deflators and exchange rates data. Please reach out if you would like to get started with any of these tools. Back to top --- # Publishing checklist - ONE Data Docs [Skip to content](https://docs.one.org/guidelines/data-visualisation-guidelines/publishing-checklist/#publishing-checklist) Publishing checklist ==================== Ready to publish or share a chart? Use this quick checklist to ensure it meets our standards. **🔍 Data Accuracy** Sources cited and linked correctly Underlying data has been checked Key message matches the data **🎹 Design** Official colour palette, font, layout and other styling elements have been used The chart has been checked for mislabeling, misinterpretation, and other design errors The chart has been checked against our data visualisation principles **♿ Accessibility** Colours and elements are checked for accessibility Alt text is provided Interactivity has been tested The chart has been tested on different devices **👀 Publishing** Flourish charts as saved in the correct folder on the ONE Campaign Project Chart object named: `[Page]_[ChartType]_[AdditionalInfo]_[Optional "Mobile"]` The chart has been user tested with at least 2 other people The chart has been reviewed by the data team Back to top --- # Getting started - ONE Data Docs [Skip to content](https://docs.one.org/tools/bblocks/places/getting-started/#getting-started-with-bblocks-places) Getting started with `bblocks-places` ===================================== This page walks you through the basic steps to install `bblocks-places` and start resolving and standardizing places Installation ------------ You can install the package as part of the broader `bblocks` distribution or as a standalong package Option 1: install via bblocks with extras `[](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-0-1) pip install bblocks[places]` Option 2: standalone installation `[](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-1-1) pip install bblocks-places` Now you can import the package. `[](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-2-1) from bblocks import places` Resolve places -------------- Once installed and imported `bblocks-places` you can use the convenient functionality to start working with country-level data. Lets start with a very simple example. Say we have a list of countries with non standard names `[](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-3-1) countries = ["zimbabwe", " Italy ", "USA", "Cote d'ivoire"]` We can easily resolve these names to a standard format such as ISO3 codes `[](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-4-1) resolved_countries = places.resolve_places(countries, to_type="iso3_code") [](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-4-2)[](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-4-3) print(resolved_countries) [](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-4-4) # Output: [](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-4-5) # ['ZWE', 'ITA', 'USA', 'CIV']` This works with pandas DataFrames too. Resolving places in pandas DataFrames `[](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-5-1) import pandas as pd [](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-5-2)[](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-5-3) df = pd.DataFrame({"country": countries}) [](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-5-4)[](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-5-5) # Add the ISO3 codes to the DataFrame [](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-5-6) df["iso3_code"] = places.resolve_places(df["country"], to_type="iso3_code") [](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-5-7)[](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-5-8) print(df) [](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-5-9) # Output: [](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-5-10) # country iso3_code [](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-5-11) # 0 zimbabwe ZWE [](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-5-12) # 1 Italy ITA [](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-5-13) # 2 USA USA [](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-5-14) # 3 Cote d'ivoire CIV` Filter places ------------- Let's say that we are only interested in countries in Africa. It is easy to filter our countries with the `filter_places` function. Filter for African countries `[](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-6-1) african_countries = places.filter_places(countries, [](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-6-2) filters={"region": "Africa"}) [](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-6-3)[](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-6-4) print(african_countries) [](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-6-5) # Output: [](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-6-6) # ['zimbabwe', "Cote d'ivoire"]` Get places ---------- We don't always want to resolve or standardize places. Sometimes we simple want to know what places belong to a particular category. For example we might want to know what countries in Africa are classified as upper income `[](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-7-1) ui_africa = places.get_places(filters={"region": "Africa", [](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-7-2) "income_level": ["Upper middle income", [](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-7-3) "High income"]}, [](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-7-4) place_format="name_short" [](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-7-5) ) [](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-7-6)[](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-7-7) print(ui_africa) [](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-7-8) # Output: [](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-7-9) # ['Algeria', 'Botswana', 'Equatorial Guinea', 'Gabon', 'Libya', [](https://docs.one.org/tools/bblocks/places/getting-started/#__codelineno-7-10) # 'Mauritius', 'Namibia', 'Seychelles', 'South Africa']` The next pages will explore in more detail all the functionality and customizability of `bblocks-places` Back to top --- # Accessibility - ONE Data Docs [Skip to content](https://docs.one.org/guidelines/data-visualisation-guidelines/guidelines/accessibility/#accessibility-in-data-visualisation) Accessibility in data visualisation =================================== Accessibility is often an overlooked part of the data visualisation design process—but it’s essential for making your data understandable and usable by everyone. Designing with accessibility in mind ensures that all users, regardless of ability, can access the insights you're sharing. Here are key considerations to keep in mind: **Use of colour** Our [colour palette](https://docs.one.org/style-guide/colour-palette) has been developed with accessibility in mind. However, you should always test your chosen colours for compatibility with users who have colour vision deficiencies or other visual impairments. Use tools such as a colour blindness simulator and contrast checker. As a general rule, **vary shade and lightness**, not just hue, to help differentiate between elements. **Overall Design** Ensure that all text is legible and visual elements are clearly distinguishable. Avoid overcrowding—use adequate spacing and alignment to maintain clarity and focus. **Chart literacy** Not every viewer is familiar with common data visualisation conventions. For example, while data experts may instantly recognise that a dot represents a data point, others may not. Always consider your audience and provide essential supporting elements such as titles, legends, annotations, and explanatory notes to guide interpretation. **Device and Platform Considerations** Visualisations can appear differently across devices. Test your design on desktop, tablet, and mobile to ensure responsiveness. If you're publishing to the web or social media, include alt text to support users with visual impairments. A simple, effective structure for alt text is: "\[Chart type\] showing \[data type\] where \[reason for creating the chart\]." By designing with accessibility in mind, you help ensure your visualisation is not only beautiful and informative, but inclusive and impactful as well. Back to top --- # Data visualisation guidelines - ONE Data Docs [Skip to content](https://docs.one.org/guidelines/data-visualisation-guidelines/#data-visualisation-guidelines) Data visualisation guidelines ============================= Welcome to ONE Campaign's data visualisation guidelines! This resource is your go-to guide for creating visualisations that are not only beautiful, but also impactful and effective in communicating your message. Are you new to data visualisation? Here is a **[quick introduction ↗](https://docs.one.org/guidelines/data-visualisation-guidelines/quick-intro) ** to the world of data viz. **Explore our core guidelines**. Learn the principles that make visualisations clear, accessible, and impactful—from chart selection and storytelling to accessibility and interactivity. **[Data visualisation principles ↗](https://docs.one.org/guidelines/data-visualisation-guidelines/guidelines/principles) ** **[How to choose the right chart type ↗](https://docs.one.org/guidelines/data-visualisation-guidelines/guidelines/chart-selection) ** **[How to design a chart ↗](https://docs.one.org/guidelines/data-visualisation-guidelines/guidelines/design-process) ** **[Designing for accessibility ↗](https://docs.one.org/guidelines/data-visualisation-guidelines/guidelines/accessibility) ** **[Using interactivity ↗](https://docs.one.org/guidelines/data-visualisation-guidelines/guidelines/interactivity) ** **Dive Into the ONE Campaign Style Guide** Ready to build? These pages outline our official styles for charts, colours, typography, and more—everything you need to ensure visual consistency across ONE’s work. **[Colour palette ↗](https://docs.one.org/guidelines/data-visualisation-guidelines/style-guide/colour-palette) ** **[Typography ↗](https://docs.one.org/guidelines/data-visualisation-guidelines/style-guide/typography) ** **[Chart layout ↗](https://docs.one.org/guidelines/data-visualisation-guidelines/style-guide/layout) ** **Ready to share or publish a chart?** Make sure to run through the **[publishing checklist ↗](https://docs.one.org/guidelines/data-visualisation-guidelines/publishing-checklist) ** to ensure your chart meets our standards. Back to top --- # Available Data importers - ONE Data Docs [Skip to content](https://docs.one.org/tools/bblocks/data-importers/importers/#available-data-importers) Available Data importers ======================== The bblocks-data-importers package provides structured access to a growing set of international development data sources. Each importer is designed to offer a consistent interface while adapting to the quirks of each source. Supported Data Sources ---------------------- | Source | Description | | --- | --- | | **IMF [World Economic Outlook](https://docs.one.org/tools/bblocks/data-importers/importers/weo)
** | Macroeconomic indicators and forecasts from the IMF | | **IMF [Debt Sustainability Analysis](https://docs.one.org/tools/bblocks/data-importers/importers/dsa)
** | Latest IMF LIC debt sustainability assessments in tidy tabular form | | **[World Bank](https://docs.one.org/tools/bblocks/data-importers/importers/world-bank)
** | Comprehensive development data across sectors | | **World Bank - [International Debt Statistics](https://docs.one.org/tools/bblocks/data-importers/importers/ids)
** | Comprehensive external debt data from the World Bank | | **WHO - [Global Health Expenditure Database](https://docs.one.org/tools/bblocks/data-importers/importers/ghed)
** | Comprehensive country health expenditure data | | **[UNAIDS](https://docs.one.org/tools/bblocks/data-importers/importers/unaids)
** | Extensive data on the HIV epidemic | | **UNDP - [Human Development Report](https://docs.one.org/tools/bblocks/data-importers/importers/hdi)
** | Insights on key dimensions of human development | | **[WFP - Inflation and food security](https://docs.one.org/tools/bblocks/data-importers/importers/wfp)
** | Key inflation and food security data from WFP VAM and the HungerMap platform\] | Upcoming Importers ------------------ | Source | Description | | --- | --- | | CEPII - BACI trade | Harmonized trade data | See Also -------- There are many other tools being developed to import data from different development sources. We have also developed standalone packages for some data sources which require more complex data processing. See: * [unesco-reader](https://github.com/lpicci96/unesco_reader) - A package to fetch UNESCO UIS data * [oda-reader](https://github.com/ONEcampaign/oda_reader) - A package to fetch official development assistance (ODA) data from the OECD Suggest a new data source ------------------------- Don’t See a Dataset You Need? We're continuously expanding support for new sources. If you work with a dataset that isn’t yet covered—or if you’d like to help build support for it—we’d love to hear from you! 👉 **Open an [issue on GitHub](https://github.com/ONEcampaign/bblocks_data_importers/issues) , and we can work together to develop the tooling you need.** Your contributions and feedback help make bblocks better for everyone in the development data community. Back to top --- # The knowledge graph - ONE Data Docs [Skip to content](https://docs.one.org/etl/knowledge-graph/#data-commons-knowledge-graph) Data Commons knowledge graph ============================ ONE Data is built on top of Data Commons. At the core of Data Commons is a knowledge graph that integrates data from a wide range of sources into a unified, structured schema. This knowledge graph enables us to seamlessly combine and query data across diverse topics, geographies, and time periods. It serves as the foundation for our analytical workflows, making complex data exploration and insight generation more efficient and scalable. What is a knowledge graph? -------------------------- A knowledge graph is a structured representation of real-world entities and the relationships between them, organized as a network of nodes and edges. The Data Commons knowledge graph represents the world in this way—as a **directed labeled graph**—where information is organized as a set of nodes (entities) connected by edges (relationships), each with defined labels known as a properties. This flexible structure allows Data Commons to capture and link data across a wide range of domains, from time series on demographics and employment, to information about hurricanes, or even proteins. This structure comes from applying a schema or vocabulary to the data, which allows Data Commons to have a consistent way of representing entities and their relationships. This schema is largely derived from [Schema.org](https://schema.org/) . To illustrate at a basic level how a knowledge graph works consider the following statements: * Zimbabwe is a country * Harare and Bulawayo are cities in Zimbabwe * The latitude of Harare is 17.8292 These statements can be represented as a set of nodes and edges in a knowledge graph as shown in the diagram below. Key concepts ------------ Below is a brief overview of the key concepts in the Data Commons knowledge graph. The full official documentation can be found [here](https://docs.datacommons.org/data_model.html) . ### Nodes A node is a uniquely identified entity, concept, or value in the Data Commons knowledge graph. It is represented as a subject and identified by a [DCID](https://docs.one.org/etl/knowledge-graph/#dcid) . Each node is associated with a set of relationships or properties, also known as edges. Each node includes the following components: * One or more [types](https://docs.one.org/etl/knowledge-graph/#type) : such as an [entity](https://docs.one.org/etl/knowledge-graph/#entity) , [event](https://docs.one.org/etl/knowledge-graph/#event) , [statistical variable](https://docs.one.org/etl/knowledge-graph/#statistical-variable) , or [statistical observation](https://docs.one.org/etl/knowledge-graph/#observation) . * A unique identifier: the [DCID](https://docs.one.org/etl/knowledge-graph/#dcid) . * Various [properties](https://docs.one.org/etl/knowledge-graph/#property) : relationships to other nodes or attributes. * [Provenance](https://docs.one.org/etl/knowledge-graph/#provenance) : information about the origin of the data. As in other knowledge graphs, connections between nodes are expressed as **triples**, consisting of a subject node, a predicate (or edge), and an object node. The Data Commons knowledge graph is composed of billions of such triples. ### Type Every node has at least one type, and types can be subclasses of other types. For [entities](https://docs.one.org/etl/knowledge-graph/#entity) and [events](https://docs.one.org/etl/knowledge-graph/#event) , the type is usually another entity (e.g., `Harare` is a type of `City`). At the root, all types are instances of the `Class` type. For [statistical variables](https://docs.one.org/etl/knowledge-graph/#statistical-variable) and [observations](https://docs.one.org/etl/knowledge-graph/#observation) , the type is always `StatisticalVariable` and `StatVarObservation`, respectively. ### DCID Each node has a DCID, a unique identifier used to reference the node within the knowledge graph. DCIDs can be viewed in the Knowledge Graph browser and are used for both [entities](https://docs.one.org/etl/knowledge-graph/#entity) and [statistical variables](https://docs.one.org/etl/knowledge-graph/#statistical-variable) . ### Property [Nodes](https://docs.one.org/etl/knowledge-graph/#nodes) have properties that describe their characteristics. Each property is represented as an edge to another node, labeled with the property name. If the object of the property is a primitive value (e.g., a string, number, or date), it is a "leaf" node, referred to as an attribute. Examples include latitude, year, unique identifiers, etc. Other properties may link the node to other nodes such as [entities](https://docs.one.org/etl/knowledge-graph/#entity) , [events](https://docs.one.org/etl/knowledge-graph/#event) , etc. For instance, the node `Addis Ababa` has a `typeOf` property (linked to `City`) and a `containedInPlace` property (linked to `Ethiopia`). **Note**: The DCID of a property generally matches its name. ### Provenance Every node and triple includes important properties that describe the origin of the data. * **[Provenance](https://datacommons.org/browser/Provenance) **: All triples have a provenance, typically the URL of the data provider’s website (e.g., `www.abs.gov.au`). Entity types also have a provenance, often represented by a DCID (e.g., `AustraliaStatistics`). For many property types defined by the Data Commons schema, the provenance is always `datacommons.org`. * **[Source](https://datacommons.org/browser/Source) **: A source is a property of a provenance or dataset. It is usually the name of the organization that provides the data or defines the schema. For example, for the provenance `www.abs.gov.au`, the source is the `Australian Bureau of Statistics`. * **[Dataset](https://datacommons.org/browser/Dataset) **: A dataset refers to a specific collection of data provided by a source. A single source may provide multiple datasets. For instance, the `Australian Bureau of Statistics` provides both the `Australia Statistics` dataset (not to be confused with the provenance DCID) and the `Australia Subnational Administrative Boundaries` dataset. A [statistical variable](https://docs.one.org/etl/knowledge-graph/#statistical-variable) may have multiple provenances, since many datasets define the same variables. ### Statistical variable In Data Commons, statistical measurements and time series data are modeled as [nodes](https://docs.one.org/etl/knowledge-graph/#nodes) . A statistical variable (statVar) represents any type of metric, statistic, or measurement that can be taken for an entity at a given time, such as a count, an average, a percentage, etc. The [type](https://docs.one.org/etl/knowledge-graph/#type) of a statistical variable is always the special subclass `StatisticalVariable`. For example, the metric `Median Age of Female Population` is a node whose type is a statistical variable. A statistical variable can be simple, such as `Total Population`, or more complex, such as `Hispanic Female Population`. Complex variables may be broken down into constituent parts, or not. ### Entity An entity represents a persistent real-world object or concept. Examples include [cities](https://datacommons.org/browser/City) , [countries](https://datacommons.org/browser/Country) , [elections](https://datacommons.org/browser/Election) , [high schools](https://datacommons.org/browser/HighSchool) , or even [Earth](https://datacommons.org/browser/Earth) itself. While Data Commons contains information about a wide range of types of entities, most information current is about places. There are about 2.9 million places catalogued. For each place, metadata includes type, geographic containment, shape, area, and more. See the [place types page](https://docs.datacommons.org/place_types.html) for a full list of available place types. ### Time Time is measured at any date resolution in Data Commons. Generally, the date of measurement. Specified in `ISO 8601 format`. Examples: * `2011` – the year 2011 * `2019-06` – June 2019 * `2019-06-05T17:21:00-06:00` – 5:17 PM on June 5, 2019, in CST ### Observation An observation is a single measured value for a [statistical variable](https://docs.one.org/etl/knowledge-graph/#statistical-variable) , for a specific [entity](https://docs.one.org/etl/knowledge-graph/#entity) and [time period](https://docs.one.org/etl/knowledge-graph/#time) . Its type is always `StatVarObservation`. Time series data for a statistical variable (e.g., population over several years) is represented as a sequence of observations. ### Facet Facets refer to metadata on properties of the data and its provenance. For example, multiple sources might provide data on the same variable, but use different measurement methods, cover data spanning different time spans, or use different underlying predictive models. Data Commons uses facets to refer to the source and its associated metadata of data. * **[`measurementMethod`](https://datacommons.org/browser/measurementMethod) **: The technique used to measure a [variable](https://docs.one.org/etl/knowledge-graph/#statistical-variable) . It describes how the measurement was made—whether by count, estimate, or another approach—and may name the organization responsible for the measurement. For example, [WorldHealthOrganizationEstimates](https://datacommons.org/browser/WorldHealthOrganizationEstimates) . Multiple measurement methods may be associated with a single node. * **[`observationPeriod`](https://datacommons.org/browser/observationPeriod) **: The time span over which an observation is made, specified using ISO 8601 duration formatting. * **[`measurementDenominator`](https://datacommons.org/browser/measurementDenominator) **: The denominator used in a fractional measurement. * **[`scalingFactor`](https://datacommons.org/browser/scalingFactor) **: Used with proportion-based variables. It indicates the multiplier applied to the `measurementDenominator` to produce the final measurement value, particularly when the numerator and denominator are on different scales. * **[`unit`](https://datacommons.org/browser/unit) **: The unit in which the variable is measured. Examples include [`IndianRupee`](https://datacommons.org/browser/IndianRupee) , [`kilowatt hours`](https://datacommons.org/browser/KilowattHour) , etc. ### StatVarGroup A `StatVarGroup` is a collection of conceptually related [statistical variables](https://docs.one.org/etl/knowledge-graph/#statistical-variable) . Example: * [Global Health Observatory](https://datacommons.org/browser/WHO/Root) is a `StatVarGroup`. * It contains a child `statVarGroup`: [Health Expenditure](https://datacommons.org/browser/WHO/g/HealthExpenditure) . * Which includes variables like [Current Health Expenditure (Che) Per Capita in USD](https://datacommons.org/browser/WHO/GHED_CHE_pc_US_SHA2011) . Groups can also be based on shared characteristics. For instance: * The `statVarGroup` [Person With Gender = Female](https://datacommons.org/browser/dc/g/Person_Gender-Female) includes variables like [Female Median Age](https://datacommons.org/browser/Median_Age_Person_Female) and [Female Median Income](https://datacommons.org/browser/Median_Income_Person_15OrMoreYears_Female_WithIncome) . Groups may also be hierarchical. For instance: * The `statVarGroup` [Person With Age, Gender = Female](https://datacommons.org/browser/dc/g/Person_Age_Gender-Female) is a subgroup of [Person With Gender = Female](https://datacommons.org/browser/dc/g/Person_Gender-Female) . ### StatVarPeerGroup A `StatVarPeerGroup` groups [statistical variables](https://docs.one.org/etl/knowledge-graph/#statistical-variable) nodes that are meaningful peers. These are used to organize variables around a broader concept. Example: * [Completion rate, by location and education level (%)](https://datacommons.org/browser/dc/svpg/SDGSETOTCPLR.7) is a `StatVarPeerGroup`. It includes members such as: * [Completion rate \[Rural, Primary education\]](https://datacommons.org/browser/sdg/SE_TOT_CPLR.URBANISATION--R__EDUCATION_LEV--ISCED11_1) * [Completion rate \[Rural, Lower secondary education\]](https://datacommons.org/browser/sdg/SE_TOT_CPLR.URBANISATION--R__EDUCATION_LEV--ISCED11_2) Members of a `StatVarPeerGroup` are enumerated using the [`member`](https://datacommons.org/browser/member) property. ### Topic A Topic represents a broad conceptual area like _economy_, _poverty_, or _crime_. Topics help organize variables under common themes. Like [`StatVarGroups`](https://docs.one.org/etl/knowledge-graph/#statvargroup) , topics can be nested. For example: * The UN defines [12 thematic areas](https://datacommons.org/browser/dc/topic/UN) , one of which is **[Health](https://datacommons.org/browser/dc/topic/UN_THEME_2) **. * Which contains subtopics like [Infectious Diseases](https://datacommons.org/browser/dc/topic/UN_SUB_THEME_21) . * Which includes variables such as [Number of reported cases of cholera](https://datacommons.org/browser/who/CHOLERA_0000000001) , listed as a [relevantVariable](https://datacommons.org/browser/relevantVariable) . A variable may belong to multiple topics, allowing for flexible categorization. Choosing between StatVarGroup, StatVarPeerGroup and Topic Each of these concepts serves a different purpose in organizing and exploring data and should be used based on the context: * `StatVarPeerGroup` is like a single row in a tidy DataFrame—variables differ by just one qualifier (e.g. age). Use it for comparing related indicators side-by-side. * `StatVarGroup` is like a folder hierarchy—grouping variables by structure or concept. Use it to explore related variables within a dataset or domain. * `Topic` is like a subject heading—categorizing variables by broad real-world themes (e.g. Health, Poverty). Use it for thematic discovery and navigation. ### Event An event is a real-world occurrence tied to a specific point in time, such as an election, weather disaster, or financial disbursement. In modelling ODA data for example, events might represent commitments or disbursements. Back to top --- # Sectoral Imputed Multilateral Aid - ONE Data Docs [Skip to content](https://docs.one.org/methodologies/data/oda/imputed-multilateral-sectors/#sectoral-imputed-multilateral-aid) Sectoral Imputed Multilateral Aid ================================= TL;DR ONE calculates sectoral imputed multilateral aid to provide a more comprehensive picture of bilateral donors' sectoral spending by including estimates of sectors targeted through their core contributions to the multilateral system. Our methodology is based on the OECD's discontinued approach but uses **disbursements** rather than commitments. What is the difference between bilateral and multilateral development assistance? --------------------------------------------------------------------------------- DAC data on donor countries' ODA measure the outflow of resources and divide it into two categories: **bilateral** and **multilateral**. Total ODA figures, for example, include donors' direct contributions to developing countries plus their contribution to the multilateral system. Multilateral ODA consists of the contributions provided to multilateral organisations that are not earmarked. By definition, therefore, these contributions are not disaggregated by country or region. The DAC reports how much donors have contributed to each multilateral agency. It also reports on how much has been spent by most multilateral agencies, by country and sector. As part of its standard set of statistics, the DAC estimates what proportion of each DAC donor country's contribution to multilateral agencies can be imputed for each developing country or region. This is what is commonly referred to as "imputed multilateral aid". **Sectoral imputed multilateral aid** data is similar to "imputed multilateral aid" but it is further disaggregated in order to estimate how spending by multilateral agencies targeting specific sectors can be imputed to each DAC donor country. How are ONE's sectoral imputed multilateral aid numbers calculated? ------------------------------------------------------------------- ONE's methodology for calculating sectoral imputed multilateral aid is based on the approach previously used by the OECD.[1](https://docs.one.org/methodologies/data/oda/imputed-multilateral-sectors/#fn:1) The primary objective of our imputations is to present a more comprehensive picture of bilateral donors' sectoral spending by including estimates of the sectors that are targeted through their core contributions to the multilateral system. Approximation As the OECD notes,[2](https://docs.one.org/methodologies/data/oda/imputed-multilateral-sectors/#fn:2) any methodology for imputing multilateral flows can only ever be seen as an approximation. Delays in reporting, incomplete data on multilateral outflows, turning grants into loans, and restrictions on pooling mean that multilateral outflows in a given year do not exactly match bilateral donors' core contributions to the multilateral system. ### Calculation steps Sectoral imputed multilateral aid for a given DAC donor is calculated following three broad steps: #### Step 1: Calculate sector spending shares Using data from the _Creditor Reporting System_, we calculate each multilateral agency's total flows to a given sector as a share of its total spending (core resources only). Whenever possible, sectoral spending is analysed at the 'CRS agency' level.[3](https://docs.one.org/methodologies/data/oda/imputed-multilateral-sectors/#fn:3) Both ODA and OOF are taken into account at this stage, following previous OECD practice.[4](https://docs.one.org/methodologies/data/oda/imputed-multilateral-sectors/#fn:4) Similarly, **three-year spending data** are used to produce the sector spending shares. That means that the shares for year _n_ are produced using spending data for years _n_, _n-1_ and _n-2_. #### Step 2: Get donor contributions to multilaterals Using data from the _Members Total Use of the Multilateral System_ database, we calculate the bilateral donor's core ODA contributions to each multilateral agency (for year _n_). Where possible, the inflow amounts for each multilateral organisation are calculated at the 'CRS agency' level. #### Step 3: Calculate imputed sectoral aid For each donor, sectoral imputed multilateral aid figures are calculated by multiplying the contributions made to each multilateral organisation (obtained through step 2) by the sector spending shares for each specific multilateral organisation (obtained through step 1). To calculate a donor's total sectoral imputed multilateral aid, the same calculations are repeated for every multilateral agency, for every sector. ### Calculation flow **Calculating a donor's imputed multilateral contributions to a sector through a specific agency:** ### Example To illustrate, here's how France's imputed multilateral aid to the education sector through IDA would be calculated for 2019: 1. The World Bank's International Development Association (IDA) allocated **8.5%** of its resources to the Education sector over 2017-2019. 2. France provided **US$444 million** to IDA as core resources in 2019. 3. France's imputed multilateral aid to the education sector through IDA for 2019 was **US$37.8 million** (8.5% of its US$444 million core contribution to IDA). Key difference from OECD approach --------------------------------- There is a key difference between ONE's approach and the (discontinued) OECD approach: Disbursements vs Commitments ONE's imputations focus on **(gross) disbursements** rather than commitments. This applies throughout: for multilateral spending shares, for core contributions inflows data, and for the resulting sectoral multilateral imputed aid numbers. Alternative approaches ---------------------- A few donors — including the United Kingdom and, for some sectors, France — have developed alternative means of imputing sectoral multilateral aid to their overall aid spending. Generally, such approaches are incomplete (do not cover all DAC donors) and are not necessarily comparable across donor countries. * * * ONE's imputed multilateral sectors aid numbers can be explored using our [ODA Dashboard](https://data-apps.one.org/oda-dashboard) . * * * 1. In the past, the OECD has released studies of imputed multilateral support to certain sectors like health or education, however they have not kept up with this practice. Their methodology is roughly explained here: [OECD's methodology for calculating sectoral imputed multilateral aid](https://www.oecd.org/dac/stats/oecdsmethodologyforcalculatingsectoralimputedmultilateralaid.htm)  [↩](https://docs.one.org/methodologies/data/oda/imputed-multilateral-sectors/#fnref:1 "Jump back to footnote 1 in the text") 2. [OECD methodology for calculating imputed multilateral ODA](https://www.oecd.org/dac/stats/oecdmethodologyforcalculatingimputedmultilateraloda.htm)  [↩](https://docs.one.org/methodologies/data/oda/imputed-multilateral-sectors/#fnref:2 "Jump back to footnote 2 in the text") 3. Unfortunately, the _Members Total Use of the Multilateral System_ database identifies each multilateral organisation (and its respective agencies, where applicable) using different identifiers from the _Creditor Reporting System_. This introduces complexity and a degree of subjectivity to the analysis, since matching the inflows data (core contributions) and outflows data (from the CRS) is not always a trivial or obvious task. The ability for external users to follow the money from the bilateral donor to the end recipient would be greatly improved through the use of a more coherent or standardised set of unique identifiers for organisations, regardless of whether they are the recipient (of a core contribution) or the donor. [↩](https://docs.one.org/methodologies/data/oda/imputed-multilateral-sectors/#fnref:3 "Jump back to footnote 3 in the text") 4. DAC donors' unearmarked contributions to the multilateral system finance agencies' core budgets. This methodology therefore focuses on the sectors targeted by a given agency's total spending. However, the amount imputed back to the bilateral donor is proportional only to the ODA contribution it makes to a particular multilateral agency. [↩](https://docs.one.org/methodologies/data/oda/imputed-multilateral-sectors/#fnref:4 "Jump back to footnote 4 in the text") Back to top ---