SPB Git forge

spb/countryatlas

Public
20commits 1branches 0releases
268.3 MBsize
maindefault branch
12 days agolast push
TypeScript 57% Python 38.6% JavaScript 3.6% CSS 0.6%

CountryAtlas: architecture contract, registries (218 countries, 259 indicators, 32 groups, 19 topics), shared models, connector base, DuckDB schema, mld manifest

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Simon-Pierre Boucher committed 13 days ago (Sep 11, 2026)

22 changed files +12,138 −0

added .gitignore +20 −0
@@ -0,0 +1,20 @@
1 +node_modules/
2 +.next/
3 +.env
4 +.env.*
5 +!.env.example
6 +*.tsbuildinfo
7 +.venv/
8 +__pycache__/
9 +*.pyc
10 +.pytest_cache/
11 +.ruff_cache/
12 +data/
13 +*.duckdb
14 +*.duckdb.wal
15 +logs/
16 +tmp/
17 +.DS_Store
18 +.claude/
19 +qa/screens/
20 +apps/web/next-env.d.ts
added README.md +54 −0
@@ -0,0 +1,54 @@
1 +# CountryAtlas
2 +
3 +**www.countryatlas.co — Understand the world, one country at a time.**
4 +
5 +The definitive, sourced, historical data profile for every country: economy, government, population, labour, income,
6 +housing, health, education, trade, energy, climate, environment, infrastructure, digital, innovation, agriculture,
7 +tourism, security and quality of life — with rankings, comparisons, similarity, change detection and full provenance.
8 +
9 +## Layout
10 +
11 +```
12 +registry/ canonical registries (YAML, versioned): countries, groups, indicators, topics, similarity, insights
13 +src/countryatlas/ Python platform
14 + registry/ loaders + country-code lookups
15 + connectors/ one module per provider (worldbank, owid, imf, oecd, eurostat, who, fred, bis, ilo)
16 + pipeline/ fetch → normalize → validate → build (DuckDB snapshot) → derived tables; scheduler; exports
17 + storage/schema.sql DuckDB schema (single source of truth for pipeline and API)
18 + api/ FastAPI public API (/api/v1, OpenAPI at /api/v1/docs)
19 + cli.py `ca` command line
20 +apps/web/ Next.js 16 app (App Router, Tailwind v4, own SVG chart kit, d3-geo maps)
21 +deploy/ mld manifest for the MacLustr cluster
22 +docs/ ARCHITECTURE.md (contract), PIPELINE.md, API.md, sources-research.md
23 +tests/ pytest
24 +```
25 +
26 +## Run locally
27 +
28 +```bash
29 +uv venv --python 3.12 .venv && uv pip install -e ".[dev]"
30 +.venv/bin/ca registry validate
31 +CA_DATA_DIR=~/countryatlas-data .venv/bin/ca refresh # fetch all connectors, build ~/countryatlas-data/atlas.duckdb
32 +CA_DATA_DIR=~/countryatlas-data .venv/bin/ca status
33 +CA_DATA_DIR=~/countryatlas-data .venv/bin/python -m uvicorn countryatlas.api.main:app --port 8291
34 +pnpm install && cd apps/web && API_URL=http://127.0.0.1:8291 pnpm dev # http://localhost:8290
35 +```
36 +
37 +## Deploy (MacLustr)
38 +
39 +Manifest `deploy/countryatlas.mld.json` → `M1M32:~/dispatch/apps/countryatlas.json`, then from the laptop:
40 +
41 +```bash
42 +~/Desktop/cluster-skill/mld stage ~/Desktop/Projets/apps-web/countryatlas countryatlas
43 +~/Desktop/cluster-skill/mld deploy countryatlas --node M2M32
44 +```
45 +
46 +Public route `https://www.countryatlas.co → M2M32:8290` is created on the BHS64 gateway by `mld deploy`
47 +(DNS `A www → 51.161.112.61`). Processes (PM2): `countryatlas-web` (:8290), `countryatlas-api` (127.0.0.1:8291),
48 +`countryatlas-scheduler` (daily refresh 03:15 America/Toronto).
49 +
50 +## Data sources & licences
51 +
52 +World Bank WDI (CC BY 4.0), IMF WEO (IMF terms), OECD (CC BY 4.0), Eurostat (CC BY 4.0), WHO GHO (CC BY-NC-SA 3.0 IGO),
53 +FRED (St. Louis Fed terms; series-level licences), Our World in Data (CC BY 4.0), BIS (BIS terms). Every value on the
54 +site and in the API carries its source, dataset, series code, retrieval and source-update dates.
added deploy/.admin-token +1 −0
@@ -0,0 +1 @@
1 +c9ae6c67cdeb415c9df7db09d255c86d3537fb7670cf3c5a
added deploy/countryatlas.mld.json +105 −0
@@ -0,0 +1,105 @@
1 +{
2 + "app": "countryatlas",
3 + "label": "CountryAtlas — Understand the world, one country at a time",
4 + "domain": "www.countryatlas.co",
5 + "port": 8290,
6 + "health_path": "/api/v1/health",
7 + "dir": "~/apps/countryatlas",
8 + "extra_paths": [],
9 + "sync_excludes": [
10 + ".venv/", "__pycache__/", ".pytest_cache/", ".ruff_cache/", "*.egg-info/", ".git/", ".env", ".env.*", "!.env.example",
11 + "node_modules/", "apps/web/.next/", "apps/web/next-env.d.ts", "*.tsbuildinfo", "apps/web/qa/screens/",
12 + "data/", "*.duckdb", "*.duckdb.wal", "logs/", "tmp/", ".DS_Store", ".claude/", "deploy/.admin-token", "docs/sources-research.md"
13 + ],
14 + "requires": {
15 + "runtimes": ["pm2", "node", "pnpm", "uv", "uv-python@3.12"],
16 + "ram_gb": 6,
17 + "ports": [8290, 8291]
18 + },
19 + "ram_mb_observed": 2500,
20 + "size_mb": 60,
21 + "placement": {
22 + "pin": "M2M32",
23 + "prefer": null,
24 + "avoid": ["M3U96b", "M1M32"],
25 + "reason": "Mac Studio M2 Max 12 c / 32 Go dédié (aucune autre app), uv + pnpm + node présents, raccordé au tunnel wg1 ; pipeline quotidien + DuckDB en lecture"
26 + },
27 + "processes": [
28 + {
29 + "name": "countryatlas-api",
30 + "manager": "pm2",
31 + "script": "{{HOME}}/apps/countryatlas/.venv/bin/python",
32 + "args": ["-m", "uvicorn", "countryatlas.api.main:app", "--host", "127.0.0.1", "--port", "8291", "--no-access-log", "--proxy-headers", "--timeout-keep-alive", "75"],
33 + "interpreter": null,
34 + "cwd": "{{HOME}}/apps/countryatlas",
35 + "env": {
36 + "CA_DATA_DIR": "{{HOME}}/countryatlas-data",
37 + "CA_API_HOST": "127.0.0.1",
38 + "CA_API_PORT": "8291",
39 + "CA_ADMIN_TOKEN": "c9ae6c67cdeb415c9df7db09d255c86d3537fb7670cf3c5a",
40 + "CA_SITE_URL": "https://www.countryatlas.co",
41 + "FRED_API_KEY": "5d6f76382d7d188e9166bb3b96c8f934",
42 + "PYTHONUNBUFFERED": "1"
43 + },
44 + "cron_restart": null,
45 + "autorestart": true,
46 + "max_memory_restart": "3G"
47 + },
48 + {
49 + "name": "countryatlas-scheduler",
50 + "manager": "pm2",
51 + "script": "{{HOME}}/apps/countryatlas/.venv/bin/ca",
52 + "args": ["schedule"],
53 + "interpreter": null,
54 + "cwd": "{{HOME}}/apps/countryatlas",
55 + "env": {
56 + "CA_DATA_DIR": "{{HOME}}/countryatlas-data",
57 + "CA_ADMIN_TOKEN": "c9ae6c67cdeb415c9df7db09d255c86d3537fb7670cf3c5a",
58 + "FRED_API_KEY": "5d6f76382d7d188e9166bb3b96c8f934",
59 + "CA_TZ": "America/Toronto",
60 + "CA_REFRESH_HOUR": "3",
61 + "CA_REFRESH_MINUTE": "15",
62 + "PYTHONUNBUFFERED": "1"
63 + },
64 + "cron_restart": null,
65 + "autorestart": true,
66 + "max_memory_restart": "6G"
67 + },
68 + {
69 + "name": "countryatlas-web",
70 + "manager": "pm2",
71 + "script": "/opt/homebrew/bin/node",
72 + "args": ["node_modules/next/dist/bin/next", "start", "-p", "8290", "-H", "0.0.0.0"],
73 + "interpreter": null,
74 + "cwd": "{{HOME}}/apps/countryatlas/apps/web",
75 + "env": {
76 + "NODE_ENV": "production",
77 + "API_URL": "http://127.0.0.1:8291",
78 + "NEXT_PUBLIC_SITE_URL": "https://www.countryatlas.co",
79 + "CA_ADMIN_TOKEN": "c9ae6c67cdeb415c9df7db09d255c86d3537fb7670cf3c5a",
80 + "NEXT_TELEMETRY_DISABLED": "1"
81 + },
82 + "cron_restart": null,
83 + "autorestart": true,
84 + "max_memory_restart": "2G"
85 + }
86 + ],
87 + "ngrok": null,
88 + "launchd": [],
89 + "env_overrides": {},
90 + "hooks": {
91 + "post_sync": [
92 + "export PATH=\"$HOME/.local/bin:/opt/homebrew/bin:$PATH\"; (test -x .venv/bin/python || uv venv --python 3.12 .venv) && uv pip install -q --python .venv/bin/python -e . && echo ' python deps ok'",
93 + "export PATH=\"/opt/homebrew/bin:$PATH\"; pnpm install --frozen-lockfile --silent && echo ' web deps ok'",
94 + "export PATH=\"/opt/homebrew/bin:$PATH\"; cd apps/web && API_URL=http://127.0.0.1:8291 NEXT_PUBLIC_SITE_URL=https://www.countryatlas.co NEXT_TELEMETRY_DISABLED=1 pnpm build 2>&1 | tail -3 && echo ' web build ok'",
95 + "mkdir -p $HOME/countryatlas-data/{raw,staging,build,snapshots,exports,logs} && echo ' data dirs ok'"
96 + ],
97 + "post_start": []
98 + },
99 + "notes": "v0.1.0 (2026-09-11) : Next 16 :8290 (rewrites /api/v1/* → FastAPI 127.0.0.1:8291), pipeline Python (ca refresh quotidien 03:15 via countryatlas-scheduler), DuckDB snapshot ~/countryatlas-data/atlas.duckdb (swap atomique). Sources : World Bank, IMF WEO, OECD, Eurostat, WHO GHO, FRED, OWID, BIS. Secrets (CA_ADMIN_TOKEN, FRED_API_KEY) uniquement ici.",
100 + "tunnel": {
101 + "domain": "www.countryatlas.co",
102 + "gateway": "BHS64",
103 + "note": "DNS A www → 51.161.112.61 posé par l'utilisateur le 2026-09-11 ; apex countryatlas.co sans A record (redirect Caddy à poser quand l'A @ existera)"
104 + }
105 +}
added docs/ARCHITECTURE.md +257 −0
@@ -0,0 +1,257 @@
1 +# CountryAtlas — Architecture (contract for all contributors)
2 +
3 +> **www.countryatlas.co — Understand the world, one country at a time.**
4 +> The country is the primary unit of navigation. Every visible number is traceable to its source.
5 +
6 +This document is the binding contract between the data platform (Python), the API (FastAPI) and the
7 +web app (Next.js). Change it first, then the code.
8 +
9 +## 1. Deployment topology (MacLustr cluster)
10 +
11 +```
12 +Internet ─ DNS A www.countryatlas.co → 51.161.112.61 (BHS64, OVH Beauharnois)
13 + └─ Caddy (TLS auto) ─ WireGuard wg1 ─→ M2M32 (Mac Studio M2, 12c/32GB) 10.67.0.x
14 + ├─ countryatlas-web Next.js 16 :8290 (public upstream)
15 + ├─ countryatlas-api FastAPI :8291 (loopback only; reached via Next rewrites /api/v1/*)
16 + └─ countryatlas-scheduler Python loop (daily refresh, writes snapshots)
17 + ~/countryatlas-data/ (raw/, staging/, build/, atlas.duckdb, exports/, logs/)
18 +```
19 +
20 +* Orchestrated by `mld` from the gateway M1M32 (manifest `deploy/countryatlas.mld.json`, PM2 processes).
21 +* No database port is ever public. The API listens on 127.0.0.1:8291 only.
22 +* The web app listens on 0.0.0.0:8290 (reached through the WireGuard tunnel only; the Mac has no public IP).
23 +* Apex `countryatlas.co` → 301 to `www` (Caddy redirect on BHS64; requires an A record for the apex).
24 +
25 +## 2. Storage: DuckDB snapshots (no Postgres/ClickHouse/Redis for the MVP)
26 +
27 +Volumes: ~220 countries × ~250 indicators × ≤65 years ≈ 3–4 M observations. DuckDB handles this in
28 +milliseconds, exports Parquet/CSV natively and needs zero operations. The design keeps the door open to
29 +Postgres/ClickHouse later (same logical schema).
30 +
31 +**Snapshot-swap rule (critical):**
32 +
33 +1. The pipeline builds a brand-new file `~/countryatlas-data/build/atlas-<run_id>.duckdb`.
34 +2. Derived tables are computed inside it (latest, rankings, changes, events, similarity, insights, coverage).
35 +3. Integrity checks pass → `os.replace()` it onto `~/countryatlas-data/atlas.duckdb` (atomic rename) and copy
36 + to `snapshots/atlas-<run_id>.duckdb` (keep last 7).
37 +4. The API opens the DB **read-only**; on every request it compares the file's `st_ino`/`st_mtime` with the open
38 + one and reopens when they differ. Readers never block the writer and vice-versa.
39 +
40 +Raw source payloads are kept forever (gzip JSON/CSV) under `raw/<connector>/<dataset>/<YYYY-MM-DD>/…`.
41 +Nothing is ever fetched without also being stored raw.
42 +
43 +### 2.1 Logical schema (DuckDB)
44 +
45 +```sql
46 +countries(id TEXT PK /* = iso3 */, iso2, iso3, iso_numeric, slug, short_name, official_name, capital,
47 + continent, region_wb /* WB region id */, region_wb_name, subregion, income_group /* HIC/UMC/LMC/LIC */,
48 + currency_code, currency_name, area_km2 DOUBLE, latitude, longitude, flag_emoji,
49 + un_member BOOLEAN, status TEXT /* country|territory|historical */, independent BOOLEAN,
50 + landlocked BOOLEAN, borders TEXT[] , languages TEXT[], demonym, kind TEXT /* country|aggregate */)
51 +groups(id TEXT PK /* world|oecd|g7|g20|eu|brics|nac|ecs|hic|... */, slug, name, kind /* world|region|income|org|custom */,
52 + description, wb_code /* WLD, OED, EUU, HIC ... when the source has an aggregate */)
53 +group_members(group_id, country_id)
54 +sources(id TEXT PK /* worldbank|imf|oecd|eurostat|who|fred|owid|bis|ilo */, name, organization, url, licence,
55 + attribution, api_base, last_success_at, notes)
56 +indicators(id TEXT PK /* = slug */, slug, name, short_name, description, topic, subtopic, unit, unit_short,
57 + frequency /* A|Q|M */, precision INT, aggregation /* sum|mean|weighted_mean|none */,
58 + higher_is_better BOOLEAN NULL, ranking_eligible BOOLEAN, per_capita_of TEXT NULL,
59 + format TEXT /* number|percent|currency|index|years|per_1000|... */, scale TEXT /* raw|thousands|millions|billions */,
60 + source_priority TEXT[] , methodology TEXT, tags TEXT[], featured BOOLEAN)
61 +indicator_sources(indicator_id, source_id, dataset, series_code, params JSON, priority INT, transform TEXT NULL, notes)
62 +observations(country_id, indicator_id, period DATE /* first day of period */, year INT, frequency,
63 + value DOUBLE, unit, source_id, source_dataset, source_series_code,
64 + is_estimate BOOL, is_forecast BOOL, revision INT, retrieved_at TIMESTAMP, source_updated_at TIMESTAMP,
65 + status TEXT /* verified|imported|warning|stale|quarantined */, metadata JSON)
66 + -- PK (country_id, indicator_id, period, frequency). Exactly ONE source per (indicator,country,period) is kept in
67 + -- observations: the highest-priority source that has a value. Alternatives are kept in observations_alt.
68 +observations_alt(same columns) -- lower-priority sources, for provenance/inspection and fallbacks
69 +observation_revisions(country_id, indicator_id, period, frequency, old_value, new_value, old_source_id, new_source_id,
70 + changed_at TIMESTAMP, run_id) -- never silently overwrite: carry forward from the previous snapshot
71 +latest(country_id, indicator_id, period, year, value, prev_period, prev_value, change_abs, change_pct,
72 + rank_world INT, n_world INT, rank_region INT, n_region INT, rank_income INT, n_income INT,
73 + source_id, is_forecast, is_estimate, status) -- latest NON-forecast observation per country×indicator
74 +rankings(indicator_id, year, country_id, value, rank INT, n INT, pct_rank DOUBLE) -- countries only (kind='country'), non-forecast
75 +changes(id, country_id, indicator_id, kind /* yoy_drop|yoy_jump|record_high|record_low|n_year_high|n_year_low|sign_flip|accelerating|decelerating */,
76 + period, year, value, ref_value, delta, delta_pct, window_years INT, severity DOUBLE /* 0-1 */, headline TEXT, detail JSON, detected_at)
77 + -- "What changed" = recent (latest period) ; events = whole history
78 +events(id, country_id, indicator_id, kind, period, year, value, ref_value, delta, delta_pct, severity, headline, detail JSON)
79 +similarity(country_id, mode /* overall|economic|demographic|energy|social */, peer_id, score DOUBLE /* 0-100 */, rank INT,
80 + contributions JSON /* {indicator: {z_a, z_b, weight, contribution}} */)
81 +insights(id, country_id, template_id, text, values JSON, indicators TEXT[], computed_at)
82 +country_dna(country_id, dims JSON /* {income:0-100, demographics:..., urbanization, trade, energy, emissions, innovation, education, public_spending} */, year_ref)
83 +coverage(country_id, n_indicators INT, n_observations INT, latest_year INT, coverage_pct DOUBLE, updated_at)
84 +import_runs(run_id, connector, dataset, started_at, finished_at, status /* ok|failed|partial */, rows_raw, rows_norm, rows_valid,
85 + warnings INT, errors INT, message, raw_path)
86 +validation_issues(run_id, connector, indicator_id, country_id, period, severity /* info|warning|error */, code, message)
87 +meta(key, value) -- build_run_id, built_at, schema_version, indicator_count, observation_count, ...
88 +```
89 +
90 +## 3. Registries (YAML, versioned in git, loaded by both pipeline and API)
91 +
92 +* `registry/countries.yaml` — canonical registry generated by `scripts/build_country_registry.py` from the World Bank
93 + country list (region, income group, capital, lat/long) merged with the mledoze/countries dataset (ISO numeric, official
94 + name, subregion, currency, area, UN membership, flag, borders, languages). Hand-edited fields survive regeneration
95 + (`overrides:` block). Aggregates (WLD, OED, EUU, HIC …) are **not** countries; they live in `groups.yaml`.
96 +* `registry/groups.yaml` — World, WB regions (7), income groups (4), organisations (OECD, EU, G7, G20, BRICS, ASEAN,
97 + African Union, Eurozone, Nordic, NAFTA/USMCA, Commonwealth…) with explicit member lists (ISO3).
98 +* `registry/indicators.yaml` — the canonical indicator registry (see §4). Every indicator maps to one or more
99 + external series (connector + code + params + priority).
100 +* `registry/topics.yaml` — topics (economy, government, population, …) with order, blurb, icon, and the ordered list of
101 + indicator slugs to show on the country topic page, plus `headline` indicators for the country overview.
102 +
103 +**Rule:** the code never identifies a country by its name. Always `iso3` (id) or `slug`.
104 +URLs use slugs (`/countries/canada`); the API accepts both iso3 and slug.
105 +
106 +## 4. Indicator conventions
107 +
108 +* `slug` is kebab-case, stable, and is the URL: `/indicators/gdp-per-capita`.
109 +* `unit` is human (`current US$`, `% of GDP`, `years`, `people`, `% of population`), `unit_short` for axes (`US$`, `%`, `yrs`).
110 +* `format` drives display: `currency` (scale automatically: 1.2T / 45.3B), `percent` (1 decimal), `number` (thousand separators,
111 + scale for large), `years`, `index`, `per_1000`, `per_100k`, `ratio`, `celsius`, `tonnes`.
112 +* `higher_is_better` is only set when it is unambiguous (life expectancy = true, infant mortality = false). Otherwise null
113 + (inflation, population, exchange rate) — rankings then sort descending by value and say "highest".
114 +* `ranking_eligible` false for series that make no sense to rank (exchange rate, policy rate in local terms, indexes).
115 +* Period → `period` is the first day: annual `YYYY-01-01`, quarterly `YYYY-{01,04,07,10}-01`, monthly `YYYY-MM-01`.
116 +* Forecast observations (IMF WEO projections) are stored with `is_forecast=true` and never enter `latest`, `rankings`,
117 + `changes` or `events`; they are shown dashed on charts.
118 +* A "topic" belongs to the fixed set: `economy, government, population, labor, income, housing, health, education, trade,
119 + energy, climate, environment, infrastructure, digital, innovation, agriculture, tourism, security, quality-of-life`.
120 +
121 +## 5. Pipeline (`ca` CLI, package `countryatlas`)
122 +
123 +```
124 +ca registry validate # YAML sanity (unique slugs, known connectors, topics)
125 +ca fetch [--connector X] [--indicator Y] # raw payloads → raw/… (retries, backoff, rate limit, ETag/If-Modified-Since when available)
126 +ca normalize [--connector X] # raw → staging/<connector>/<dataset>.parquet in the NormalizedObservation schema
127 +ca validate # rules (§6) → statuses + validation_issues
128 +ca build # merge staging by source priority → new DuckDB → derived tables → integrity → atomic swap
129 +ca refresh [--connector X] # fetch + normalize + validate + build (idempotent; safe to run any time)
130 +ca schedule # long-running loop: refresh daily at 03:15 America/Toronto; also refresh on SIGUSR1
131 +ca status # last runs, row counts, freshness, stale sources
132 +ca export indicator <slug> | country <iso3> # CSV/JSON/Parquet into exports/ (also served by the API on demand)
133 +```
134 +
135 +Connector interface (`countryatlas/connectors/base.py`):
136 +
137 +```python
138 +class Connector(Protocol):
139 + id: str # "worldbank"
140 + def discover(self) -> list[DatasetDescriptor]
141 + def fetch(self, spec: IndicatorSourceSpec, ctx: FetchContext) -> RawPayload # one HTTP "unit" per spec; stored raw
142 + def normalize(self, raw: RawPayload, spec: IndicatorSourceSpec) -> list[NormalizedObservation]
143 + def validate(self, rows: list[NormalizedObservation]) -> ValidationReport # source-specific checks
144 +```
145 +
146 +Error isolation: each (connector, dataset) runs in its own try/except and its own `import_runs` row. A failed fetch
147 +**never** removes previously good data: `build` merges the newest successful staging file per dataset. A connector
148 +that fails validation with `error` severity is quarantined (its staging file is ignored and the previous one kept).
149 +
150 +## 6. Validation rules (deterministic)
151 +
152 +* duplicates (same key twice in one dataset) → error (dataset quarantined)
153 +* impossible values: negative for `nonnegative` indicators, percentages outside [-5, 105] for `percent_share`
154 + indicators, life expectancy outside [20, 100], etc. (bounds in registry `bounds: [min, max]`) → row `quarantined`
155 +* unit change vs registry unit → dataset quarantined
156 +* extreme jump: |Δ| > `jump_threshold` × robust std of the country series (MAD) → row `warning` (kept, flagged)
157 +* partial download: rows < 30 % of the previous run for the same dataset → dataset quarantined (previous kept)
158 +* stale: `source_updated_at` / latest period older than `stale_after_days` (annual: 800 d, quarterly: 200 d, monthly: 75 d) → `stale`
159 +* mapping errors: unknown country code → logged, row dropped (aggregates are dropped unless mapped to a group)
160 +
161 +Unusual values are never deleted, only flagged.
162 +
163 +## 7. Derived computations
164 +
165 +* **latest**: last non-forecast observation per country×indicator; previous = previous period of the same frequency; ranks
166 + among `kind='country'` for the same *year* (if a country's latest year is older than the global max year by > 2,
167 + its rank is still computed within that year but flagged `rank_year != max_year` in the API response).
168 +* **rankings**: for every `ranking_eligible` indicator and every year with ≥ 20 countries.
169 +* **changes / events**: per country×indicator series (annual or higher), deterministic detectors:
170 + YoY change beyond ±(2 × MAD of yearly diffs) and beyond an indicator-specific absolute floor (e.g. inflation ±2 pts,
171 + unemployment ±1 pt, GDP growth ±3 pts, population growth ±0.5 pt), record high/low over the whole series, N-year high/low
172 + (N ∈ {10, 20, 30}), sign flip (growth → contraction), acceleration (3 consecutive increases of the diff).
173 + `severity` = min(1, |z| / 4) blended with the floor ratio. Headlines are template strings with computed numbers —
174 + **no LLM**.
175 +* **similarity**: features per mode (see `registry/similarity.yaml`): log-transform heavy-tailed features (GDP pc, population,
176 + area), z-score across countries (latest values, only countries with ≥ 70 % of the mode's features), weighted Euclidean
177 + distance → score = 100 × exp(−d / d₀); store the top 12 peers with per-feature contributions (explainable).
178 +* **insights**: templates in `registry/insights.yaml` (e.g. "{country}'s population grew {pct}% since {y0}."),
179 + each fully computed from data; numbers are never generated by a model.
180 +* **country_dna**: 9 dimensions in [0, 100] = percentile rank of the country for a representative indicator (or the mean of
181 + 2-3 indicators) among all countries: income (GDP pc PPP), demographics (median age ↔ fertility), urbanization,
182 + trade (trade % GDP), energy (energy use pc), emissions (CO₂ pc), innovation (R&D % GDP, patents pc), education
183 + (tertiary enrolment, expected years), public spending (gov. expenditure % GDP). Descriptive, not a score.
184 +
185 +## 8. API (FastAPI, `/api/v1`, OpenAPI at `/api/v1/openapi.json`, docs at `/api/v1/docs`)
186 +
187 +Every response carries `meta: {built_at, run_id, generated_at}`; every value object carries provenance:
188 +
189 +```json
190 +{"value": 53372.1, "period": "2024-01-01", "year": 2024, "unit": "current US$", "is_estimate": false, "is_forecast": false,
191 + "status": "verified",
192 + "provenance": {"source": "worldbank", "source_name": "World Bank", "dataset": "WDI", "series_code": "NY.GDP.PCAP.CD",
193 + "retrieved_at": "2026-09-11T03:20:11Z", "source_updated_at": "2026-07-01", "url": "https://data.worldbank.org/indicator/NY.GDP.PCAP.CD?locations=CA",
194 + "transform": null, "licence": "CC BY 4.0"}}
195 +```
196 +
197 +Endpoints (all GET, JSON, cached in-process with the snapshot run_id as cache key):
198 +
199 +```
200 +/health {status, run_id, built_at, observations}
201 +/countries?region=&income=&q= list (id, slug, name, flag, region, income, population_latest, gdp_latest, coverage_pct)
202 +/countries/{id} header + headline metrics (topics.yaml `headline`) with latest+rank+change
203 +/countries/{id}/topics/{topic} all indicators of the topic: latest + sparkline (last 30 pts) + rank
204 +/countries/{id}/series/{indicator}?from=&to=&freq= full history (values[], with per-observation provenance summary)
205 +/countries/{id}/changes recent changes (sorted by severity)
206 +/countries/{id}/events?limit= timeline
207 +/countries/{id}/similar?mode=overall peers with contributions
208 +/countries/{id}/insights
209 +/countries/{id}/dna
210 +/countries/{id}/download.{csv|json} full country dataset
211 +/indicators?topic=&q= list
212 +/indicators/{slug} definition + sources + coverage + world/regions latest + freshness
213 +/indicators/{slug}/map?year= {year, values: {ISO3: value}, legend: {min,max,breaks[]}, n}
214 +/indicators/{slug}/trend?group=world median/aggregate trend (WB aggregate when available)
215 +/indicators/{slug}/download.{csv|json}
216 +/series?country=CAN,FRA&indicator=gdp-per-capita&from=1990&to=2026&freq=A
217 +/rankings list of rankable indicators (featured first)
218 +/rankings/{indicator}?year=&group=&sort=asc|desc&limit=&offset= rows: rank, country, value, change_1y, change_10y, sparkline
219 +/rankings/{indicator}/history?countries=CAN,USA rank by year
220 +/compare?countries=CAN,USA,FRA&indicators=…&from=&to=&mode=absolute|per-capita|index100|pct series bundle
221 +/compare/snapshot?countries=…&topic= table of latest values for the topic's indicators
222 +/regions | /regions/{slug} group page data (members, aggregate metrics, member rankings)
223 +/search?q=&limit= [{type: country|indicator|topic|region|source, id, slug, name, hint, score}]
224 +/home global snapshot + curated lists (largest economies, fastest growth, …) + recent changes + recently updated
225 +/changes?limit=&kind= global recent changes feed
226 +/sources | /sources/{id} source metadata + datasets + import runs + freshness
227 +/methodology static from registry (units, priorities, validation rules) — for the page
228 +/admin/* (header X-Admin-Token) connectors health, import_runs, validation_issues, coverage matrix, trigger refresh (SIGUSR1)
229 +```
230 +
231 +Errors: RFC 7807 problem+json. Unknown country/indicator → 404. Rate limit 120 req/min/IP (in-process token bucket).
232 +
233 +## 9. Web app (Next.js 16, React 19, TypeScript, Tailwind v4, App Router)
234 +
235 +* Server components fetch the API at `process.env.API_URL` (`http://127.0.0.1:8291`). Browser-side fetches go to the
236 + same origin `/api/v1/*` (Next `rewrites`).
237 +* Routes: `/`, `/countries`, `/countries/[slug]`, `/countries/[slug]/[topic]`, `/compare`, `/compare/[...slugs]`, `/rankings`,
238 + `/rankings/[indicator]`, `/indicators`, `/indicators/[slug]`, `/regions`, `/regions/[slug]`, `/explore`, `/data`, `/sources`,
239 + `/sources/[id]`, `/methodology`, `/api` (docs landing), `/admin` (token), `/sitemap.xml`, `/robots.txt`, `/opengraph-image`.
240 +* Charts: our own SVG chart kit in `apps/web/src/components/charts/` (server-renderable, touch, accessible summaries):
241 + LineChart, AreaChart, StackedArea, RankedBars, Scatter/Bubble, Sparkline, SlopeChart, IndexedLine, SmallMultiples,
242 + PopulationPyramid, Choropleth (d3-geo + world-atlas 110m, SVG), DNA radial.
243 +* i18n: all UI strings through `apps/web/src/i18n/en.ts` (`t('key')`), no hard-coded English in components.
244 +* Design tokens in `apps/web/src/app/globals.css` (@theme). Editorial, calm, data-dense. No card soup.
245 +* Mobile: bottom navigation (Home · Countries · Compare · Rankings · Search), bottom sheets for filters, sticky compare
246 + controls, no horizontal overflow at 320–430 px.
247 +* Provenance drawer: any value component (`<Metric>`, chart point) opens `<ProvenanceSheet>` with the provenance object.
248 +
249 +## 10. Ports & env
250 +
251 +| Process | Port | Env |
252 +|---|---|---|
253 +| countryatlas-web | 8290 | `API_URL=http://127.0.0.1:8291`, `NEXT_PUBLIC_SITE_URL=https://www.countryatlas.co` |
254 +| countryatlas-api | 8291 (127.0.0.1) | `CA_DATA_DIR=~/countryatlas-data`, `CA_ADMIN_TOKEN`, `FRED_API_KEY` |
255 +| countryatlas-scheduler | — | same as API |
256 +
257 +Secrets (FRED key, admin token) live only in the mld manifest on M1M32 and in local `.env` (git-ignored).
added pyproject.toml +41 −0
@@ -0,0 +1,41 @@
1 +[project]
2 +name = "countryatlas"
3 +version = "0.1.0"
4 +description = "CountryAtlas — global country intelligence platform: data pipeline, connectors and API"
5 +requires-python = ">=3.12"
6 +dependencies = [
7 + "duckdb>=1.3",
8 + "pyarrow>=17",
9 + "polars>=1.10",
10 + "httpx>=0.27",
11 + "pyyaml>=6",
12 + "pydantic>=2.8",
13 + "fastapi>=0.115",
14 + "uvicorn[standard]>=0.30",
15 + "orjson>=3.10",
16 + "typer>=0.12",
17 + "rich>=13",
18 + "python-dateutil>=2.9",
19 + "tenacity>=9",
20 + "numpy>=2",
21 +]
22 +
23 +[project.optional-dependencies]
24 +dev = ["pytest>=8", "pytest-asyncio>=0.24", "ruff>=0.6", "respx>=0.21"]
25 +
26 +[project.scripts]
27 +ca = "countryatlas.cli:app"
28 +
29 +[build-system]
30 +requires = ["hatchling"]
31 +build-backend = "hatchling.build"
32 +
33 +[tool.hatch.build.targets.wheel]
34 +packages = ["src/countryatlas"]
35 +
36 +[tool.ruff]
37 +line-length = 120
38 +target-version = "py312"
39 +
40 +[tool.pytest.ini_options]
41 +testpaths = ["tests"]
added registry/countries.overrides.yaml +23 −0
@@ -0,0 +1,23 @@
1 +# Hand overrides applied on top of the generated registry (keyed by iso3). Regenerate with
2 +# .venv/bin/python scripts/build_country_registry.py
3 +XKX:
4 + status: country # partially recognised state, treated as a country (World Bank member)
5 + official_name: Republic of Kosovo
6 + iso_numeric: null
7 +VIR:
8 + slug: us-virgin-islands
9 +CHI:
10 + short_name: Channel Islands
11 + official_name: Channel Islands (Jersey and Guernsey)
12 + status: territory
13 + continent: Europe
14 + subregion: Northern Europe
15 + currency_code: GBP
16 + currency_name: British pound
17 + area_km2: 194
18 + flag_emoji: "🇯🇪"
19 +PSE:
20 + short_name: Palestine
21 + status: territory
22 +TWN:
23 + status: territory
added registry/countries.yaml +7117 −0
@@ -0,0 +1,7117 @@
1 +# Canonical CountryAtlas country registry — GENERATED by scripts/build_country_registry.py
2 +# Sources: World Bank country API (region, income, capital, coordinates) + mledoze/countries (ISO numeric, official name,
3 +# subregion, currency, area, UN membership, flag, borders, languages). Edit registry/countries.overrides.yaml, not this file.
4 +countries:
5 +- id: AFG
6 + iso2: AF
7 + iso3: AFG
8 + iso_numeric: '004'
9 + slug: afghanistan
10 + short_name: Afghanistan
11 + official_name: Islamic Republic of Afghanistan
12 + capital: Kabul
13 + continent: Asia
14 + region_wb: MEA
15 + region_wb_name: Middle East, North Africa, Afghanistan & Pakistan
16 + subregion: Southern Asia
17 + income_group: LIC
18 + income_group_name: Low income
19 + currency_code: AFN
20 + currency_name: Afghan afghani
21 + area_km2: 652230
22 + latitude: 34.5228
23 + longitude: 69.1761
24 + flag_emoji: 🇦🇫
25 + un_member: true
26 + independent: true
27 + landlocked: true
28 + borders:
29 + - IRN
30 + - PAK
31 + - TKM
32 + - UZB
33 + - TJK
34 + - CHN
35 + languages:
36 + - Dari
37 + - Pashto
38 + - Turkmen
39 + demonym: Afghan
40 + status: country
41 + kind: country
42 +- id: ALB
43 + iso2: AL
44 + iso3: ALB
45 + iso_numeric: 008
46 + slug: albania
47 + short_name: Albania
48 + official_name: Republic of Albania
49 + capital: Tirana
50 + continent: Europe
51 + region_wb: ECS
52 + region_wb_name: Europe & Central Asia
53 + subregion: Southeast Europe
54 + income_group: UMC
55 + income_group_name: Upper middle income
56 + currency_code: ALL
57 + currency_name: Albanian lek
58 + area_km2: 28748
59 + latitude: 41.3317
60 + longitude: 19.8172
61 + flag_emoji: 🇦🇱
62 + un_member: true
63 + independent: true
64 + landlocked: false
65 + borders:
66 + - MNE
67 + - GRC
68 + - MKD
69 + - UNK
70 + languages:
71 + - Albanian
72 + demonym: Albanian
73 + status: country
74 + kind: country
75 +- id: DZA
76 + iso2: DZ
77 + iso3: DZA
78 + iso_numeric: '012'
79 + slug: algeria
80 + short_name: Algeria
81 + official_name: People's Democratic Republic of Algeria
82 + capital: Algiers
83 + continent: Africa
84 + region_wb: MEA
85 + region_wb_name: Middle East, North Africa, Afghanistan & Pakistan
86 + subregion: Northern Africa
87 + income_group: UMC
88 + income_group_name: Upper middle income
89 + currency_code: DZD
90 + currency_name: Algerian dinar
91 + area_km2: 2381741
92 + latitude: 36.7397
93 + longitude: 3.05097
94 + flag_emoji: 🇩🇿
95 + un_member: true
96 + independent: true
97 + landlocked: false
98 + borders:
99 + - TUN
100 + - LBY
101 + - NER
102 + - ESH
103 + - MRT
104 + - MLI
105 + - MAR
106 + languages:
107 + - Arabic
108 + demonym: Algerian
109 + status: country
110 + kind: country
111 +- id: ASM
112 + iso2: AS
113 + iso3: ASM
114 + iso_numeric: '016'
115 + slug: american-samoa
116 + short_name: American Samoa
117 + official_name: American Samoa
118 + capital: Pago Pago
119 + continent: Oceania
120 + region_wb: EAS
121 + region_wb_name: East Asia & Pacific
122 + subregion: Polynesia
123 + income_group: HIC
124 + income_group_name: High income
125 + currency_code: USD
126 + currency_name: United States dollar
127 + area_km2: 199
128 + latitude: -14.2846
129 + longitude: -170.691
130 + flag_emoji: 🇦🇸
131 + un_member: false
132 + independent: false
133 + landlocked: false
134 + borders: []
135 + languages:
136 + - English
137 + - Samoan
138 + demonym: American Samoan
139 + status: territory
140 + kind: country
141 +- id: AND
142 + iso2: AD
143 + iso3: AND
144 + iso_numeric: '020'
145 + slug: andorra
146 + short_name: Andorra
147 + official_name: Principality of Andorra
148 + capital: Andorra la Vella
149 + continent: Europe
150 + region_wb: ECS
151 + region_wb_name: Europe & Central Asia
152 + subregion: Southern Europe
153 + income_group: HIC
154 + income_group_name: High income
155 + currency_code: EUR
156 + currency_name: Euro
157 + area_km2: 468
158 + latitude: 42.5075
159 + longitude: 1.5218
160 + flag_emoji: 🇦🇩
161 + un_member: true
162 + independent: true
163 + landlocked: true
164 + borders:
165 + - FRA
166 + - ESP
167 + languages:
168 + - Catalan
169 + demonym: Andorran
170 + status: country
171 + kind: country
172 +- id: AGO
173 + iso2: AO
174 + iso3: AGO
175 + iso_numeric: '024'
176 + slug: angola
177 + short_name: Angola
178 + official_name: Republic of Angola
179 + capital: Luanda
180 + continent: Africa
181 + region_wb: SSF
182 + region_wb_name: Sub-Saharan Africa
183 + subregion: Middle Africa
184 + income_group: LMC
185 + income_group_name: Lower middle income
186 + currency_code: AOA
187 + currency_name: Angolan kwanza
188 + area_km2: 1246700
189 + latitude: -8.81155
190 + longitude: 13.242
191 + flag_emoji: 🇦🇴
192 + un_member: true
193 + independent: true
194 + landlocked: false
195 + borders:
196 + - COG
197 + - COD
198 + - ZMB
199 + - NAM
200 + languages:
201 + - Portuguese
202 + demonym: Angolan
203 + status: country
204 + kind: country
205 +- id: ATG
206 + iso2: AG
207 + iso3: ATG
208 + iso_numeric: 028
209 + slug: antigua-and-barbuda
210 + short_name: Antigua and Barbuda
211 + official_name: Antigua and Barbuda
212 + capital: Saint John's
213 + continent: Americas
214 + region_wb: LCN
215 + region_wb_name: Latin America & Caribbean
216 + subregion: Caribbean
217 + income_group: HIC
218 + income_group_name: High income
219 + currency_code: XCD
220 + currency_name: Eastern Caribbean dollar
221 + area_km2: 442
222 + latitude: 17.1175
223 + longitude: -61.8456
224 + flag_emoji: 🇦🇬
225 + un_member: true
226 + independent: true
227 + landlocked: false
228 + borders: []
229 + languages:
230 + - English
231 + demonym: Antiguan, Barbudan
232 + status: country
233 + kind: country
234 +- id: ARG
235 + iso2: AR
236 + iso3: ARG
237 + iso_numeric: '032'
238 + slug: argentina
239 + short_name: Argentina
240 + official_name: Argentine Republic
241 + capital: Buenos Aires
242 + continent: Americas
243 + region_wb: LCN
244 + region_wb_name: Latin America & Caribbean
245 + subregion: South America
246 + income_group: UMC
247 + income_group_name: Upper middle income
248 + currency_code: ARS
249 + currency_name: Argentine peso
250 + area_km2: 2780400
251 + latitude: -34.6118
252 + longitude: -58.4173
253 + flag_emoji: 🇦🇷
254 + un_member: true
255 + independent: true
256 + landlocked: false
257 + borders:
258 + - BOL
259 + - BRA
260 + - CHL
261 + - PRY
262 + - URY
263 + languages:
264 + - Guaraní
265 + - Spanish
266 + demonym: Argentine
267 + status: country
268 + kind: country
269 +- id: ARM
270 + iso2: AM
271 + iso3: ARM
272 + iso_numeric: '051'
273 + slug: armenia
274 + short_name: Armenia
275 + official_name: Republic of Armenia
276 + capital: Yerevan
277 + continent: Asia
278 + region_wb: ECS
279 + region_wb_name: Europe & Central Asia
280 + subregion: Western Asia
281 + income_group: UMC
282 + income_group_name: Upper middle income
283 + currency_code: AMD
284 + currency_name: Armenian dram
285 + area_km2: 29743
286 + latitude: 40.1596
287 + longitude: 44.509
288 + flag_emoji: 🇦🇲
289 + un_member: true
290 + independent: true
291 + landlocked: true
292 + borders:
293 + - AZE
294 + - GEO
295 + - IRN
296 + - TUR
297 + languages:
298 + - Armenian
299 + demonym: Armenian
300 + status: country
301 + kind: country
302 +- id: ABW
303 + iso2: AW
304 + iso3: ABW
305 + iso_numeric: '533'
306 + slug: aruba
307 + short_name: Aruba
308 + official_name: Aruba
309 + capital: Oranjestad
310 + continent: Americas
311 + region_wb: LCN
312 + region_wb_name: Latin America & Caribbean
313 + subregion: Caribbean
314 + income_group: HIC
315 + income_group_name: High income
316 + currency_code: AWG
317 + currency_name: Aruban florin
318 + area_km2: 180
319 + latitude: 12.5167
320 + longitude: -70.0167
321 + flag_emoji: 🇦🇼
322 + un_member: false
323 + independent: false
324 + landlocked: false
325 + borders: []
326 + languages:
327 + - Dutch
328 + - Papiamento
329 + demonym: Aruban
330 + status: territory
331 + kind: country
332 +- id: AUS
333 + iso2: AU
334 + iso3: AUS
335 + iso_numeric: '036'
336 + slug: australia
337 + short_name: Australia
338 + official_name: Commonwealth of Australia
339 + capital: Canberra
340 + continent: Oceania
341 + region_wb: EAS
342 + region_wb_name: East Asia & Pacific
343 + subregion: Australia and New Zealand
344 + income_group: HIC
345 + income_group_name: High income
346 + currency_code: AUD
347 + currency_name: Australian dollar
348 + area_km2: 7692024
349 + latitude: -35.282
350 + longitude: 149.129
351 + flag_emoji: 🇦🇺
352 + un_member: true
353 + independent: true
354 + landlocked: false
355 + borders: []
356 + languages:
357 + - English
358 + demonym: Australian
359 + status: country
360 + kind: country
361 +- id: AUT
362 + iso2: AT
363 + iso3: AUT
364 + iso_numeric: '040'
365 + slug: austria
366 + short_name: Austria
367 + official_name: Republic of Austria
368 + capital: Vienna
369 + continent: Europe
370 + region_wb: ECS
371 + region_wb_name: Europe & Central Asia
372 + subregion: Central Europe
373 + income_group: HIC
374 + income_group_name: High income
375 + currency_code: EUR
376 + currency_name: Euro
377 + area_km2: 83871
378 + latitude: 48.2201
379 + longitude: 16.3798
380 + flag_emoji: 🇦🇹
381 + un_member: true
382 + independent: true
383 + landlocked: true
384 + borders:
385 + - CZE
386 + - DEU
387 + - HUN
388 + - ITA
389 + - LIE
390 + - SVK
391 + - SVN
392 + - CHE
393 + languages:
394 + - Austro-Bavarian German
395 + demonym: Austrian
396 + status: country
397 + kind: country
398 +- id: AZE
399 + iso2: AZ
400 + iso3: AZE
401 + iso_numeric: '031'
402 + slug: azerbaijan
403 + short_name: Azerbaijan
404 + official_name: Republic of Azerbaijan
405 + capital: Baku
406 + continent: Asia
407 + region_wb: ECS
408 + region_wb_name: Europe & Central Asia
409 + subregion: Western Asia
410 + income_group: UMC
411 + income_group_name: Upper middle income
412 + currency_code: AZN
413 + currency_name: Azerbaijani manat
414 + area_km2: 86600
415 + latitude: 40.3834
416 + longitude: 49.8932
417 + flag_emoji: 🇦🇿
418 + un_member: true
419 + independent: true
420 + landlocked: true
421 + borders:
422 + - ARM
423 + - GEO
424 + - IRN
425 + - RUS
426 + - TUR
427 + languages:
428 + - Azerbaijani
429 + - Russian
430 + demonym: Azerbaijani
431 + status: country
432 + kind: country
433 +- id: BHS
434 + iso2: BS
435 + iso3: BHS
436 + iso_numeric: '044'
437 + slug: bahamas
438 + short_name: Bahamas
439 + official_name: Commonwealth of the Bahamas
440 + capital: Nassau
441 + continent: Americas
442 + region_wb: LCN
443 + region_wb_name: Latin America & Caribbean
444 + subregion: Caribbean
445 + income_group: HIC
446 + income_group_name: High income
447 + currency_code: BSD
448 + currency_name: Bahamian dollar
449 + area_km2: 13943
450 + latitude: 25.0661
451 + longitude: -77.339
452 + flag_emoji: 🇧🇸
453 + un_member: true
454 + independent: true
455 + landlocked: false
456 + borders: []
457 + languages:
458 + - English
459 + demonym: Bahamian
460 + status: country
461 + kind: country
462 +- id: BHR
463 + iso2: BH
464 + iso3: BHR
465 + iso_numeric: 048
466 + slug: bahrain
467 + short_name: Bahrain
468 + official_name: Kingdom of Bahrain
469 + capital: Manama
470 + continent: Asia
471 + region_wb: MEA
472 + region_wb_name: Middle East, North Africa, Afghanistan & Pakistan
473 + subregion: Western Asia
474 + income_group: HIC
475 + income_group_name: High income
476 + currency_code: BHD
477 + currency_name: Bahraini dinar
478 + area_km2: 765
479 + latitude: 26.1921
480 + longitude: 50.5354
481 + flag_emoji: 🇧🇭
482 + un_member: true
483 + independent: true
484 + landlocked: false
485 + borders: []
486 + languages:
487 + - Arabic
488 + demonym: Bahraini
489 + status: country
490 + kind: country
491 +- id: BGD
492 + iso2: BD
493 + iso3: BGD
494 + iso_numeric: '050'
495 + slug: bangladesh
496 + short_name: Bangladesh
497 + official_name: People's Republic of Bangladesh
498 + capital: Dhaka
499 + continent: Asia
500 + region_wb: SAS
501 + region_wb_name: South Asia
502 + subregion: Southern Asia
503 + income_group: LMC
504 + income_group_name: Lower middle income
505 + currency_code: BDT
506 + currency_name: Bangladeshi taka
507 + area_km2: 147570
508 + latitude: 23.7055
509 + longitude: 90.4113
510 + flag_emoji: 🇧🇩
511 + un_member: true
512 + independent: true
513 + landlocked: false
514 + borders:
515 + - MMR
516 + - IND
517 + languages:
518 + - Bengali
519 + demonym: Bangladeshi
520 + status: country
521 + kind: country
522 +- id: BRB
523 + iso2: BB
524 + iso3: BRB
525 + iso_numeric: '052'
526 + slug: barbados
527 + short_name: Barbados
528 + official_name: Barbados
529 + capital: Bridgetown
530 + continent: Americas
531 + region_wb: LCN
532 + region_wb_name: Latin America & Caribbean
533 + subregion: Caribbean
534 + income_group: HIC
535 + income_group_name: High income
536 + currency_code: BBD
537 + currency_name: Barbadian dollar
538 + area_km2: 430
539 + latitude: 13.0935
540 + longitude: -59.6105
541 + flag_emoji: 🇧🇧
542 + un_member: true
543 + independent: true
544 + landlocked: false
545 + borders: []
546 + languages:
547 + - English
548 + demonym: Barbadian
549 + status: country
550 + kind: country
551 +- id: BLR
552 + iso2: BY
553 + iso3: BLR
554 + iso_numeric: '112'
555 + slug: belarus
556 + short_name: Belarus
557 + official_name: Republic of Belarus
558 + capital: Minsk
559 + continent: Europe
560 + region_wb: ECS
561 + region_wb_name: Europe & Central Asia
562 + subregion: Eastern Europe
563 + income_group: UMC
564 + income_group_name: Upper middle income
565 + currency_code: BYN
566 + currency_name: Belarusian ruble
567 + area_km2: 207600
568 + latitude: 53.9678
569 + longitude: 27.5766
570 + flag_emoji: 🇧🇾
571 + un_member: true
572 + independent: true
573 + landlocked: true
574 + borders:
575 + - LVA
576 + - LTU
577 + - POL
578 + - RUS
579 + - UKR
580 + languages:
581 + - Belarusian
582 + - Russian
583 + demonym: Belarusian
584 + status: country
585 + kind: country
586 +- id: BEL
587 + iso2: BE
588 + iso3: BEL
589 + iso_numeric: '056'
590 + slug: belgium
591 + short_name: Belgium
592 + official_name: Kingdom of Belgium
593 + capital: Brussels
594 + continent: Europe
595 + region_wb: ECS
596 + region_wb_name: Europe & Central Asia
597 + subregion: Western Europe
598 + income_group: HIC
599 + income_group_name: High income
600 + currency_code: EUR
601 + currency_name: Euro
602 + area_km2: 30528
603 + latitude: 50.8371
604 + longitude: 4.36761
605 + flag_emoji: 🇧🇪
606 + un_member: true
607 + independent: true
608 + landlocked: false
609 + borders:
610 + - FRA
611 + - DEU
612 + - LUX
613 + - NLD
614 + languages:
615 + - Dutch
616 + - French
617 + - German
618 + demonym: Belgian
619 + status: country
620 + kind: country
621 +- id: BLZ
622 + iso2: BZ
623 + iso3: BLZ
624 + iso_numeric: 084
625 + slug: belize
626 + short_name: Belize
627 + official_name: Belize
628 + capital: Belmopan
629 + continent: Americas
630 + region_wb: LCN
631 + region_wb_name: Latin America & Caribbean
632 + subregion: Central America
633 + income_group: UMC
634 + income_group_name: Upper middle income
635 + currency_code: BZD
636 + currency_name: Belize dollar
637 + area_km2: 22966
638 + latitude: 17.2534
639 + longitude: -88.7713
640 + flag_emoji: 🇧🇿
641 + un_member: true
642 + independent: true
643 + landlocked: false
644 + borders:
645 + - GTM
646 + - MEX
647 + languages:
648 + - Belizean Creole
649 + - English
650 + - Spanish
651 + demonym: Belizean
652 + status: country
653 + kind: country
654 +- id: BEN
655 + iso2: BJ
656 + iso3: BEN
657 + iso_numeric: '204'
658 + slug: benin
659 + short_name: Benin
660 + official_name: Republic of Benin
661 + capital: Porto-Novo
662 + continent: Africa
663 + region_wb: SSF
664 + region_wb_name: Sub-Saharan Africa
665 + subregion: Western Africa
666 + income_group: LMC
667 + income_group_name: Lower middle income
668 + currency_code: XOF
669 + currency_name: West African CFA franc
670 + area_km2: 112622
671 + latitude: 6.4779
672 + longitude: 2.6323
673 + flag_emoji: 🇧🇯
674 + un_member: true
675 + independent: true
676 + landlocked: false
677 + borders:
678 + - BFA
679 + - NER
680 + - NGA
681 + - TGO
682 + languages:
683 + - French
684 + demonym: Beninese
685 + status: country
686 + kind: country
687 +- id: BMU
688 + iso2: BM
689 + iso3: BMU
690 + iso_numeric: '060'
691 + slug: bermuda
692 + short_name: Bermuda
693 + official_name: Bermuda
694 + capital: Hamilton
695 + continent: Americas
696 + region_wb: NAC
697 + region_wb_name: North America
698 + subregion: North America
699 + income_group: HIC
700 + income_group_name: High income
701 + currency_code: BMD
702 + currency_name: Bermudian dollar
703 + area_km2: 54
704 + latitude: 32.3293
705 + longitude: -64.706
706 + flag_emoji: 🇧🇲
707 + un_member: false
708 + independent: false
709 + landlocked: false
710 + borders: []
711 + languages:
712 + - English
713 + demonym: Bermudian
714 + status: territory
715 + kind: country
716 +- id: BTN
717 + iso2: BT
718 + iso3: BTN
719 + iso_numeric: '064'
720 + slug: bhutan
721 + short_name: Bhutan
722 + official_name: Kingdom of Bhutan
723 + capital: Thimphu
724 + continent: Asia
725 + region_wb: SAS
726 + region_wb_name: South Asia
727 + subregion: Southern Asia
728 + income_group: LMC
729 + income_group_name: Lower middle income
730 + currency_code: BTN
731 + currency_name: Bhutanese ngultrum
732 + area_km2: 38394
733 + latitude: 27.5768
734 + longitude: 89.6177
735 + flag_emoji: 🇧🇹
736 + un_member: true
737 + independent: true
738 + landlocked: true
739 + borders:
740 + - CHN
741 + - IND
742 + languages:
743 + - Dzongkha
744 + demonym: Bhutanese
745 + status: country
746 + kind: country
747 +- id: BOL
748 + iso2: BO
749 + iso3: BOL
750 + iso_numeric: 068
751 + slug: bolivia
752 + short_name: Bolivia
753 + official_name: Plurinational State of Bolivia
754 + capital: Sucre
755 + continent: Americas
756 + region_wb: LCN
757 + region_wb_name: Latin America & Caribbean
758 + subregion: South America
759 + income_group: LMC
760 + income_group_name: Lower middle income
761 + currency_code: BOB
762 + currency_name: Bolivian boliviano
763 + area_km2: 1098581
764 + latitude: -13.9908
765 + longitude: -66.1936
766 + flag_emoji: 🇧🇴
767 + un_member: true
768 + independent: true
769 + landlocked: true
770 + borders:
771 + - ARG
772 + - BRA
773 + - CHL
774 + - PRY
775 + - PER
776 + languages:
777 + - Aymara
778 + - Guaraní
779 + - Quechua
780 + - Spanish
781 + demonym: Bolivian
782 + status: country
783 + kind: country
784 +- id: BIH
785 + iso2: BA
786 + iso3: BIH
787 + iso_numeric: '070'
788 + slug: bosnia-and-herzegovina
789 + short_name: Bosnia and Herzegovina
790 + official_name: Bosnia and Herzegovina
791 + capital: Sarajevo
792 + continent: Europe
793 + region_wb: ECS
794 + region_wb_name: Europe & Central Asia
795 + subregion: Southeast Europe
796 + income_group: UMC
797 + income_group_name: Upper middle income
798 + currency_code: BAM
799 + currency_name: Bosnia and Herzegovina convertible mark
800 + area_km2: 51209
801 + latitude: 43.8607
802 + longitude: 18.4214
803 + flag_emoji: 🇧🇦
804 + un_member: true
805 + independent: true
806 + landlocked: false
807 + borders:
808 + - HRV
809 + - MNE
810 + - SRB
811 + languages:
812 + - Bosnian
813 + - Croatian
814 + - Serbian
815 + demonym: Bosnian, Herzegovinian
816 + status: country
817 + kind: country
818 +- id: BWA
819 + iso2: BW
820 + iso3: BWA
821 + iso_numeric: '072'
822 + slug: botswana
823 + short_name: Botswana
824 + official_name: Republic of Botswana
825 + capital: Gaborone
826 + continent: Africa
827 + region_wb: SSF
828 + region_wb_name: Sub-Saharan Africa
829 + subregion: Southern Africa
830 + income_group: UMC
831 + income_group_name: Upper middle income
832 + currency_code: BWP
833 + currency_name: Botswana pula
834 + area_km2: 582000
835 + latitude: -24.6544
836 + longitude: 25.9201
837 + flag_emoji: 🇧🇼
838 + un_member: true
839 + independent: true
840 + landlocked: true
841 + borders:
842 + - NAM
843 + - ZAF
844 + - ZMB
845 + - ZWE
846 + languages:
847 + - English
848 + - Tswana
849 + demonym: Motswana
850 + status: country
851 + kind: country
852 +- id: BRA
853 + iso2: BR
854 + iso3: BRA
855 + iso_numeric: '076'
856 + slug: brazil
857 + short_name: Brazil
858 + official_name: Federative Republic of Brazil
859 + capital: Brasília
860 + continent: Americas
861 + region_wb: LCN
862 + region_wb_name: Latin America & Caribbean
863 + subregion: South America
864 + income_group: UMC
865 + income_group_name: Upper middle income
866 + currency_code: BRL
867 + currency_name: Brazilian real
868 + area_km2: 8515767
869 + latitude: -15.7801
870 + longitude: -47.9292
871 + flag_emoji: 🇧🇷
872 + un_member: true
873 + independent: true
874 + landlocked: false
875 + borders:
876 + - ARG
877 + - BOL
878 + - COL
879 + - GUF
880 + - GUY
881 + - PRY
882 + - PER
883 + - SUR
884 + - URY
885 + - VEN
886 + languages:
887 + - Portuguese
888 + demonym: Brazilian
889 + status: country
890 + kind: country
891 +- id: VGB
892 + iso2: VG
893 + iso3: VGB
894 + iso_numeric: 092
895 + slug: british-virgin-islands
896 + short_name: British Virgin Islands
897 + official_name: Virgin Islands
898 + capital: Road Town
899 + continent: Americas
900 + region_wb: LCN
901 + region_wb_name: Latin America & Caribbean
902 + subregion: Caribbean
903 + income_group: HIC
904 + income_group_name: High income
905 + currency_code: USD
906 + currency_name: United States dollar
907 + area_km2: 151
908 + latitude: 18.431389
909 + longitude: -64.623056
910 + flag_emoji: 🇻🇬
911 + un_member: false
912 + independent: false
913 + landlocked: false
914 + borders: []
915 + languages:
916 + - English
917 + demonym: Virgin Islander
918 + status: territory
919 + kind: country
920 +- id: BRN
921 + iso2: BN
922 + iso3: BRN
923 + iso_numeric: 096
924 + slug: brunei
925 + short_name: Brunei
926 + official_name: Nation of Brunei, Abode of Peace
927 + capital: Bandar Seri Begawan
928 + continent: Asia
929 + region_wb: EAS
930 + region_wb_name: East Asia & Pacific
931 + subregion: South-Eastern Asia
932 + income_group: HIC
933 + income_group_name: High income
934 + currency_code: BND
935 + currency_name: Brunei dollar
936 + area_km2: 5765
937 + latitude: 4.94199
938 + longitude: 114.946
939 + flag_emoji: 🇧🇳
940 + un_member: true
941 + independent: true
942 + landlocked: false
943 + borders:
944 + - MYS
945 + languages:
946 + - Malay
947 + demonym: Bruneian
948 + status: country
949 + kind: country
950 +- id: BGR
951 + iso2: BG
952 + iso3: BGR
953 + iso_numeric: '100'
954 + slug: bulgaria
955 + short_name: Bulgaria
956 + official_name: Republic of Bulgaria
957 + capital: Sofia
958 + continent: Europe
959 + region_wb: ECS
960 + region_wb_name: Europe & Central Asia
961 + subregion: Southeast Europe
962 + income_group: HIC
963 + income_group_name: High income
964 + currency_code: EUR
965 + currency_name: Euro
966 + area_km2: 110879
967 + latitude: 42.7105
968 + longitude: 23.3238
969 + flag_emoji: 🇧🇬
970 + un_member: true
971 + independent: true
972 + landlocked: false
973 + borders:
974 + - GRC
975 + - MKD
976 + - ROU
977 + - SRB
978 + - TUR
979 + languages:
980 + - Bulgarian
981 + demonym: Bulgarian
982 + status: country
983 + kind: country
984 +- id: BFA
985 + iso2: BF
986 + iso3: BFA
987 + iso_numeric: '854'
988 + slug: burkina-faso
989 + short_name: Burkina Faso
990 + official_name: Burkina Faso
991 + capital: Ouagadougou
992 + continent: Africa
993 + region_wb: SSF
994 + region_wb_name: Sub-Saharan Africa
995 + subregion: Western Africa
996 + income_group: LIC
997 + income_group_name: Low income
998 + currency_code: XOF
999 + currency_name: West African CFA franc
1000 + area_km2: 272967
1001 + latitude: 12.3605
1002 + longitude: -1.53395
1003 + flag_emoji: 🇧🇫
1004 + un_member: true
1005 + independent: true
1006 + landlocked: true
1007 + borders:
1008 + - BEN
1009 + - CIV
1010 + - GHA
1011 + - MLI
1012 + - NER
1013 + - TGO
1014 + languages:
1015 + - French
1016 + demonym: Burkinabe
1017 + status: country
1018 + kind: country
1019 +- id: BDI
1020 + iso2: BI
1021 + iso3: BDI
1022 + iso_numeric: '108'
1023 + slug: burundi
1024 + short_name: Burundi
1025 + official_name: Republic of Burundi
1026 + capital: Gitega
1027 + continent: Africa
1028 + region_wb: SSF
1029 + region_wb_name: Sub-Saharan Africa
1030 + subregion: Eastern Africa
1031 + income_group: LIC
1032 + income_group_name: Low income
1033 + currency_code: BIF
1034 + currency_name: Burundian franc
1035 + area_km2: 27834
1036 + latitude: -3.3784
1037 + longitude: 29.3639
1038 + flag_emoji: 🇧🇮
1039 + un_member: true
1040 + independent: true
1041 + landlocked: true
1042 + borders:
1043 + - COD
1044 + - RWA
1045 + - TZA
1046 + languages:
1047 + - French
1048 + - Kirundi
1049 + demonym: Burundian
1050 + status: country
1051 + kind: country
1052 +- id: CPV
1053 + iso2: CV
1054 + iso3: CPV
1055 + iso_numeric: '132'
1056 + slug: cabo-verde
1057 + short_name: Cabo Verde
1058 + official_name: Republic of Cabo Verde
1059 + capital: Praia
1060 + continent: Africa
1061 + region_wb: SSF
1062 + region_wb_name: Sub-Saharan Africa
1063 + subregion: Western Africa
1064 + income_group: UMC
1065 + income_group_name: Upper middle income
1066 + currency_code: CVE
1067 + currency_name: Cape Verdean escudo
1068 + area_km2: 4033
1069 + latitude: 14.9218
1070 + longitude: -23.5087
1071 + flag_emoji: 🇨🇻
1072 + un_member: true
1073 + independent: true
1074 + landlocked: false
1075 + borders: []
1076 + languages:
1077 + - Portuguese
1078 + demonym: Cape Verdian
1079 + status: country
1080 + kind: country
1081 +- id: KHM
1082 + iso2: KH
1083 + iso3: KHM
1084 + iso_numeric: '116'
1085 + slug: cambodia
1086 + short_name: Cambodia
1087 + official_name: Kingdom of Cambodia
1088 + capital: Phnom Penh
1089 + continent: Asia
1090 + region_wb: EAS
1091 + region_wb_name: East Asia & Pacific
1092 + subregion: South-Eastern Asia
1093 + income_group: LMC
1094 + income_group_name: Lower middle income
1095 + currency_code: KHR
1096 + currency_name: Cambodian riel
1097 + area_km2: 181035
1098 + latitude: 11.5556
1099 + longitude: 104.874
1100 + flag_emoji: 🇰🇭
1101 + un_member: true
1102 + independent: true
1103 + landlocked: false
1104 + borders:
1105 + - LAO
1106 + - THA
1107 + - VNM
1108 + languages:
1109 + - Khmer
1110 + demonym: Cambodian
1111 + status: country
1112 + kind: country
1113 +- id: CMR
1114 + iso2: CM
1115 + iso3: CMR
1116 + iso_numeric: '120'
1117 + slug: cameroon
1118 + short_name: Cameroon
1119 + official_name: Republic of Cameroon
1120 + capital: Yaoundé
1121 + continent: Africa
1122 + region_wb: SSF
1123 + region_wb_name: Sub-Saharan Africa
1124 + subregion: Middle Africa
1125 + income_group: LMC
1126 + income_group_name: Lower middle income
1127 + currency_code: XAF
1128 + currency_name: Central African CFA franc
1129 + area_km2: 475442
1130 + latitude: 3.8721
1131 + longitude: 11.5174
1132 + flag_emoji: 🇨🇲
1133 + un_member: true
1134 + independent: true
1135 + landlocked: false
1136 + borders:
1137 + - CAF
1138 + - TCD
1139 + - COG
1140 + - GNQ
1141 + - GAB
1142 + - NGA
1143 + languages:
1144 + - English
1145 + - French
1146 + demonym: Cameroonian
1147 + status: country
1148 + kind: country
1149 +- id: CAN
1150 + iso2: CA
1151 + iso3: CAN
1152 + iso_numeric: '124'
1153 + slug: canada
1154 + short_name: Canada
1155 + official_name: Canada
1156 + capital: Ottawa
1157 + continent: Americas
1158 + region_wb: NAC
1159 + region_wb_name: North America
1160 + subregion: North America
1161 + income_group: HIC
1162 + income_group_name: High income
1163 + currency_code: CAD
1164 + currency_name: Canadian dollar
1165 + area_km2: 9984670
1166 + latitude: 45.4215
1167 + longitude: -75.6919
1168 + flag_emoji: 🇨🇦
1169 + un_member: true
1170 + independent: true
1171 + landlocked: false
1172 + borders:
1173 + - USA
1174 + languages:
1175 + - English
1176 + - French
1177 + demonym: Canadian
1178 + status: country
1179 + kind: country
1180 +- id: CYM
1181 + iso2: KY
1182 + iso3: CYM
1183 + iso_numeric: '136'
1184 + slug: cayman-islands
1185 + short_name: Cayman Islands
1186 + official_name: Cayman Islands
1187 + capital: George Town
1188 + continent: Americas
1189 + region_wb: LCN
1190 + region_wb_name: Latin America & Caribbean
1191 + subregion: Caribbean
1192 + income_group: HIC
1193 + income_group_name: High income
1194 + currency_code: KYD
1195 + currency_name: Cayman Islands dollar
1196 + area_km2: 264
1197 + latitude: 19.3022
1198 + longitude: -81.3857
1199 + flag_emoji: 🇰🇾
1200 + un_member: false
1201 + independent: false
1202 + landlocked: false
1203 + borders: []
1204 + languages:
1205 + - English
1206 + demonym: Caymanian
1207 + status: territory
1208 + kind: country
1209 +- id: CAF
1210 + iso2: CF
1211 + iso3: CAF
1212 + iso_numeric: '140'
1213 + slug: central-african-republic
1214 + short_name: Central African Republic
1215 + official_name: Central African Republic
1216 + capital: Bangui
1217 + continent: Africa
1218 + region_wb: SSF
1219 + region_wb_name: Sub-Saharan Africa
1220 + subregion: Middle Africa
1221 + income_group: LIC
1222 + income_group_name: Low income
1223 + currency_code: XAF
1224 + currency_name: Central African CFA franc
1225 + area_km2: 622984
1226 + latitude: 5.63056
1227 + longitude: 21.6407
1228 + flag_emoji: 🇨🇫
1229 + un_member: true
1230 + independent: true
1231 + landlocked: true
1232 + borders:
1233 + - CMR
1234 + - TCD
1235 + - COD
1236 + - COG
1237 + - SSD
1238 + - SDN
1239 + languages:
1240 + - French
1241 + - Sango
1242 + demonym: Central African
1243 + status: country
1244 + kind: country
1245 +- id: TCD
1246 + iso2: TD
1247 + iso3: TCD
1248 + iso_numeric: '148'
1249 + slug: chad
1250 + short_name: Chad
1251 + official_name: Republic of Chad
1252 + capital: N'Djamena
1253 + continent: Africa
1254 + region_wb: SSF
1255 + region_wb_name: Sub-Saharan Africa
1256 + subregion: Middle Africa
1257 + income_group: LIC
1258 + income_group_name: Low income
1259 + currency_code: XAF
1260 + currency_name: Central African CFA franc
1261 + area_km2: 1284000
1262 + latitude: 12.1048
1263 + longitude: 15.0445
1264 + flag_emoji: 🇹🇩
1265 + un_member: true
1266 + independent: true
1267 + landlocked: true
1268 + borders:
1269 + - CMR
1270 + - CAF
1271 + - LBY
1272 + - NER
1273 + - NGA
1274 + - SDN
1275 + languages:
1276 + - Arabic
1277 + - French
1278 + demonym: Chadian
1279 + status: country
1280 + kind: country
1281 +- id: CHI
1282 + iso2: JG
1283 + iso3: CHI
1284 + iso_numeric: null
1285 + slug: channel-islands
1286 + short_name: Channel Islands
1287 + official_name: Channel Islands
1288 + capital: null
1289 + continent: null
1290 + region_wb: ECS
1291 + region_wb_name: Europe & Central Asia
1292 + subregion: null
1293 + income_group: HIC
1294 + income_group_name: High income
1295 + currency_code: null
1296 + currency_name: null
1297 + area_km2: null
1298 + latitude: null
1299 + longitude: null
1300 + flag_emoji: 🇯🇬
1301 + un_member: false
1302 + independent: false
1303 + landlocked: false
1304 + borders: []
1305 + languages: []
1306 + demonym: null
1307 + status: territory
1308 + kind: country
1309 +- id: CHL
1310 + iso2: CL
1311 + iso3: CHL
1312 + iso_numeric: '152'
1313 + slug: chile
1314 + short_name: Chile
1315 + official_name: Republic of Chile
1316 + capital: Santiago
1317 + continent: Americas
1318 + region_wb: LCN
1319 + region_wb_name: Latin America & Caribbean
1320 + subregion: South America
1321 + income_group: HIC
1322 + income_group_name: High income
1323 + currency_code: CLP
1324 + currency_name: Chilean peso
1325 + area_km2: 756102
1326 + latitude: -33.475
1327 + longitude: -70.6475
1328 + flag_emoji: 🇨🇱
1329 + un_member: true
1330 + independent: true
1331 + landlocked: false
1332 + borders:
1333 + - ARG
1334 + - BOL
1335 + - PER
1336 + languages:
1337 + - Spanish
1338 + demonym: Chilean
1339 + status: country
1340 + kind: country
1341 +- id: CHN
1342 + iso2: CN
1343 + iso3: CHN
1344 + iso_numeric: '156'
1345 + slug: china
1346 + short_name: China
1347 + official_name: People's Republic of China
1348 + capital: Beijing
1349 + continent: Asia
1350 + region_wb: EAS
1351 + region_wb_name: East Asia & Pacific
1352 + subregion: Eastern Asia
1353 + income_group: UMC
1354 + income_group_name: Upper middle income
1355 + currency_code: CNY
1356 + currency_name: Chinese yuan
1357 + area_km2: 9706961
1358 + latitude: 40.0495
1359 + longitude: 116.286
1360 + flag_emoji: 🇨🇳
1361 + un_member: true
1362 + independent: true
1363 + landlocked: false
1364 + borders:
1365 + - AFG
1366 + - BTN
1367 + - MMR
1368 + - HKG
1369 + - IND
1370 + - KAZ
1371 + - NPL
1372 + - PRK
1373 + - KGZ
1374 + - LAO
1375 + - MAC
1376 + - MNG
1377 + - PAK
1378 + - RUS
1379 + - TJK
1380 + - VNM
1381 + languages:
1382 + - Chinese
1383 + demonym: Chinese
1384 + status: country
1385 + kind: country
1386 +- id: COL
1387 + iso2: CO
1388 + iso3: COL
1389 + iso_numeric: '170'
1390 + slug: colombia
1391 + short_name: Colombia
1392 + official_name: Republic of Colombia
1393 + capital: Bogotá
1394 + continent: Americas
1395 + region_wb: LCN
1396 + region_wb_name: Latin America & Caribbean
1397 + subregion: South America
1398 + income_group: UMC
1399 + income_group_name: Upper middle income
1400 + currency_code: COP
1401 + currency_name: Colombian peso
1402 + area_km2: 1141748
1403 + latitude: 4.60987
1404 + longitude: -74.082
1405 + flag_emoji: 🇨🇴
1406 + un_member: true
1407 + independent: true
1408 + landlocked: false
1409 + borders:
1410 + - BRA
1411 + - ECU
1412 + - PAN
1413 + - PER
1414 + - VEN
1415 + languages:
1416 + - Spanish
1417 + demonym: Colombian
1418 + status: country
1419 + kind: country
1420 +- id: COM
1421 + iso2: KM
1422 + iso3: COM
1423 + iso_numeric: '174'
1424 + slug: comoros
1425 + short_name: Comoros
1426 + official_name: Union of the Comoros
1427 + capital: Moroni
1428 + continent: Africa
1429 + region_wb: SSF
1430 + region_wb_name: Sub-Saharan Africa
1431 + subregion: Eastern Africa
1432 + income_group: LMC
1433 + income_group_name: Lower middle income
1434 + currency_code: KMF
1435 + currency_name: Comorian franc
1436 + area_km2: 1862
1437 + latitude: -11.6986
1438 + longitude: 43.2418
1439 + flag_emoji: 🇰🇲
1440 + un_member: true
1441 + independent: true
1442 + landlocked: false
1443 + borders: []
1444 + languages:
1445 + - Arabic
1446 + - Comorian
1447 + - French
1448 + demonym: Comoran
1449 + status: country
1450 + kind: country
1451 +- id: CRI
1452 + iso2: CR
1453 + iso3: CRI
1454 + iso_numeric: '188'
1455 + slug: costa-rica
1456 + short_name: Costa Rica
1457 + official_name: Republic of Costa Rica
1458 + capital: San José
1459 + continent: Americas
1460 + region_wb: LCN
1461 + region_wb_name: Latin America & Caribbean
1462 + subregion: Central America
1463 + income_group: HIC
1464 + income_group_name: High income
1465 + currency_code: CRC
1466 + currency_name: Costa Rican colón
1467 + area_km2: 51100
1468 + latitude: 9.63701
1469 + longitude: -84.0089
1470 + flag_emoji: 🇨🇷
1471 + un_member: true
1472 + independent: true
1473 + landlocked: false
1474 + borders:
1475 + - NIC
1476 + - PAN
1477 + languages:
1478 + - Spanish
1479 + demonym: Costa Rican
1480 + status: country
1481 + kind: country
1482 +- id: HRV
1483 + iso2: HR
1484 + iso3: HRV
1485 + iso_numeric: '191'
1486 + slug: croatia
1487 + short_name: Croatia
1488 + official_name: Republic of Croatia
1489 + capital: Zagreb
1490 + continent: Europe
1491 + region_wb: ECS
1492 + region_wb_name: Europe & Central Asia
1493 + subregion: Southeast Europe
1494 + income_group: HIC
1495 + income_group_name: High income
1496 + currency_code: EUR
1497 + currency_name: Euro
1498 + area_km2: 56594
1499 + latitude: 45.8069
1500 + longitude: 15.9614
1501 + flag_emoji: 🇭🇷
1502 + un_member: true
1503 + independent: true
1504 + landlocked: false
1505 + borders:
1506 + - BIH
1507 + - HUN
1508 + - MNE
1509 + - SRB
1510 + - SVN
1511 + languages:
1512 + - Croatian
1513 + demonym: Croatian
1514 + status: country
1515 + kind: country
1516 +- id: CUB
1517 + iso2: CU
1518 + iso3: CUB
1519 + iso_numeric: '192'
1520 + slug: cuba
1521 + short_name: Cuba
1522 + official_name: Republic of Cuba
1523 + capital: Havana
1524 + continent: Americas
1525 + region_wb: LCN
1526 + region_wb_name: Latin America & Caribbean
1527 + subregion: Caribbean
1528 + income_group: UMC
1529 + income_group_name: Upper middle income
1530 + currency_code: CUC
1531 + currency_name: Cuban convertible peso
1532 + area_km2: 109884
1533 + latitude: 23.1333
1534 + longitude: -82.3667
1535 + flag_emoji: 🇨🇺
1536 + un_member: true
1537 + independent: true
1538 + landlocked: false
1539 + borders: []
1540 + languages:
1541 + - Spanish
1542 + demonym: Cuban
1543 + status: country
1544 + kind: country
1545 +- id: CUW
1546 + iso2: CW
1547 + iso3: CUW
1548 + iso_numeric: '531'
1549 + slug: curacao
1550 + short_name: Curaçao
1551 + official_name: Country of Curaçao
1552 + capital: Willemstad
1553 + continent: Americas
1554 + region_wb: LCN
1555 + region_wb_name: Latin America & Caribbean
1556 + subregion: Caribbean
1557 + income_group: HIC
1558 + income_group_name: High income
1559 + currency_code: ANG
1560 + currency_name: Netherlands Antillean guilder
1561 + area_km2: 444
1562 + latitude: 12.116667
1563 + longitude: -68.933333
1564 + flag_emoji: 🇨🇼
1565 + un_member: false
1566 + independent: false
1567 + landlocked: false
1568 + borders: []
1569 + languages:
1570 + - Dutch
1571 + - English
1572 + - Papiamento
1573 + demonym: Curaçaoan
1574 + status: territory
1575 + kind: country
1576 +- id: CYP
1577 + iso2: CY
1578 + iso3: CYP
1579 + iso_numeric: '196'
1580 + slug: cyprus
1581 + short_name: Cyprus
1582 + official_name: Republic of Cyprus
1583 + capital: Nicosia
1584 + continent: Europe
1585 + region_wb: ECS
1586 + region_wb_name: Europe & Central Asia
1587 + subregion: Southern Europe
1588 + income_group: HIC
1589 + income_group_name: High income
1590 + currency_code: EUR
1591 + currency_name: Euro
1592 + area_km2: 9251
1593 + latitude: 35.1676
1594 + longitude: 33.3736
1595 + flag_emoji: 🇨🇾
1596 + un_member: true
1597 + independent: true
1598 + landlocked: false
1599 + borders: []
1600 + languages:
1601 + - Greek
1602 + - Turkish
1603 + demonym: Cypriot
1604 + status: country
1605 + kind: country
1606 +- id: CZE
1607 + iso2: CZ
1608 + iso3: CZE
1609 + iso_numeric: '203'
1610 + slug: czechia
1611 + short_name: Czechia
1612 + official_name: Czech Republic
1613 + capital: Prague
1614 + continent: Europe
1615 + region_wb: ECS
1616 + region_wb_name: Europe & Central Asia
1617 + subregion: Central Europe
1618 + income_group: HIC
1619 + income_group_name: High income
1620 + currency_code: CZK
1621 + currency_name: Czech koruna
1622 + area_km2: 78865
1623 + latitude: 50.0878
1624 + longitude: 14.4205
1625 + flag_emoji: 🇨🇿
1626 + un_member: true
1627 + independent: true
1628 + landlocked: true
1629 + borders:
1630 + - AUT
1631 + - DEU
1632 + - POL
1633 + - SVK
1634 + languages:
1635 + - Czech
1636 + - Slovak
1637 + demonym: Czech
1638 + status: country
1639 + kind: country
1640 +- id: CIV
1641 + iso2: CI
1642 + iso3: CIV
1643 + iso_numeric: '384'
1644 + slug: cote-divoire
1645 + short_name: Côte d'Ivoire
1646 + official_name: Republic of Côte d'Ivoire
1647 + capital: Yamoussoukro
1648 + continent: Africa
1649 + region_wb: SSF
1650 + region_wb_name: Sub-Saharan Africa
1651 + subregion: Western Africa
1652 + income_group: LMC
1653 + income_group_name: Lower middle income
1654 + currency_code: XOF
1655 + currency_name: West African CFA franc
1656 + area_km2: 322463
1657 + latitude: 5.332
1658 + longitude: -4.0305
1659 + flag_emoji: 🇨🇮
1660 + un_member: true
1661 + independent: true
1662 + landlocked: false
1663 + borders:
1664 + - BFA
1665 + - GHA
1666 + - GIN
1667 + - LBR
1668 + - MLI
1669 + languages:
1670 + - French
1671 + demonym: Ivorian
1672 + status: country
1673 + kind: country
1674 +- id: COD
1675 + iso2: CD
1676 + iso3: COD
1677 + iso_numeric: '180'
1678 + slug: dr-congo
1679 + short_name: DR Congo
1680 + official_name: Democratic Republic of the Congo
1681 + capital: Kinshasa
1682 + continent: Africa
1683 + region_wb: SSF
1684 + region_wb_name: Sub-Saharan Africa
1685 + subregion: Middle Africa
1686 + income_group: LIC
1687 + income_group_name: Low income
1688 + currency_code: CDF
1689 + currency_name: Congolese franc
1690 + area_km2: 2344858
1691 + latitude: -4.325
1692 + longitude: 15.3222
1693 + flag_emoji: 🇨🇩
1694 + un_member: true
1695 + independent: true
1696 + landlocked: false
1697 + borders:
1698 + - AGO
1699 + - BDI
1700 + - CAF
1701 + - COG
1702 + - RWA
1703 + - SSD
1704 + - TZA
1705 + - UGA
1706 + - ZMB
1707 + languages:
1708 + - French
1709 + - Kikongo
1710 + - Lingala
1711 + - Swahili
1712 + - Tshiluba
1713 + demonym: Congolese
1714 + status: country
1715 + kind: country
1716 +- id: DNK
1717 + iso2: DK
1718 + iso3: DNK
1719 + iso_numeric: '208'
1720 + slug: denmark
1721 + short_name: Denmark
1722 + official_name: Kingdom of Denmark
1723 + capital: Copenhagen
1724 + continent: Europe
1725 + region_wb: ECS
1726 + region_wb_name: Europe & Central Asia
1727 + subregion: Northern Europe
1728 + income_group: HIC
1729 + income_group_name: High income
1730 + currency_code: DKK
1731 + currency_name: Danish krone
1732 + area_km2: 43094
1733 + latitude: 55.6763
1734 + longitude: 12.5681
1735 + flag_emoji: 🇩🇰
1736 + un_member: true
1737 + independent: true
1738 + landlocked: false
1739 + borders:
1740 + - DEU
1741 + languages:
1742 + - Danish
1743 + demonym: Danish
1744 + status: country
1745 + kind: country
1746 +- id: DJI
1747 + iso2: DJ
1748 + iso3: DJI
1749 + iso_numeric: '262'
1750 + slug: djibouti
1751 + short_name: Djibouti
1752 + official_name: Republic of Djibouti
1753 + capital: Djibouti
1754 + continent: Africa
1755 + region_wb: MEA
1756 + region_wb_name: Middle East, North Africa, Afghanistan & Pakistan
1757 + subregion: Eastern Africa
1758 + income_group: LMC
1759 + income_group_name: Lower middle income
1760 + currency_code: DJF
1761 + currency_name: Djiboutian franc
1762 + area_km2: 23200
1763 + latitude: 11.5806
1764 + longitude: 43.1425
1765 + flag_emoji: 🇩🇯
1766 + un_member: true
1767 + independent: true
1768 + landlocked: false
1769 + borders:
1770 + - ERI
1771 + - ETH
1772 + - SOM
1773 + languages:
1774 + - Arabic
1775 + - French
1776 + demonym: Djibouti
1777 + status: country
1778 + kind: country
1779 +- id: DMA
1780 + iso2: DM
1781 + iso3: DMA
1782 + iso_numeric: '212'
1783 + slug: dominica
1784 + short_name: Dominica
1785 + official_name: Commonwealth of Dominica
1786 + capital: Roseau
1787 + continent: Americas
1788 + region_wb: LCN
1789 + region_wb_name: Latin America & Caribbean
1790 + subregion: Caribbean
1791 + income_group: UMC
1792 + income_group_name: Upper middle income
1793 + currency_code: XCD
1794 + currency_name: Eastern Caribbean dollar
1795 + area_km2: 751
1796 + latitude: 15.2976
1797 + longitude: -61.39
1798 + flag_emoji: 🇩🇲
1799 + un_member: true
1800 + independent: true
1801 + landlocked: false
1802 + borders: []
1803 + languages:
1804 + - English
1805 + demonym: Dominican
1806 + status: country
1807 + kind: country
1808 +- id: DOM
1809 + iso2: DO
1810 + iso3: DOM
1811 + iso_numeric: '214'
1812 + slug: dominican-republic
1813 + short_name: Dominican Republic
1814 + official_name: Dominican Republic
1815 + capital: Santo Domingo
1816 + continent: Americas
1817 + region_wb: LCN
1818 + region_wb_name: Latin America & Caribbean
1819 + subregion: Caribbean
1820 + income_group: UMC
1821 + income_group_name: Upper middle income
1822 + currency_code: DOP
1823 + currency_name: Dominican peso
1824 + area_km2: 48671
1825 + latitude: 18.479
1826 + longitude: -69.8908
1827 + flag_emoji: 🇩🇴
1828 + un_member: true
1829 + independent: true
1830 + landlocked: false
1831 + borders:
1832 + - HTI
1833 + languages:
1834 + - Spanish
1835 + demonym: Dominican
1836 + status: country
1837 + kind: country
1838 +- id: ECU
1839 + iso2: EC
1840 + iso3: ECU
1841 + iso_numeric: '218'
1842 + slug: ecuador
1843 + short_name: Ecuador
1844 + official_name: Republic of Ecuador
1845 + capital: Quito
1846 + continent: Americas
1847 + region_wb: LCN
1848 + region_wb_name: Latin America & Caribbean
1849 + subregion: South America
1850 + income_group: UMC
1851 + income_group_name: Upper middle income
1852 + currency_code: USD
1853 + currency_name: United States dollar
1854 + area_km2: 276841
1855 + latitude: -0.229498
1856 + longitude: -78.5243
1857 + flag_emoji: 🇪🇨
1858 + un_member: true
1859 + independent: true
1860 + landlocked: false
1861 + borders:
1862 + - COL
1863 + - PER
1864 + languages:
1865 + - Spanish
1866 + demonym: Ecuadorean
1867 + status: country
1868 + kind: country
1869 +- id: EGY
1870 + iso2: EG
1871 + iso3: EGY
1872 + iso_numeric: '818'
1873 + slug: egypt
1874 + short_name: Egypt
1875 + official_name: Arab Republic of Egypt
1876 + capital: Cairo
1877 + continent: Africa
1878 + region_wb: MEA
1879 + region_wb_name: Middle East, North Africa, Afghanistan & Pakistan
1880 + subregion: Northern Africa
1881 + income_group: LMC
1882 + income_group_name: Lower middle income
1883 + currency_code: EGP
1884 + currency_name: Egyptian pound
1885 + area_km2: 1002450
1886 + latitude: 30.0982
1887 + longitude: 31.2461
1888 + flag_emoji: 🇪🇬
1889 + un_member: true
1890 + independent: true
1891 + landlocked: false
1892 + borders:
1893 + - ISR
1894 + - LBY
1895 + - PSE
1896 + - SDN
1897 + languages:
1898 + - Arabic
1899 + demonym: Egyptian
1900 + status: country
1901 + kind: country
1902 +- id: SLV
1903 + iso2: SV
1904 + iso3: SLV
1905 + iso_numeric: '222'
1906 + slug: el-salvador
1907 + short_name: El Salvador
1908 + official_name: Republic of El Salvador
1909 + capital: San Salvador
1910 + continent: Americas
1911 + region_wb: LCN
1912 + region_wb_name: Latin America & Caribbean
1913 + subregion: Central America
1914 + income_group: UMC
1915 + income_group_name: Upper middle income
1916 + currency_code: USD
1917 + currency_name: United States dollar
1918 + area_km2: 21041
1919 + latitude: 13.7034
1920 + longitude: -89.2073
1921 + flag_emoji: 🇸🇻
1922 + un_member: true
1923 + independent: true
1924 + landlocked: false
1925 + borders:
1926 + - GTM
1927 + - HND
1928 + languages:
1929 + - Spanish
1930 + demonym: Salvadoran
1931 + status: country
1932 + kind: country
1933 +- id: GNQ
1934 + iso2: GQ
1935 + iso3: GNQ
1936 + iso_numeric: '226'
1937 + slug: equatorial-guinea
1938 + short_name: Equatorial Guinea
1939 + official_name: Republic of Equatorial Guinea
1940 + capital: Malabo
1941 + continent: Africa
1942 + region_wb: SSF
1943 + region_wb_name: Sub-Saharan Africa
1944 + subregion: Middle Africa
1945 + income_group: UMC
1946 + income_group_name: Upper middle income
1947 + currency_code: XAF
1948 + currency_name: Central African CFA franc
1949 + area_km2: 28051
1950 + latitude: 3.7523
1951 + longitude: 8.7741
1952 + flag_emoji: 🇬🇶
1953 + un_member: true
1954 + independent: true
1955 + landlocked: false
1956 + borders:
1957 + - CMR
1958 + - GAB
1959 + languages:
1960 + - French
1961 + - Portuguese
1962 + - Spanish
1963 + demonym: Equatorial Guinean
1964 + status: country
1965 + kind: country
1966 +- id: ERI
1967 + iso2: ER
1968 + iso3: ERI
1969 + iso_numeric: '232'
1970 + slug: eritrea
1971 + short_name: Eritrea
1972 + official_name: State of Eritrea
1973 + capital: Asmara
1974 + continent: Africa
1975 + region_wb: SSF
1976 + region_wb_name: Sub-Saharan Africa
1977 + subregion: Eastern Africa
1978 + income_group: LIC
1979 + income_group_name: Low income
1980 + currency_code: ERN
1981 + currency_name: Eritrean nakfa
1982 + area_km2: 117600
1983 + latitude: 15.3315
1984 + longitude: 38.9183
1985 + flag_emoji: 🇪🇷
1986 + un_member: true
1987 + independent: true
1988 + landlocked: false
1989 + borders:
1990 + - DJI
1991 + - ETH
1992 + - SDN
1993 + languages:
1994 + - Arabic
1995 + - English
1996 + - Tigrinya
1997 + demonym: Eritrean
1998 + status: country
1999 + kind: country
2000 +- id: EST
2001 + iso2: EE
2002 + iso3: EST
2003 + iso_numeric: '233'
2004 + slug: estonia
2005 + short_name: Estonia
2006 + official_name: Republic of Estonia
2007 + capital: Tallinn
2008 + continent: Europe
2009 + region_wb: ECS
2010 + region_wb_name: Europe & Central Asia
2011 + subregion: Northern Europe
2012 + income_group: HIC
2013 + income_group_name: High income
2014 + currency_code: EUR
2015 + currency_name: Euro
2016 + area_km2: 45227
2017 + latitude: 59.4392
2018 + longitude: 24.7586
2019 + flag_emoji: 🇪🇪
2020 + un_member: true
2021 + independent: true
2022 + landlocked: false
2023 + borders:
2024 + - LVA
2025 + - RUS
2026 + languages:
2027 + - Estonian
2028 + demonym: Estonian
2029 + status: country
2030 + kind: country
2031 +- id: SWZ
2032 + iso2: SZ
2033 + iso3: SWZ
2034 + iso_numeric: '748'
2035 + slug: eswatini
2036 + short_name: Eswatini
2037 + official_name: Kingdom of Eswatini
2038 + capital: Lobamba
2039 + continent: Africa
2040 + region_wb: SSF
2041 + region_wb_name: Sub-Saharan Africa
2042 + subregion: Southern Africa
2043 + income_group: LMC
2044 + income_group_name: Lower middle income
2045 + currency_code: SZL
2046 + currency_name: Swazi lilangeni
2047 + area_km2: 17364
2048 + latitude: -26.5225
2049 + longitude: 31.4659
2050 + flag_emoji: 🇸🇿
2051 + un_member: true
2052 + independent: true
2053 + landlocked: true
2054 + borders:
2055 + - MOZ
2056 + - ZAF
2057 + languages:
2058 + - English
2059 + - Swazi
2060 + demonym: Swazi
2061 + status: country
2062 + kind: country
2063 +- id: ETH
2064 + iso2: ET
2065 + iso3: ETH
2066 + iso_numeric: '231'
2067 + slug: ethiopia
2068 + short_name: Ethiopia
2069 + official_name: Federal Democratic Republic of Ethiopia
2070 + capital: Addis Ababa
2071 + continent: Africa
2072 + region_wb: SSF
2073 + region_wb_name: Sub-Saharan Africa
2074 + subregion: Eastern Africa
2075 + income_group: LIC
2076 + income_group_name: Low income
2077 + currency_code: ETB
2078 + currency_name: Ethiopian birr
2079 + area_km2: 1104300
2080 + latitude: 9.02274
2081 + longitude: 38.7468
2082 + flag_emoji: 🇪🇹
2083 + un_member: true
2084 + independent: true
2085 + landlocked: true
2086 + borders:
2087 + - DJI
2088 + - ERI
2089 + - KEN
2090 + - SOM
2091 + - SSD
2092 + - SDN
2093 + languages:
2094 + - Amharic
2095 + demonym: Ethiopian
2096 + status: country
2097 + kind: country
2098 +- id: FRO
2099 + iso2: FO
2100 + iso3: FRO
2101 + iso_numeric: '234'
2102 + slug: faroe-islands
2103 + short_name: Faroe Islands
2104 + official_name: Faroe Islands
2105 + capital: Tórshavn
2106 + continent: Europe
2107 + region_wb: ECS
2108 + region_wb_name: Europe & Central Asia
2109 + subregion: Northern Europe
2110 + income_group: HIC
2111 + income_group_name: High income
2112 + currency_code: DKK
2113 + currency_name: Danish krone
2114 + area_km2: 1393
2115 + latitude: 61.8926
2116 + longitude: -6.91181
2117 + flag_emoji: 🇫🇴
2118 + un_member: false
2119 + independent: false
2120 + landlocked: false
2121 + borders: []
2122 + languages:
2123 + - Danish
2124 + - Faroese
2125 + demonym: Faroese
2126 + status: territory
2127 + kind: country
2128 +- id: FJI
2129 + iso2: FJ
2130 + iso3: FJI
2131 + iso_numeric: '242'
2132 + slug: fiji
2133 + short_name: Fiji
2134 + official_name: Republic of Fiji
2135 + capital: Suva
2136 + continent: Oceania
2137 + region_wb: EAS
2138 + region_wb_name: East Asia & Pacific
2139 + subregion: Melanesia
2140 + income_group: UMC
2141 + income_group_name: Upper middle income
2142 + currency_code: FJD
2143 + currency_name: Fijian dollar
2144 + area_km2: 18272
2145 + latitude: -18.1149
2146 + longitude: 178.399
2147 + flag_emoji: 🇫🇯
2148 + un_member: true
2149 + independent: true
2150 + landlocked: false
2151 + borders: []
2152 + languages:
2153 + - English
2154 + - Fiji Hindi
2155 + - Fijian
2156 + demonym: Fijian
2157 + status: country
2158 + kind: country
2159 +- id: FIN
2160 + iso2: FI
2161 + iso3: FIN
2162 + iso_numeric: '246'
2163 + slug: finland
2164 + short_name: Finland
2165 + official_name: Republic of Finland
2166 + capital: Helsinki
2167 + continent: Europe
2168 + region_wb: ECS
2169 + region_wb_name: Europe & Central Asia
2170 + subregion: Northern Europe
2171 + income_group: HIC
2172 + income_group_name: High income
2173 + currency_code: EUR
2174 + currency_name: Euro
2175 + area_km2: 338424
2176 + latitude: 60.1608
2177 + longitude: 24.9525
2178 + flag_emoji: 🇫🇮
2179 + un_member: true
2180 + independent: true
2181 + landlocked: false
2182 + borders:
2183 + - NOR
2184 + - SWE
2185 + - RUS
2186 + languages:
2187 + - Finnish
2188 + - Swedish
2189 + demonym: Finnish
2190 + status: country
2191 + kind: country
2192 +- id: FRA
2193 + iso2: FR
2194 + iso3: FRA
2195 + iso_numeric: '250'
2196 + slug: france
2197 + short_name: France
2198 + official_name: French Republic
2199 + capital: Paris
2200 + continent: Europe
2201 + region_wb: ECS
2202 + region_wb_name: Europe & Central Asia
2203 + subregion: Western Europe
2204 + income_group: HIC
2205 + income_group_name: High income
2206 + currency_code: EUR
2207 + currency_name: Euro
2208 + area_km2: 551695
2209 + latitude: 48.8566
2210 + longitude: 2.35097
2211 + flag_emoji: 🇫🇷
2212 + un_member: true
2213 + independent: true
2214 + landlocked: false
2215 + borders:
2216 + - AND
2217 + - BEL
2218 + - DEU
2219 + - ITA
2220 + - LUX
2221 + - MCO
2222 + - ESP
2223 + - CHE
2224 + languages:
2225 + - French
2226 + demonym: French
2227 + status: country
2228 + kind: country
2229 +- id: PYF
2230 + iso2: PF
2231 + iso3: PYF
2232 + iso_numeric: '258'
2233 + slug: french-polynesia
2234 + short_name: French Polynesia
2235 + official_name: French Polynesia
2236 + capital: Papeetē
2237 + continent: Oceania
2238 + region_wb: EAS
2239 + region_wb_name: East Asia & Pacific
2240 + subregion: Polynesia
2241 + income_group: HIC
2242 + income_group_name: High income
2243 + currency_code: XPF
2244 + currency_name: CFP franc
2245 + area_km2: 4167
2246 + latitude: -17.535
2247 + longitude: -149.57
2248 + flag_emoji: 🇵🇫
2249 + un_member: false
2250 + independent: false
2251 + landlocked: false
2252 + borders: []
2253 + languages:
2254 + - French
2255 + demonym: French Polynesian
2256 + status: territory
2257 + kind: country
2258 +- id: GAB
2259 + iso2: GA
2260 + iso3: GAB
2261 + iso_numeric: '266'
2262 + slug: gabon
2263 + short_name: Gabon
2264 + official_name: Gabonese Republic
2265 + capital: Libreville
2266 + continent: Africa
2267 + region_wb: SSF
2268 + region_wb_name: Sub-Saharan Africa
2269 + subregion: Middle Africa
2270 + income_group: UMC
2271 + income_group_name: Upper middle income
2272 + currency_code: XAF
2273 + currency_name: Central African CFA franc
2274 + area_km2: 267668
2275 + latitude: 0.38832
2276 + longitude: 9.45162
2277 + flag_emoji: 🇬🇦
2278 + un_member: true
2279 + independent: true
2280 + landlocked: false
2281 + borders:
2282 + - CMR
2283 + - COG
2284 + - GNQ
2285 + languages:
2286 + - French
2287 + demonym: Gabonese
2288 + status: country
2289 + kind: country
2290 +- id: GMB
2291 + iso2: GM
2292 + iso3: GMB
2293 + iso_numeric: '270'
2294 + slug: gambia
2295 + short_name: Gambia
2296 + official_name: Republic of the Gambia
2297 + capital: Banjul
2298 + continent: Africa
2299 + region_wb: SSF
2300 + region_wb_name: Sub-Saharan Africa
2301 + subregion: Western Africa
2302 + income_group: LIC
2303 + income_group_name: Low income
2304 + currency_code: GMD
2305 + currency_name: dalasi
2306 + area_km2: 10689
2307 + latitude: 13.4495
2308 + longitude: -16.5885
2309 + flag_emoji: 🇬🇲
2310 + un_member: true
2311 + independent: true
2312 + landlocked: false
2313 + borders:
2314 + - SEN
2315 + languages:
2316 + - English
2317 + demonym: Gambian
2318 + status: country
2319 + kind: country
2320 +- id: GEO
2321 + iso2: GE
2322 + iso3: GEO
2323 + iso_numeric: '268'
2324 + slug: georgia
2325 + short_name: Georgia
2326 + official_name: Georgia
2327 + capital: Tbilisi
2328 + continent: Asia
2329 + region_wb: ECS
2330 + region_wb_name: Europe & Central Asia
2331 + subregion: Western Asia
2332 + income_group: UMC
2333 + income_group_name: Upper middle income
2334 + currency_code: GEL
2335 + currency_name: lari
2336 + area_km2: 69700
2337 + latitude: 41.71
2338 + longitude: 44.793
2339 + flag_emoji: 🇬🇪
2340 + un_member: true
2341 + independent: true
2342 + landlocked: false
2343 + borders:
2344 + - ARM
2345 + - AZE
2346 + - RUS
2347 + - TUR
2348 + languages:
2349 + - Georgian
2350 + demonym: Georgian
2351 + status: country
2352 + kind: country
2353 +- id: DEU
2354 + iso2: DE
2355 + iso3: DEU
2356 + iso_numeric: '276'
2357 + slug: germany
2358 + short_name: Germany
2359 + official_name: Federal Republic of Germany
2360 + capital: Berlin
2361 + continent: Europe
2362 + region_wb: ECS
2363 + region_wb_name: Europe & Central Asia
2364 + subregion: Western Europe
2365 + income_group: HIC
2366 + income_group_name: High income
2367 + currency_code: EUR
2368 + currency_name: Euro
2369 + area_km2: 357114
2370 + latitude: 52.5235
2371 + longitude: 13.4115
2372 + flag_emoji: 🇩🇪
2373 + un_member: true
2374 + independent: true
2375 + landlocked: false
2376 + borders:
2377 + - AUT
2378 + - BEL
2379 + - CZE
2380 + - DNK
2381 + - FRA
2382 + - LUX
2383 + - NLD
2384 + - POL
2385 + - CHE
2386 + languages:
2387 + - German
2388 + demonym: German
2389 + status: country
2390 + kind: country
2391 +- id: GHA
2392 + iso2: GH
2393 + iso3: GHA
2394 + iso_numeric: '288'
2395 + slug: ghana
2396 + short_name: Ghana
2397 + official_name: Republic of Ghana
2398 + capital: Accra
2399 + continent: Africa
2400 + region_wb: SSF
2401 + region_wb_name: Sub-Saharan Africa
2402 + subregion: Western Africa
2403 + income_group: LMC
2404 + income_group_name: Lower middle income
2405 + currency_code: GHS
2406 + currency_name: Ghanaian cedi
2407 + area_km2: 238533
2408 + latitude: 5.57045
2409 + longitude: -0.20795
2410 + flag_emoji: 🇬🇭
2411 + un_member: true
2412 + independent: true
2413 + landlocked: false
2414 + borders:
2415 + - BFA
2416 + - CIV
2417 + - TGO
2418 + languages:
2419 + - English
2420 + demonym: Ghanaian
2421 + status: country
2422 + kind: country
2423 +- id: GIB
2424 + iso2: GI
2425 + iso3: GIB
2426 + iso_numeric: '292'
2427 + slug: gibraltar
2428 + short_name: Gibraltar
2429 + official_name: Gibraltar
2430 + capital: Gibraltar
2431 + continent: Europe
2432 + region_wb: ECS
2433 + region_wb_name: Europe & Central Asia
2434 + subregion: Southern Europe
2435 + income_group: HIC
2436 + income_group_name: High income
2437 + currency_code: GIP
2438 + currency_name: Gibraltar pound
2439 + area_km2: 6
2440 + latitude: 36.13333333
2441 + longitude: -5.35
2442 + flag_emoji: 🇬🇮
2443 + un_member: false
2444 + independent: false
2445 + landlocked: false
2446 + borders:
2447 + - ESP
2448 + languages:
2449 + - English
2450 + demonym: Gibraltar
2451 + status: territory
2452 + kind: country
2453 +- id: GRC
2454 + iso2: GR
2455 + iso3: GRC
2456 + iso_numeric: '300'
2457 + slug: greece
2458 + short_name: Greece
2459 + official_name: Hellenic Republic
2460 + capital: Athens
2461 + continent: Europe
2462 + region_wb: ECS
2463 + region_wb_name: Europe & Central Asia
2464 + subregion: Southern Europe
2465 + income_group: HIC
2466 + income_group_name: High income
2467 + currency_code: EUR
2468 + currency_name: Euro
2469 + area_km2: 131990
2470 + latitude: 37.9792
2471 + longitude: 23.7166
2472 + flag_emoji: 🇬🇷
2473 + un_member: true
2474 + independent: true
2475 + landlocked: false
2476 + borders:
2477 + - ALB
2478 + - BGR
2479 + - TUR
2480 + - MKD
2481 + languages:
2482 + - Greek
2483 + demonym: Greek
2484 + status: country
2485 + kind: country
2486 +- id: GRL
2487 + iso2: GL
2488 + iso3: GRL
2489 + iso_numeric: '304'
2490 + slug: greenland
2491 + short_name: Greenland
2492 + official_name: Greenland
2493 + capital: Nuuk
2494 + continent: Americas
2495 + region_wb: ECS
2496 + region_wb_name: Europe & Central Asia
2497 + subregion: North America
2498 + income_group: HIC
2499 + income_group_name: High income
2500 + currency_code: DKK
2501 + currency_name: krone
2502 + area_km2: 2166086
2503 + latitude: 64.1836
2504 + longitude: -51.7214
2505 + flag_emoji: 🇬🇱
2506 + un_member: false
2507 + independent: false
2508 + landlocked: false
2509 + borders: []
2510 + languages:
2511 + - Greenlandic
2512 + demonym: Greenlandic
2513 + status: territory
2514 + kind: country
2515 +- id: GRD
2516 + iso2: GD
2517 + iso3: GRD
2518 + iso_numeric: '308'
2519 + slug: grenada
2520 + short_name: Grenada
2521 + official_name: Grenada
2522 + capital: St. George's
2523 + continent: Americas
2524 + region_wb: LCN
2525 + region_wb_name: Latin America & Caribbean
2526 + subregion: Caribbean
2527 + income_group: UMC
2528 + income_group_name: Upper middle income
2529 + currency_code: XCD
2530 + currency_name: Eastern Caribbean dollar
2531 + area_km2: 344
2532 + latitude: 12.0653
2533 + longitude: -61.7449
2534 + flag_emoji: 🇬🇩
2535 + un_member: true
2536 + independent: true
2537 + landlocked: false
2538 + borders: []
2539 + languages:
2540 + - English
2541 + demonym: Grenadian
2542 + status: country
2543 + kind: country
2544 +- id: GUM
2545 + iso2: GU
2546 + iso3: GUM
2547 + iso_numeric: '316'
2548 + slug: guam
2549 + short_name: Guam
2550 + official_name: Guam
2551 + capital: Hagåtña
2552 + continent: Oceania
2553 + region_wb: EAS
2554 + region_wb_name: East Asia & Pacific
2555 + subregion: Micronesia
2556 + income_group: HIC
2557 + income_group_name: High income
2558 + currency_code: USD
2559 + currency_name: United States dollar
2560 + area_km2: 549
2561 + latitude: 13.4443
2562 + longitude: 144.794
2563 + flag_emoji: 🇬🇺
2564 + un_member: false
2565 + independent: false
2566 + landlocked: false
2567 + borders: []
2568 + languages:
2569 + - Chamorro
2570 + - English
2571 + - Spanish
2572 + demonym: Guamanian
2573 + status: territory
2574 + kind: country
2575 +- id: GTM
2576 + iso2: GT
2577 + iso3: GTM
2578 + iso_numeric: '320'
2579 + slug: guatemala
2580 + short_name: Guatemala
2581 + official_name: Republic of Guatemala
2582 + capital: Guatemala City
2583 + continent: Americas
2584 + region_wb: LCN
2585 + region_wb_name: Latin America & Caribbean
2586 + subregion: Central America
2587 + income_group: UMC
2588 + income_group_name: Upper middle income
2589 + currency_code: GTQ
2590 + currency_name: Guatemalan quetzal
2591 + area_km2: 108889
2592 + latitude: 14.6248
2593 + longitude: -90.5328
2594 + flag_emoji: 🇬🇹
2595 + un_member: true
2596 + independent: true
2597 + landlocked: false
2598 + borders:
2599 + - BLZ
2600 + - SLV
2601 + - HND
2602 + - MEX
2603 + languages:
2604 + - Spanish
2605 + demonym: Guatemalan
2606 + status: country
2607 + kind: country
2608 +- id: GIN
2609 + iso2: GN
2610 + iso3: GIN
2611 + iso_numeric: '324'
2612 + slug: guinea
2613 + short_name: Guinea
2614 + official_name: Republic of Guinea
2615 + capital: Conakry
2616 + continent: Africa
2617 + region_wb: SSF
2618 + region_wb_name: Sub-Saharan Africa
2619 + subregion: Western Africa
2620 + income_group: LMC
2621 + income_group_name: Lower middle income
2622 + currency_code: GNF
2623 + currency_name: Guinean franc
2624 + area_km2: 245857
2625 + latitude: 9.51667
2626 + longitude: -13.7
2627 + flag_emoji: 🇬🇳
2628 + un_member: true
2629 + independent: true
2630 + landlocked: false
2631 + borders:
2632 + - CIV
2633 + - GNB
2634 + - LBR
2635 + - MLI
2636 + - SEN
2637 + - SLE
2638 + languages:
2639 + - French
2640 + demonym: Guinean
2641 + status: country
2642 + kind: country
2643 +- id: GNB
2644 + iso2: GW
2645 + iso3: GNB
2646 + iso_numeric: '624'
2647 + slug: guinea-bissau
2648 + short_name: Guinea-Bissau
2649 + official_name: Republic of Guinea-Bissau
2650 + capital: Bissau
2651 + continent: Africa
2652 + region_wb: SSF
2653 + region_wb_name: Sub-Saharan Africa
2654 + subregion: Western Africa
2655 + income_group: LIC
2656 + income_group_name: Low income
2657 + currency_code: XOF
2658 + currency_name: West African CFA franc
2659 + area_km2: 36125
2660 + latitude: 11.8037
2661 + longitude: -15.1804
2662 + flag_emoji: 🇬🇼
2663 + un_member: true
2664 + independent: true
2665 + landlocked: false
2666 + borders:
2667 + - GIN
2668 + - SEN
2669 + languages:
2670 + - Portuguese
2671 + - Upper Guinea Creole
2672 + demonym: Guinea-Bissauan
2673 + status: country
2674 + kind: country
2675 +- id: GUY
2676 + iso2: GY
2677 + iso3: GUY
2678 + iso_numeric: '328'
2679 + slug: guyana
2680 + short_name: Guyana
2681 + official_name: Co-operative Republic of Guyana
2682 + capital: Georgetown
2683 + continent: Americas
2684 + region_wb: LCN
2685 + region_wb_name: Latin America & Caribbean
2686 + subregion: South America
2687 + income_group: HIC
2688 + income_group_name: High income
2689 + currency_code: GYD
2690 + currency_name: Guyanese dollar
2691 + area_km2: 214969
2692 + latitude: 6.80461
2693 + longitude: -58.1548
2694 + flag_emoji: 🇬🇾
2695 + un_member: true
2696 + independent: true
2697 + landlocked: false
2698 + borders:
2699 + - BRA
2700 + - SUR
2701 + - VEN
2702 + languages:
2703 + - English
2704 + demonym: Guyanese
2705 + status: country
2706 + kind: country
2707 +- id: HTI
2708 + iso2: HT
2709 + iso3: HTI
2710 + iso_numeric: '332'
2711 + slug: haiti
2712 + short_name: Haiti
2713 + official_name: Republic of Haiti
2714 + capital: Port-au-Prince
2715 + continent: Americas
2716 + region_wb: LCN
2717 + region_wb_name: Latin America & Caribbean
2718 + subregion: Caribbean
2719 + income_group: LMC
2720 + income_group_name: Lower middle income
2721 + currency_code: HTG
2722 + currency_name: Haitian gourde
2723 + area_km2: 27750
2724 + latitude: 18.5392
2725 + longitude: -72.3288
2726 + flag_emoji: 🇭🇹
2727 + un_member: true
2728 + independent: true
2729 + landlocked: false
2730 + borders:
2731 + - DOM
2732 + languages:
2733 + - French
2734 + - Haitian Creole
2735 + demonym: Haitian
2736 + status: country
2737 + kind: country
2738 +- id: HND
2739 + iso2: HN
2740 + iso3: HND
2741 + iso_numeric: '340'
2742 + slug: honduras
2743 + short_name: Honduras
2744 + official_name: Republic of Honduras
2745 + capital: Tegucigalpa
2746 + continent: Americas
2747 + region_wb: LCN
2748 + region_wb_name: Latin America & Caribbean
2749 + subregion: Central America
2750 + income_group: LMC
2751 + income_group_name: Lower middle income
2752 + currency_code: HNL
2753 + currency_name: Honduran lempira
2754 + area_km2: 112492
2755 + latitude: 15.1333
2756 + longitude: -87.4667
2757 + flag_emoji: 🇭🇳
2758 + un_member: true
2759 + independent: true
2760 + landlocked: false
2761 + borders:
2762 + - GTM
2763 + - SLV
2764 + - NIC
2765 + languages:
2766 + - Spanish
2767 + demonym: Honduran
2768 + status: country
2769 + kind: country
2770 +- id: HKG
2771 + iso2: HK
2772 + iso3: HKG
2773 + iso_numeric: '344'
2774 + slug: hong-kong
2775 + short_name: Hong Kong
2776 + official_name: Hong Kong Special Administrative Region of the People's Republic of China
2777 + capital: City of Victoria
2778 + continent: Asia
2779 + region_wb: EAS
2780 + region_wb_name: East Asia & Pacific
2781 + subregion: Eastern Asia
2782 + income_group: HIC
2783 + income_group_name: High income
2784 + currency_code: HKD
2785 + currency_name: Hong Kong dollar
2786 + area_km2: 1104
2787 + latitude: 22.3964
2788 + longitude: 114.109
2789 + flag_emoji: 🇭🇰
2790 + un_member: false
2791 + independent: false
2792 + landlocked: false
2793 + borders:
2794 + - CHN
2795 + languages:
2796 + - Chinese
2797 + - English
2798 + demonym: Hong Konger
2799 + status: territory
2800 + kind: country
2801 +- id: HUN
2802 + iso2: HU
2803 + iso3: HUN
2804 + iso_numeric: '348'
2805 + slug: hungary
2806 + short_name: Hungary
2807 + official_name: Hungary
2808 + capital: Budapest
2809 + continent: Europe
2810 + region_wb: ECS
2811 + region_wb_name: Europe & Central Asia
2812 + subregion: Central Europe
2813 + income_group: HIC
2814 + income_group_name: High income
2815 + currency_code: HUF
2816 + currency_name: Hungarian forint
2817 + area_km2: 93028
2818 + latitude: 47.4984
2819 + longitude: 19.0408
2820 + flag_emoji: 🇭🇺
2821 + un_member: true
2822 + independent: true
2823 + landlocked: true
2824 + borders:
2825 + - AUT
2826 + - HRV
2827 + - ROU
2828 + - SRB
2829 + - SVK
2830 + - SVN
2831 + - UKR
2832 + languages:
2833 + - Hungarian
2834 + demonym: Hungarian
2835 + status: country
2836 + kind: country
2837 +- id: ISL
2838 + iso2: IS
2839 + iso3: ISL
2840 + iso_numeric: '352'
2841 + slug: iceland
2842 + short_name: Iceland
2843 + official_name: Iceland
2844 + capital: Reykjavik
2845 + continent: Europe
2846 + region_wb: ECS
2847 + region_wb_name: Europe & Central Asia
2848 + subregion: Northern Europe
2849 + income_group: HIC
2850 + income_group_name: High income
2851 + currency_code: ISK
2852 + currency_name: Icelandic króna
2853 + area_km2: 103000
2854 + latitude: 64.1353
2855 + longitude: -21.8952
2856 + flag_emoji: 🇮🇸
2857 + un_member: true
2858 + independent: true
2859 + landlocked: false
2860 + borders: []
2861 + languages:
2862 + - Icelandic
2863 + demonym: Icelander
2864 + status: country
2865 + kind: country
2866 +- id: IND
2867 + iso2: IN
2868 + iso3: IND
2869 + iso_numeric: '356'
2870 + slug: india
2871 + short_name: India
2872 + official_name: Republic of India
2873 + capital: New Delhi
2874 + continent: Asia
2875 + region_wb: SAS
2876 + region_wb_name: South Asia
2877 + subregion: Southern Asia
2878 + income_group: LMC
2879 + income_group_name: Lower middle income
2880 + currency_code: INR
2881 + currency_name: Indian rupee
2882 + area_km2: 3287590
2883 + latitude: 28.6353
2884 + longitude: 77.225
2885 + flag_emoji: 🇮🇳
2886 + un_member: true
2887 + independent: true
2888 + landlocked: false
2889 + borders:
2890 + - BGD
2891 + - BTN
2892 + - MMR
2893 + - CHN
2894 + - NPL
2895 + - PAK
2896 + languages:
2897 + - English
2898 + - Hindi
2899 + - Tamil
2900 + demonym: Indian
2901 + status: country
2902 + kind: country
2903 +- id: IDN
2904 + iso2: ID
2905 + iso3: IDN
2906 + iso_numeric: '360'
2907 + slug: indonesia
2908 + short_name: Indonesia
2909 + official_name: Republic of Indonesia
2910 + capital: Jakarta
2911 + continent: Asia
2912 + region_wb: EAS
2913 + region_wb_name: East Asia & Pacific
2914 + subregion: South-Eastern Asia
2915 + income_group: UMC
2916 + income_group_name: Upper middle income
2917 + currency_code: IDR
2918 + currency_name: Indonesian rupiah
2919 + area_km2: 1904569
2920 + latitude: -6.19752
2921 + longitude: 106.83
2922 + flag_emoji: 🇮🇩
2923 + un_member: true
2924 + independent: true
2925 + landlocked: false
2926 + borders:
2927 + - TLS
2928 + - MYS
2929 + - PNG
2930 + languages:
2931 + - Indonesian
2932 + demonym: Indonesian
2933 + status: country
2934 + kind: country
2935 +- id: IRN
2936 + iso2: IR
2937 + iso3: IRN
2938 + iso_numeric: '364'
2939 + slug: iran
2940 + short_name: Iran
2941 + official_name: Islamic Republic of Iran
2942 + capital: Tehran
2943 + continent: Asia
2944 + region_wb: MEA
2945 + region_wb_name: Middle East, North Africa, Afghanistan & Pakistan
2946 + subregion: Southern Asia
2947 + income_group: UMC
2948 + income_group_name: Upper middle income
2949 + currency_code: IRR
2950 + currency_name: Iranian rial
2951 + area_km2: 1648195
2952 + latitude: 35.6878
2953 + longitude: 51.4447
2954 + flag_emoji: 🇮🇷
2955 + un_member: true
2956 + independent: true
2957 + landlocked: false
2958 + borders:
2959 + - AFG
2960 + - ARM
2961 + - AZE
2962 + - IRQ
2963 + - PAK
2964 + - TUR
2965 + - TKM
2966 + languages:
2967 + - Persian (Farsi)
2968 + demonym: Iranian
2969 + status: country
2970 + kind: country
2971 +- id: IRQ
2972 + iso2: IQ
2973 + iso3: IRQ
2974 + iso_numeric: '368'
2975 + slug: iraq
2976 + short_name: Iraq
2977 + official_name: Republic of Iraq
2978 + capital: Baghdad
2979 + continent: Asia
2980 + region_wb: MEA
2981 + region_wb_name: Middle East, North Africa, Afghanistan & Pakistan
2982 + subregion: Western Asia
2983 + income_group: UMC
2984 + income_group_name: Upper middle income
2985 + currency_code: IQD
2986 + currency_name: Iraqi dinar
2987 + area_km2: 438317
2988 + latitude: 33.3302
2989 + longitude: 44.394
2990 + flag_emoji: 🇮🇶
2991 + un_member: true
2992 + independent: true
2993 + landlocked: false
2994 + borders:
2995 + - IRN
2996 + - JOR
2997 + - KWT
2998 + - SAU
2999 + - SYR
3000 + - TUR
3001 + languages:
3002 + - Arabic
3003 + - Aramaic
3004 + - Sorani
3005 + demonym: Iraqi
3006 + status: country
3007 + kind: country
3008 +- id: IRL
3009 + iso2: IE
3010 + iso3: IRL
3011 + iso_numeric: '372'
3012 + slug: ireland
3013 + short_name: Ireland
3014 + official_name: Republic of Ireland
3015 + capital: Dublin
3016 + continent: Europe
3017 + region_wb: ECS
3018 + region_wb_name: Europe & Central Asia
3019 + subregion: Northern Europe
3020 + income_group: HIC
3021 + income_group_name: High income
3022 + currency_code: EUR
3023 + currency_name: Euro
3024 + area_km2: 70273
3025 + latitude: 53.3441
3026 + longitude: -6.26749
3027 + flag_emoji: 🇮🇪
3028 + un_member: true
3029 + independent: true
3030 + landlocked: false
3031 + borders:
3032 + - GBR
3033 + languages:
3034 + - English
3035 + - Irish
3036 + demonym: Irish
3037 + status: country
3038 + kind: country
3039 +- id: IMN
3040 + iso2: IM
3041 + iso3: IMN
3042 + iso_numeric: '833'
3043 + slug: isle-of-man
3044 + short_name: Isle of Man
3045 + official_name: Isle of Man
3046 + capital: Douglas
3047 + continent: Europe
3048 + region_wb: ECS
3049 + region_wb_name: Europe & Central Asia
3050 + subregion: Northern Europe
3051 + income_group: HIC
3052 + income_group_name: High income
3053 + currency_code: GBP
3054 + currency_name: British pound
3055 + area_km2: 572
3056 + latitude: 54.1509
3057 + longitude: -4.47928
3058 + flag_emoji: 🇮🇲
3059 + un_member: false
3060 + independent: false
3061 + landlocked: false
3062 + borders: []
3063 + languages:
3064 + - English
3065 + - Manx
3066 + demonym: Manx
3067 + status: territory
3068 + kind: country
3069 +- id: ISR
3070 + iso2: IL
3071 + iso3: ISR
3072 + iso_numeric: '376'
3073 + slug: israel
3074 + short_name: Israel
3075 + official_name: State of Israel
3076 + capital: Jerusalem
3077 + continent: Asia
3078 + region_wb: MEA
3079 + region_wb_name: Middle East, North Africa, Afghanistan & Pakistan
3080 + subregion: Western Asia
3081 + income_group: HIC
3082 + income_group_name: High income
3083 + currency_code: ILS
3084 + currency_name: Israeli new shekel
3085 + area_km2: 20770
3086 + latitude: 31.7717
3087 + longitude: 35.2035
3088 + flag_emoji: 🇮🇱
3089 + un_member: true
3090 + independent: true
3091 + landlocked: false
3092 + borders:
3093 + - EGY
3094 + - JOR
3095 + - LBN
3096 + - PSE
3097 + - SYR
3098 + languages:
3099 + - Arabic
3100 + - Hebrew
3101 + demonym: Israeli
3102 + status: country
3103 + kind: country
3104 +- id: ITA
3105 + iso2: IT
3106 + iso3: ITA
3107 + iso_numeric: '380'
3108 + slug: italy
3109 + short_name: Italy
3110 + official_name: Italian Republic
3111 + capital: Rome
3112 + continent: Europe
3113 + region_wb: ECS
3114 + region_wb_name: Europe & Central Asia
3115 + subregion: Southern Europe
3116 + income_group: HIC
3117 + income_group_name: High income
3118 + currency_code: EUR
3119 + currency_name: Euro
3120 + area_km2: 301336
3121 + latitude: 41.8955
3122 + longitude: 12.4823
3123 + flag_emoji: 🇮🇹
3124 + un_member: true
3125 + independent: true
3126 + landlocked: false
3127 + borders:
3128 + - AUT
3129 + - FRA
3130 + - SMR
3131 + - SVN
3132 + - CHE
3133 + - VAT
3134 + languages:
3135 + - Italian
3136 + demonym: Italian
3137 + status: country
3138 + kind: country
3139 +- id: JAM
3140 + iso2: JM
3141 + iso3: JAM
3142 + iso_numeric: '388'
3143 + slug: jamaica
3144 + short_name: Jamaica
3145 + official_name: Jamaica
3146 + capital: Kingston
3147 + continent: Americas
3148 + region_wb: LCN
3149 + region_wb_name: Latin America & Caribbean
3150 + subregion: Caribbean
3151 + income_group: UMC
3152 + income_group_name: Upper middle income
3153 + currency_code: JMD
3154 + currency_name: Jamaican dollar
3155 + area_km2: 10991
3156 + latitude: 17.9927
3157 + longitude: -76.792
3158 + flag_emoji: 🇯🇲
3159 + un_member: true
3160 + independent: true
3161 + landlocked: false
3162 + borders: []
3163 + languages:
3164 + - English
3165 + - Jamaican Patois
3166 + demonym: Jamaican
3167 + status: country
3168 + kind: country
3169 +- id: JPN
3170 + iso2: JP
3171 + iso3: JPN
3172 + iso_numeric: '392'
3173 + slug: japan
3174 + short_name: Japan
3175 + official_name: Japan
3176 + capital: Tokyo
3177 + continent: Asia
3178 + region_wb: EAS
3179 + region_wb_name: East Asia & Pacific
3180 + subregion: Eastern Asia
3181 + income_group: HIC
3182 + income_group_name: High income
3183 + currency_code: JPY
3184 + currency_name: Japanese yen
3185 + area_km2: 377930
3186 + latitude: 35.67
3187 + longitude: 139.77
3188 + flag_emoji: 🇯🇵
3189 + un_member: true
3190 + independent: true
3191 + landlocked: false
3192 + borders: []
3193 + languages:
3194 + - Japanese
3195 + demonym: Japanese
3196 + status: country
3197 + kind: country
3198 +- id: JOR
3199 + iso2: JO
3200 + iso3: JOR
3201 + iso_numeric: '400'
3202 + slug: jordan
3203 + short_name: Jordan
3204 + official_name: Hashemite Kingdom of Jordan
3205 + capital: Amman
3206 + continent: Asia
3207 + region_wb: MEA
3208 + region_wb_name: Middle East, North Africa, Afghanistan & Pakistan
3209 + subregion: Western Asia
3210 + income_group: UMC
3211 + income_group_name: Upper middle income
3212 + currency_code: JOD
3213 + currency_name: Jordanian dinar
3214 + area_km2: 89342
3215 + latitude: 31.9497
3216 + longitude: 35.9263
3217 + flag_emoji: 🇯🇴
3218 + un_member: true
3219 + independent: true
3220 + landlocked: false
3221 + borders:
3222 + - IRQ
3223 + - ISR
3224 + - PSE
3225 + - SAU
3226 + - SYR
3227 + languages:
3228 + - Arabic
3229 + demonym: Jordanian
3230 + status: country
3231 + kind: country
3232 +- id: KAZ
3233 + iso2: KZ
3234 + iso3: KAZ
3235 + iso_numeric: '398'
3236 + slug: kazakhstan
3237 + short_name: Kazakhstan
3238 + official_name: Republic of Kazakhstan
3239 + capital: Astana
3240 + continent: Asia
3241 + region_wb: ECS
3242 + region_wb_name: Europe & Central Asia
3243 + subregion: Central Asia
3244 + income_group: UMC
3245 + income_group_name: Upper middle income
3246 + currency_code: KZT
3247 + currency_name: Kazakhstani tenge
3248 + area_km2: 2724900
3249 + latitude: 51.1879
3250 + longitude: 71.4382
3251 + flag_emoji: 🇰🇿
3252 + un_member: true
3253 + independent: true
3254 + landlocked: true
3255 + borders:
3256 + - CHN
3257 + - KGZ
3258 + - RUS
3259 + - TKM
3260 + - UZB
3261 + languages:
3262 + - Kazakh
3263 + - Russian
3264 + demonym: Kazakhstani
3265 + status: country
3266 + kind: country
3267 +- id: KEN
3268 + iso2: KE
3269 + iso3: KEN
3270 + iso_numeric: '404'
3271 + slug: kenya
3272 + short_name: Kenya
3273 + official_name: Republic of Kenya
3274 + capital: Nairobi
3275 + continent: Africa
3276 + region_wb: SSF
3277 + region_wb_name: Sub-Saharan Africa
3278 + subregion: Eastern Africa
3279 + income_group: LMC
3280 + income_group_name: Lower middle income
3281 + currency_code: KES
3282 + currency_name: Kenyan shilling
3283 + area_km2: 580367
3284 + latitude: -1.27975
3285 + longitude: 36.8126
3286 + flag_emoji: 🇰🇪
3287 + un_member: true
3288 + independent: true
3289 + landlocked: false
3290 + borders:
3291 + - ETH
3292 + - SOM
3293 + - SSD
3294 + - TZA
3295 + - UGA
3296 + languages:
3297 + - English
3298 + - Swahili
3299 + demonym: Kenyan
3300 + status: country
3301 + kind: country
3302 +- id: KIR
3303 + iso2: KI
3304 + iso3: KIR
3305 + iso_numeric: '296'
3306 + slug: kiribati
3307 + short_name: Kiribati
3308 + official_name: Independent and Sovereign Republic of Kiribati
3309 + capital: South Tarawa
3310 + continent: Oceania
3311 + region_wb: EAS
3312 + region_wb_name: East Asia & Pacific
3313 + subregion: Micronesia
3314 + income_group: LMC
3315 + income_group_name: Lower middle income
3316 + currency_code: AUD
3317 + currency_name: Australian dollar
3318 + area_km2: 811
3319 + latitude: 1.32905
3320 + longitude: 172.979
3321 + flag_emoji: 🇰🇮
3322 + un_member: true
3323 + independent: true
3324 + landlocked: false
3325 + borders: []
3326 + languages:
3327 + - English
3328 + - Gilbertese
3329 + demonym: I-Kiribati
3330 + status: country
3331 + kind: country
3332 +- id: XKX
3333 + iso2: XK
3334 + iso3: XKX
3335 + iso_numeric: null
3336 + slug: kosovo
3337 + short_name: Kosovo
3338 + official_name: Republic of Kosovo
3339 + capital: Pristina
3340 + continent: Europe
3341 + region_wb: ECS
3342 + region_wb_name: Europe & Central Asia
3343 + subregion: Southeast Europe
3344 + income_group: UMC
3345 + income_group_name: Upper middle income
3346 + currency_code: EUR
3347 + currency_name: Euro
3348 + area_km2: 10908
3349 + latitude: 42.565
3350 + longitude: 20.926
3351 + flag_emoji: 🇽🇰
3352 + un_member: false
3353 + independent: false
3354 + landlocked: true
3355 + borders:
3356 + - ALB
3357 + - MKD
3358 + - MNE
3359 + - SRB
3360 + languages:
3361 + - Albanian
3362 + - Serbian
3363 + demonym: Kosovar
3364 + status: territory
3365 + kind: country
3366 +- id: KWT
3367 + iso2: KW
3368 + iso3: KWT
3369 + iso_numeric: '414'
3370 + slug: kuwait
3371 + short_name: Kuwait
3372 + official_name: State of Kuwait
3373 + capital: Kuwait City
3374 + continent: Asia
3375 + region_wb: MEA
3376 + region_wb_name: Middle East, North Africa, Afghanistan & Pakistan
3377 + subregion: Western Asia
3378 + income_group: HIC
3379 + income_group_name: High income
3380 + currency_code: KWD
3381 + currency_name: Kuwaiti dinar
3382 + area_km2: 17818
3383 + latitude: 29.3721
3384 + longitude: 47.9824
3385 + flag_emoji: 🇰🇼
3386 + un_member: true
3387 + independent: true
3388 + landlocked: false
3389 + borders:
3390 + - IRQ
3391 + - SAU
3392 + languages:
3393 + - Arabic
3394 + demonym: Kuwaiti
3395 + status: country
3396 + kind: country
3397 +- id: KGZ
3398 + iso2: KG
3399 + iso3: KGZ
3400 + iso_numeric: '417'
3401 + slug: kyrgyzstan
3402 + short_name: Kyrgyzstan
3403 + official_name: Kyrgyz Republic
3404 + capital: Bishkek
3405 + continent: Asia
3406 + region_wb: ECS
3407 + region_wb_name: Europe & Central Asia
3408 + subregion: Central Asia
3409 + income_group: LMC
3410 + income_group_name: Lower middle income
3411 + currency_code: KGS
3412 + currency_name: Kyrgyzstani som
3413 + area_km2: 199951
3414 + latitude: 42.8851
3415 + longitude: 74.6057
3416 + flag_emoji: 🇰🇬
3417 + un_member: true
3418 + independent: true
3419 + landlocked: true
3420 + borders:
3421 + - CHN
3422 + - KAZ
3423 + - TJK
3424 + - UZB
3425 + languages:
3426 + - Kyrgyz
3427 + - Russian
3428 + demonym: Kirghiz
3429 + status: country
3430 + kind: country
3431 +- id: LAO
3432 + iso2: LA
3433 + iso3: LAO
3434 + iso_numeric: '418'
3435 + slug: laos
3436 + short_name: Laos
3437 + official_name: Lao People's Democratic Republic
3438 + capital: Vientiane
3439 + continent: Asia
3440 + region_wb: EAS
3441 + region_wb_name: East Asia & Pacific
3442 + subregion: South-Eastern Asia
3443 + income_group: LMC
3444 + income_group_name: Lower middle income
3445 + currency_code: LAK
3446 + currency_name: Lao kip
3447 + area_km2: 236800
3448 + latitude: 18.5826
3449 + longitude: 102.177
3450 + flag_emoji: 🇱🇦
3451 + un_member: true
3452 + independent: true
3453 + landlocked: true
3454 + borders:
3455 + - MMR
3456 + - KHM
3457 + - CHN
3458 + - THA
3459 + - VNM
3460 + languages:
3461 + - Lao
3462 + demonym: Laotian
3463 + status: country
3464 + kind: country
3465 +- id: LVA
3466 + iso2: LV
3467 + iso3: LVA
3468 + iso_numeric: '428'
3469 + slug: latvia
3470 + short_name: Latvia
3471 + official_name: Republic of Latvia
3472 + capital: Riga
3473 + continent: Europe
3474 + region_wb: ECS
3475 + region_wb_name: Europe & Central Asia
3476 + subregion: Northern Europe
3477 + income_group: HIC
3478 + income_group_name: High income
3479 + currency_code: EUR
3480 + currency_name: Euro
3481 + area_km2: 64559
3482 + latitude: 56.9465
3483 + longitude: 24.1048
3484 + flag_emoji: 🇱🇻
3485 + un_member: true
3486 + independent: true
3487 + landlocked: false
3488 + borders:
3489 + - BLR
3490 + - EST
3491 + - LTU
3492 + - RUS
3493 + languages:
3494 + - Latvian
3495 + demonym: Latvian
3496 + status: country
3497 + kind: country
3498 +- id: LBN
3499 + iso2: LB
3500 + iso3: LBN
3501 + iso_numeric: '422'
3502 + slug: lebanon
3503 + short_name: Lebanon
3504 + official_name: Lebanese Republic
3505 + capital: Beirut
3506 + continent: Asia
3507 + region_wb: MEA
3508 + region_wb_name: Middle East, North Africa, Afghanistan & Pakistan
3509 + subregion: Western Asia
3510 + income_group: LMC
3511 + income_group_name: Lower middle income
3512 + currency_code: LBP
3513 + currency_name: Lebanese pound
3514 + area_km2: 10452
3515 + latitude: 33.8872
3516 + longitude: 35.5134
3517 + flag_emoji: 🇱🇧
3518 + un_member: true
3519 + independent: true
3520 + landlocked: false
3521 + borders:
3522 + - ISR
3523 + - SYR
3524 + languages:
3525 + - Arabic
3526 + - French
3527 + demonym: Lebanese
3528 + status: country
3529 + kind: country
3530 +- id: LSO
3531 + iso2: LS
3532 + iso3: LSO
3533 + iso_numeric: '426'
3534 + slug: lesotho
3535 + short_name: Lesotho
3536 + official_name: Kingdom of Lesotho
3537 + capital: Maseru
3538 + continent: Africa
3539 + region_wb: SSF
3540 + region_wb_name: Sub-Saharan Africa
3541 + subregion: Southern Africa
3542 + income_group: LMC
3543 + income_group_name: Lower middle income
3544 + currency_code: LSL
3545 + currency_name: Lesotho loti
3546 + area_km2: 30355
3547 + latitude: -29.5208
3548 + longitude: 27.7167
3549 + flag_emoji: 🇱🇸
3550 + un_member: true
3551 + independent: true
3552 + landlocked: true
3553 + borders:
3554 + - ZAF
3555 + languages:
3556 + - English
3557 + - Sotho
3558 + demonym: Mosotho
3559 + status: country
3560 + kind: country
3561 +- id: LBR
3562 + iso2: LR
3563 + iso3: LBR
3564 + iso_numeric: '430'
3565 + slug: liberia
3566 + short_name: Liberia
3567 + official_name: Republic of Liberia
3568 + capital: Monrovia
3569 + continent: Africa
3570 + region_wb: SSF
3571 + region_wb_name: Sub-Saharan Africa
3572 + subregion: Western Africa
3573 + income_group: LIC
3574 + income_group_name: Low income
3575 + currency_code: LRD
3576 + currency_name: Liberian dollar
3577 + area_km2: 111369
3578 + latitude: 6.30039
3579 + longitude: -10.7957
3580 + flag_emoji: 🇱🇷
3581 + un_member: true
3582 + independent: true
3583 + landlocked: false
3584 + borders:
3585 + - GIN
3586 + - CIV
3587 + - SLE
3588 + languages:
3589 + - English
3590 + demonym: Liberian
3591 + status: country
3592 + kind: country
3593 +- id: LBY
3594 + iso2: LY
3595 + iso3: LBY
3596 + iso_numeric: '434'
3597 + slug: libya
3598 + short_name: Libya
3599 + official_name: State of Libya
3600 + capital: Tripoli
3601 + continent: Africa
3602 + region_wb: MEA
3603 + region_wb_name: Middle East, North Africa, Afghanistan & Pakistan
3604 + subregion: Northern Africa
3605 + income_group: UMC
3606 + income_group_name: Upper middle income
3607 + currency_code: LYD
3608 + currency_name: Libyan dinar
3609 + area_km2: 1759540
3610 + latitude: 32.8578
3611 + longitude: 13.1072
3612 + flag_emoji: 🇱🇾
3613 + un_member: true
3614 + independent: true
3615 + landlocked: false
3616 + borders:
3617 + - DZA
3618 + - TCD
3619 + - EGY
3620 + - NER
3621 + - SDN
3622 + - TUN
3623 + languages:
3624 + - Arabic
3625 + demonym: Libyan
3626 + status: country
3627 + kind: country
3628 +- id: LIE
3629 + iso2: LI
3630 + iso3: LIE
3631 + iso_numeric: '438'
3632 + slug: liechtenstein
3633 + short_name: Liechtenstein
3634 + official_name: Principality of Liechtenstein
3635 + capital: Vaduz
3636 + continent: Europe
3637 + region_wb: ECS
3638 + region_wb_name: Europe & Central Asia
3639 + subregion: Western Europe
3640 + income_group: HIC
3641 + income_group_name: High income
3642 + currency_code: CHF
3643 + currency_name: Swiss franc
3644 + area_km2: 160
3645 + latitude: 47.1411
3646 + longitude: 9.52148
3647 + flag_emoji: 🇱🇮
3648 + un_member: true
3649 + independent: true
3650 + landlocked: true
3651 + borders:
3652 + - AUT
3653 + - CHE
3654 + languages:
3655 + - German
3656 + demonym: Liechtensteiner
3657 + status: country
3658 + kind: country
3659 +- id: LTU
3660 + iso2: LT
3661 + iso3: LTU
3662 + iso_numeric: '440'
3663 + slug: lithuania
3664 + short_name: Lithuania
3665 + official_name: Republic of Lithuania
3666 + capital: Vilnius
3667 + continent: Europe
3668 + region_wb: ECS
3669 + region_wb_name: Europe & Central Asia
3670 + subregion: Northern Europe
3671 + income_group: HIC
3672 + income_group_name: High income
3673 + currency_code: EUR
3674 + currency_name: Euro
3675 + area_km2: 65300
3676 + latitude: 54.6896
3677 + longitude: 25.2799
3678 + flag_emoji: 🇱🇹
3679 + un_member: true
3680 + independent: true
3681 + landlocked: false
3682 + borders:
3683 + - BLR
3684 + - LVA
3685 + - POL
3686 + - RUS
3687 + languages:
3688 + - Lithuanian
3689 + demonym: Lithuanian
3690 + status: country
3691 + kind: country
3692 +- id: LUX
3693 + iso2: LU
3694 + iso3: LUX
3695 + iso_numeric: '442'
3696 + slug: luxembourg
3697 + short_name: Luxembourg
3698 + official_name: Grand Duchy of Luxembourg
3699 + capital: Luxembourg
3700 + continent: Europe
3701 + region_wb: ECS
3702 + region_wb_name: Europe & Central Asia
3703 + subregion: Western Europe
3704 + income_group: HIC
3705 + income_group_name: High income
3706 + currency_code: EUR
3707 + currency_name: Euro
3708 + area_km2: 2586
3709 + latitude: 49.61
3710 + longitude: 6.1296
3711 + flag_emoji: 🇱🇺
3712 + un_member: true
3713 + independent: true
3714 + landlocked: true
3715 + borders:
3716 + - BEL
3717 + - FRA
3718 + - DEU
3719 + languages:
3720 + - French
3721 + - German
3722 + - Luxembourgish
3723 + demonym: Luxembourger
3724 + status: country
3725 + kind: country
3726 +- id: MAC
3727 + iso2: MO
3728 + iso3: MAC
3729 + iso_numeric: '446'
3730 + slug: macao
3731 + short_name: Macao
3732 + official_name: Macao Special Administrative Region of the People's Republic of China
3733 + capital: null
3734 + continent: Asia
3735 + region_wb: EAS
3736 + region_wb_name: East Asia & Pacific
3737 + subregion: Eastern Asia
3738 + income_group: HIC
3739 + income_group_name: High income
3740 + currency_code: MOP
3741 + currency_name: Macanese pataca
3742 + area_km2: 30
3743 + latitude: 22.1667
3744 + longitude: 113.55
3745 + flag_emoji: 🇲🇴
3746 + un_member: false
3747 + independent: false
3748 + landlocked: false
3749 + borders:
3750 + - CHN
3751 + languages:
3752 + - Chinese
3753 + - Portuguese
3754 + demonym: Macanese
3755 + status: territory
3756 + kind: country
3757 +- id: MDG
3758 + iso2: MG
3759 + iso3: MDG
3760 + iso_numeric: '450'
3761 + slug: madagascar
3762 + short_name: Madagascar
3763 + official_name: Republic of Madagascar
3764 + capital: Antananarivo
3765 + continent: Africa
3766 + region_wb: SSF
3767 + region_wb_name: Sub-Saharan Africa
3768 + subregion: Eastern Africa
3769 + income_group: LIC
3770 + income_group_name: Low income
3771 + currency_code: MGA
3772 + currency_name: Malagasy ariary
3773 + area_km2: 587041
3774 + latitude: -20.4667
3775 + longitude: 45.7167
3776 + flag_emoji: 🇲🇬
3777 + un_member: true
3778 + independent: true
3779 + landlocked: false
3780 + borders: []
3781 + languages:
3782 + - French
3783 + - Malagasy
3784 + demonym: Malagasy
3785 + status: country
3786 + kind: country
3787 +- id: MWI
3788 + iso2: MW
3789 + iso3: MWI
3790 + iso_numeric: '454'
3791 + slug: malawi
3792 + short_name: Malawi
3793 + official_name: Republic of Malawi
3794 + capital: Lilongwe
3795 + continent: Africa
3796 + region_wb: SSF
3797 + region_wb_name: Sub-Saharan Africa
3798 + subregion: Eastern Africa
3799 + income_group: LIC
3800 + income_group_name: Low income
3801 + currency_code: MWK
3802 + currency_name: Malawian kwacha
3803 + area_km2: 118484
3804 + latitude: -13.9899
3805 + longitude: 33.7703
3806 + flag_emoji: 🇲🇼
3807 + un_member: true
3808 + independent: true
3809 + landlocked: true
3810 + borders:
3811 + - MOZ
3812 + - TZA
3813 + - ZMB
3814 + languages:
3815 + - Chewa
3816 + - English
3817 + demonym: Malawian
3818 + status: country
3819 + kind: country
3820 +- id: MYS
3821 + iso2: MY
3822 + iso3: MYS
3823 + iso_numeric: '458'
3824 + slug: malaysia
3825 + short_name: Malaysia
3826 + official_name: Malaysia
3827 + capital: Kuala Lumpur
3828 + continent: Asia
3829 + region_wb: EAS
3830 + region_wb_name: East Asia & Pacific
3831 + subregion: South-Eastern Asia
3832 + income_group: UMC
3833 + income_group_name: Upper middle income
3834 + currency_code: MYR
3835 + currency_name: Malaysian ringgit
3836 + area_km2: 330803
3837 + latitude: 3.12433
3838 + longitude: 101.684
3839 + flag_emoji: 🇲🇾
3840 + un_member: true
3841 + independent: true
3842 + landlocked: false
3843 + borders:
3844 + - BRN
3845 + - IDN
3846 + - THA
3847 + languages:
3848 + - English
3849 + - Malay
3850 + demonym: Malaysian
3851 + status: country
3852 + kind: country
3853 +- id: MDV
3854 + iso2: MV
3855 + iso3: MDV
3856 + iso_numeric: '462'
3857 + slug: maldives
3858 + short_name: Maldives
3859 + official_name: Republic of the Maldives
3860 + capital: Malé
3861 + continent: Asia
3862 + region_wb: SAS
3863 + region_wb_name: South Asia
3864 + subregion: Southern Asia
3865 + income_group: UMC
3866 + income_group_name: Upper middle income
3867 + currency_code: MVR
3868 + currency_name: Maldivian rufiyaa
3869 + area_km2: 300
3870 + latitude: 4.1742
3871 + longitude: 73.5109
3872 + flag_emoji: 🇲🇻
3873 + un_member: true
3874 + independent: true
3875 + landlocked: false
3876 + borders: []
3877 + languages:
3878 + - Maldivian
3879 + demonym: Maldivan
3880 + status: country
3881 + kind: country
3882 +- id: MLI
3883 + iso2: ML
3884 + iso3: MLI
3885 + iso_numeric: '466'
3886 + slug: mali
3887 + short_name: Mali
3888 + official_name: Republic of Mali
3889 + capital: Bamako
3890 + continent: Africa
3891 + region_wb: SSF
3892 + region_wb_name: Sub-Saharan Africa
3893 + subregion: Western Africa
3894 + income_group: LIC
3895 + income_group_name: Low income
3896 + currency_code: XOF
3897 + currency_name: West African CFA franc
3898 + area_km2: 1240192
3899 + latitude: 13.5667
3900 + longitude: -7.50034
3901 + flag_emoji: 🇲🇱
3902 + un_member: true
3903 + independent: true
3904 + landlocked: true
3905 + borders:
3906 + - DZA
3907 + - BFA
3908 + - GIN
3909 + - CIV
3910 + - MRT
3911 + - NER
3912 + - SEN
3913 + languages:
3914 + - French
3915 + demonym: Malian
3916 + status: country
3917 + kind: country
3918 +- id: MLT
3919 + iso2: MT
3920 + iso3: MLT
3921 + iso_numeric: '470'
3922 + slug: malta
3923 + short_name: Malta
3924 + official_name: Republic of Malta
3925 + capital: Valletta
3926 + continent: Europe
3927 + region_wb: MEA
3928 + region_wb_name: Middle East, North Africa, Afghanistan & Pakistan
3929 + subregion: Southern Europe
3930 + income_group: HIC
3931 + income_group_name: High income
3932 + currency_code: EUR
3933 + currency_name: Euro
3934 + area_km2: 316
3935 + latitude: 35.9042
3936 + longitude: 14.5189
3937 + flag_emoji: 🇲🇹
3938 + un_member: true
3939 + independent: true
3940 + landlocked: false
3941 + borders: []
3942 + languages:
3943 + - English
3944 + - Maltese
3945 + demonym: Maltese
3946 + status: country
3947 + kind: country
3948 +- id: MHL
3949 + iso2: MH
3950 + iso3: MHL
3951 + iso_numeric: '584'
3952 + slug: marshall-islands
3953 + short_name: Marshall Islands
3954 + official_name: Republic of the Marshall Islands
3955 + capital: Majuro
3956 + continent: Oceania
3957 + region_wb: EAS
3958 + region_wb_name: East Asia & Pacific
3959 + subregion: Micronesia
3960 + income_group: UMC
3961 + income_group_name: Upper middle income
3962 + currency_code: USD
3963 + currency_name: United States dollar
3964 + area_km2: 181
3965 + latitude: 7.11046
3966 + longitude: 171.135
3967 + flag_emoji: 🇲🇭
3968 + un_member: true
3969 + independent: true
3970 + landlocked: false
3971 + borders: []
3972 + languages:
3973 + - English
3974 + - Marshallese
3975 + demonym: Marshallese
3976 + status: country
3977 + kind: country
3978 +- id: MRT
3979 + iso2: MR
3980 + iso3: MRT
3981 + iso_numeric: '478'
3982 + slug: mauritania
3983 + short_name: Mauritania
3984 + official_name: Islamic Republic of Mauritania
3985 + capital: Nouakchott
3986 + continent: Africa
3987 + region_wb: SSF
3988 + region_wb_name: Sub-Saharan Africa
3989 + subregion: Western Africa
3990 + income_group: LMC
3991 + income_group_name: Lower middle income
3992 + currency_code: MRU
3993 + currency_name: Mauritanian ouguiya
3994 + area_km2: 1030700
3995 + latitude: 18.2367
3996 + longitude: -15.9824
3997 + flag_emoji: 🇲🇷
3998 + un_member: true
3999 + independent: true
4000 + landlocked: false
4001 + borders:
4002 + - DZA
4003 + - MLI
4004 + - SEN
4005 + - ESH
4006 + languages:
4007 + - Arabic
4008 + demonym: Mauritanian
4009 + status: country
4010 + kind: country
4011 +- id: MUS
4012 + iso2: MU
4013 + iso3: MUS
4014 + iso_numeric: '480'
4015 + slug: mauritius
4016 + short_name: Mauritius
4017 + official_name: Republic of Mauritius
4018 + capital: Port Louis
4019 + continent: Africa
4020 + region_wb: SSF
4021 + region_wb_name: Sub-Saharan Africa
4022 + subregion: Eastern Africa
4023 + income_group: UMC
4024 + income_group_name: Upper middle income
4025 + currency_code: MUR
4026 + currency_name: Mauritian rupee
4027 + area_km2: 2040
4028 + latitude: -20.1605
4029 + longitude: 57.4977
4030 + flag_emoji: 🇲🇺
4031 + un_member: true
4032 + independent: true
4033 + landlocked: false
4034 + borders: []
4035 + languages:
4036 + - English
4037 + - French
4038 + - Mauritian Creole
4039 + demonym: Mauritian
4040 + status: country
4041 + kind: country
4042 +- id: MEX
4043 + iso2: MX
4044 + iso3: MEX
4045 + iso_numeric: '484'
4046 + slug: mexico
4047 + short_name: Mexico
4048 + official_name: United Mexican States
4049 + capital: Mexico City
4050 + continent: Americas
4051 + region_wb: LCN
4052 + region_wb_name: Latin America & Caribbean
4053 + subregion: North America
4054 + income_group: UMC
4055 + income_group_name: Upper middle income
4056 + currency_code: MXN
4057 + currency_name: Mexican peso
4058 + area_km2: 1964375
4059 + latitude: 19.427
4060 + longitude: -99.1276
4061 + flag_emoji: 🇲🇽
4062 + un_member: true
4063 + independent: true
4064 + landlocked: false
4065 + borders:
4066 + - BLZ
4067 + - GTM
4068 + - USA
4069 + languages:
4070 + - Spanish
4071 + demonym: Mexican
4072 + status: country
4073 + kind: country
4074 +- id: FSM
4075 + iso2: FM
4076 + iso3: FSM
4077 + iso_numeric: '583'
4078 + slug: micronesia
4079 + short_name: Micronesia
4080 + official_name: Federated States of Micronesia
4081 + capital: Palikir
4082 + continent: Oceania
4083 + region_wb: EAS
4084 + region_wb_name: East Asia & Pacific
4085 + subregion: Micronesia
4086 + income_group: UMC
4087 + income_group_name: Upper middle income
4088 + currency_code: null
4089 + currency_name: null
4090 + area_km2: 702
4091 + latitude: 6.91771
4092 + longitude: 158.185
4093 + flag_emoji: 🇫🇲
4094 + un_member: true
4095 + independent: true
4096 + landlocked: false
4097 + borders: []
4098 + languages:
4099 + - English
4100 + demonym: Micronesian
4101 + status: country
4102 + kind: country
4103 +- id: MDA
4104 + iso2: MD
4105 + iso3: MDA
4106 + iso_numeric: '498'
4107 + slug: moldova
4108 + short_name: Moldova
4109 + official_name: Republic of Moldova
4110 + capital: Chișinău
4111 + continent: Europe
4112 + region_wb: ECS
4113 + region_wb_name: Europe & Central Asia
4114 + subregion: Eastern Europe
4115 + income_group: UMC
4116 + income_group_name: Upper middle income
4117 + currency_code: MDL
4118 + currency_name: Moldovan leu
4119 + area_km2: 33846
4120 + latitude: 47.0167
4121 + longitude: 28.8497
4122 + flag_emoji: 🇲🇩
4123 + un_member: true
4124 + independent: true
4125 + landlocked: true
4126 + borders:
4127 + - ROU
4128 + - UKR
4129 + languages:
4130 + - Moldavian
4131 + demonym: Moldovan
4132 + status: country
4133 + kind: country
4134 +- id: MCO
4135 + iso2: MC
4136 + iso3: MCO
4137 + iso_numeric: '492'
4138 + slug: monaco
4139 + short_name: Monaco
4140 + official_name: Principality of Monaco
4141 + capital: Monaco
4142 + continent: Europe
4143 + region_wb: ECS
4144 + region_wb_name: Europe & Central Asia
4145 + subregion: Western Europe
4146 + income_group: HIC
4147 + income_group_name: High income
4148 + currency_code: EUR
4149 + currency_name: Euro
4150 + area_km2: 2.02
4151 + latitude: 43.7325
4152 + longitude: 7.41891
4153 + flag_emoji: 🇲🇨
4154 + un_member: true
4155 + independent: true
4156 + landlocked: false
4157 + borders:
4158 + - FRA
4159 + languages:
4160 + - French
4161 + demonym: Monegasque
4162 + status: country
4163 + kind: country
4164 +- id: MNG
4165 + iso2: MN
4166 + iso3: MNG
4167 + iso_numeric: '496'
4168 + slug: mongolia
4169 + short_name: Mongolia
4170 + official_name: Mongolia
4171 + capital: Ulan Bator
4172 + continent: Asia
4173 + region_wb: EAS
4174 + region_wb_name: East Asia & Pacific
4175 + subregion: Eastern Asia
4176 + income_group: UMC
4177 + income_group_name: Upper middle income
4178 + currency_code: MNT
4179 + currency_name: Mongolian tögrög
4180 + area_km2: 1564110
4181 + latitude: 47.9129
4182 + longitude: 106.937
4183 + flag_emoji: 🇲🇳
4184 + un_member: true
4185 + independent: true
4186 + landlocked: true
4187 + borders:
4188 + - CHN
4189 + - RUS
4190 + languages:
4191 + - Mongolian
4192 + demonym: Mongolian
4193 + status: country
4194 + kind: country
4195 +- id: MNE
4196 + iso2: ME
4197 + iso3: MNE
4198 + iso_numeric: '499'
4199 + slug: montenegro
4200 + short_name: Montenegro
4201 + official_name: Montenegro
4202 + capital: Podgorica
4203 + continent: Europe
4204 + region_wb: ECS
4205 + region_wb_name: Europe & Central Asia
4206 + subregion: Southeast Europe
4207 + income_group: UMC
4208 + income_group_name: Upper middle income
4209 + currency_code: EUR
4210 + currency_name: Euro
4211 + area_km2: 13812
4212 + latitude: 42.4602
4213 + longitude: 19.2595
4214 + flag_emoji: 🇲🇪
4215 + un_member: true
4216 + independent: true
4217 + landlocked: false
4218 + borders:
4219 + - ALB
4220 + - BIH
4221 + - HRV
4222 + - UNK
4223 + - SRB
4224 + languages:
4225 + - Montenegrin
4226 + demonym: Montenegrin
4227 + status: country
4228 + kind: country
4229 +- id: MAR
4230 + iso2: MA
4231 + iso3: MAR
4232 + iso_numeric: '504'
4233 + slug: morocco
4234 + short_name: Morocco
4235 + official_name: Kingdom of Morocco
4236 + capital: Rabat
4237 + continent: Africa
4238 + region_wb: MEA
4239 + region_wb_name: Middle East, North Africa, Afghanistan & Pakistan
4240 + subregion: Northern Africa
4241 + income_group: LMC
4242 + income_group_name: Lower middle income
4243 + currency_code: MAD
4244 + currency_name: Moroccan dirham
4245 + area_km2: 446550
4246 + latitude: 33.9905
4247 + longitude: -6.8704
4248 + flag_emoji: 🇲🇦
4249 + un_member: true
4250 + independent: true
4251 + landlocked: false
4252 + borders:
4253 + - DZA
4254 + - ESH
4255 + - ESP
4256 + languages:
4257 + - Arabic
4258 + - Berber
4259 + demonym: Moroccan
4260 + status: country
4261 + kind: country
4262 +- id: MOZ
4263 + iso2: MZ
4264 + iso3: MOZ
4265 + iso_numeric: '508'
4266 + slug: mozambique
4267 + short_name: Mozambique
4268 + official_name: Republic of Mozambique
4269 + capital: Maputo
4270 + continent: Africa
4271 + region_wb: SSF
4272 + region_wb_name: Sub-Saharan Africa
4273 + subregion: Eastern Africa
4274 + income_group: LIC
4275 + income_group_name: Low income
4276 + currency_code: MZN
4277 + currency_name: Mozambican metical
4278 + area_km2: 801590
4279 + latitude: -25.9664
4280 + longitude: 32.5713
4281 + flag_emoji: 🇲🇿
4282 + un_member: true
4283 + independent: true
4284 + landlocked: false
4285 + borders:
4286 + - MWI
4287 + - ZAF
4288 + - SWZ
4289 + - TZA
4290 + - ZMB
4291 + - ZWE
4292 + languages:
4293 + - Portuguese
4294 + demonym: Mozambican
4295 + status: country
4296 + kind: country
4297 +- id: MMR
4298 + iso2: MM
4299 + iso3: MMR
4300 + iso_numeric: '104'
4301 + slug: myanmar
4302 + short_name: Myanmar
4303 + official_name: Republic of the Union of Myanmar
4304 + capital: Naypyidaw
4305 + continent: Asia
4306 + region_wb: EAS
4307 + region_wb_name: East Asia & Pacific
4308 + subregion: South-Eastern Asia
4309 + income_group: LMC
4310 + income_group_name: Lower middle income
4311 + currency_code: MMK
4312 + currency_name: Burmese kyat
4313 + area_km2: 676578
4314 + latitude: 21.914
4315 + longitude: 95.9562
4316 + flag_emoji: 🇲🇲
4317 + un_member: true
4318 + independent: true
4319 + landlocked: false
4320 + borders:
4321 + - BGD
4322 + - CHN
4323 + - IND
4324 + - LAO
4325 + - THA
4326 + languages:
4327 + - Burmese
4328 + demonym: Burmese
4329 + status: country
4330 + kind: country
4331 +- id: NAM
4332 + iso2: NA
4333 + iso3: NAM
4334 + iso_numeric: '516'
4335 + slug: namibia
4336 + short_name: Namibia
4337 + official_name: Republic of Namibia
4338 + capital: Windhoek
4339 + continent: Africa
4340 + region_wb: SSF
4341 + region_wb_name: Sub-Saharan Africa
4342 + subregion: Southern Africa
4343 + income_group: LMC
4344 + income_group_name: Lower middle income
4345 + currency_code: NAD
4346 + currency_name: Namibian dollar
4347 + area_km2: 825615
4348 + latitude: -22.5648
4349 + longitude: 17.0931
4350 + flag_emoji: 🇳🇦
4351 + un_member: true
4352 + independent: true
4353 + landlocked: false
4354 + borders:
4355 + - AGO
4356 + - BWA
4357 + - ZAF
4358 + - ZMB
4359 + languages:
4360 + - Afrikaans
4361 + - English
4362 + - German
4363 + - Herero
4364 + - Khoekhoe
4365 + - Kwangali
4366 + - Lozi
4367 + - Ndonga
4368 + - Tswana
4369 + demonym: Namibian
4370 + status: country
4371 + kind: country
4372 +- id: NRU
4373 + iso2: NR
4374 + iso3: NRU
4375 + iso_numeric: '520'
4376 + slug: nauru
4377 + short_name: Nauru
4378 + official_name: Republic of Nauru
4379 + capital: Yaren
4380 + continent: Oceania
4381 + region_wb: EAS
4382 + region_wb_name: East Asia & Pacific
4383 + subregion: Micronesia
4384 + income_group: HIC
4385 + income_group_name: High income
4386 + currency_code: AUD
4387 + currency_name: Australian dollar
4388 + area_km2: 21
4389 + latitude: -0.5477
4390 + longitude: 166.920867
4391 + flag_emoji: 🇳🇷
4392 + un_member: true
4393 + independent: true
4394 + landlocked: false
4395 + borders: []
4396 + languages:
4397 + - English
4398 + - Nauru
4399 + demonym: Nauruan
4400 + status: country
4401 + kind: country
4402 +- id: NPL
4403 + iso2: NP
4404 + iso3: NPL
4405 + iso_numeric: '524'
4406 + slug: nepal
4407 + short_name: Nepal
4408 + official_name: Federal Democratic Republic of Nepal
4409 + capital: Kathmandu
4410 + continent: Asia
4411 + region_wb: SAS
4412 + region_wb_name: South Asia
4413 + subregion: Southern Asia
4414 + income_group: LMC
4415 + income_group_name: Lower middle income
4416 + currency_code: NPR
4417 + currency_name: Nepalese rupee
4418 + area_km2: 147181
4419 + latitude: 27.6939
4420 + longitude: 85.3157
4421 + flag_emoji: 🇳🇵
4422 + un_member: true
4423 + independent: true
4424 + landlocked: true
4425 + borders:
4426 + - CHN
4427 + - IND
4428 + languages:
4429 + - Nepali
4430 + demonym: Nepalese
4431 + status: country
4432 + kind: country
4433 +- id: NLD
4434 + iso2: NL
4435 + iso3: NLD
4436 + iso_numeric: '528'
4437 + slug: netherlands
4438 + short_name: Netherlands
4439 + official_name: Kingdom of the Netherlands
4440 + capital: Amsterdam
4441 + continent: Europe
4442 + region_wb: ECS
4443 + region_wb_name: Europe & Central Asia
4444 + subregion: Western Europe
4445 + income_group: HIC
4446 + income_group_name: High income
4447 + currency_code: EUR
4448 + currency_name: Euro
4449 + area_km2: 41850
4450 + latitude: 52.3738
4451 + longitude: 4.89095
4452 + flag_emoji: 🇳🇱
4453 + un_member: true
4454 + independent: true
4455 + landlocked: false
4456 + borders:
4457 + - BEL
4458 + - DEU
4459 + languages:
4460 + - Dutch
4461 + demonym: Dutch
4462 + status: country
4463 + kind: country
4464 +- id: NCL
4465 + iso2: NC
4466 + iso3: NCL
4467 + iso_numeric: '540'
4468 + slug: new-caledonia
4469 + short_name: New Caledonia
4470 + official_name: New Caledonia
4471 + capital: Nouméa
4472 + continent: Oceania
4473 + region_wb: EAS
4474 + region_wb_name: East Asia & Pacific
4475 + subregion: Melanesia
4476 + income_group: HIC
4477 + income_group_name: High income
4478 + currency_code: XPF
4479 + currency_name: CFP franc
4480 + area_km2: 18575
4481 + latitude: -22.2677
4482 + longitude: 166.464
4483 + flag_emoji: 🇳🇨
4484 + un_member: false
4485 + independent: false
4486 + landlocked: false
4487 + borders: []
4488 + languages:
4489 + - French
4490 + demonym: New Caledonian
4491 + status: territory
4492 + kind: country
4493 +- id: NZL
4494 + iso2: NZ
4495 + iso3: NZL
4496 + iso_numeric: '554'
4497 + slug: new-zealand
4498 + short_name: New Zealand
4499 + official_name: New Zealand
4500 + capital: Wellington
4501 + continent: Oceania
4502 + region_wb: EAS
4503 + region_wb_name: East Asia & Pacific
4504 + subregion: Australia and New Zealand
4505 + income_group: HIC
4506 + income_group_name: High income
4507 + currency_code: NZD
4508 + currency_name: New Zealand dollar
4509 + area_km2: 270467
4510 + latitude: -41.2865
4511 + longitude: 174.776
4512 + flag_emoji: 🇳🇿
4513 + un_member: true
4514 + independent: true
4515 + landlocked: false
4516 + borders: []
4517 + languages:
4518 + - English
4519 + - Māori
4520 + - New Zealand Sign Language
4521 + demonym: New Zealander
4522 + status: country
4523 + kind: country
4524 +- id: NIC
4525 + iso2: NI
4526 + iso3: NIC
4527 + iso_numeric: '558'
4528 + slug: nicaragua
4529 + short_name: Nicaragua
4530 + official_name: Republic of Nicaragua
4531 + capital: Managua
4532 + continent: Americas
4533 + region_wb: LCN
4534 + region_wb_name: Latin America & Caribbean
4535 + subregion: Central America
4536 + income_group: LMC
4537 + income_group_name: Lower middle income
4538 + currency_code: NIO
4539 + currency_name: Nicaraguan córdoba
4540 + area_km2: 130373
4541 + latitude: 12.1475
4542 + longitude: -86.2734
4543 + flag_emoji: 🇳🇮
4544 + un_member: true
4545 + independent: true
4546 + landlocked: false
4547 + borders:
4548 + - CRI
4549 + - HND
4550 + languages:
4551 + - Spanish
4552 + demonym: Nicaraguan
4553 + status: country
4554 + kind: country
4555 +- id: NER
4556 + iso2: NE
4557 + iso3: NER
4558 + iso_numeric: '562'
4559 + slug: niger
4560 + short_name: Niger
4561 + official_name: Republic of Niger
4562 + capital: Niamey
4563 + continent: Africa
4564 + region_wb: SSF
4565 + region_wb_name: Sub-Saharan Africa
4566 + subregion: Western Africa
4567 + income_group: LIC
4568 + income_group_name: Low income
4569 + currency_code: XOF
4570 + currency_name: West African CFA franc
4571 + area_km2: 1267000
4572 + latitude: 13.514
4573 + longitude: 2.1073
4574 + flag_emoji: 🇳🇪
4575 + un_member: true
4576 + independent: true
4577 + landlocked: true
4578 + borders:
4579 + - DZA
4580 + - BEN
4581 + - BFA
4582 + - TCD
4583 + - LBY
4584 + - MLI
4585 + - NGA
4586 + languages:
4587 + - French
4588 + demonym: Nigerien
4589 + status: country
4590 + kind: country
4591 +- id: NGA
4592 + iso2: NG
4593 + iso3: NGA
4594 + iso_numeric: '566'
4595 + slug: nigeria
4596 + short_name: Nigeria
4597 + official_name: Federal Republic of Nigeria
4598 + capital: Abuja
4599 + continent: Africa
4600 + region_wb: SSF
4601 + region_wb_name: Sub-Saharan Africa
4602 + subregion: Western Africa
4603 + income_group: LMC
4604 + income_group_name: Lower middle income
4605 + currency_code: NGN
4606 + currency_name: Nigerian naira
4607 + area_km2: 923768
4608 + latitude: 9.05804
4609 + longitude: 7.48906
4610 + flag_emoji: 🇳🇬
4611 + un_member: true
4612 + independent: true
4613 + landlocked: false
4614 + borders:
4615 + - BEN
4616 + - CMR
4617 + - TCD
4618 + - NER
4619 + languages:
4620 + - English
4621 + demonym: Nigerian
4622 + status: country
4623 + kind: country
4624 +- id: PRK
4625 + iso2: KP
4626 + iso3: PRK
4627 + iso_numeric: '408'
4628 + slug: north-korea
4629 + short_name: North Korea
4630 + official_name: Democratic People's Republic of Korea
4631 + capital: Pyongyang
4632 + continent: Asia
4633 + region_wb: EAS
4634 + region_wb_name: East Asia & Pacific
4635 + subregion: Eastern Asia
4636 + income_group: LIC
4637 + income_group_name: Low income
4638 + currency_code: KPW
4639 + currency_name: North Korean won
4640 + area_km2: 120538
4641 + latitude: 39.0319
4642 + longitude: 125.754
4643 + flag_emoji: 🇰🇵
4644 + un_member: true
4645 + independent: true
4646 + landlocked: false
4647 + borders:
4648 + - CHN
4649 + - KOR
4650 + - RUS
4651 + languages:
4652 + - Korean
4653 + demonym: North Korean
4654 + status: country
4655 + kind: country
4656 +- id: MKD
4657 + iso2: MK
4658 + iso3: MKD
4659 + iso_numeric: '807'
4660 + slug: north-macedonia
4661 + short_name: North Macedonia
4662 + official_name: Republic of North Macedonia
4663 + capital: Skopje
4664 + continent: Europe
4665 + region_wb: ECS
4666 + region_wb_name: Europe & Central Asia
4667 + subregion: Southeast Europe
4668 + income_group: UMC
4669 + income_group_name: Upper middle income
4670 + currency_code: MKD
4671 + currency_name: denar
4672 + area_km2: 25713
4673 + latitude: 42.0024
4674 + longitude: 21.4361
4675 + flag_emoji: 🇲🇰
4676 + un_member: true
4677 + independent: true
4678 + landlocked: true
4679 + borders:
4680 + - ALB
4681 + - BGR
4682 + - GRC
4683 + - UNK
4684 + - SRB
4685 + languages:
4686 + - Macedonian
4687 + demonym: Macedonian
4688 + status: country
4689 + kind: country
4690 +- id: MNP
4691 + iso2: MP
4692 + iso3: MNP
4693 + iso_numeric: '580'
4694 + slug: northern-mariana-islands
4695 + short_name: Northern Mariana Islands
4696 + official_name: Commonwealth of the Northern Mariana Islands
4697 + capital: Saipan
4698 + continent: Oceania
4699 + region_wb: EAS
4700 + region_wb_name: East Asia & Pacific
4701 + subregion: Micronesia
4702 + income_group: HIC
4703 + income_group_name: High income
4704 + currency_code: USD
4705 + currency_name: United States dollar
4706 + area_km2: 464
4707 + latitude: 15.1935
4708 + longitude: 145.765
4709 + flag_emoji: 🇲🇵
4710 + un_member: false
4711 + independent: false
4712 + landlocked: false
4713 + borders: []
4714 + languages:
4715 + - Carolinian
4716 + - Chamorro
4717 + - English
4718 + demonym: American
4719 + status: territory
4720 + kind: country
4721 +- id: NOR
4722 + iso2: 'NO'
4723 + iso3: NOR
4724 + iso_numeric: '578'
4725 + slug: norway
4726 + short_name: Norway
4727 + official_name: Kingdom of Norway
4728 + capital: Oslo
4729 + continent: Europe
4730 + region_wb: ECS
4731 + region_wb_name: Europe & Central Asia
4732 + subregion: Northern Europe
4733 + income_group: HIC
4734 + income_group_name: High income
4735 + currency_code: NOK
4736 + currency_name: Norwegian krone
4737 + area_km2: 323802
4738 + latitude: 59.9138
4739 + longitude: 10.7387
4740 + flag_emoji: 🇳🇴
4741 + un_member: true
4742 + independent: true
4743 + landlocked: false
4744 + borders:
4745 + - FIN
4746 + - SWE
4747 + - RUS
4748 + languages:
4749 + - Norwegian Bokmål
4750 + - Norwegian Nynorsk
4751 + - Sami
4752 + demonym: Norwegian
4753 + status: country
4754 + kind: country
4755 +- id: OMN
4756 + iso2: OM
4757 + iso3: OMN
4758 + iso_numeric: '512'
4759 + slug: oman
4760 + short_name: Oman
4761 + official_name: Sultanate of Oman
4762 + capital: Muscat
4763 + continent: Asia
4764 + region_wb: MEA
4765 + region_wb_name: Middle East, North Africa, Afghanistan & Pakistan
4766 + subregion: Western Asia
4767 + income_group: HIC
4768 + income_group_name: High income
4769 + currency_code: OMR
4770 + currency_name: Omani rial
4771 + area_km2: 309500
4772 + latitude: 23.6105
4773 + longitude: 58.5874
4774 + flag_emoji: 🇴🇲
4775 + un_member: true
4776 + independent: true
4777 + landlocked: false
4778 + borders:
4779 + - SAU
4780 + - ARE
4781 + - YEM
4782 + languages:
4783 + - Arabic
4784 + demonym: Omani
4785 + status: country
4786 + kind: country
4787 +- id: PAK
4788 + iso2: PK
4789 + iso3: PAK
4790 + iso_numeric: '586'
4791 + slug: pakistan
4792 + short_name: Pakistan
4793 + official_name: Islamic Republic of Pakistan
4794 + capital: Islamabad
4795 + continent: Asia
4796 + region_wb: MEA
4797 + region_wb_name: Middle East, North Africa, Afghanistan & Pakistan
4798 + subregion: Southern Asia
4799 + income_group: LMC
4800 + income_group_name: Lower middle income
4801 + currency_code: PKR
4802 + currency_name: Pakistani rupee
4803 + area_km2: 881912
4804 + latitude: 30.5167
4805 + longitude: 72.8
4806 + flag_emoji: 🇵🇰
4807 + un_member: true
4808 + independent: true
4809 + landlocked: false
4810 + borders:
4811 + - AFG
4812 + - CHN
4813 + - IND
4814 + - IRN
4815 + languages:
4816 + - English
4817 + - Urdu
4818 + demonym: Pakistani
4819 + status: country
4820 + kind: country
4821 +- id: PLW
4822 + iso2: PW
4823 + iso3: PLW
4824 + iso_numeric: '585'
4825 + slug: palau
4826 + short_name: Palau
4827 + official_name: Republic of Palau
4828 + capital: Ngerulmud
4829 + continent: Oceania
4830 + region_wb: EAS
4831 + region_wb_name: East Asia & Pacific
4832 + subregion: Micronesia
4833 + income_group: HIC
4834 + income_group_name: High income
4835 + currency_code: USD
4836 + currency_name: United States dollar
4837 + area_km2: 459
4838 + latitude: 7.34194
4839 + longitude: 134.479
4840 + flag_emoji: 🇵🇼
4841 + un_member: true
4842 + independent: true
4843 + landlocked: false
4844 + borders: []
4845 + languages:
4846 + - English
4847 + - Palauan
4848 + demonym: Palauan
4849 + status: country
4850 + kind: country
4851 +- id: PSE
4852 + iso2: PS
4853 + iso3: PSE
4854 + iso_numeric: '275'
4855 + slug: palestine
4856 + short_name: Palestine
4857 + official_name: State of Palestine
4858 + capital: Ramallah
4859 + continent: Asia
4860 + region_wb: MEA
4861 + region_wb_name: Middle East, North Africa, Afghanistan & Pakistan
4862 + subregion: Western Asia
4863 + income_group: LMC
4864 + income_group_name: Lower middle income
4865 + currency_code: EGP
4866 + currency_name: Egyptian pound
4867 + area_km2: 6220
4868 + latitude: 31.9
4869 + longitude: 35.2
4870 + flag_emoji: 🇵🇸
4871 + un_member: false
4872 + independent: false
4873 + landlocked: false
4874 + borders:
4875 + - ISR
4876 + - EGY
4877 + - JOR
4878 + languages:
4879 + - Arabic
4880 + demonym: Palestinian
4881 + status: territory
4882 + kind: country
4883 +- id: PAN
4884 + iso2: PA
4885 + iso3: PAN
4886 + iso_numeric: '591'
4887 + slug: panama
4888 + short_name: Panama
4889 + official_name: Republic of Panama
4890 + capital: Panama City
4891 + continent: Americas
4892 + region_wb: LCN
4893 + region_wb_name: Latin America & Caribbean
4894 + subregion: Central America
4895 + income_group: HIC
4896 + income_group_name: High income
4897 + currency_code: PAB
4898 + currency_name: Panamanian balboa
4899 + area_km2: 75417
4900 + latitude: 8.99427
4901 + longitude: -79.5188
4902 + flag_emoji: 🇵🇦
4903 + un_member: true
4904 + independent: true
4905 + landlocked: false
4906 + borders:
4907 + - COL
4908 + - CRI
4909 + languages:
4910 + - Spanish
4911 + demonym: Panamanian
4912 + status: country
4913 + kind: country
4914 +- id: PNG
4915 + iso2: PG
4916 + iso3: PNG
4917 + iso_numeric: '598'
4918 + slug: papua-new-guinea
4919 + short_name: Papua New Guinea
4920 + official_name: Independent State of Papua New Guinea
4921 + capital: Port Moresby
4922 + continent: Oceania
4923 + region_wb: EAS
4924 + region_wb_name: East Asia & Pacific
4925 + subregion: Melanesia
4926 + income_group: LMC
4927 + income_group_name: Lower middle income
4928 + currency_code: PGK
4929 + currency_name: Papua New Guinean kina
4930 + area_km2: 462840
4931 + latitude: -9.47357
4932 + longitude: 147.194
4933 + flag_emoji: 🇵🇬
4934 + un_member: true
4935 + independent: true
4936 + landlocked: false
4937 + borders:
4938 + - IDN
4939 + languages:
4940 + - English
4941 + - Hiri Motu
4942 + - Tok Pisin
4943 + demonym: Papua New Guinean
4944 + status: country
4945 + kind: country
4946 +- id: PRY
4947 + iso2: PY
4948 + iso3: PRY
4949 + iso_numeric: '600'
4950 + slug: paraguay
4951 + short_name: Paraguay
4952 + official_name: Republic of Paraguay
4953 + capital: Asunción
4954 + continent: Americas
4955 + region_wb: LCN
4956 + region_wb_name: Latin America & Caribbean
4957 + subregion: South America
4958 + income_group: UMC
4959 + income_group_name: Upper middle income
4960 + currency_code: PYG
4961 + currency_name: Paraguayan guaraní
4962 + area_km2: 406752
4963 + latitude: -25.3005
4964 + longitude: -57.6362
4965 + flag_emoji: 🇵🇾
4966 + un_member: true
4967 + independent: true
4968 + landlocked: true
4969 + borders:
4970 + - ARG
4971 + - BOL
4972 + - BRA
4973 + languages:
4974 + - Guaraní
4975 + - Spanish
4976 + demonym: Paraguayan
4977 + status: country
4978 + kind: country
4979 +- id: PER
4980 + iso2: PE
4981 + iso3: PER
4982 + iso_numeric: '604'
4983 + slug: peru
4984 + short_name: Peru
4985 + official_name: Republic of Peru
4986 + capital: Lima
4987 + continent: Americas
4988 + region_wb: LCN
4989 + region_wb_name: Latin America & Caribbean
4990 + subregion: South America
4991 + income_group: UMC
4992 + income_group_name: Upper middle income
4993 + currency_code: PEN
4994 + currency_name: Peruvian sol
4995 + area_km2: 1285216
4996 + latitude: -12.0931
4997 + longitude: -77.0465
4998 + flag_emoji: 🇵🇪
4999 + un_member: true
5000 + independent: true
5001 + landlocked: false
5002 + borders:
5003 + - BOL
5004 + - BRA
5005 + - CHL
5006 + - COL
5007 + - ECU
5008 + languages:
5009 + - Aymara
5010 + - Quechua
5011 + - Spanish
5012 + demonym: Peruvian
5013 + status: country
5014 + kind: country
5015 +- id: PHL
5016 + iso2: PH
5017 + iso3: PHL
5018 + iso_numeric: '608'
5019 + slug: philippines
5020 + short_name: Philippines
5021 + official_name: Republic of the Philippines
5022 + capital: Manila
5023 + continent: Asia
5024 + region_wb: EAS
5025 + region_wb_name: East Asia & Pacific
5026 + subregion: South-Eastern Asia
5027 + income_group: UMC
5028 + income_group_name: Upper middle income
5029 + currency_code: PHP
5030 + currency_name: Philippine peso
5031 + area_km2: 342353
5032 + latitude: 14.5515
5033 + longitude: 121.035
5034 + flag_emoji: 🇵🇭
5035 + un_member: true
5036 + independent: true
5037 + landlocked: false
5038 + borders: []
5039 + languages:
5040 + - English
5041 + - Filipino
5042 + demonym: Filipino
5043 + status: country
5044 + kind: country
5045 +- id: POL
5046 + iso2: PL
5047 + iso3: POL
5048 + iso_numeric: '616'
5049 + slug: poland
5050 + short_name: Poland
5051 + official_name: Republic of Poland
5052 + capital: Warsaw
5053 + continent: Europe
5054 + region_wb: ECS
5055 + region_wb_name: Europe & Central Asia
5056 + subregion: Central Europe
5057 + income_group: HIC
5058 + income_group_name: High income
5059 + currency_code: PLN
5060 + currency_name: Polish złoty
5061 + area_km2: 312679
5062 + latitude: 52.26
5063 + longitude: 21.02
5064 + flag_emoji: 🇵🇱
5065 + un_member: true
5066 + independent: true
5067 + landlocked: false
5068 + borders:
5069 + - BLR
5070 + - CZE
5071 + - DEU
5072 + - LTU
5073 + - RUS
5074 + - SVK
5075 + - UKR
5076 + languages:
5077 + - Polish
5078 + demonym: Polish
5079 + status: country
5080 + kind: country
5081 +- id: PRT
5082 + iso2: PT
5083 + iso3: PRT
5084 + iso_numeric: '620'
5085 + slug: portugal
5086 + short_name: Portugal
5087 + official_name: Portuguese Republic
5088 + capital: Lisbon
5089 + continent: Europe
5090 + region_wb: ECS
5091 + region_wb_name: Europe & Central Asia
5092 + subregion: Southern Europe
5093 + income_group: HIC
5094 + income_group_name: High income
5095 + currency_code: EUR
5096 + currency_name: Euro
5097 + area_km2: 92090
5098 + latitude: 38.7072
5099 + longitude: -9.13552
5100 + flag_emoji: 🇵🇹
5101 + un_member: true
5102 + independent: true
5103 + landlocked: false
5104 + borders:
5105 + - ESP
5106 + languages:
5107 + - Portuguese
5108 + demonym: Portuguese
5109 + status: country
5110 + kind: country
5111 +- id: PRI
5112 + iso2: PR
5113 + iso3: PRI
5114 + iso_numeric: '630'
5115 + slug: puerto-rico
5116 + short_name: Puerto Rico
5117 + official_name: Commonwealth of Puerto Rico
5118 + capital: San Juan
5119 + continent: Americas
5120 + region_wb: LCN
5121 + region_wb_name: Latin America & Caribbean
5122 + subregion: Caribbean
5123 + income_group: HIC
5124 + income_group_name: High income
5125 + currency_code: USD
5126 + currency_name: United States dollar
5127 + area_km2: 8870
5128 + latitude: 18.23
5129 + longitude: -66.0
5130 + flag_emoji: 🇵🇷
5131 + un_member: false
5132 + independent: false
5133 + landlocked: false
5134 + borders: []
5135 + languages:
5136 + - English
5137 + - Spanish
5138 + demonym: Puerto Rican
5139 + status: territory
5140 + kind: country
5141 +- id: QAT
5142 + iso2: QA
5143 + iso3: QAT
5144 + iso_numeric: '634'
5145 + slug: qatar
5146 + short_name: Qatar
5147 + official_name: State of Qatar
5148 + capital: Doha
5149 + continent: Asia
5150 + region_wb: MEA
5151 + region_wb_name: Middle East, North Africa, Afghanistan & Pakistan
5152 + subregion: Western Asia
5153 + income_group: HIC
5154 + income_group_name: High income
5155 + currency_code: QAR
5156 + currency_name: Qatari riyal
5157 + area_km2: 11586
5158 + latitude: 25.2948
5159 + longitude: 51.5082
5160 + flag_emoji: 🇶🇦
5161 + un_member: true
5162 + independent: true
5163 + landlocked: false
5164 + borders:
5165 + - SAU
5166 + languages:
5167 + - Arabic
5168 + demonym: Qatari
5169 + status: country
5170 + kind: country
5171 +- id: COG
5172 + iso2: CG
5173 + iso3: COG
5174 + iso_numeric: '178'
5175 + slug: republic-of-the-congo
5176 + short_name: Republic of the Congo
5177 + official_name: Republic of the Congo
5178 + capital: Brazzaville
5179 + continent: Africa
5180 + region_wb: SSF
5181 + region_wb_name: Sub-Saharan Africa
5182 + subregion: Middle Africa
5183 + income_group: LMC
5184 + income_group_name: Lower middle income
5185 + currency_code: XAF
5186 + currency_name: Central African CFA franc
5187 + area_km2: 342000
5188 + latitude: -4.2767
5189 + longitude: 15.2662
5190 + flag_emoji: 🇨🇬
5191 + un_member: true
5192 + independent: true
5193 + landlocked: false
5194 + borders:
5195 + - AGO
5196 + - CMR
5197 + - CAF
5198 + - COD
5199 + - GAB
5200 + languages:
5201 + - French
5202 + - Kikongo
5203 + - Lingala
5204 + demonym: Congolese
5205 + status: country
5206 + kind: country
5207 +- id: ROU
5208 + iso2: RO
5209 + iso3: ROU
5210 + iso_numeric: '642'
5211 + slug: romania
5212 + short_name: Romania
5213 + official_name: Romania
5214 + capital: Bucharest
5215 + continent: Europe
5216 + region_wb: ECS
5217 + region_wb_name: Europe & Central Asia
5218 + subregion: Southeast Europe
5219 + income_group: HIC
5220 + income_group_name: High income
5221 + currency_code: RON
5222 + currency_name: Romanian leu
5223 + area_km2: 238391
5224 + latitude: 44.4479
5225 + longitude: 26.0979
5226 + flag_emoji: 🇷🇴
5227 + un_member: true
5228 + independent: true
5229 + landlocked: false
5230 + borders:
5231 + - BGR
5232 + - HUN
5233 + - MDA
5234 + - SRB
5235 + - UKR
5236 + languages:
5237 + - Romanian
5238 + demonym: Romanian
5239 + status: country
5240 + kind: country
5241 +- id: RUS
5242 + iso2: RU
5243 + iso3: RUS
5244 + iso_numeric: '643'
5245 + slug: russia
5246 + short_name: Russia
5247 + official_name: Russian Federation
5248 + capital: Moscow
5249 + continent: Europe
5250 + region_wb: ECS
5251 + region_wb_name: Europe & Central Asia
5252 + subregion: Eastern Europe
5253 + income_group: HIC
5254 + income_group_name: High income
5255 + currency_code: RUB
5256 + currency_name: Russian ruble
5257 + area_km2: 17098242
5258 + latitude: 55.7558
5259 + longitude: 37.6176
5260 + flag_emoji: 🇷🇺
5261 + un_member: true
5262 + independent: true
5263 + landlocked: false
5264 + borders:
5265 + - AZE
5266 + - BLR
5267 + - CHN
5268 + - EST
5269 + - FIN
5270 + - GEO
5271 + - KAZ
5272 + - PRK
5273 + - LVA
5274 + - LTU
5275 + - MNG
5276 + - NOR
5277 + - POL
5278 + - UKR
5279 + languages:
5280 + - Russian
5281 + demonym: Russian
5282 + status: country
5283 + kind: country
5284 +- id: RWA
5285 + iso2: RW
5286 + iso3: RWA
5287 + iso_numeric: '646'
5288 + slug: rwanda
5289 + short_name: Rwanda
5290 + official_name: Republic of Rwanda
5291 + capital: Kigali
5292 + continent: Africa
5293 + region_wb: SSF
5294 + region_wb_name: Sub-Saharan Africa
5295 + subregion: Eastern Africa
5296 + income_group: LIC
5297 + income_group_name: Low income
5298 + currency_code: RWF
5299 + currency_name: Rwandan franc
5300 + area_km2: 26338
5301 + latitude: -1.95325
5302 + longitude: 30.0587
5303 + flag_emoji: 🇷🇼
5304 + un_member: true
5305 + independent: true
5306 + landlocked: true
5307 + borders:
5308 + - BDI
5309 + - COD
5310 + - TZA
5311 + - UGA
5312 + languages:
5313 + - English
5314 + - French
5315 + - Kinyarwanda
5316 + demonym: Rwandan
5317 + status: country
5318 + kind: country
5319 +- id: KNA
5320 + iso2: KN
5321 + iso3: KNA
5322 + iso_numeric: '659'
5323 + slug: saint-kitts-and-nevis
5324 + short_name: Saint Kitts and Nevis
5325 + official_name: Federation of Saint Christopher and Nevis
5326 + capital: Basseterre
5327 + continent: Americas
5328 + region_wb: LCN
5329 + region_wb_name: Latin America & Caribbean
5330 + subregion: Caribbean
5331 + income_group: HIC
5332 + income_group_name: High income
5333 + currency_code: XCD
5334 + currency_name: Eastern Caribbean dollar
5335 + area_km2: 261
5336 + latitude: 17.3
5337 + longitude: -62.7309
5338 + flag_emoji: 🇰🇳
5339 + un_member: true
5340 + independent: true
5341 + landlocked: false
5342 + borders: []
5343 + languages:
5344 + - English
5345 + demonym: Kittitian or Nevisian
5346 + status: country
5347 + kind: country
5348 +- id: LCA
5349 + iso2: LC
5350 + iso3: LCA
5351 + iso_numeric: '662'
5352 + slug: saint-lucia
5353 + short_name: Saint Lucia
5354 + official_name: Saint Lucia
5355 + capital: Castries
5356 + continent: Americas
5357 + region_wb: LCN
5358 + region_wb_name: Latin America & Caribbean
5359 + subregion: Caribbean
5360 + income_group: UMC
5361 + income_group_name: Upper middle income
5362 + currency_code: XCD
5363 + currency_name: Eastern Caribbean dollar
5364 + area_km2: 616
5365 + latitude: 14.0
5366 + longitude: -60.9832
5367 + flag_emoji: 🇱🇨
5368 + un_member: true
5369 + independent: true
5370 + landlocked: false
5371 + borders: []
5372 + languages:
5373 + - English
5374 + demonym: Saint Lucian
5375 + status: country
5376 + kind: country
5377 +- id: MAF
5378 + iso2: MF
5379 + iso3: MAF
5380 + iso_numeric: '663'
5381 + slug: saint-martin
5382 + short_name: Saint Martin
5383 + official_name: Saint Martin
5384 + capital: Marigot
5385 + continent: Americas
5386 + region_wb: LCN
5387 + region_wb_name: Latin America & Caribbean
5388 + subregion: Caribbean
5389 + income_group: HIC
5390 + income_group_name: High income
5391 + currency_code: EUR
5392 + currency_name: Euro
5393 + area_km2: 53
5394 + latitude: 18.08333333
5395 + longitude: -63.95
5396 + flag_emoji: 🇲🇫
5397 + un_member: false
5398 + independent: false
5399 + landlocked: false
5400 + borders:
5401 + - SXM
5402 + languages:
5403 + - French
5404 + demonym: Saint Martin Islander
5405 + status: territory
5406 + kind: country
5407 +- id: VCT
5408 + iso2: VC
5409 + iso3: VCT
5410 + iso_numeric: '670'
5411 + slug: saint-vincent-and-the-grenadines
5412 + short_name: Saint Vincent and the Grenadines
5413 + official_name: Saint Vincent and the Grenadines
5414 + capital: Kingstown
5415 + continent: Americas
5416 + region_wb: LCN
5417 + region_wb_name: Latin America & Caribbean
5418 + subregion: Caribbean
5419 + income_group: UMC
5420 + income_group_name: Upper middle income
5421 + currency_code: XCD
5422 + currency_name: Eastern Caribbean dollar
5423 + area_km2: 389
5424 + latitude: 13.2035
5425 + longitude: -61.2653
5426 + flag_emoji: 🇻🇨
5427 + un_member: true
5428 + independent: true
5429 + landlocked: false
5430 + borders: []
5431 + languages:
5432 + - English
5433 + demonym: Saint Vincentian
5434 + status: country
5435 + kind: country
5436 +- id: WSM
5437 + iso2: WS
5438 + iso3: WSM
5439 + iso_numeric: '882'
5440 + slug: samoa
5441 + short_name: Samoa
5442 + official_name: Independent State of Samoa
5443 + capital: Apia
5444 + continent: Oceania
5445 + region_wb: EAS
5446 + region_wb_name: East Asia & Pacific
5447 + subregion: Polynesia
5448 + income_group: UMC
5449 + income_group_name: Upper middle income
5450 + currency_code: WST
5451 + currency_name: Samoan tālā
5452 + area_km2: 2842
5453 + latitude: -13.8314
5454 + longitude: -171.752
5455 + flag_emoji: 🇼🇸
5456 + un_member: true
5457 + independent: true
5458 + landlocked: false
5459 + borders: []
5460 + languages:
5461 + - English
5462 + - Samoan
5463 + demonym: Samoan
5464 + status: country
5465 + kind: country
5466 +- id: SMR
5467 + iso2: SM
5468 + iso3: SMR
5469 + iso_numeric: '674'
5470 + slug: san-marino
5471 + short_name: San Marino
5472 + official_name: Most Serene Republic of San Marino
5473 + capital: City of San Marino
5474 + continent: Europe
5475 + region_wb: ECS
5476 + region_wb_name: Europe & Central Asia
5477 + subregion: Southern Europe
5478 + income_group: HIC
5479 + income_group_name: High income
5480 + currency_code: EUR
5481 + currency_name: Euro
5482 + area_km2: 61
5483 + latitude: 43.9322
5484 + longitude: 12.4486
5485 + flag_emoji: 🇸🇲
5486 + un_member: true
5487 + independent: true
5488 + landlocked: true
5489 + borders:
5490 + - ITA
5491 + languages:
5492 + - Italian
5493 + demonym: Sammarinese
5494 + status: country
5495 + kind: country
5496 +- id: SAU
5497 + iso2: SA
5498 + iso3: SAU
5499 + iso_numeric: '682'
5500 + slug: saudi-arabia
5501 + short_name: Saudi Arabia
5502 + official_name: Kingdom of Saudi Arabia
5503 + capital: Riyadh
5504 + continent: Asia
5505 + region_wb: MEA
5506 + region_wb_name: Middle East, North Africa, Afghanistan & Pakistan
5507 + subregion: Western Asia
5508 + income_group: HIC
5509 + income_group_name: High income
5510 + currency_code: SAR
5511 + currency_name: Saudi riyal
5512 + area_km2: 2149690
5513 + latitude: 24.6748
5514 + longitude: 46.6977
5515 + flag_emoji: 🇸🇦
5516 + un_member: true
5517 + independent: true
5518 + landlocked: false
5519 + borders:
5520 + - IRQ
5521 + - JOR
5522 + - KWT
5523 + - OMN
5524 + - QAT
5525 + - ARE
5526 + - YEM
5527 + languages:
5528 + - Arabic
5529 + demonym: Saudi Arabian
5530 + status: country
5531 + kind: country
5532 +- id: SEN
5533 + iso2: SN
5534 + iso3: SEN
5535 + iso_numeric: '686'
5536 + slug: senegal
5537 + short_name: Senegal
5538 + official_name: Republic of Senegal
5539 + capital: Dakar
5540 + continent: Africa
5541 + region_wb: SSF
5542 + region_wb_name: Sub-Saharan Africa
5543 + subregion: Western Africa
5544 + income_group: LMC
5545 + income_group_name: Lower middle income
5546 + currency_code: XOF
5547 + currency_name: West African CFA franc
5548 + area_km2: 196722
5549 + latitude: 14.7247
5550 + longitude: -17.4734
5551 + flag_emoji: 🇸🇳
5552 + un_member: true
5553 + independent: true
5554 + landlocked: false
5555 + borders:
5556 + - GMB
5557 + - GIN
5558 + - GNB
5559 + - MLI
5560 + - MRT
5561 + languages:
5562 + - French
5563 + demonym: Senegalese
5564 + status: country
5565 + kind: country
5566 +- id: SRB
5567 + iso2: RS
5568 + iso3: SRB
5569 + iso_numeric: '688'
5570 + slug: serbia
5571 + short_name: Serbia
5572 + official_name: Republic of Serbia
5573 + capital: Belgrade
5574 + continent: Europe
5575 + region_wb: ECS
5576 + region_wb_name: Europe & Central Asia
5577 + subregion: Southeast Europe
5578 + income_group: UMC
5579 + income_group_name: Upper middle income
5580 + currency_code: RSD
5581 + currency_name: Serbian dinar
5582 + area_km2: 88361
5583 + latitude: 44.8024
5584 + longitude: 20.4656
5585 + flag_emoji: 🇷🇸
5586 + un_member: true
5587 + independent: true
5588 + landlocked: true
5589 + borders:
5590 + - BIH
5591 + - BGR
5592 + - HRV
5593 + - HUN
5594 + - UNK
5595 + - MKD
5596 + - MNE
5597 + - ROU
5598 + languages:
5599 + - Serbian
5600 + demonym: Serbian
5601 + status: country
5602 + kind: country
5603 +- id: SYC
5604 + iso2: SC
5605 + iso3: SYC
5606 + iso_numeric: '690'
5607 + slug: seychelles
5608 + short_name: Seychelles
5609 + official_name: Republic of Seychelles
5610 + capital: Victoria
5611 + continent: Africa
5612 + region_wb: SSF
5613 + region_wb_name: Sub-Saharan Africa
5614 + subregion: Eastern Africa
5615 + income_group: HIC
5616 + income_group_name: High income
5617 + currency_code: SCR
5618 + currency_name: Seychellois rupee
5619 + area_km2: 452
5620 + latitude: -4.6309
5621 + longitude: 55.4466
5622 + flag_emoji: 🇸🇨
5623 + un_member: true
5624 + independent: true
5625 + landlocked: false
5626 + borders: []
5627 + languages:
5628 + - English
5629 + - French
5630 + - Seychellois Creole
5631 + demonym: Seychellois
5632 + status: country
5633 + kind: country
5634 +- id: SLE
5635 + iso2: SL
5636 + iso3: SLE
5637 + iso_numeric: '694'
5638 + slug: sierra-leone
5639 + short_name: Sierra Leone
5640 + official_name: Republic of Sierra Leone
5641 + capital: Freetown
5642 + continent: Africa
5643 + region_wb: SSF
5644 + region_wb_name: Sub-Saharan Africa
5645 + subregion: Western Africa
5646 + income_group: LIC
5647 + income_group_name: Low income
5648 + currency_code: SLE
5649 + currency_name: Sierra Leonean leone
5650 + area_km2: 71740
5651 + latitude: 8.4821
5652 + longitude: -13.2134
5653 + flag_emoji: 🇸🇱
5654 + un_member: true
5655 + independent: true
5656 + landlocked: false
5657 + borders:
5658 + - GIN
5659 + - LBR
5660 + languages:
5661 + - English
5662 + demonym: Sierra Leonean
5663 + status: country
5664 + kind: country
5665 +- id: SGP
5666 + iso2: SG
5667 + iso3: SGP
5668 + iso_numeric: '702'
5669 + slug: singapore
5670 + short_name: Singapore
5671 + official_name: Republic of Singapore
5672 + capital: Singapore
5673 + continent: Asia
5674 + region_wb: EAS
5675 + region_wb_name: East Asia & Pacific
5676 + subregion: South-Eastern Asia
5677 + income_group: HIC
5678 + income_group_name: High income
5679 + currency_code: SGD
5680 + currency_name: Singapore dollar
5681 + area_km2: 710
5682 + latitude: 1.28941
5683 + longitude: 103.85
5684 + flag_emoji: 🇸🇬
5685 + un_member: true
5686 + independent: true
5687 + landlocked: false
5688 + borders: []
5689 + languages:
5690 + - Chinese
5691 + - English
5692 + - Malay
5693 + - Tamil
5694 + demonym: Singaporean
5695 + status: country
5696 + kind: country
5697 +- id: SXM
5698 + iso2: SX
5699 + iso3: SXM
5700 + iso_numeric: '534'
5701 + slug: sint-maarten
5702 + short_name: Sint Maarten
5703 + official_name: Sint Maarten
5704 + capital: Philipsburg
5705 + continent: Americas
5706 + region_wb: LCN
5707 + region_wb_name: Latin America & Caribbean
5708 + subregion: Caribbean
5709 + income_group: HIC
5710 + income_group_name: High income
5711 + currency_code: ANG
5712 + currency_name: Netherlands Antillean guilder
5713 + area_km2: 34
5714 + latitude: 18.033333
5715 + longitude: -63.05
5716 + flag_emoji: 🇸🇽
5717 + un_member: false
5718 + independent: false
5719 + landlocked: false
5720 + borders:
5721 + - MAF
5722 + languages:
5723 + - Dutch
5724 + - English
5725 + - French
5726 + demonym: St. Maartener
5727 + status: territory
5728 + kind: country
5729 +- id: SVK
5730 + iso2: SK
5731 + iso3: SVK
5732 + iso_numeric: '703'
5733 + slug: slovakia
5734 + short_name: Slovakia
5735 + official_name: Slovak Republic
5736 + capital: Bratislava
5737 + continent: Europe
5738 + region_wb: ECS
5739 + region_wb_name: Europe & Central Asia
5740 + subregion: Central Europe
5741 + income_group: HIC
5742 + income_group_name: High income
5743 + currency_code: EUR
5744 + currency_name: Euro
5745 + area_km2: 49037
5746 + latitude: 48.1484
5747 + longitude: 17.1073
5748 + flag_emoji: 🇸🇰
5749 + un_member: true
5750 + independent: true
5751 + landlocked: true
5752 + borders:
5753 + - AUT
5754 + - CZE
5755 + - HUN
5756 + - POL
5757 + - UKR
5758 + languages:
5759 + - Slovak
5760 + demonym: Slovak
5761 + status: country
5762 + kind: country
5763 +- id: SVN
5764 + iso2: SI
5765 + iso3: SVN
5766 + iso_numeric: '705'
5767 + slug: slovenia
5768 + short_name: Slovenia
5769 + official_name: Republic of Slovenia
5770 + capital: Ljubljana
5771 + continent: Europe
5772 + region_wb: ECS
5773 + region_wb_name: Europe & Central Asia
5774 + subregion: Central Europe
5775 + income_group: HIC
5776 + income_group_name: High income
5777 + currency_code: EUR
5778 + currency_name: Euro
5779 + area_km2: 20273
5780 + latitude: 46.0546
5781 + longitude: 14.5044
5782 + flag_emoji: 🇸🇮
5783 + un_member: true
5784 + independent: true
5785 + landlocked: false
5786 + borders:
5787 + - AUT
5788 + - HRV
5789 + - ITA
5790 + - HUN
5791 + languages:
5792 + - Slovene
5793 + demonym: Slovene
5794 + status: country
5795 + kind: country
5796 +- id: SLB
5797 + iso2: SB
5798 + iso3: SLB
5799 + iso_numeric: 090
5800 + slug: solomon-islands
5801 + short_name: Solomon Islands
5802 + official_name: Solomon Islands
5803 + capital: Honiara
5804 + continent: Oceania
5805 + region_wb: EAS
5806 + region_wb_name: East Asia & Pacific
5807 + subregion: Melanesia
5808 + income_group: LMC
5809 + income_group_name: Lower middle income
5810 + currency_code: SBD
5811 + currency_name: Solomon Islands dollar
5812 + area_km2: 28896
5813 + latitude: -9.42676
5814 + longitude: 159.949
5815 + flag_emoji: 🇸🇧
5816 + un_member: true
5817 + independent: true
5818 + landlocked: false
5819 + borders: []
5820 + languages:
5821 + - English
5822 + demonym: Solomon Islander
5823 + status: country
5824 + kind: country
5825 +- id: SOM
5826 + iso2: SO
5827 + iso3: SOM
5828 + iso_numeric: '706'
5829 + slug: somalia
5830 + short_name: Somalia
5831 + official_name: Federal Republic of Somalia
5832 + capital: Mogadishu
5833 + continent: Africa
5834 + region_wb: SSF
5835 + region_wb_name: Sub-Saharan Africa
5836 + subregion: Eastern Africa
5837 + income_group: LIC
5838 + income_group_name: Low income
5839 + currency_code: SOS
5840 + currency_name: Somali shilling
5841 + area_km2: 637657
5842 + latitude: 2.07515
5843 + longitude: 45.3254
5844 + flag_emoji: 🇸🇴
5845 + un_member: true
5846 + independent: true
5847 + landlocked: false
5848 + borders:
5849 + - DJI
5850 + - ETH
5851 + - KEN
5852 + languages:
5853 + - Arabic
5854 + - Somali
5855 + demonym: Somali
5856 + status: country
5857 + kind: country
5858 +- id: ZAF
5859 + iso2: ZA
5860 + iso3: ZAF
5861 + iso_numeric: '710'
5862 + slug: south-africa
5863 + short_name: South Africa
5864 + official_name: Republic of South Africa
5865 + capital: Pretoria
5866 + continent: Africa
5867 + region_wb: SSF
5868 + region_wb_name: Sub-Saharan Africa
5869 + subregion: Southern Africa
5870 + income_group: UMC
5871 + income_group_name: Upper middle income
5872 + currency_code: ZAR
5873 + currency_name: South African rand
5874 + area_km2: 1221037
5875 + latitude: -25.746
5876 + longitude: 28.1871
5877 + flag_emoji: 🇿🇦
5878 + un_member: true
5879 + independent: true
5880 + landlocked: false
5881 + borders:
5882 + - BWA
5883 + - LSO
5884 + - MOZ
5885 + - NAM
5886 + - SWZ
5887 + - ZWE
5888 + languages:
5889 + - Afrikaans
5890 + - English
5891 + - Northern Sotho
5892 + - Southern Ndebele
5893 + - Southern Sotho
5894 + - Swazi
5895 + - Tsonga
5896 + - Tswana
5897 + - Venda
5898 + - Xhosa
5899 + - Zulu
5900 + demonym: South African
5901 + status: country
5902 + kind: country
5903 +- id: KOR
5904 + iso2: KR
5905 + iso3: KOR
5906 + iso_numeric: '410'
5907 + slug: south-korea
5908 + short_name: South Korea
5909 + official_name: Republic of Korea
5910 + capital: Seoul
5911 + continent: Asia
5912 + region_wb: EAS
5913 + region_wb_name: East Asia & Pacific
5914 + subregion: Eastern Asia
5915 + income_group: HIC
5916 + income_group_name: High income
5917 + currency_code: KRW
5918 + currency_name: South Korean won
5919 + area_km2: 100210
5920 + latitude: 37.5323
5921 + longitude: 126.957
5922 + flag_emoji: 🇰🇷
5923 + un_member: true
5924 + independent: true
5925 + landlocked: false
5926 + borders:
5927 + - PRK
5928 + languages:
5929 + - Korean
5930 + demonym: South Korean
5931 + status: country
5932 + kind: country
5933 +- id: SSD
5934 + iso2: SS
5935 + iso3: SSD
5936 + iso_numeric: '728'
5937 + slug: south-sudan
5938 + short_name: South Sudan
5939 + official_name: Republic of South Sudan
5940 + capital: Juba
5941 + continent: Africa
5942 + region_wb: SSF
5943 + region_wb_name: Sub-Saharan Africa
5944 + subregion: Middle Africa
5945 + income_group: LIC
5946 + income_group_name: Low income
5947 + currency_code: SSP
5948 + currency_name: South Sudanese pound
5949 + area_km2: 619745
5950 + latitude: 4.85
5951 + longitude: 31.6
5952 + flag_emoji: 🇸🇸
5953 + un_member: true
5954 + independent: true
5955 + landlocked: true
5956 + borders:
5957 + - CAF
5958 + - COD
5959 + - ETH
5960 + - KEN
5961 + - SDN
5962 + - UGA
5963 + languages:
5964 + - English
5965 + demonym: South Sudanese
5966 + status: country
5967 + kind: country
5968 +- id: ESP
5969 + iso2: ES
5970 + iso3: ESP
5971 + iso_numeric: '724'
5972 + slug: spain
5973 + short_name: Spain
5974 + official_name: Kingdom of Spain
5975 + capital: Madrid
5976 + continent: Europe
5977 + region_wb: ECS
5978 + region_wb_name: Europe & Central Asia
5979 + subregion: Southern Europe
5980 + income_group: HIC
5981 + income_group_name: High income
5982 + currency_code: EUR
5983 + currency_name: Euro
5984 + area_km2: 505992
5985 + latitude: 40.4167
5986 + longitude: -3.70327
5987 + flag_emoji: 🇪🇸
5988 + un_member: true
5989 + independent: true
5990 + landlocked: false
5991 + borders:
5992 + - AND
5993 + - FRA
5994 + - GIB
5995 + - PRT
5996 + - MAR
5997 + languages:
5998 + - Spanish
5999 + demonym: Spanish
6000 + status: country
6001 + kind: country
6002 +- id: LKA
6003 + iso2: LK
6004 + iso3: LKA
6005 + iso_numeric: '144'
6006 + slug: sri-lanka
6007 + short_name: Sri Lanka
6008 + official_name: Democratic Socialist Republic of Sri Lanka
6009 + capital: Colombo
6010 + continent: Asia
6011 + region_wb: SAS
6012 + region_wb_name: South Asia
6013 + subregion: Southern Asia
6014 + income_group: UMC
6015 + income_group_name: Upper middle income
6016 + currency_code: LKR
6017 + currency_name: Sri Lankan rupee
6018 + area_km2: 65610
6019 + latitude: 6.92148
6020 + longitude: 79.8528
6021 + flag_emoji: 🇱🇰
6022 + un_member: true
6023 + independent: true
6024 + landlocked: false
6025 + borders:
6026 + - IND
6027 + languages:
6028 + - Sinhala
6029 + - Tamil
6030 + demonym: Sri Lankan
6031 + status: country
6032 + kind: country
6033 +- id: SDN
6034 + iso2: SD
6035 + iso3: SDN
6036 + iso_numeric: '729'
6037 + slug: sudan
6038 + short_name: Sudan
6039 + official_name: Republic of the Sudan
6040 + capital: Khartoum
6041 + continent: Africa
6042 + region_wb: SSF
6043 + region_wb_name: Sub-Saharan Africa
6044 + subregion: Northern Africa
6045 + income_group: LIC
6046 + income_group_name: Low income
6047 + currency_code: SDG
6048 + currency_name: Sudanese pound
6049 + area_km2: 1886068
6050 + latitude: 15.5932
6051 + longitude: 32.5363
6052 + flag_emoji: 🇸🇩
6053 + un_member: true
6054 + independent: true
6055 + landlocked: false
6056 + borders:
6057 + - CAF
6058 + - TCD
6059 + - EGY
6060 + - ERI
6061 + - ETH
6062 + - LBY
6063 + - SSD
6064 + languages:
6065 + - Arabic
6066 + - English
6067 + demonym: Sudanese
6068 + status: country
6069 + kind: country
6070 +- id: SUR
6071 + iso2: SR
6072 + iso3: SUR
6073 + iso_numeric: '740'
6074 + slug: suriname
6075 + short_name: Suriname
6076 + official_name: Republic of Suriname
6077 + capital: Paramaribo
6078 + continent: Americas
6079 + region_wb: LCN
6080 + region_wb_name: Latin America & Caribbean
6081 + subregion: South America
6082 + income_group: UMC
6083 + income_group_name: Upper middle income
6084 + currency_code: SRD
6085 + currency_name: Surinamese dollar
6086 + area_km2: 163820
6087 + latitude: 5.8232
6088 + longitude: -55.1679
6089 + flag_emoji: 🇸🇷
6090 + un_member: true
6091 + independent: true
6092 + landlocked: false
6093 + borders:
6094 + - BRA
6095 + - GUF
6096 + - GUY
6097 + languages:
6098 + - Dutch
6099 + demonym: Surinamer
6100 + status: country
6101 + kind: country
6102 +- id: SWE
6103 + iso2: SE
6104 + iso3: SWE
6105 + iso_numeric: '752'
6106 + slug: sweden
6107 + short_name: Sweden
6108 + official_name: Kingdom of Sweden
6109 + capital: Stockholm
6110 + continent: Europe
6111 + region_wb: ECS
6112 + region_wb_name: Europe & Central Asia
6113 + subregion: Northern Europe
6114 + income_group: HIC
6115 + income_group_name: High income
6116 + currency_code: SEK
6117 + currency_name: Swedish krona
6118 + area_km2: 450295
6119 + latitude: 59.3327
6120 + longitude: 18.0645
6121 + flag_emoji: 🇸🇪
6122 + un_member: true
6123 + independent: true
6124 + landlocked: false
6125 + borders:
6126 + - FIN
6127 + - NOR
6128 + languages:
6129 + - Swedish
6130 + demonym: Swedish
6131 + status: country
6132 + kind: country
6133 +- id: CHE
6134 + iso2: CH
6135 + iso3: CHE
6136 + iso_numeric: '756'
6137 + slug: switzerland
6138 + short_name: Switzerland
6139 + official_name: Swiss Confederation
6140 + capital: Bern
6141 + continent: Europe
6142 + region_wb: ECS
6143 + region_wb_name: Europe & Central Asia
6144 + subregion: Western Europe
6145 + income_group: HIC
6146 + income_group_name: High income
6147 + currency_code: CHF
6148 + currency_name: Swiss franc
6149 + area_km2: 41284
6150 + latitude: 46.948
6151 + longitude: 7.44821
6152 + flag_emoji: 🇨🇭
6153 + un_member: true
6154 + independent: true
6155 + landlocked: true
6156 + borders:
6157 + - AUT
6158 + - FRA
6159 + - ITA
6160 + - LIE
6161 + - DEU
6162 + languages:
6163 + - French
6164 + - Italian
6165 + - Romansh
6166 + - Swiss German
6167 + demonym: Swiss
6168 + status: country
6169 + kind: country
6170 +- id: SYR
6171 + iso2: SY
6172 + iso3: SYR
6173 + iso_numeric: '760'
6174 + slug: syria
6175 + short_name: Syria
6176 + official_name: Syrian Arab Republic
6177 + capital: Damascus
6178 + continent: Asia
6179 + region_wb: MEA
6180 + region_wb_name: Middle East, North Africa, Afghanistan & Pakistan
6181 + subregion: Western Asia
6182 + income_group: LIC
6183 + income_group_name: Low income
6184 + currency_code: SYP
6185 + currency_name: Syrian pound
6186 + area_km2: 185180
6187 + latitude: 33.5146
6188 + longitude: 36.3119
6189 + flag_emoji: 🇸🇾
6190 + un_member: true
6191 + independent: true
6192 + landlocked: false
6193 + borders:
6194 + - IRQ
6195 + - ISR
6196 + - JOR
6197 + - LBN
6198 + - TUR
6199 + languages:
6200 + - Arabic
6201 + demonym: Syrian
6202 + status: country
6203 + kind: country
6204 +- id: STP
6205 + iso2: ST
6206 + iso3: STP
6207 + iso_numeric: '678'
6208 + slug: sao-tome-and-principe
6209 + short_name: São Tomé and Príncipe
6210 + official_name: Democratic Republic of São Tomé and Príncipe
6211 + capital: São Tomé
6212 + continent: Africa
6213 + region_wb: SSF
6214 + region_wb_name: Sub-Saharan Africa
6215 + subregion: Middle Africa
6216 + income_group: LMC
6217 + income_group_name: Lower middle income
6218 + currency_code: STN
6219 + currency_name: São Tomé and Príncipe dobra
6220 + area_km2: 964
6221 + latitude: 0.20618
6222 + longitude: 6.6071
6223 + flag_emoji: 🇸🇹
6224 + un_member: true
6225 + independent: true
6226 + landlocked: false
6227 + borders: []
6228 + languages:
6229 + - Portuguese
6230 + demonym: Sao Tomean
6231 + status: country
6232 + kind: country
6233 +- id: TWN
6234 + iso2: TW
6235 + iso3: TWN
6236 + iso_numeric: '158'
6237 + slug: taiwan
6238 + short_name: Taiwan
6239 + official_name: Republic of China (Taiwan)
6240 + capital: Taipei
6241 + continent: Asia
6242 + region_wb: EAS
6243 + region_wb_name: East Asia & Pacific
6244 + subregion: Eastern Asia
6245 + income_group: HIC
6246 + income_group_name: High income
6247 + currency_code: TWD
6248 + currency_name: New Taiwan dollar
6249 + area_km2: 36193
6250 + latitude: 23.5
6251 + longitude: 121
6252 + flag_emoji: 🇹🇼
6253 + un_member: false
6254 + independent: false
6255 + landlocked: false
6256 + borders: []
6257 + languages:
6258 + - Chinese
6259 + demonym: Taiwanese
6260 + status: territory
6261 + kind: country
6262 +- id: TJK
6263 + iso2: TJ
6264 + iso3: TJK
6265 + iso_numeric: '762'
6266 + slug: tajikistan
6267 + short_name: Tajikistan
6268 + official_name: Republic of Tajikistan
6269 + capital: Dushanbe
6270 + continent: Asia
6271 + region_wb: ECS
6272 + region_wb_name: Europe & Central Asia
6273 + subregion: Central Asia
6274 + income_group: LMC
6275 + income_group_name: Lower middle income
6276 + currency_code: TJS
6277 + currency_name: Tajikistani somoni
6278 + area_km2: 143100
6279 + latitude: 38.5878
6280 + longitude: 68.7864
6281 + flag_emoji: 🇹🇯
6282 + un_member: true
6283 + independent: true
6284 + landlocked: true
6285 + borders:
6286 + - AFG
6287 + - CHN
6288 + - KGZ
6289 + - UZB
6290 + languages:
6291 + - Russian
6292 + - Tajik
6293 + demonym: Tadzhik
6294 + status: country
6295 + kind: country
6296 +- id: TZA
6297 + iso2: TZ
6298 + iso3: TZA
6299 + iso_numeric: '834'
6300 + slug: tanzania
6301 + short_name: Tanzania
6302 + official_name: United Republic of Tanzania
6303 + capital: Dodoma
6304 + continent: Africa
6305 + region_wb: SSF
6306 + region_wb_name: Sub-Saharan Africa
6307 + subregion: Eastern Africa
6308 + income_group: LMC
6309 + income_group_name: Lower middle income
6310 + currency_code: TZS
6311 + currency_name: Tanzanian shilling
6312 + area_km2: 945087
6313 + latitude: -6.17486
6314 + longitude: 35.7382
6315 + flag_emoji: 🇹🇿
6316 + un_member: true
6317 + independent: true
6318 + landlocked: false
6319 + borders:
6320 + - BDI
6321 + - COD
6322 + - KEN
6323 + - MWI
6324 + - MOZ
6325 + - RWA
6326 + - UGA
6327 + - ZMB
6328 + languages:
6329 + - English
6330 + - Swahili
6331 + demonym: Tanzanian
6332 + status: country
6333 + kind: country
6334 +- id: THA
6335 + iso2: TH
6336 + iso3: THA
6337 + iso_numeric: '764'
6338 + slug: thailand
6339 + short_name: Thailand
6340 + official_name: Kingdom of Thailand
6341 + capital: Bangkok
6342 + continent: Asia
6343 + region_wb: EAS
6344 + region_wb_name: East Asia & Pacific
6345 + subregion: South-Eastern Asia
6346 + income_group: UMC
6347 + income_group_name: Upper middle income
6348 + currency_code: THB
6349 + currency_name: Thai baht
6350 + area_km2: 513120
6351 + latitude: 13.7308
6352 + longitude: 100.521
6353 + flag_emoji: 🇹🇭
6354 + un_member: true
6355 + independent: true
6356 + landlocked: false
6357 + borders:
6358 + - MMR
6359 + - KHM
6360 + - LAO
6361 + - MYS
6362 + languages:
6363 + - Thai
6364 + demonym: Thai
6365 + status: country
6366 + kind: country
6367 +- id: TLS
6368 + iso2: TL
6369 + iso3: TLS
6370 + iso_numeric: '626'
6371 + slug: timor-leste
6372 + short_name: Timor-Leste
6373 + official_name: Democratic Republic of Timor-Leste
6374 + capital: Dili
6375 + continent: Asia
6376 + region_wb: EAS
6377 + region_wb_name: East Asia & Pacific
6378 + subregion: South-Eastern Asia
6379 + income_group: LMC
6380 + income_group_name: Lower middle income
6381 + currency_code: USD
6382 + currency_name: United States dollar
6383 + area_km2: 14874
6384 + latitude: -8.56667
6385 + longitude: 125.567
6386 + flag_emoji: 🇹🇱
6387 + un_member: true
6388 + independent: true
6389 + landlocked: false
6390 + borders:
6391 + - IDN
6392 + languages:
6393 + - Portuguese
6394 + - Tetum
6395 + demonym: East Timorese
6396 + status: country
6397 + kind: country
6398 +- id: TGO
6399 + iso2: TG
6400 + iso3: TGO
6401 + iso_numeric: '768'
6402 + slug: togo
6403 + short_name: Togo
6404 + official_name: Togolese Republic
6405 + capital: Lomé
6406 + continent: Africa
6407 + region_wb: SSF
6408 + region_wb_name: Sub-Saharan Africa
6409 + subregion: Western Africa
6410 + income_group: LMC
6411 + income_group_name: Lower middle income
6412 + currency_code: XOF
6413 + currency_name: West African CFA franc
6414 + area_km2: 56785
6415 + latitude: 6.1228
6416 + longitude: 1.2255
6417 + flag_emoji: 🇹🇬
6418 + un_member: true
6419 + independent: true
6420 + landlocked: false
6421 + borders:
6422 + - BEN
6423 + - BFA
6424 + - GHA
6425 + languages:
6426 + - French
6427 + demonym: Togolese
6428 + status: country
6429 + kind: country
6430 +- id: TON
6431 + iso2: TO
6432 + iso3: TON
6433 + iso_numeric: '776'
6434 + slug: tonga
6435 + short_name: Tonga
6436 + official_name: Kingdom of Tonga
6437 + capital: Nuku'alofa
6438 + continent: Oceania
6439 + region_wb: EAS
6440 + region_wb_name: East Asia & Pacific
6441 + subregion: Polynesia
6442 + income_group: UMC
6443 + income_group_name: Upper middle income
6444 + currency_code: TOP
6445 + currency_name: Tongan paʻanga
6446 + area_km2: 747
6447 + latitude: -21.136
6448 + longitude: -175.216
6449 + flag_emoji: 🇹🇴
6450 + un_member: true
6451 + independent: true
6452 + landlocked: false
6453 + borders: []
6454 + languages:
6455 + - English
6456 + - Tongan
6457 + demonym: Tongan
6458 + status: country
6459 + kind: country
6460 +- id: TTO
6461 + iso2: TT
6462 + iso3: TTO
6463 + iso_numeric: '780'
6464 + slug: trinidad-and-tobago
6465 + short_name: Trinidad and Tobago
6466 + official_name: Republic of Trinidad and Tobago
6467 + capital: Port of Spain
6468 + continent: Americas
6469 + region_wb: LCN
6470 + region_wb_name: Latin America & Caribbean
6471 + subregion: Caribbean
6472 + income_group: HIC
6473 + income_group_name: High income
6474 + currency_code: TTD
6475 + currency_name: Trinidad and Tobago dollar
6476 + area_km2: 5130
6477 + latitude: 10.6596
6478 + longitude: -61.4789
6479 + flag_emoji: 🇹🇹
6480 + un_member: true
6481 + independent: true
6482 + landlocked: false
6483 + borders: []
6484 + languages:
6485 + - English
6486 + demonym: Trinidadian
6487 + status: country
6488 + kind: country
6489 +- id: TUN
6490 + iso2: TN
6491 + iso3: TUN
6492 + iso_numeric: '788'
6493 + slug: tunisia
6494 + short_name: Tunisia
6495 + official_name: Tunisian Republic
6496 + capital: Tunis
6497 + continent: Africa
6498 + region_wb: MEA
6499 + region_wb_name: Middle East, North Africa, Afghanistan & Pakistan
6500 + subregion: Northern Africa
6501 + income_group: LMC
6502 + income_group_name: Lower middle income
6503 + currency_code: TND
6504 + currency_name: Tunisian dinar
6505 + area_km2: 163610
6506 + latitude: 36.7899
6507 + longitude: 10.21
6508 + flag_emoji: 🇹🇳
6509 + un_member: true
6510 + independent: true
6511 + landlocked: false
6512 + borders:
6513 + - DZA
6514 + - LBY
6515 + languages:
6516 + - Arabic
6517 + demonym: Tunisian
6518 + status: country
6519 + kind: country
6520 +- id: TKM
6521 + iso2: TM
6522 + iso3: TKM
6523 + iso_numeric: '795'
6524 + slug: turkmenistan
6525 + short_name: Turkmenistan
6526 + official_name: Turkmenistan
6527 + capital: Ashgabat
6528 + continent: Asia
6529 + region_wb: ECS
6530 + region_wb_name: Europe & Central Asia
6531 + subregion: Central Asia
6532 + income_group: UMC
6533 + income_group_name: Upper middle income
6534 + currency_code: TMT
6535 + currency_name: Turkmenistan manat
6536 + area_km2: 488100
6537 + latitude: 37.9509
6538 + longitude: 58.3794
6539 + flag_emoji: 🇹🇲
6540 + un_member: true
6541 + independent: true
6542 + landlocked: true
6543 + borders:
6544 + - AFG
6545 + - IRN
6546 + - KAZ
6547 + - UZB
6548 + languages:
6549 + - Russian
6550 + - Turkmen
6551 + demonym: Turkmen
6552 + status: country
6553 + kind: country
6554 +- id: TCA
6555 + iso2: TC
6556 + iso3: TCA
6557 + iso_numeric: '796'
6558 + slug: turks-and-caicos-islands
6559 + short_name: Turks and Caicos Islands
6560 + official_name: Turks and Caicos Islands
6561 + capital: Cockburn Town
6562 + continent: Americas
6563 + region_wb: LCN
6564 + region_wb_name: Latin America & Caribbean
6565 + subregion: Caribbean
6566 + income_group: HIC
6567 + income_group_name: High income
6568 + currency_code: USD
6569 + currency_name: United States dollar
6570 + area_km2: 948
6571 + latitude: 21.4602778
6572 + longitude: -71.141389
6573 + flag_emoji: 🇹🇨
6574 + un_member: false
6575 + independent: false
6576 + landlocked: false
6577 + borders: []
6578 + languages:
6579 + - English
6580 + demonym: Turks and Caicos Islander
6581 + status: territory
6582 + kind: country
6583 +- id: TUV
6584 + iso2: TV
6585 + iso3: TUV
6586 + iso_numeric: '798'
6587 + slug: tuvalu
6588 + short_name: Tuvalu
6589 + official_name: Tuvalu
6590 + capital: Funafuti
6591 + continent: Oceania
6592 + region_wb: EAS
6593 + region_wb_name: East Asia & Pacific
6594 + subregion: Polynesia
6595 + income_group: UMC
6596 + income_group_name: Upper middle income
6597 + currency_code: AUD
6598 + currency_name: Australian dollar
6599 + area_km2: 26
6600 + latitude: -8.6314877
6601 + longitude: 179.089567
6602 + flag_emoji: 🇹🇻
6603 + un_member: true
6604 + independent: true
6605 + landlocked: false
6606 + borders: []
6607 + languages:
6608 + - English
6609 + - Tuvaluan
6610 + demonym: Tuvaluan
6611 + status: country
6612 + kind: country
6613 +- id: TUR
6614 + iso2: TR
6615 + iso3: TUR
6616 + iso_numeric: '792'
6617 + slug: turkiye
6618 + short_name: Türkiye
6619 + official_name: Republic of Türkiye
6620 + capital: Ankara
6621 + continent: Asia
6622 + region_wb: ECS
6623 + region_wb_name: Europe & Central Asia
6624 + subregion: Western Asia
6625 + income_group: UMC
6626 + income_group_name: Upper middle income
6627 + currency_code: TRY
6628 + currency_name: Turkish lira
6629 + area_km2: 783562
6630 + latitude: 39.7153
6631 + longitude: 32.3606
6632 + flag_emoji: 🇹🇷
6633 + un_member: true
6634 + independent: true
6635 + landlocked: false
6636 + borders:
6637 + - ARM
6638 + - AZE
6639 + - BGR
6640 + - GEO
6641 + - GRC
6642 + - IRN
6643 + - IRQ
6644 + - SYR
6645 + languages:
6646 + - Turkish
6647 + demonym: Turkish
6648 + status: country
6649 + kind: country
6650 +- id: VIR
6651 + iso2: VI
6652 + iso3: VIR
6653 + iso_numeric: '850'
6654 + slug: u-s-virgin-islands
6655 + short_name: U.S. Virgin Islands
6656 + official_name: Virgin Islands of the United States
6657 + capital: Charlotte Amalie
6658 + continent: Americas
6659 + region_wb: LCN
6660 + region_wb_name: Latin America & Caribbean
6661 + subregion: Caribbean
6662 + income_group: HIC
6663 + income_group_name: High income
6664 + currency_code: USD
6665 + currency_name: United States dollar
6666 + area_km2: 347
6667 + latitude: 18.3358
6668 + longitude: -64.8963
6669 + flag_emoji: 🇻🇮
6670 + un_member: false
6671 + independent: false
6672 + landlocked: false
6673 + borders: []
6674 + languages:
6675 + - English
6676 + demonym: Virgin Islander
6677 + status: territory
6678 + kind: country
6679 +- id: UGA
6680 + iso2: UG
6681 + iso3: UGA
6682 + iso_numeric: '800'
6683 + slug: uganda
6684 + short_name: Uganda
6685 + official_name: Republic of Uganda
6686 + capital: Kampala
6687 + continent: Africa
6688 + region_wb: SSF
6689 + region_wb_name: Sub-Saharan Africa
6690 + subregion: Eastern Africa
6691 + income_group: LIC
6692 + income_group_name: Low income
6693 + currency_code: UGX
6694 + currency_name: Ugandan shilling
6695 + area_km2: 241550
6696 + latitude: 0.314269
6697 + longitude: 32.5729
6698 + flag_emoji: 🇺🇬
6699 + un_member: true
6700 + independent: true
6701 + landlocked: true
6702 + borders:
6703 + - COD
6704 + - KEN
6705 + - RWA
6706 + - SSD
6707 + - TZA
6708 + languages:
6709 + - English
6710 + - Swahili
6711 + demonym: Ugandan
6712 + status: country
6713 + kind: country
6714 +- id: UKR
6715 + iso2: UA
6716 + iso3: UKR
6717 + iso_numeric: '804'
6718 + slug: ukraine
6719 + short_name: Ukraine
6720 + official_name: Ukraine
6721 + capital: Kyiv
6722 + continent: Europe
6723 + region_wb: ECS
6724 + region_wb_name: Europe & Central Asia
6725 + subregion: Eastern Europe
6726 + income_group: UMC
6727 + income_group_name: Upper middle income
6728 + currency_code: UAH
6729 + currency_name: Ukrainian hryvnia
6730 + area_km2: 603500
6731 + latitude: 50.4536
6732 + longitude: 30.5038
6733 + flag_emoji: 🇺🇦
6734 + un_member: true
6735 + independent: true
6736 + landlocked: false
6737 + borders:
6738 + - BLR
6739 + - HUN
6740 + - MDA
6741 + - POL
6742 + - ROU
6743 + - RUS
6744 + - SVK
6745 + languages:
6746 + - Ukrainian
6747 + demonym: Ukrainian
6748 + status: country
6749 + kind: country
6750 +- id: ARE
6751 + iso2: AE
6752 + iso3: ARE
6753 + iso_numeric: '784'
6754 + slug: united-arab-emirates
6755 + short_name: United Arab Emirates
6756 + official_name: United Arab Emirates
6757 + capital: Abu Dhabi
6758 + continent: Asia
6759 + region_wb: MEA
6760 + region_wb_name: Middle East, North Africa, Afghanistan & Pakistan
6761 + subregion: Western Asia
6762 + income_group: HIC
6763 + income_group_name: High income
6764 + currency_code: AED
6765 + currency_name: United Arab Emirates dirham
6766 + area_km2: 83600
6767 + latitude: 24.4764
6768 + longitude: 54.3705
6769 + flag_emoji: 🇦🇪
6770 + un_member: true
6771 + independent: true
6772 + landlocked: false
6773 + borders:
6774 + - OMN
6775 + - SAU
6776 + languages:
6777 + - Arabic
6778 + demonym: Emirati
6779 + status: country
6780 + kind: country
6781 +- id: GBR
6782 + iso2: GB
6783 + iso3: GBR
6784 + iso_numeric: '826'
6785 + slug: united-kingdom
6786 + short_name: United Kingdom
6787 + official_name: United Kingdom of Great Britain and Northern Ireland
6788 + capital: London
6789 + continent: Europe
6790 + region_wb: ECS
6791 + region_wb_name: Europe & Central Asia
6792 + subregion: Northern Europe
6793 + income_group: HIC
6794 + income_group_name: High income
6795 + currency_code: GBP
6796 + currency_name: British pound
6797 + area_km2: 242900
6798 + latitude: 51.5002
6799 + longitude: -0.126236
6800 + flag_emoji: 🇬🇧
6801 + un_member: true
6802 + independent: true
6803 + landlocked: false
6804 + borders:
6805 + - IRL
6806 + languages:
6807 + - English
6808 + demonym: British
6809 + status: country
6810 + kind: country
6811 +- id: USA
6812 + iso2: US
6813 + iso3: USA
6814 + iso_numeric: '840'
6815 + slug: united-states
6816 + short_name: United States
6817 + official_name: United States of America
6818 + capital: Washington D.C.
6819 + continent: Americas
6820 + region_wb: NAC
6821 + region_wb_name: North America
6822 + subregion: North America
6823 + income_group: HIC
6824 + income_group_name: High income
6825 + currency_code: USD
6826 + currency_name: United States dollar
6827 + area_km2: 9372610
6828 + latitude: 38.8895
6829 + longitude: -77.032
6830 + flag_emoji: 🇺🇸
6831 + un_member: true
6832 + independent: true
6833 + landlocked: false
6834 + borders:
6835 + - CAN
6836 + - MEX
6837 + languages:
6838 + - English
6839 + demonym: American
6840 + status: country
6841 + kind: country
6842 +- id: URY
6843 + iso2: UY
6844 + iso3: URY
6845 + iso_numeric: '858'
6846 + slug: uruguay
6847 + short_name: Uruguay
6848 + official_name: Oriental Republic of Uruguay
6849 + capital: Montevideo
6850 + continent: Americas
6851 + region_wb: LCN
6852 + region_wb_name: Latin America & Caribbean
6853 + subregion: South America
6854 + income_group: HIC
6855 + income_group_name: High income
6856 + currency_code: UYU
6857 + currency_name: Uruguayan peso
6858 + area_km2: 181034
6859 + latitude: -34.8941
6860 + longitude: -56.0675
6861 + flag_emoji: 🇺🇾
6862 + un_member: true
6863 + independent: true
6864 + landlocked: false
6865 + borders:
6866 + - ARG
6867 + - BRA
6868 + languages:
6869 + - Spanish
6870 + demonym: Uruguayan
6871 + status: country
6872 + kind: country
6873 +- id: UZB
6874 + iso2: UZ
6875 + iso3: UZB
6876 + iso_numeric: '860'
6877 + slug: uzbekistan
6878 + short_name: Uzbekistan
6879 + official_name: Republic of Uzbekistan
6880 + capital: Tashkent
6881 + continent: Asia
6882 + region_wb: ECS
6883 + region_wb_name: Europe & Central Asia
6884 + subregion: Central Asia
6885 + income_group: LMC
6886 + income_group_name: Lower middle income
6887 + currency_code: UZS
6888 + currency_name: Uzbekistani soʻm
6889 + area_km2: 447400
6890 + latitude: 41.3052
6891 + longitude: 69.269
6892 + flag_emoji: 🇺🇿
6893 + un_member: true
6894 + independent: true
6895 + landlocked: true
6896 + borders:
6897 + - AFG
6898 + - KAZ
6899 + - KGZ
6900 + - TJK
6901 + - TKM
6902 + languages:
6903 + - Russian
6904 + - Uzbek
6905 + demonym: Uzbekistani
6906 + status: country
6907 + kind: country
6908 +- id: VUT
6909 + iso2: VU
6910 + iso3: VUT
6911 + iso_numeric: '548'
6912 + slug: vanuatu
6913 + short_name: Vanuatu
6914 + official_name: Republic of Vanuatu
6915 + capital: Port Vila
6916 + continent: Oceania
6917 + region_wb: EAS
6918 + region_wb_name: East Asia & Pacific
6919 + subregion: Melanesia
6920 + income_group: LMC
6921 + income_group_name: Lower middle income
6922 + currency_code: VUV
6923 + currency_name: Vanuatu vatu
6924 + area_km2: 12189
6925 + latitude: -17.7404
6926 + longitude: 168.321
6927 + flag_emoji: 🇻🇺
6928 + un_member: true
6929 + independent: true
6930 + landlocked: false
6931 + borders: []
6932 + languages:
6933 + - Bislama
6934 + - English
6935 + - French
6936 + demonym: Ni-Vanuatu
6937 + status: country
6938 + kind: country
6939 +- id: VEN
6940 + iso2: VE
6941 + iso3: VEN
6942 + iso_numeric: '862'
6943 + slug: venezuela
6944 + short_name: Venezuela
6945 + official_name: Bolivarian Republic of Venezuela
6946 + capital: Caracas
6947 + continent: Americas
6948 + region_wb: LCN
6949 + region_wb_name: Latin America & Caribbean
6950 + subregion: South America
6951 + income_group: LMC
6952 + income_group_name: Lower middle income
6953 + currency_code: VES
6954 + currency_name: Venezuelan bolívar soberano
6955 + area_km2: 916445
6956 + latitude: 9.08165
6957 + longitude: -69.8371
6958 + flag_emoji: 🇻🇪
6959 + un_member: true
6960 + independent: true
6961 + landlocked: false
6962 + borders:
6963 + - BRA
6964 + - COL
6965 + - GUY
6966 + languages:
6967 + - Spanish
6968 + demonym: Venezuelan
6969 + status: country
6970 + kind: country
6971 +- id: VNM
6972 + iso2: VN
6973 + iso3: VNM
6974 + iso_numeric: '704'
6975 + slug: vietnam
6976 + short_name: Vietnam
6977 + official_name: Socialist Republic of Vietnam
6978 + capital: Hanoi
6979 + continent: Asia
6980 + region_wb: EAS
6981 + region_wb_name: East Asia & Pacific
6982 + subregion: South-Eastern Asia
6983 + income_group: UMC
6984 + income_group_name: Upper middle income
6985 + currency_code: VND
6986 + currency_name: Vietnamese đồng
6987 + area_km2: 331212
6988 + latitude: 21.0069
6989 + longitude: 105.825
6990 + flag_emoji: 🇻🇳
6991 + un_member: true
6992 + independent: true
6993 + landlocked: false
6994 + borders:
6995 + - KHM
6996 + - CHN
6997 + - LAO
6998 + languages:
6999 + - Vietnamese
7000 + demonym: Vietnamese
7001 + status: country
7002 + kind: country
7003 +- id: YEM
7004 + iso2: YE
7005 + iso3: YEM
7006 + iso_numeric: '887'
7007 + slug: yemen
7008 + short_name: Yemen
7009 + official_name: Republic of Yemen
7010 + capital: Sana'a
7011 + continent: Asia
7012 + region_wb: MEA
7013 + region_wb_name: Middle East, North Africa, Afghanistan & Pakistan
7014 + subregion: Western Asia
7015 + income_group: LIC
7016 + income_group_name: Low income
7017 + currency_code: YER
7018 + currency_name: Yemeni rial
7019 + area_km2: 527968
7020 + latitude: 15.352
7021 + longitude: 44.2075
7022 + flag_emoji: 🇾🇪
7023 + un_member: true
7024 + independent: true
7025 + landlocked: false
7026 + borders:
7027 + - OMN
7028 + - SAU
7029 + languages:
7030 + - Arabic
7031 + demonym: Yemeni
7032 + status: country
7033 + kind: country
7034 +- id: ZMB
7035 + iso2: ZM
7036 + iso3: ZMB
7037 + iso_numeric: '894'
7038 + slug: zambia
7039 + short_name: Zambia
7040 + official_name: Republic of Zambia
7041 + capital: Lusaka
7042 + continent: Africa
7043 + region_wb: SSF
7044 + region_wb_name: Sub-Saharan Africa
7045 + subregion: Eastern Africa
7046 + income_group: LMC
7047 + income_group_name: Lower middle income
7048 + currency_code: ZMW
7049 + currency_name: Zambian kwacha
7050 + area_km2: 752612
7051 + latitude: -15.3982
7052 + longitude: 28.2937
7053 + flag_emoji: 🇿🇲
7054 + un_member: true
7055 + independent: true
7056 + landlocked: true
7057 + borders:
7058 + - AGO
7059 + - BWA
7060 + - COD
7061 + - MWI
7062 + - MOZ
7063 + - NAM
7064 + - TZA
7065 + - ZWE
7066 + languages:
7067 + - English
7068 + demonym: Zambian
7069 + status: country
7070 + kind: country
7071 +- id: ZWE
7072 + iso2: ZW
7073 + iso3: ZWE
7074 + iso_numeric: '716'
7075 + slug: zimbabwe
7076 + short_name: Zimbabwe
7077 + official_name: Republic of Zimbabwe
7078 + capital: Harare
7079 + continent: Africa
7080 + region_wb: SSF
7081 + region_wb_name: Sub-Saharan Africa
7082 + subregion: Eastern Africa
7083 + income_group: LMC
7084 + income_group_name: Lower middle income
7085 + currency_code: BWP
7086 + currency_name: Botswana pula
7087 + area_km2: 390757
7088 + latitude: -17.8312
7089 + longitude: 31.0672
7090 + flag_emoji: 🇿🇼
7091 + un_member: true
7092 + independent: true
7093 + landlocked: true
7094 + borders:
7095 + - BWA
7096 + - MOZ
7097 + - ZAF
7098 + - ZMB
7099 + languages:
7100 + - Chewa
7101 + - Chibarwe
7102 + - English
7103 + - Kalanga
7104 + - Khoisan
7105 + - Ndau
7106 + - Northern Ndebele
7107 + - Shona
7108 + - Sotho
7109 + - Tonga
7110 + - Tsonga
7111 + - Tswana
7112 + - Venda
7113 + - Xhosa
7114 + - Zimbabwean Sign Language
7115 + demonym: Zimbabwean
7116 + status: country
7117 + kind: country
added registry/groups.yaml +212 −0
@@ -0,0 +1,212 @@
1 +# Country groups. `wb_code` = World Bank aggregate code when the source publishes one (used for /indicators/{slug}/trend).
2 +# Members are ISO3 codes from registry/countries.yaml. Membership as of September 2026.
3 +groups:
4 +- id: world
5 + slug: world
6 + name: World
7 + kind: world
8 + wb_code: WLD
9 + description: All countries and territories in the CountryAtlas registry.
10 + members: ALL
11 +
12 +# ---- World Bank regions (7) -------------------------------------------------------------------
13 +- id: nac
14 + slug: north-america
15 + name: North America
16 + kind: region
17 + wb_code: NAC
18 + description: World Bank region — Bermuda, Canada and the United States.
19 + members: [BMU, CAN, USA]
20 +- id: lcn
21 + slug: latin-america-caribbean
22 + name: Latin America & Caribbean
23 + kind: region
24 + wb_code: LCN
25 + description: World Bank region.
26 + members: WB_REGION:LCN
27 +- id: ecs
28 + slug: europe-central-asia
29 + name: Europe & Central Asia
30 + kind: region
31 + wb_code: ECS
32 + description: World Bank region.
33 + members: WB_REGION:ECS
34 +- id: mea
35 + slug: middle-east-north-africa
36 + name: Middle East, North Africa, Afghanistan & Pakistan
37 + kind: region
38 + wb_code: MEA
39 + description: World Bank region (classification revised in 2024 to include Afghanistan and Pakistan).
40 + members: WB_REGION:MEA
41 +- id: sas
42 + slug: south-asia
43 + name: South Asia
44 + kind: region
45 + wb_code: SAS
46 + description: World Bank region.
47 + members: WB_REGION:SAS
48 +- id: eas
49 + slug: east-asia-pacific
50 + name: East Asia & Pacific
51 + kind: region
52 + wb_code: EAS
53 + description: World Bank region.
54 + members: WB_REGION:EAS
55 +- id: ssf
56 + slug: sub-saharan-africa
57 + name: Sub-Saharan Africa
58 + kind: region
59 + wb_code: SSF
60 + description: World Bank region.
61 + members: WB_REGION:SSF
62 +
63 +# ---- Continents (from the registry `continent` field) -----------------------------------------
64 +- id: europe
65 + slug: europe
66 + name: Europe
67 + kind: continent
68 + description: Countries and territories on the European continent (including transcontinental states classified in Europe).
69 + members: CONTINENT:Europe
70 +- id: asia
71 + slug: asia
72 + name: Asia
73 + kind: continent
74 + members: CONTINENT:Asia
75 +- id: africa
76 + slug: africa
77 + name: Africa
78 + kind: continent
79 + members: CONTINENT:Africa
80 +- id: americas
81 + slug: americas
82 + name: Americas
83 + kind: continent
84 + members: CONTINENT:Americas
85 +- id: oceania
86 + slug: oceania
87 + name: Oceania
88 + kind: continent
89 + members: CONTINENT:Oceania
90 +
91 +# ---- Income groups (World Bank FY2026 classification) -------------------------------------------
92 +- id: hic
93 + slug: high-income
94 + name: High income
95 + kind: income
96 + wb_code: HIC
97 + description: World Bank income classification (GNI per capita, Atlas method).
98 + members: WB_INCOME:HIC
99 +- id: umc
100 + slug: upper-middle-income
101 + name: Upper middle income
102 + kind: income
103 + wb_code: UMC
104 + members: WB_INCOME:UMC
105 +- id: lmc
106 + slug: lower-middle-income
107 + name: Lower middle income
108 + kind: income
109 + wb_code: LMC
110 + members: WB_INCOME:LMC
111 +- id: lic
112 + slug: low-income
113 + name: Low income
114 + kind: income
115 + wb_code: LIC
116 + members: WB_INCOME:LIC
117 +
118 +# ---- Organisations ------------------------------------------------------------------------------
119 +- id: oecd
120 + slug: oecd
121 + name: OECD
122 + kind: org
123 + wb_code: OED
124 + description: Organisation for Economic Co-operation and Development — 38 member countries.
125 + members: [AUS, AUT, BEL, CAN, CHL, COL, CRI, CZE, DNK, EST, FIN, FRA, DEU, GRC, HUN, ISL, IRL, ISR, ITA, JPN, KOR, LVA, LTU,
126 + LUX, MEX, NLD, NZL, NOR, POL, PRT, SVK, SVN, ESP, SWE, CHE, TUR, GBR, USA]
127 +- id: g7
128 + slug: g7
129 + name: G7
130 + kind: org
131 + description: Group of Seven — Canada, France, Germany, Italy, Japan, United Kingdom, United States.
132 + members: [CAN, FRA, DEU, ITA, JPN, GBR, USA]
133 +- id: g20
134 + slug: g20
135 + name: G20
136 + kind: org
137 + description: Group of Twenty (19 countries; the European Union and the African Union are also members).
138 + members: [ARG, AUS, BRA, CAN, CHN, FRA, DEU, IND, IDN, ITA, JPN, KOR, MEX, RUS, SAU, ZAF, TUR, GBR, USA]
139 +- id: eu
140 + slug: european-union
141 + name: European Union
142 + kind: org
143 + wb_code: EUU
144 + description: The 27 member states of the European Union.
145 + members: [AUT, BEL, BGR, HRV, CYP, CZE, DNK, EST, FIN, FRA, DEU, GRC, HUN, IRL, ITA, LVA, LTU, LUX, MLT, NLD, POL, PRT, ROU,
146 + SVK, SVN, ESP, SWE]
147 +- id: eurozone
148 + slug: euro-area
149 + name: Euro area
150 + kind: org
151 + wb_code: EMU
152 + description: EU member states using the euro (21 since Bulgaria joined on 1 January 2026).
153 + members: [AUT, BEL, BGR, HRV, CYP, EST, FIN, FRA, DEU, GRC, IRL, ITA, LVA, LTU, LUX, MLT, NLD, PRT, SVK, SVN, ESP]
154 +- id: brics
155 + slug: brics
156 + name: BRICS
157 + kind: org
158 + description: BRICS (expanded membership since 2024–2025).
159 + members: [BRA, RUS, IND, CHN, ZAF, EGY, ETH, IRN, ARE, IDN]
160 +- id: asean
161 + slug: asean
162 + name: ASEAN
163 + kind: org
164 + description: Association of Southeast Asian Nations (11 members since Timor-Leste joined in 2025).
165 + members: [BRN, KHM, IDN, LAO, MYS, MMR, PHL, SGP, THA, VNM, TLS]
166 +- id: usmca
167 + slug: usmca
168 + name: USMCA
169 + kind: org
170 + description: United States–Mexico–Canada Agreement.
171 + members: [CAN, MEX, USA]
172 +- id: nordic
173 + slug: nordic-countries
174 + name: Nordic countries
175 + kind: org
176 + description: Denmark, Finland, Iceland, Norway, Sweden (plus the Faroe Islands and Greenland).
177 + members: [DNK, FIN, ISL, NOR, SWE, FRO, GRL]
178 +- id: african-union
179 + slug: african-union
180 + name: African Union
181 + kind: org
182 + members: CONTINENT:Africa
183 +- id: opec
184 + slug: opec
185 + name: OPEC
186 + kind: org
187 + description: Organization of the Petroleum Exporting Countries (12 members).
188 + members: [DZA, COG, GNQ, GAB, IRN, IRQ, KWT, LBY, NGA, SAU, ARE, VEN]
189 +- id: commonwealth
190 + slug: commonwealth
191 + name: Commonwealth of Nations
192 + kind: org
193 + members: [ATG, AUS, BHS, BGD, BRB, BLZ, BWA, BRN, CMR, CAN, CYP, DMA, SWZ, FJI, GAB, GMB, GHA, GRD, GUY, IND, JAM, KEN, KIR, LSO,
194 + MWI, MYS, MDV, MLT, MUS, MOZ, NAM, NRU, NZL, NGA, PAK, PNG, RWA, KNA, LCA, VCT, WSM, SYC, SLE, SGP, SLB, ZAF, LKA,
195 + TZA, TGO, TON, TTO, TUV, UGA, GBR, VUT, ZMB]
196 +- id: mercosur
197 + slug: mercosur
198 + name: Mercosur
199 + kind: org
200 + members: [ARG, BRA, PRY, URY, BOL]
201 +- id: gcc
202 + slug: gulf-cooperation-council
203 + name: Gulf Cooperation Council
204 + kind: org
205 + members: [BHR, KWT, OMN, QAT, SAU, ARE]
206 +- id: small-island-developing-states
207 + slug: small-island-developing-states
208 + name: Small island developing states
209 + kind: org
210 + wb_code: SST
211 + members: [ATG, BHS, BRB, BLZ, CPV, COM, CUB, DMA, DOM, FJI, GRD, GNB, GUY, HTI, JAM, KIR, MDV, MHL, MUS, FSM, NRU, PLW, PNG,
212 + WSM, STP, SYC, SGP, SLB, KNA, LCA, VCT, SUR, TLS, TON, TTO, TUV, VUT]
added registry/indicators.yaml +3086 −0
@@ -0,0 +1,3086 @@
1 +# Canonical CountryAtlas indicator registry.
2 +#
3 +# Defaults (applied by the loader when a key is absent):
4 +# frequency: A · precision: 1 · aggregation: none · higher_is_better: null · ranking_eligible: true · featured: false
5 +# scale: raw · bounds: [null, null] · jump_threshold: 4 (× MAD) · stale_after_days: by frequency (A 800, Q 200, M 75)
6 +# `format`: currency | number | percent | years | index | per_1000 | per_100k | per_million | ratio | tonnes | kwh | ha | km
7 +# `sources`: ordered by `priority` (1 = preferred). connector ∈ worldbank | imf | oecd | eurostat | who | fred | owid | bis | ilo
8 +# worldbank: {dataset: WDI, code} imf: {dataset: WEO, code} oecd: {dataset: <dataflow>, code/filter: …}
9 +# eurostat: {dataset, params: {…}} who: {dataset: GHO, code, params} fred: {code, countries: [USA]}
10 +# owid: {dataset: co2|energy|grapher, code: <column or grapher slug>} bis: {dataset: WS_SPP|WS_CBPOL, filter}
11 +# `transform`: optional expression on x (e.g. "x/1e9"), `countries`: restrict a source to listed ISO3.
12 +# Connector agents append additional sources; keep slugs stable.
13 +
14 +indicators:
15 +
16 +# =========================================================== ECONOMY ===========================================================
17 +- slug: gdp
18 + name: GDP (current US$)
19 + short_name: GDP
20 + topic: economy
21 + subtopic: Output
22 + unit: current US$
23 + unit_short: US$
24 + format: currency
25 + precision: 0
26 + aggregation: sum
27 + featured: true
28 + bounds: [0, null]
29 + description: Gross domestic product at purchaser's prices, converted to US dollars at official exchange rates.
30 + sources:
31 + - {connector: worldbank, dataset: WDI, code: NY.GDP.MKTP.CD, priority: 1}
32 + - {connector: imf, dataset: WEO, code: NGDPD, priority: 2, transform: "x*1e9"}
33 +- slug: gdp-ppp
34 + name: GDP, PPP (current international $)
35 + short_name: GDP (PPP)
36 + topic: economy
37 + subtopic: Output
38 + unit: current international $
39 + unit_short: intl $
40 + format: currency
41 + precision: 0
42 + aggregation: sum
43 + bounds: [0, null]
44 + description: GDP converted to international dollars using purchasing power parity rates.
45 + sources:
46 + - {connector: worldbank, dataset: WDI, code: NY.GDP.MKTP.PP.CD, priority: 1}
47 + - {connector: imf, dataset: WEO, code: PPPGDP, priority: 2, transform: "x*1e9"}
48 +- slug: gdp-per-capita
49 + name: GDP per capita (current US$)
50 + short_name: GDP per capita
51 + topic: economy
52 + subtopic: Output
53 + unit: current US$
54 + unit_short: US$
55 + format: currency
56 + precision: 0
57 + aggregation: weighted_mean
58 + higher_is_better: true
59 + featured: true
60 + bounds: [0, null]
61 + description: Gross domestic product divided by midyear population, in current US dollars.
62 + sources:
63 + - {connector: worldbank, dataset: WDI, code: NY.GDP.PCAP.CD, priority: 1}
64 + - {connector: imf, dataset: WEO, code: NGDPDPC, priority: 2}
65 +- slug: gdp-per-capita-ppp
66 + name: GDP per capita, PPP (current international $)
67 + short_name: GDP per capita (PPP)
68 + topic: economy
69 + subtopic: Output
70 + unit: current international $
71 + unit_short: intl $
72 + format: currency
73 + precision: 0
74 + higher_is_better: true
75 + featured: true
76 + bounds: [0, null]
77 + description: GDP per capita based on purchasing power parity.
78 + sources:
79 + - {connector: worldbank, dataset: WDI, code: NY.GDP.PCAP.PP.CD, priority: 1}
80 + - {connector: imf, dataset: WEO, code: PPPPC, priority: 2}
81 +- slug: gdp-growth
82 + name: Real GDP growth
83 + short_name: GDP growth
84 + topic: economy
85 + subtopic: Growth
86 + unit: annual %
87 + unit_short: "%"
88 + format: percent
89 + higher_is_better: true
90 + featured: true
91 + bounds: [-70, 150]
92 + change_floor: 3
93 + description: Annual percentage growth rate of GDP at market prices based on constant local currency.
94 + sources:
95 + - {connector: worldbank, dataset: WDI, code: NY.GDP.MKTP.KD.ZG, priority: 1}
96 + - {connector: imf, dataset: WEO, code: NGDP_RPCH, priority: 2}
97 +- slug: gdp-per-capita-growth
98 + name: GDP per capita growth
99 + topic: economy
100 + subtopic: Growth
101 + unit: annual %
102 + unit_short: "%"
103 + format: percent
104 + higher_is_better: true
105 + bounds: [-70, 150]
106 + change_floor: 3
107 + description: Annual percentage growth rate of GDP per capita based on constant local currency.
108 + sources:
109 + - {connector: worldbank, dataset: WDI, code: NY.GDP.PCAP.KD.ZG, priority: 1}
110 +- slug: gdp-constant
111 + name: GDP (constant 2015 US$)
112 + short_name: Real GDP
113 + topic: economy
114 + subtopic: Output
115 + unit: constant 2015 US$
116 + unit_short: US$ (2015)
117 + format: currency
118 + precision: 0
119 + aggregation: sum
120 + bounds: [0, null]
121 + description: GDP in constant 2015 US dollars — the volume measure used for real growth.
122 + sources:
123 + - {connector: worldbank, dataset: WDI, code: NY.GDP.MKTP.KD, priority: 1}
124 +- slug: inflation
125 + name: Inflation, consumer prices
126 + short_name: Inflation
127 + topic: economy
128 + subtopic: Prices
129 + unit: annual %
130 + unit_short: "%"
131 + format: percent
132 + higher_is_better: false
133 + featured: true
134 + bounds: [-30, 100000]
135 + change_floor: 2
136 + description: Annual percentage change in the cost to the average consumer of acquiring a basket of goods and services.
137 + sources:
138 + - {connector: worldbank, dataset: WDI, code: FP.CPI.TOTL.ZG, priority: 1}
139 + - {connector: imf, dataset: WEO, code: PCPIPCH, priority: 2}
140 +- slug: inflation-gdp-deflator
141 + name: Inflation, GDP deflator
142 + topic: economy
143 + subtopic: Prices
144 + unit: annual %
145 + unit_short: "%"
146 + format: percent
147 + bounds: [-50, 100000]
148 + ranking_eligible: false
149 + description: Annual growth rate of the GDP implicit deflator.
150 + sources:
151 + - {connector: worldbank, dataset: WDI, code: NY.GDP.DEFL.KD.ZG, priority: 1}
152 +- slug: policy-rate
153 + name: Central bank policy rate
154 + short_name: Policy rate
155 + topic: economy
156 + subtopic: Money & rates
157 + unit: "% per annum"
158 + unit_short: "%"
159 + format: percent
160 + precision: 2
161 + frequency: M
162 + ranking_eligible: false
163 + bounds: [-2, 200]
164 + description: Official policy interest rate set by the central bank (end of period).
165 + sources: [] # bis WS_CBPOL (all), fred FEDFUNDS (USA) — added by connector agents
166 +- slug: lending-rate
167 + name: Lending interest rate
168 + topic: economy
169 + subtopic: Money & rates
170 + unit: "%"
171 + unit_short: "%"
172 + format: percent
173 + ranking_eligible: false
174 + bounds: [0, 500]
175 + description: Bank rate that usually meets the short- and medium-term financing needs of the private sector.
176 + sources:
177 + - {connector: worldbank, dataset: WDI, code: FR.INR.LEND, priority: 1}
178 +- slug: exchange-rate
179 + name: Official exchange rate (LCU per US$)
180 + short_name: Exchange rate
181 + topic: economy
182 + subtopic: Money & rates
183 + unit: local currency units per US$
184 + unit_short: LCU/US$
185 + format: number
186 + precision: 3
187 + ranking_eligible: false
188 + bounds: [0, null]
189 + description: Period-average official exchange rate, local currency units per US dollar.
190 + sources:
191 + - {connector: worldbank, dataset: WDI, code: PA.NUS.FCRF, priority: 1}
192 +- slug: real-effective-exchange-rate
193 + name: Real effective exchange rate index
194 + short_name: REER
195 + topic: economy
196 + subtopic: Money & rates
197 + unit: index (2010 = 100)
198 + unit_short: index
199 + format: index
200 + ranking_eligible: false
201 + description: Nominal effective exchange rate divided by a price deflator or index of costs (2010 = 100).
202 + sources:
203 + - {connector: worldbank, dataset: WDI, code: PX.REX.REER, priority: 1}
204 +- slug: current-account-balance-pct-gdp
205 + name: Current account balance (% of GDP)
206 + short_name: Current account
207 + topic: economy
208 + subtopic: External
209 + unit: "% of GDP"
210 + unit_short: "% GDP"
211 + format: percent
212 + bounds: [-150, 100]
213 + change_floor: 3
214 + description: Sum of net exports of goods and services, net primary income and net secondary income, as a share of GDP.
215 + sources:
216 + - {connector: worldbank, dataset: WDI, code: BN.CAB.XOKA.GD.ZS, priority: 1}
217 + - {connector: imf, dataset: WEO, code: BCA_NGDPD, priority: 2}
218 +- slug: current-account-balance
219 + name: Current account balance (US$)
220 + topic: trade
221 + subtopic: Balance
222 + unit: current US$
223 + unit_short: US$
224 + format: currency
225 + precision: 0
226 + aggregation: sum
227 + description: Current account balance in current US dollars.
228 + sources:
229 + - {connector: worldbank, dataset: WDI, code: BN.CAB.XOKA.CD, priority: 1}
230 +- slug: gross-capital-formation-pct-gdp
231 + name: Gross capital formation (% of GDP)
232 + short_name: Investment
233 + topic: economy
234 + subtopic: Demand
235 + unit: "% of GDP"
236 + unit_short: "% GDP"
237 + format: percent
238 + bounds: [-20, 120]
239 + description: Outlays on additions to fixed assets plus net changes in inventories, as a share of GDP.
240 + sources:
241 + - {connector: worldbank, dataset: WDI, code: NE.GDI.TOTL.ZS, priority: 1}
242 +- slug: household-consumption-pct-gdp
243 + name: Household consumption (% of GDP)
244 + topic: economy
245 + subtopic: Demand
246 + unit: "% of GDP"
247 + unit_short: "% GDP"
248 + format: percent
249 + bounds: [0, 200]
250 + description: Final consumption expenditure of households and NPISHs as a share of GDP.
251 + sources:
252 + - {connector: worldbank, dataset: WDI, code: NE.CON.PRVT.ZS, priority: 1}
253 +- slug: fdi-inflows-pct-gdp
254 + name: Foreign direct investment, net inflows (% of GDP)
255 + short_name: FDI inflows
256 + topic: economy
257 + subtopic: External
258 + unit: "% of GDP"
259 + unit_short: "% GDP"
260 + format: percent
261 + bounds: [-500, 500]
262 + description: Net inflows of investment to acquire a lasting management interest in an enterprise, as a share of GDP.
263 + sources:
264 + - {connector: worldbank, dataset: WDI, code: BX.KLT.DINV.WD.GD.ZS, priority: 1}
265 +- slug: fdi-outflows-pct-gdp
266 + name: Foreign direct investment, net outflows (% of GDP)
267 + short_name: FDI outflows
268 + topic: trade
269 + subtopic: Investment
270 + unit: "% of GDP"
271 + unit_short: "% GDP"
272 + format: percent
273 + bounds: [-500, 500]
274 + sources:
275 + - {connector: worldbank, dataset: WDI, code: BM.KLT.DINV.WD.GD.ZS, priority: 1}
276 +- slug: broad-money-pct-gdp
277 + name: Broad money (% of GDP)
278 + topic: economy
279 + subtopic: Money & rates
280 + unit: "% of GDP"
281 + unit_short: "% GDP"
282 + format: percent
283 + bounds: [0, 1000]
284 + sources:
285 + - {connector: worldbank, dataset: WDI, code: FM.LBL.BMNY.GD.ZS, priority: 1}
286 +- slug: industrial-production-index
287 + name: Industrial production index
288 + topic: economy
289 + subtopic: Output
290 + unit: index (2015 = 100)
291 + unit_short: index
292 + format: index
293 + frequency: M
294 + ranking_eligible: false
295 + description: Volume index of industrial production.
296 + sources: [] # oecd/fred — added by connector agents
297 +- slug: gdp-per-hour-worked
298 + name: GDP per hour worked
299 + short_name: Productivity
300 + topic: economy
301 + subtopic: Productivity
302 + unit: US$ (PPP, current prices)
303 + unit_short: US$/h
304 + format: currency
305 + precision: 1
306 + higher_is_better: true
307 + bounds: [0, 500]
308 + description: Labour productivity — GDP per hour worked, current prices, PPP.
309 + sources: [] # oecd DSD_PDB — added by connector agents
310 +- slug: gdp-per-person-employed
311 + name: GDP per person employed (constant 2021 PPP $)
312 + topic: labor
313 + subtopic: Productivity
314 + unit: constant 2021 PPP $
315 + unit_short: PPP $
316 + format: currency
317 + precision: 0
318 + higher_is_better: true
319 + bounds: [0, null]
320 + sources:
321 + - {connector: worldbank, dataset: WDI, code: SL.GDP.PCAP.EM.KD, priority: 1}
322 +- slug: agriculture-value-added-pct-gdp
323 + name: Agriculture, forestry and fishing, value added (% of GDP)
324 + short_name: Agriculture share
325 + topic: economy
326 + subtopic: Structure
327 + unit: "% of GDP"
328 + unit_short: "% GDP"
329 + format: percent
330 + bounds: [0, 100]
331 + sources:
332 + - {connector: worldbank, dataset: WDI, code: NV.AGR.TOTL.ZS, priority: 1}
333 +- slug: industry-value-added-pct-gdp
334 + name: Industry (incl. construction), value added (% of GDP)
335 + short_name: Industry share
336 + topic: economy
337 + subtopic: Structure
338 + unit: "% of GDP"
339 + unit_short: "% GDP"
340 + format: percent
341 + bounds: [0, 100]
342 + sources:
343 + - {connector: worldbank, dataset: WDI, code: NV.IND.TOTL.ZS, priority: 1}
344 +- slug: manufacturing-value-added-pct-gdp
345 + name: Manufacturing, value added (% of GDP)
346 + short_name: Manufacturing share
347 + topic: economy
348 + subtopic: Structure
349 + unit: "% of GDP"
350 + unit_short: "% GDP"
351 + format: percent
352 + bounds: [0, 100]
353 + sources:
354 + - {connector: worldbank, dataset: WDI, code: NV.IND.MANF.ZS, priority: 1}
355 +- slug: services-value-added-pct-gdp
356 + name: Services, value added (% of GDP)
357 + short_name: Services share
358 + topic: economy
359 + subtopic: Structure
360 + unit: "% of GDP"
361 + unit_short: "% GDP"
362 + format: percent
363 + bounds: [0, 100]
364 + sources:
365 + - {connector: worldbank, dataset: WDI, code: NV.SRV.TOTL.ZS, priority: 1}
366 +- slug: gross-savings-pct-gdp
367 + name: Gross savings (% of GDP)
368 + topic: economy
369 + subtopic: Demand
370 + unit: "% of GDP"
371 + unit_short: "% GDP"
372 + format: percent
373 + bounds: [-100, 100]
374 + sources:
375 + - {connector: worldbank, dataset: WDI, code: NY.GNS.ICTR.ZS, priority: 1}
376 +- slug: natural-resources-rents-pct-gdp
377 + name: Total natural resources rents (% of GDP)
378 + short_name: Resource rents
379 + topic: economy
380 + subtopic: Structure
381 + unit: "% of GDP"
382 + unit_short: "% GDP"
383 + format: percent
384 + bounds: [0, 100]
385 + sources:
386 + - {connector: worldbank, dataset: WDI, code: NY.GDP.TOTL.RT.ZS, priority: 1}
387 +- slug: remittances-received-pct-gdp
388 + name: Personal remittances received (% of GDP)
389 + short_name: Remittances
390 + topic: economy
391 + subtopic: External
392 + unit: "% of GDP"
393 + unit_short: "% GDP"
394 + format: percent
395 + bounds: [0, 100]
396 + sources:
397 + - {connector: worldbank, dataset: WDI, code: BX.TRF.PWKR.DT.GD.ZS, priority: 1}
398 +
399 +# ========================================================= GOVERNMENT ==========================================================
400 +- slug: government-debt-pct-gdp
401 + name: Central government debt (% of GDP)
402 + short_name: Debt / GDP
403 + topic: government
404 + subtopic: Debt
405 + unit: "% of GDP"
406 + unit_short: "% GDP"
407 + format: percent
408 + higher_is_better: false
409 + featured: true
410 + bounds: [0, 600]
411 + change_floor: 5
412 + description: Entire stock of direct government fixed-term contractual obligations to others outstanding, as a share of GDP.
413 + sources:
414 + - {connector: worldbank, dataset: WDI, code: GC.DOD.TOTL.GD.ZS, priority: 1}
415 +- slug: general-government-gross-debt-pct-gdp
416 + name: General government gross debt (% of GDP)
417 + short_name: Gross debt / GDP
418 + topic: government
419 + subtopic: Debt
420 + unit: "% of GDP"
421 + unit_short: "% GDP"
422 + format: percent
423 + higher_is_better: false
424 + featured: true
425 + bounds: [0, 600]
426 + change_floor: 5
427 + description: Gross debt of the general government sector (IMF WEO), including projections.
428 + sources:
429 + - {connector: imf, dataset: WEO, code: GGXWDG_NGDP, priority: 1}
430 +- slug: fiscal-balance-pct-gdp
431 + name: General government net lending/borrowing (% of GDP)
432 + short_name: Fiscal balance
433 + topic: government
434 + subtopic: Balance
435 + unit: "% of GDP"
436 + unit_short: "% GDP"
437 + format: percent
438 + higher_is_better: true
439 + bounds: [-150, 100]
440 + change_floor: 3
441 + description: Overall fiscal balance of the general government (IMF WEO), surplus positive.
442 + sources:
443 + - {connector: imf, dataset: WEO, code: GGXCNL_NGDP, priority: 1}
444 +- slug: government-revenue-pct-gdp
445 + name: Government revenue, excluding grants (% of GDP)
446 + short_name: Revenue
447 + topic: government
448 + subtopic: Revenue & spending
449 + unit: "% of GDP"
450 + unit_short: "% GDP"
451 + format: percent
452 + bounds: [0, 150]
453 + sources:
454 + - {connector: worldbank, dataset: WDI, code: GC.REV.XGRT.GD.ZS, priority: 1}
455 + - {connector: imf, dataset: WEO, code: GGR_NGDP, priority: 2}
456 +- slug: government-expenditure-pct-gdp
457 + name: Government expenditure (% of GDP)
458 + short_name: Expenditure
459 + topic: government
460 + subtopic: Revenue & spending
461 + unit: "% of GDP"
462 + unit_short: "% GDP"
463 + format: percent
464 + bounds: [0, 200]
465 + sources:
466 + - {connector: worldbank, dataset: WDI, code: GC.XPN.TOTL.GD.ZS, priority: 1}
467 + - {connector: imf, dataset: WEO, code: GGX_NGDP, priority: 2}
468 +- slug: tax-revenue-pct-gdp
469 + name: Tax revenue (% of GDP)
470 + short_name: Tax revenue
471 + topic: government
472 + subtopic: Revenue & spending
473 + unit: "% of GDP"
474 + unit_short: "% GDP"
475 + format: percent
476 + bounds: [0, 100]
477 + sources:
478 + - {connector: worldbank, dataset: WDI, code: GC.TAX.TOTL.GD.ZS, priority: 1}
479 +- slug: social-expenditure-pct-gdp
480 + name: Public social expenditure (% of GDP)
481 + short_name: Social spending
482 + topic: government
483 + subtopic: Revenue & spending
484 + unit: "% of GDP"
485 + unit_short: "% GDP"
486 + format: percent
487 + bounds: [0, 60]
488 + sources: [] # oecd SOCX — added by connector agents
489 +- slug: military-expenditure-pct-gdp
490 + name: Military expenditure (% of GDP)
491 + short_name: Military spending
492 + topic: government
493 + subtopic: Revenue & spending
494 + unit: "% of GDP"
495 + unit_short: "% GDP"
496 + format: percent
497 + bounds: [0, 120]
498 + sources:
499 + - {connector: worldbank, dataset: WDI, code: MS.MIL.XPND.GD.ZS, priority: 1}
500 +- slug: military-expenditure
501 + name: Military expenditure (current US$)
502 + topic: security
503 + subtopic: Defence
504 + unit: current US$
505 + unit_short: US$
506 + format: currency
507 + precision: 0
508 + aggregation: sum
509 + bounds: [0, null]
510 + sources:
511 + - {connector: worldbank, dataset: WDI, code: MS.MIL.XPND.CD, priority: 1}
512 +- slug: health-expenditure-pct-gdp
513 + name: Current health expenditure (% of GDP)
514 + short_name: Health spending
515 + topic: health
516 + subtopic: Spending
517 + unit: "% of GDP"
518 + unit_short: "% GDP"
519 + format: percent
520 + bounds: [0, 40]
521 + sources:
522 + - {connector: worldbank, dataset: WDI, code: SH.XPD.CHEX.GD.ZS, priority: 1}
523 +- slug: education-expenditure-pct-gdp
524 + name: Government expenditure on education (% of GDP)
525 + short_name: Education spending
526 + topic: education
527 + subtopic: Spending
528 + unit: "% of GDP"
529 + unit_short: "% GDP"
530 + format: percent
531 + bounds: [0, 30]
532 + sources:
533 + - {connector: worldbank, dataset: WDI, code: SE.XPD.TOTL.GD.ZS, priority: 1}
534 +- slug: interest-payments-pct-revenue
535 + name: Interest payments (% of revenue)
536 + topic: government
537 + subtopic: Debt
538 + unit: "% of revenue"
539 + unit_short: "%"
540 + format: percent
541 + higher_is_better: false
542 + bounds: [0, 200]
543 + sources:
544 + - {connector: worldbank, dataset: WDI, code: GC.XPN.INTP.RV.ZS, priority: 1}
545 +- slug: external-debt-pct-gni
546 + name: External debt stocks (% of GNI)
547 + topic: government
548 + subtopic: Debt
549 + unit: "% of GNI"
550 + unit_short: "% GNI"
551 + format: percent
552 + bounds: [0, 2000]
553 + sources:
554 + - {connector: worldbank, dataset: WDI, code: DT.DOD.DECT.GN.ZS, priority: 1}
555 +- slug: government-effectiveness
556 + name: Government effectiveness (WGI estimate)
557 + topic: government
558 + subtopic: Institutions
559 + unit: estimate (−2.5 to 2.5)
560 + unit_short: score
561 + format: number
562 + precision: 2
563 + higher_is_better: true
564 + bounds: [-3, 3]
565 + description: Worldwide Governance Indicators — perceptions of the quality of public services and policy implementation.
566 + sources:
567 + - {connector: worldbank, dataset: WDI, code: GE.EST, priority: 1}
568 +- slug: control-of-corruption
569 + name: Control of corruption (WGI estimate)
570 + topic: government
571 + subtopic: Institutions
572 + unit: estimate (−2.5 to 2.5)
573 + unit_short: score
574 + format: number
575 + precision: 2
576 + higher_is_better: true
577 + bounds: [-3, 3]
578 + sources:
579 + - {connector: worldbank, dataset: WDI, code: CC.EST, priority: 1}
580 +- slug: rule-of-law
581 + name: Rule of law (WGI estimate)
582 + topic: government
583 + subtopic: Institutions
584 + unit: estimate (−2.5 to 2.5)
585 + unit_short: score
586 + format: number
587 + precision: 2
588 + higher_is_better: true
589 + bounds: [-3, 3]
590 + sources:
591 + - {connector: worldbank, dataset: WDI, code: RL.EST, priority: 1}
592 +- slug: political-stability
593 + name: Political stability and absence of violence (WGI estimate)
594 + short_name: Political stability
595 + topic: security
596 + subtopic: Institutions
597 + unit: estimate (−2.5 to 2.5)
598 + unit_short: score
599 + format: number
600 + precision: 2
601 + higher_is_better: true
602 + bounds: [-3, 3]
603 + sources:
604 + - {connector: worldbank, dataset: WDI, code: PV.EST, priority: 1}
605 +- slug: voice-and-accountability
606 + name: Voice and accountability (WGI estimate)
607 + topic: security
608 + subtopic: Institutions
609 + unit: estimate (−2.5 to 2.5)
610 + unit_short: score
611 + format: number
612 + precision: 2
613 + higher_is_better: true
614 + bounds: [-3, 3]
615 + sources:
616 + - {connector: worldbank, dataset: WDI, code: VA.EST, priority: 1}
617 +- slug: regulatory-quality
618 + name: Regulatory quality (WGI estimate)
619 + topic: security
620 + subtopic: Institutions
621 + unit: estimate (−2.5 to 2.5)
622 + unit_short: score
623 + format: number
624 + precision: 2
625 + higher_is_better: true
626 + bounds: [-3, 3]
627 + sources:
628 + - {connector: worldbank, dataset: WDI, code: RQ.EST, priority: 1}
629 +
630 +# ========================================================= POPULATION ==========================================================
631 +- slug: population
632 + name: Population, total
633 + short_name: Population
634 + topic: population
635 + subtopic: Size & growth
636 + unit: people
637 + unit_short: people
638 + format: number
639 + precision: 0
640 + aggregation: sum
641 + featured: true
642 + bounds: [0, null]
643 + description: Midyear estimate of all residents regardless of legal status or citizenship.
644 + sources:
645 + - {connector: worldbank, dataset: WDI, code: SP.POP.TOTL, priority: 1}
646 +- slug: population-growth
647 + name: Population growth
648 + topic: population
649 + subtopic: Size & growth
650 + unit: annual %
651 + unit_short: "%"
652 + format: percent
653 + precision: 2
654 + featured: true
655 + bounds: [-30, 30]
656 + change_floor: 0.5
657 + description: Exponential rate of growth of midyear population from year t−1 to t.
658 + sources:
659 + - {connector: worldbank, dataset: WDI, code: SP.POP.GROW, priority: 1}
660 +- slug: population-density
661 + name: Population density
662 + topic: population
663 + subtopic: Size & growth
664 + unit: people per km² of land area
665 + unit_short: /km²
666 + format: number
667 + precision: 1
668 + bounds: [0, 100000]
669 + sources:
670 + - {connector: worldbank, dataset: WDI, code: EN.POP.DNST, priority: 1}
671 +- slug: urban-population-share
672 + name: Urban population (% of total)
673 + short_name: Urbanisation
674 + topic: population
675 + subtopic: Urbanisation
676 + unit: "% of population"
677 + unit_short: "%"
678 + format: percent
679 + bounds: [0, 100]
680 + sources:
681 + - {connector: worldbank, dataset: WDI, code: SP.URB.TOTL.IN.ZS, priority: 1}
682 +- slug: urban-population
683 + name: Urban population
684 + topic: population
685 + subtopic: Urbanisation
686 + unit: people
687 + unit_short: people
688 + format: number
689 + precision: 0
690 + aggregation: sum
691 + bounds: [0, null]
692 + sources:
693 + - {connector: worldbank, dataset: WDI, code: SP.URB.TOTL, priority: 1}
694 +- slug: rural-population
695 + name: Rural population
696 + topic: population
697 + subtopic: Urbanisation
698 + unit: people
699 + unit_short: people
700 + format: number
701 + precision: 0
702 + aggregation: sum
703 + bounds: [0, null]
704 + sources:
705 + - {connector: worldbank, dataset: WDI, code: SP.RUR.TOTL, priority: 1}
706 +- slug: fertility-rate
707 + name: Fertility rate, total
708 + short_name: Fertility
709 + topic: population
710 + subtopic: Births & deaths
711 + unit: births per woman
712 + unit_short: births/woman
713 + format: number
714 + precision: 2
715 + featured: true
716 + bounds: [0, 10]
717 + change_floor: 0.2
718 + sources:
719 + - {connector: worldbank, dataset: WDI, code: SP.DYN.TFRT.IN, priority: 1}
720 +- slug: birth-rate
721 + name: Birth rate, crude
722 + topic: population
723 + subtopic: Births & deaths
724 + unit: per 1,000 people
725 + unit_short: /1,000
726 + format: per_1000
727 + bounds: [0, 70]
728 + sources:
729 + - {connector: worldbank, dataset: WDI, code: SP.DYN.CBRT.IN, priority: 1}
730 +- slug: death-rate
731 + name: Death rate, crude
732 + topic: population
733 + subtopic: Births & deaths
734 + unit: per 1,000 people
735 + unit_short: /1,000
736 + format: per_1000
737 + bounds: [0, 100]
738 + sources:
739 + - {connector: worldbank, dataset: WDI, code: SP.DYN.CDRT.IN, priority: 1}
740 +- slug: median-age
741 + name: Median age
742 + topic: population
743 + subtopic: Age structure
744 + unit: years
745 + unit_short: yrs
746 + format: years
747 + featured: true
748 + bounds: [10, 70]
749 + description: Age that divides the population into two numerically equal groups (UN World Population Prospects).
750 + sources:
751 + - {connector: owid, dataset: grapher, code: median-age, priority: 1}
752 +- slug: population-0-14-share
753 + name: Population ages 0–14 (% of total)
754 + short_name: Children (0–14)
755 + topic: population
756 + subtopic: Age structure
757 + unit: "% of population"
758 + unit_short: "%"
759 + format: percent
760 + bounds: [0, 70]
761 + sources:
762 + - {connector: worldbank, dataset: WDI, code: SP.POP.0014.TO.ZS, priority: 1}
763 +- slug: population-15-64-share
764 + name: Population ages 15–64 (% of total)
765 + short_name: Working age (15–64)
766 + topic: population
767 + subtopic: Age structure
768 + unit: "% of population"
769 + unit_short: "%"
770 + format: percent
771 + bounds: [0, 100]
772 + sources:
773 + - {connector: worldbank, dataset: WDI, code: SP.POP.1564.TO.ZS, priority: 1}
774 +- slug: population-65-plus-share
775 + name: Population ages 65 and above (% of total)
776 + short_name: Seniors (65+)
777 + topic: population
778 + subtopic: Age structure
779 + unit: "% of population"
780 + unit_short: "%"
781 + format: percent
782 + bounds: [0, 60]
783 + sources:
784 + - {connector: worldbank, dataset: WDI, code: SP.POP.65UP.TO.ZS, priority: 1}
785 +- slug: dependency-ratio
786 + name: Age dependency ratio
787 + topic: population
788 + subtopic: Age structure
789 + unit: "% of working-age population"
790 + unit_short: "%"
791 + format: percent
792 + bounds: [0, 200]
793 + sources:
794 + - {connector: worldbank, dataset: WDI, code: SP.POP.DPND, priority: 1}
795 +- slug: old-age-dependency-ratio
796 + name: Old-age dependency ratio
797 + topic: population
798 + subtopic: Age structure
799 + unit: "% of working-age population"
800 + unit_short: "%"
801 + format: percent
802 + bounds: [0, 150]
803 + sources:
804 + - {connector: worldbank, dataset: WDI, code: SP.POP.DPND.OL, priority: 1}
805 +- slug: net-migration
806 + name: Net migration
807 + topic: population
808 + subtopic: Migration
809 + unit: people
810 + unit_short: people
811 + format: number
812 + precision: 0
813 + aggregation: sum
814 + description: Total number of immigrants less the annual number of emigrants, including citizens and noncitizens.
815 + sources:
816 + - {connector: worldbank, dataset: WDI, code: SM.POP.NETM, priority: 1}
817 +- slug: international-migrant-stock-share
818 + name: International migrant stock (% of population)
819 + short_name: Migrant stock
820 + topic: population
821 + subtopic: Migration
822 + unit: "% of population"
823 + unit_short: "%"
824 + format: percent
825 + bounds: [0, 100]
826 + sources:
827 + - {connector: worldbank, dataset: WDI, code: SM.POP.TOTL.ZS, priority: 1}
828 +- slug: refugee-population
829 + name: Refugee population by country of asylum
830 + short_name: Refugees hosted
831 + topic: security
832 + subtopic: Displacement
833 + unit: people
834 + unit_short: people
835 + format: number
836 + precision: 0
837 + aggregation: sum
838 + bounds: [0, null]
839 + sources:
840 + - {connector: worldbank, dataset: WDI, code: SM.POP.REFG, priority: 1}
841 +- slug: refugees-by-origin
842 + name: Refugee population by country of origin
843 + topic: security
844 + subtopic: Displacement
845 + unit: people
846 + unit_short: people
847 + format: number
848 + precision: 0
849 + aggregation: sum
850 + bounds: [0, null]
851 + sources:
852 + - {connector: worldbank, dataset: WDI, code: SM.POP.REFG.OR, priority: 1}
853 +- slug: internally-displaced-persons
854 + name: Internally displaced persons (conflict and violence)
855 + topic: security
856 + subtopic: Displacement
857 + unit: people
858 + unit_short: people
859 + format: number
860 + precision: 0
861 + aggregation: sum
862 + bounds: [0, null]
863 + sources:
864 + - {connector: worldbank, dataset: WDI, code: VC.IDP.TOCV, priority: 1}
865 +- slug: life-expectancy
866 + name: Life expectancy at birth
867 + short_name: Life expectancy
868 + topic: health
869 + subtopic: Longevity
870 + unit: years
871 + unit_short: yrs
872 + format: years
873 + higher_is_better: true
874 + featured: true
875 + bounds: [20, 100]
876 + change_floor: 1
877 + description: Number of years a newborn infant would live if prevailing patterns of mortality were to stay the same throughout its life.
878 + sources:
879 + - {connector: worldbank, dataset: WDI, code: SP.DYN.LE00.IN, priority: 1}
880 + - {connector: who, dataset: GHO, code: WHOSIS_000001, params: {Dim1: SEX_BTSX}, priority: 2}
881 +- slug: life-expectancy-female
882 + name: Life expectancy at birth, female
883 + topic: health
884 + subtopic: Longevity
885 + unit: years
886 + unit_short: yrs
887 + format: years
888 + higher_is_better: true
889 + bounds: [20, 100]
890 + sources:
891 + - {connector: worldbank, dataset: WDI, code: SP.DYN.LE00.FE.IN, priority: 1}
892 +- slug: life-expectancy-male
893 + name: Life expectancy at birth, male
894 + topic: health
895 + subtopic: Longevity
896 + unit: years
897 + unit_short: yrs
898 + format: years
899 + higher_is_better: true
900 + bounds: [20, 100]
901 + sources:
902 + - {connector: worldbank, dataset: WDI, code: SP.DYN.LE00.MA.IN, priority: 1}
903 +- slug: adolescent-fertility-rate
904 + name: Adolescent fertility rate
905 + topic: population
906 + subtopic: Births & deaths
907 + unit: births per 1,000 women ages 15–19
908 + unit_short: /1,000
909 + format: per_1000
910 + higher_is_better: false
911 + bounds: [0, 300]
912 + sources:
913 + - {connector: worldbank, dataset: WDI, code: SP.ADO.TFRT, priority: 1}
914 +- slug: population-female-share
915 + name: Population, female (% of total)
916 + topic: population
917 + subtopic: Size & growth
918 + unit: "% of population"
919 + unit_short: "%"
920 + format: percent
921 + bounds: [20, 70]
922 + ranking_eligible: false
923 + sources:
924 + - {connector: worldbank, dataset: WDI, code: SP.POP.TOTL.FE.ZS, priority: 1}
925 +
926 +# =========================================================== LABOR =============================================================
927 +- slug: unemployment-rate
928 + name: Unemployment rate
929 + short_name: Unemployment
930 + topic: labor
931 + subtopic: Unemployment
932 + unit: "% of labour force"
933 + unit_short: "%"
934 + format: percent
935 + higher_is_better: false
936 + featured: true
937 + bounds: [0, 60]
938 + change_floor: 1
939 + description: Share of the labour force that is without work but available for and seeking employment (ILO modelled estimate).
940 + sources:
941 + - {connector: worldbank, dataset: WDI, code: SL.UEM.TOTL.ZS, priority: 1}
942 + - {connector: imf, dataset: WEO, code: LUR, priority: 2}
943 +- slug: youth-unemployment-rate
944 + name: Youth unemployment rate (ages 15–24)
945 + short_name: Youth unemployment
946 + topic: labor
947 + subtopic: Unemployment
948 + unit: "% of labour force ages 15–24"
949 + unit_short: "%"
950 + format: percent
951 + higher_is_better: false
952 + bounds: [0, 100]
953 + change_floor: 2
954 + sources:
955 + - {connector: worldbank, dataset: WDI, code: SL.UEM.1524.ZS, priority: 1}
956 +- slug: labor-force-participation-rate
957 + name: Labour force participation rate (ages 15+)
958 + short_name: Participation
959 + topic: labor
960 + subtopic: Participation
961 + unit: "% of population ages 15+"
962 + unit_short: "%"
963 + format: percent
964 + bounds: [0, 100]
965 + sources:
966 + - {connector: worldbank, dataset: WDI, code: SL.TLF.CACT.ZS, priority: 1}
967 +- slug: labor-force-participation-female
968 + name: Labour force participation rate, female (ages 15+)
969 + topic: labor
970 + subtopic: Participation
971 + unit: "% of female population ages 15+"
972 + unit_short: "%"
973 + format: percent
974 + bounds: [0, 100]
975 + sources:
976 + - {connector: worldbank, dataset: WDI, code: SL.TLF.CACT.FE.ZS, priority: 1}
977 +- slug: employment-to-population-ratio
978 + name: Employment to population ratio (ages 15+)
979 + topic: labor
980 + subtopic: Employment
981 + unit: "% of population ages 15+"
982 + unit_short: "%"
983 + format: percent
984 + bounds: [0, 100]
985 + sources:
986 + - {connector: worldbank, dataset: WDI, code: SL.EMP.TOTL.SP.ZS, priority: 1}
987 +- slug: employment-rate
988 + name: Employment rate (ages 15–64)
989 + topic: labor
990 + subtopic: Employment
991 + unit: "% of population ages 15–64"
992 + unit_short: "%"
993 + format: percent
994 + higher_is_better: true
995 + bounds: [0, 100]
996 + sources: [] # oecd / eurostat lfsi_emp_a — added by connector agents
997 +- slug: labor-force
998 + name: Labour force, total
999 + topic: labor
1000 + subtopic: Employment
1001 + unit: people
1002 + unit_short: people
1003 + format: number
1004 + precision: 0
1005 + aggregation: sum
1006 + bounds: [0, null]
1007 + sources:
1008 + - {connector: worldbank, dataset: WDI, code: SL.TLF.TOTL.IN, priority: 1}
1009 +- slug: average-annual-wages
1010 + name: Average annual wages
1011 + short_name: Average wage
1012 + topic: labor
1013 + subtopic: Wages
1014 + unit: US$ PPP, constant prices
1015 + unit_short: US$ PPP
1016 + format: currency
1017 + precision: 0
1018 + higher_is_better: true
1019 + bounds: [0, 500000]
1020 + sources: [] # oecd AV_AN_WAGE — added by connector agents
1021 +- slug: hours-worked
1022 + name: Average annual hours worked per worker
1023 + short_name: Hours worked
1024 + topic: labor
1025 + subtopic: Wages
1026 + unit: hours per year
1027 + unit_short: h/yr
1028 + format: number
1029 + precision: 0
1030 + bounds: [800, 3000]
1031 + sources: [] # oecd — added by connector agents
1032 +- slug: minimum-wage-relative
1033 + name: Minimum wage relative to median wage
1034 + topic: labor
1035 + subtopic: Wages
1036 + unit: ratio
1037 + unit_short: ratio
1038 + format: ratio
1039 + precision: 2
1040 + bounds: [0, 1.5]
1041 + sources: [] # oecd — optional
1042 +- slug: self-employed-share
1043 + name: Self-employed (% of total employment)
1044 + topic: labor
1045 + subtopic: Employment
1046 + unit: "% of employment"
1047 + unit_short: "%"
1048 + format: percent
1049 + bounds: [0, 100]
1050 + sources:
1051 + - {connector: worldbank, dataset: WDI, code: SL.EMP.SELF.ZS, priority: 1}
1052 +- slug: vulnerable-employment-share
1053 + name: Vulnerable employment (% of total employment)
1054 + topic: labor
1055 + subtopic: Employment
1056 + unit: "% of employment"
1057 + unit_short: "%"
1058 + format: percent
1059 + higher_is_better: false
1060 + bounds: [0, 100]
1061 + sources:
1062 + - {connector: worldbank, dataset: WDI, code: SL.EMP.VULN.ZS, priority: 1}
1063 +- slug: employment-agriculture-share
1064 + name: Employment in agriculture (% of total employment)
1065 + topic: labor
1066 + subtopic: Structure
1067 + unit: "% of employment"
1068 + unit_short: "%"
1069 + format: percent
1070 + bounds: [0, 100]
1071 + sources:
1072 + - {connector: worldbank, dataset: WDI, code: SL.AGR.EMPL.ZS, priority: 1}
1073 +- slug: employment-industry-share
1074 + name: Employment in industry (% of total employment)
1075 + topic: labor
1076 + subtopic: Structure
1077 + unit: "% of employment"
1078 + unit_short: "%"
1079 + format: percent
1080 + bounds: [0, 100]
1081 + sources:
1082 + - {connector: worldbank, dataset: WDI, code: SL.IND.EMPL.ZS, priority: 1}
1083 +- slug: employment-services-share
1084 + name: Employment in services (% of total employment)
1085 + topic: labor
1086 + subtopic: Structure
1087 + unit: "% of employment"
1088 + unit_short: "%"
1089 + format: percent
1090 + bounds: [0, 100]
1091 + sources:
1092 + - {connector: worldbank, dataset: WDI, code: SL.SRV.EMPL.ZS, priority: 1}
1093 +- slug: part-time-employment-share
1094 + name: Part-time employment (% of employment)
1095 + topic: labor
1096 + subtopic: Employment
1097 + unit: "% of employment"
1098 + unit_short: "%"
1099 + format: percent
1100 + bounds: [0, 100]
1101 + sources: [] # oecd — optional
1102 +- slug: long-term-unemployment-share
1103 + name: Long-term unemployment (% of unemployed)
1104 + topic: labor
1105 + subtopic: Unemployment
1106 + unit: "% of unemployed"
1107 + unit_short: "%"
1108 + format: percent
1109 + higher_is_better: false
1110 + bounds: [0, 100]
1111 + sources: [] # oecd / eurostat — optional
1112 +
1113 +# ============================================================ INCOME ===========================================================
1114 +- slug: gni-per-capita
1115 + name: GNI per capita, Atlas method (current US$)
1116 + short_name: GNI per capita
1117 + topic: income
1118 + subtopic: Income
1119 + unit: current US$
1120 + unit_short: US$
1121 + format: currency
1122 + precision: 0
1123 + higher_is_better: true
1124 + bounds: [0, null]
1125 + sources:
1126 + - {connector: worldbank, dataset: WDI, code: NY.GNP.PCAP.CD, priority: 1}
1127 +- slug: gni-per-capita-ppp
1128 + name: GNI per capita, PPP (current international $)
1129 + topic: income
1130 + subtopic: Income
1131 + unit: current international $
1132 + unit_short: intl $
1133 + format: currency
1134 + precision: 0
1135 + higher_is_better: true
1136 + bounds: [0, null]
1137 + sources:
1138 + - {connector: worldbank, dataset: WDI, code: NY.GNP.PCAP.PP.CD, priority: 1}
1139 +- slug: gini-index
1140 + name: Gini index
1141 + topic: income
1142 + subtopic: Inequality
1143 + unit: index (0 = perfect equality, 100 = perfect inequality)
1144 + unit_short: Gini
1145 + format: number
1146 + precision: 1
1147 + higher_is_better: false
1148 + featured: true
1149 + bounds: [15, 80]
1150 + description: Extent to which the distribution of income among individuals deviates from a perfectly equal distribution.
1151 + sources:
1152 + - {connector: worldbank, dataset: WDI, code: SI.POV.GINI, priority: 1}
1153 +- slug: income-share-top-10
1154 + name: Income share held by highest 10%
1155 + topic: income
1156 + subtopic: Inequality
1157 + unit: "% of income"
1158 + unit_short: "%"
1159 + format: percent
1160 + higher_is_better: false
1161 + bounds: [10, 80]
1162 + sources:
1163 + - {connector: worldbank, dataset: WDI, code: SI.DST.10TH.10, priority: 1}
1164 +- slug: income-share-bottom-20
1165 + name: Income share held by lowest 20%
1166 + topic: income
1167 + subtopic: Inequality
1168 + unit: "% of income"
1169 + unit_short: "%"
1170 + format: percent
1171 + higher_is_better: true
1172 + bounds: [0, 20]
1173 + sources:
1174 + - {connector: worldbank, dataset: WDI, code: SI.DST.FRST.20, priority: 1}
1175 +- slug: poverty-headcount-215
1176 + name: Poverty headcount ratio at the international poverty line
1177 + short_name: Extreme poverty
1178 + topic: income
1179 + subtopic: Poverty
1180 + unit: "% of population"
1181 + unit_short: "%"
1182 + format: percent
1183 + higher_is_better: false
1184 + bounds: [0, 100]
1185 + description: Share of the population living below the World Bank international poverty line (US$3.00 a day, 2021 PPP).
1186 + sources:
1187 + - {connector: worldbank, dataset: WDI, code: SI.POV.DDAY, priority: 1}
1188 +- slug: poverty-headcount-national
1189 + name: Poverty headcount ratio at national poverty lines
1190 + topic: income
1191 + subtopic: Poverty
1192 + unit: "% of population"
1193 + unit_short: "%"
1194 + format: percent
1195 + higher_is_better: false
1196 + ranking_eligible: false
1197 + bounds: [0, 100]
1198 + sources:
1199 + - {connector: worldbank, dataset: WDI, code: SI.POV.NAHC, priority: 1}
1200 +- slug: median-household-income
1201 + name: Median equivalised net household income
1202 + topic: income
1203 + subtopic: Income
1204 + unit: euro (PPS)
1205 + unit_short: PPS
1206 + format: currency
1207 + precision: 0
1208 + higher_is_better: true
1209 + sources: [] # eurostat ilc_di03 — added by connector agents
1210 +- slug: at-risk-of-poverty-rate
1211 + name: At-risk-of-poverty rate
1212 + topic: income
1213 + subtopic: Poverty
1214 + unit: "% of population"
1215 + unit_short: "%"
1216 + format: percent
1217 + higher_is_better: false
1218 + bounds: [0, 100]
1219 + sources: [] # eurostat ilc_li02 — added by connector agents
1220 +- slug: household-consumption-per-capita
1221 + name: Household consumption per capita (constant 2015 US$)
1222 + topic: income
1223 + subtopic: Income
1224 + unit: constant 2015 US$
1225 + unit_short: US$
1226 + format: currency
1227 + precision: 0
1228 + higher_is_better: true
1229 + bounds: [0, null]
1230 + sources:
1231 + - {connector: worldbank, dataset: WDI, code: NE.CON.PRVT.PC.KD, priority: 1}
1232 +
1233 +# =========================================================== HOUSING ===========================================================
1234 +- slug: real-house-price-index
1235 + name: Real house price index
1236 + short_name: Real house prices
1237 + topic: housing
1238 + subtopic: Prices
1239 + unit: index (2015 = 100)
1240 + unit_short: index
1241 + format: index
1242 + frequency: Q
1243 + ranking_eligible: false
1244 + featured: true
1245 + bounds: [0, 2000]
1246 + description: Residential property prices deflated by the consumer price index.
1247 + sources: [] # oecd DF_HOUSE_PRICES / bis WS_SPP / fred Q??R628BIS — added by connector agents
1248 +- slug: nominal-house-price-index
1249 + name: Nominal house price index
1250 + topic: housing
1251 + subtopic: Prices
1252 + unit: index (2015 = 100)
1253 + unit_short: index
1254 + format: index
1255 + frequency: Q
1256 + ranking_eligible: false
1257 + bounds: [0, 5000]
1258 + sources: []
1259 +- slug: house-price-growth
1260 + name: Real house price growth (year on year)
1261 + topic: housing
1262 + subtopic: Prices
1263 + unit: annual %
1264 + unit_short: "%"
1265 + format: percent
1266 + frequency: Q
1267 + bounds: [-60, 100]
1268 + change_floor: 5
1269 + sources: [] # derived by connector agents from real-house-price-index, or bis
1270 +- slug: rent-price-index
1271 + name: Rent price index
1272 + topic: housing
1273 + subtopic: Prices
1274 + unit: index (2015 = 100)
1275 + unit_short: index
1276 + format: index
1277 + frequency: Q
1278 + ranking_eligible: false
1279 + sources: []
1280 +- slug: price-to-income-ratio
1281 + name: House price-to-income ratio
1282 + topic: housing
1283 + subtopic: Affordability
1284 + unit: index (2015 = 100)
1285 + unit_short: index
1286 + format: index
1287 + frequency: Q
1288 + higher_is_better: false
1289 + sources: []
1290 +- slug: price-to-rent-ratio
1291 + name: House price-to-rent ratio
1292 + topic: housing
1293 + subtopic: Affordability
1294 + unit: index (2015 = 100)
1295 + unit_short: index
1296 + format: index
1297 + frequency: Q
1298 + sources: []
1299 +- slug: mortgage-rate
1300 + name: Mortgage interest rate
1301 + topic: housing
1302 + subtopic: Financing
1303 + unit: "%"
1304 + unit_short: "%"
1305 + format: percent
1306 + precision: 2
1307 + frequency: M
1308 + ranking_eligible: false
1309 + bounds: [0, 50]
1310 + sources: [] # fred MORTGAGE30US (USA) — added by connector agents
1311 +- slug: housing-starts
1312 + name: Housing starts
1313 + topic: housing
1314 + subtopic: Construction
1315 + unit: thousands of units (annual rate)
1316 + unit_short: k units
1317 + format: number
1318 + precision: 0
1319 + frequency: M
1320 + ranking_eligible: false
1321 + sources: [] # fred HOUST (USA)
1322 +- slug: building-permits
1323 + name: Building permits
1324 + topic: housing
1325 + subtopic: Construction
1326 + unit: thousands of units (annual rate)
1327 + unit_short: k units
1328 + format: number
1329 + precision: 0
1330 + frequency: M
1331 + ranking_eligible: false
1332 + sources: [] # fred PERMIT (USA)
1333 +- slug: homeownership-rate
1334 + name: Homeownership rate
1335 + topic: housing
1336 + subtopic: Tenure
1337 + unit: "% of households"
1338 + unit_short: "%"
1339 + format: percent
1340 + bounds: [0, 100]
1341 + sources: [] # eurostat ilc_lvho02 / fred RHORUSQ156N (USA)
1342 +- slug: housing-cost-overburden-rate
1343 + name: Housing cost overburden rate
1344 + topic: housing
1345 + subtopic: Affordability
1346 + unit: "% of population"
1347 + unit_short: "%"
1348 + format: percent
1349 + higher_is_better: false
1350 + bounds: [0, 100]
1351 + description: Share of the population living in households where total housing costs exceed 40 % of disposable income.
1352 + sources: [] # eurostat ilc_lvho07a
1353 +- slug: house-price-to-income-growth
1354 + name: Price-to-income ratio change (5 years)
1355 + topic: housing
1356 + subtopic: Affordability
1357 + unit: "%"
1358 + unit_short: "%"
1359 + format: percent
1360 + frequency: Q
1361 + sources: [] # optional derived
1362 +
1363 +# ============================================================ HEALTH ===========================================================
1364 +- slug: healthy-life-expectancy
1365 + name: Healthy life expectancy at birth
1366 + topic: health
1367 + subtopic: Longevity
1368 + unit: years
1369 + unit_short: yrs
1370 + format: years
1371 + higher_is_better: true
1372 + bounds: [20, 90]
1373 + sources:
1374 + - {connector: who, dataset: GHO, code: WHOSIS_000002, params: {Dim1: SEX_BTSX}, priority: 1}
1375 +- slug: infant-mortality-rate
1376 + name: Infant mortality rate
1377 + short_name: Infant mortality
1378 + topic: health
1379 + subtopic: Mortality
1380 + unit: per 1,000 live births
1381 + unit_short: /1,000
1382 + format: per_1000
1383 + higher_is_better: false
1384 + featured: true
1385 + bounds: [0, 300]
1386 + sources:
1387 + - {connector: worldbank, dataset: WDI, code: SP.DYN.IMRT.IN, priority: 1}
1388 +- slug: under-5-mortality-rate
1389 + name: Under-5 mortality rate
1390 + topic: health
1391 + subtopic: Mortality
1392 + unit: per 1,000 live births
1393 + unit_short: /1,000
1394 + format: per_1000
1395 + higher_is_better: false
1396 + bounds: [0, 500]
1397 + sources:
1398 + - {connector: worldbank, dataset: WDI, code: SH.DYN.MORT, priority: 1}
1399 +- slug: maternal-mortality-ratio
1400 + name: Maternal mortality ratio
1401 + topic: health
1402 + subtopic: Mortality
1403 + unit: per 100,000 live births
1404 + unit_short: /100k
1405 + format: per_100k
1406 + higher_is_better: false
1407 + bounds: [0, 5000]
1408 + sources:
1409 + - {connector: worldbank, dataset: WDI, code: SH.STA.MMRT, priority: 1}
1410 +- slug: health-expenditure-per-capita
1411 + name: Current health expenditure per capita (current US$)
1412 + topic: health
1413 + subtopic: Spending
1414 + unit: current US$
1415 + unit_short: US$
1416 + format: currency
1417 + precision: 0
1418 + bounds: [0, 50000]
1419 + sources:
1420 + - {connector: worldbank, dataset: WDI, code: SH.XPD.CHEX.PC.CD, priority: 1}
1421 +- slug: out-of-pocket-health-expenditure-share
1422 + name: Out-of-pocket expenditure (% of current health expenditure)
1423 + topic: health
1424 + subtopic: Spending
1425 + unit: "% of health expenditure"
1426 + unit_short: "%"
1427 + format: percent
1428 + higher_is_better: false
1429 + bounds: [0, 100]
1430 + sources:
1431 + - {connector: worldbank, dataset: WDI, code: SH.XPD.OOPC.CH.ZS, priority: 1}
1432 +- slug: physicians-per-1000
1433 + name: Physicians
1434 + topic: health
1435 + subtopic: Capacity
1436 + unit: per 1,000 people
1437 + unit_short: /1,000
1438 + format: per_1000
1439 + precision: 2
1440 + higher_is_better: true
1441 + bounds: [0, 30]
1442 + sources:
1443 + - {connector: worldbank, dataset: WDI, code: SH.MED.PHYS.ZS, priority: 1}
1444 + - {connector: who, dataset: GHO, code: HWF_0001, priority: 2, transform: "x/10"}
1445 +- slug: nurses-per-1000
1446 + name: Nurses and midwives
1447 + topic: health
1448 + subtopic: Capacity
1449 + unit: per 1,000 people
1450 + unit_short: /1,000
1451 + format: per_1000
1452 + precision: 2
1453 + higher_is_better: true
1454 + bounds: [0, 60]
1455 + sources:
1456 + - {connector: worldbank, dataset: WDI, code: SH.MED.NUMW.P3, priority: 1}
1457 +- slug: hospital-beds-per-1000
1458 + name: Hospital beds
1459 + topic: health
1460 + subtopic: Capacity
1461 + unit: per 1,000 people
1462 + unit_short: /1,000
1463 + format: per_1000
1464 + precision: 2
1465 + bounds: [0, 30]
1466 + sources:
1467 + - {connector: worldbank, dataset: WDI, code: SH.MED.BEDS.ZS, priority: 1}
1468 +- slug: ncd-mortality-30-70
1469 + name: Probability of dying between ages 30 and 70 from NCDs
1470 + short_name: NCD mortality
1471 + topic: health
1472 + subtopic: Mortality
1473 + unit: "%"
1474 + unit_short: "%"
1475 + format: percent
1476 + higher_is_better: false
1477 + bounds: [0, 60]
1478 + description: Cardiovascular disease, cancer, diabetes or chronic respiratory disease.
1479 + sources:
1480 + - {connector: worldbank, dataset: WDI, code: SH.DYN.NCOM.ZS, priority: 1}
1481 +- slug: suicide-rate
1482 + name: Suicide mortality rate
1483 + topic: health
1484 + subtopic: Mortality
1485 + unit: per 100,000 people
1486 + unit_short: /100k
1487 + format: per_100k
1488 + higher_is_better: false
1489 + bounds: [0, 100]
1490 + sources:
1491 + - {connector: worldbank, dataset: WDI, code: SH.STA.SUIC.P5, priority: 1}
1492 +- slug: smoking-prevalence
1493 + name: Prevalence of current tobacco use (ages 15+)
1494 + short_name: Smoking
1495 + topic: health
1496 + subtopic: Risk factors
1497 + unit: "% of adults"
1498 + unit_short: "%"
1499 + format: percent
1500 + higher_is_better: false
1501 + bounds: [0, 80]
1502 + sources:
1503 + - {connector: worldbank, dataset: WDI, code: SH.PRV.SMOK, priority: 1}
1504 +- slug: obesity-prevalence
1505 + name: Prevalence of obesity among adults (BMI ≥ 30)
1506 + short_name: Obesity
1507 + topic: health
1508 + subtopic: Risk factors
1509 + unit: "% of adults"
1510 + unit_short: "%"
1511 + format: percent
1512 + higher_is_better: false
1513 + bounds: [0, 80]
1514 + sources:
1515 + - {connector: who, dataset: GHO, code: NCD_BMI_30A, params: {Dim1: SEX_BTSX}, priority: 1}
1516 +- slug: alcohol-consumption
1517 + name: Total alcohol consumption per capita (ages 15+)
1518 + short_name: Alcohol
1519 + topic: health
1520 + subtopic: Risk factors
1521 + unit: litres of pure alcohol per year
1522 + unit_short: L
1523 + format: number
1524 + precision: 1
1525 + bounds: [0, 30]
1526 + sources:
1527 + - {connector: worldbank, dataset: WDI, code: SH.ALC.PCAP.LI, priority: 1}
1528 +- slug: measles-immunization
1529 + name: Immunization, measles (% of children ages 12–23 months)
1530 + topic: health
1531 + subtopic: Prevention
1532 + unit: "% of children"
1533 + unit_short: "%"
1534 + format: percent
1535 + higher_is_better: true
1536 + bounds: [0, 100]
1537 + sources:
1538 + - {connector: worldbank, dataset: WDI, code: SH.IMM.MEAS, priority: 1}
1539 +- slug: dtp3-immunization
1540 + name: Immunization, DPT (% of children ages 12–23 months)
1541 + topic: health
1542 + subtopic: Prevention
1543 + unit: "% of children"
1544 + unit_short: "%"
1545 + format: percent
1546 + higher_is_better: true
1547 + bounds: [0, 100]
1548 + sources:
1549 + - {connector: worldbank, dataset: WDI, code: SH.IMM.IDPT, priority: 1}
1550 +- slug: hiv-prevalence
1551 + name: Prevalence of HIV (ages 15–49)
1552 + topic: health
1553 + subtopic: Disease
1554 + unit: "% of population ages 15–49"
1555 + unit_short: "%"
1556 + format: percent
1557 + higher_is_better: false
1558 + bounds: [0, 40]
1559 + sources:
1560 + - {connector: worldbank, dataset: WDI, code: SH.DYN.AIDS.ZS, priority: 1}
1561 +- slug: tuberculosis-incidence
1562 + name: Incidence of tuberculosis
1563 + topic: health
1564 + subtopic: Disease
1565 + unit: per 100,000 people
1566 + unit_short: /100k
1567 + format: per_100k
1568 + higher_is_better: false
1569 + bounds: [0, 2000]
1570 + sources:
1571 + - {connector: worldbank, dataset: WDI, code: SH.TBS.INCD, priority: 1}
1572 +- slug: safely-managed-water
1573 + name: People using safely managed drinking water services
1574 + short_name: Safe drinking water
1575 + topic: health
1576 + subtopic: Access
1577 + unit: "% of population"
1578 + unit_short: "%"
1579 + format: percent
1580 + higher_is_better: true
1581 + bounds: [0, 100]
1582 + sources:
1583 + - {connector: worldbank, dataset: WDI, code: SH.H2O.SMDW.ZS, priority: 1}
1584 +- slug: safely-managed-sanitation
1585 + name: People using safely managed sanitation services
1586 + short_name: Safe sanitation
1587 + topic: health
1588 + subtopic: Access
1589 + unit: "% of population"
1590 + unit_short: "%"
1591 + format: percent
1592 + higher_is_better: true
1593 + bounds: [0, 100]
1594 + sources:
1595 + - {connector: worldbank, dataset: WDI, code: SH.STA.SMSS.ZS, priority: 1}
1596 +- slug: road-traffic-deaths
1597 + name: Mortality caused by road traffic injury
1598 + topic: health
1599 + subtopic: Mortality
1600 + unit: per 100,000 people
1601 + unit_short: /100k
1602 + format: per_100k
1603 + higher_is_better: false
1604 + bounds: [0, 100]
1605 + sources:
1606 + - {connector: worldbank, dataset: WDI, code: SH.STA.TRAF.P5, priority: 1}
1607 +
1608 +# =========================================================== EDUCATION =========================================================
1609 +- slug: literacy-rate-adult
1610 + name: Literacy rate, adult total (ages 15+)
1611 + short_name: Adult literacy
1612 + topic: education
1613 + subtopic: Literacy
1614 + unit: "% of people ages 15+"
1615 + unit_short: "%"
1616 + format: percent
1617 + higher_is_better: true
1618 + bounds: [0, 100]
1619 + sources:
1620 + - {connector: worldbank, dataset: WDI, code: SE.ADT.LITR.ZS, priority: 1}
1621 +- slug: literacy-rate-youth
1622 + name: Literacy rate, youth total (ages 15–24)
1623 + topic: education
1624 + subtopic: Literacy
1625 + unit: "% of people ages 15–24"
1626 + unit_short: "%"
1627 + format: percent
1628 + higher_is_better: true
1629 + bounds: [0, 100]
1630 + sources:
1631 + - {connector: worldbank, dataset: WDI, code: SE.ADT.1524.LT.ZS, priority: 1}
1632 +- slug: primary-enrollment
1633 + name: School enrolment, primary (% gross)
1634 + topic: education
1635 + subtopic: Enrolment
1636 + unit: "% gross"
1637 + unit_short: "%"
1638 + format: percent
1639 + bounds: [0, 200]
1640 + ranking_eligible: false
1641 + sources:
1642 + - {connector: worldbank, dataset: WDI, code: SE.PRM.ENRR, priority: 1}
1643 +- slug: secondary-enrollment
1644 + name: School enrolment, secondary (% gross)
1645 + topic: education
1646 + subtopic: Enrolment
1647 + unit: "% gross"
1648 + unit_short: "%"
1649 + format: percent
1650 + higher_is_better: true
1651 + bounds: [0, 200]
1652 + sources:
1653 + - {connector: worldbank, dataset: WDI, code: SE.SEC.ENRR, priority: 1}
1654 +- slug: tertiary-enrollment
1655 + name: School enrolment, tertiary (% gross)
1656 + short_name: Tertiary enrolment
1657 + topic: education
1658 + subtopic: Enrolment
1659 + unit: "% gross"
1660 + unit_short: "%"
1661 + format: percent
1662 + higher_is_better: true
1663 + featured: true
1664 + bounds: [0, 200]
1665 + sources:
1666 + - {connector: worldbank, dataset: WDI, code: SE.TER.ENRR, priority: 1}
1667 +- slug: primary-completion-rate
1668 + name: Primary completion rate
1669 + topic: education
1670 + subtopic: Attainment
1671 + unit: "% of relevant age group"
1672 + unit_short: "%"
1673 + format: percent
1674 + higher_is_better: true
1675 + bounds: [0, 200]
1676 + sources:
1677 + - {connector: worldbank, dataset: WDI, code: SE.PRM.CMPT.ZS, priority: 1}
1678 +- slug: tertiary-attainment-25-64
1679 + name: Tertiary educational attainment (ages 25–64)
1680 + short_name: Tertiary attainment
1681 + topic: education
1682 + subtopic: Attainment
1683 + unit: "% of population ages 25–64"
1684 + unit_short: "%"
1685 + format: percent
1686 + higher_is_better: true
1687 + bounds: [0, 100]
1688 + sources:
1689 + - {connector: worldbank, dataset: WDI, code: SE.TER.CUAT.BA.ZS, priority: 3} # Bachelor's or higher, 25+ (fallback)
1690 +- slug: tertiary-attainment-25-34
1691 + name: Tertiary educational attainment (ages 25–34)
1692 + topic: education
1693 + subtopic: Attainment
1694 + unit: "% of population ages 25–34"
1695 + unit_short: "%"
1696 + format: percent
1697 + higher_is_better: true
1698 + bounds: [0, 100]
1699 + sources: [] # oecd / eurostat edat_lfse_03 — added by connector agents
1700 +- slug: upper-secondary-attainment
1701 + name: At least upper secondary attainment (ages 25–64)
1702 + topic: education
1703 + subtopic: Attainment
1704 + unit: "% of population ages 25–64"
1705 + unit_short: "%"
1706 + format: percent
1707 + higher_is_better: true
1708 + bounds: [0, 100]
1709 + sources:
1710 + - {connector: worldbank, dataset: WDI, code: SE.SEC.CUAT.UP.ZS, priority: 2}
1711 +- slug: education-expenditure-pct-government
1712 + name: Government expenditure on education (% of government expenditure)
1713 + topic: education
1714 + subtopic: Spending
1715 + unit: "% of government expenditure"
1716 + unit_short: "%"
1717 + format: percent
1718 + bounds: [0, 60]
1719 + sources:
1720 + - {connector: worldbank, dataset: WDI, code: SE.XPD.TOTL.GB.ZS, priority: 1}
1721 +- slug: expected-years-of-schooling
1722 + name: Expected years of schooling
1723 + topic: education
1724 + subtopic: Attainment
1725 + unit: years
1726 + unit_short: yrs
1727 + format: years
1728 + higher_is_better: true
1729 + bounds: [0, 25]
1730 + sources:
1731 + - {connector: owid, dataset: grapher, code: expected-years-of-schooling, priority: 1}
1732 +- slug: mean-years-of-schooling
1733 + name: Mean years of schooling (ages 25+)
1734 + topic: education
1735 + subtopic: Attainment
1736 + unit: years
1737 + unit_short: yrs
1738 + format: years
1739 + higher_is_better: true
1740 + bounds: [0, 20]
1741 + sources:
1742 + - {connector: owid, dataset: grapher, code: mean-years-of-schooling-long-run, priority: 1}
1743 +- slug: pupil-teacher-ratio-primary
1744 + name: Pupil-teacher ratio, primary
1745 + topic: education
1746 + subtopic: Capacity
1747 + unit: pupils per teacher
1748 + unit_short: pupils/teacher
1749 + format: number
1750 + precision: 1
1751 + higher_is_better: false
1752 + bounds: [1, 150]
1753 + sources:
1754 + - {connector: worldbank, dataset: WDI, code: SE.PRM.ENRL.TC.ZS, priority: 1}
1755 +- slug: out-of-school-children
1756 + name: Children out of school, primary
1757 + topic: education
1758 + subtopic: Enrolment
1759 + unit: children
1760 + unit_short: children
1761 + format: number
1762 + precision: 0
1763 + aggregation: sum
1764 + higher_is_better: false
1765 + bounds: [0, null]
1766 + sources:
1767 + - {connector: worldbank, dataset: WDI, code: SE.PRM.UNER, priority: 1}
1768 +- slug: learning-poverty
1769 + name: Learning poverty
1770 + topic: education
1771 + subtopic: Attainment
1772 + unit: "% of children at end of primary age"
1773 + unit_short: "%"
1774 + format: percent
1775 + higher_is_better: false
1776 + bounds: [0, 100]
1777 + description: Share of children unable to read and understand a simple text by age 10.
1778 + sources:
1779 + - {connector: worldbank, dataset: WDI, code: SE.LPV.PRIM, priority: 1}
1780 +
1781 +# ============================================================ TRADE ============================================================
1782 +- slug: exports-goods-services
1783 + name: Exports of goods and services (current US$)
1784 + short_name: Exports
1785 + topic: trade
1786 + subtopic: Flows
1787 + unit: current US$
1788 + unit_short: US$
1789 + format: currency
1790 + precision: 0
1791 + aggregation: sum
1792 + featured: true
1793 + bounds: [0, null]
1794 + sources:
1795 + - {connector: worldbank, dataset: WDI, code: NE.EXP.GNFS.CD, priority: 1}
1796 +- slug: imports-goods-services
1797 + name: Imports of goods and services (current US$)
1798 + short_name: Imports
1799 + topic: trade
1800 + subtopic: Flows
1801 + unit: current US$
1802 + unit_short: US$
1803 + format: currency
1804 + precision: 0
1805 + aggregation: sum
1806 + bounds: [0, null]
1807 + sources:
1808 + - {connector: worldbank, dataset: WDI, code: NE.IMP.GNFS.CD, priority: 1}
1809 +- slug: trade-balance
1810 + name: External balance on goods and services (current US$)
1811 + short_name: Trade balance
1812 + topic: trade
1813 + subtopic: Balance
1814 + unit: current US$
1815 + unit_short: US$
1816 + format: currency
1817 + precision: 0
1818 + aggregation: sum
1819 + sources:
1820 + - {connector: worldbank, dataset: WDI, code: NE.RSB.GNFS.CD, priority: 1}
1821 +- slug: exports-pct-gdp
1822 + name: Exports of goods and services (% of GDP)
1823 + topic: trade
1824 + subtopic: Openness
1825 + unit: "% of GDP"
1826 + unit_short: "% GDP"
1827 + format: percent
1828 + bounds: [0, 400]
1829 + sources:
1830 + - {connector: worldbank, dataset: WDI, code: NE.EXP.GNFS.ZS, priority: 1}
1831 +- slug: imports-pct-gdp
1832 + name: Imports of goods and services (% of GDP)
1833 + topic: trade
1834 + subtopic: Openness
1835 + unit: "% of GDP"
1836 + unit_short: "% GDP"
1837 + format: percent
1838 + bounds: [0, 400]
1839 + sources:
1840 + - {connector: worldbank, dataset: WDI, code: NE.IMP.GNFS.ZS, priority: 1}
1841 +- slug: trade-pct-gdp
1842 + name: Trade (% of GDP)
1843 + short_name: Trade openness
1844 + topic: trade
1845 + subtopic: Openness
1846 + unit: "% of GDP"
1847 + unit_short: "% GDP"
1848 + format: percent
1849 + bounds: [0, 800]
1850 + description: Sum of exports and imports of goods and services as a share of GDP.
1851 + sources:
1852 + - {connector: worldbank, dataset: WDI, code: NE.TRD.GNFS.ZS, priority: 1}
1853 +- slug: merchandise-exports
1854 + name: Merchandise exports (current US$)
1855 + topic: trade
1856 + subtopic: Flows
1857 + unit: current US$
1858 + unit_short: US$
1859 + format: currency
1860 + precision: 0
1861 + aggregation: sum
1862 + bounds: [0, null]
1863 + sources:
1864 + - {connector: worldbank, dataset: WDI, code: TX.VAL.MRCH.CD.WT, priority: 1}
1865 +- slug: merchandise-imports
1866 + name: Merchandise imports (current US$)
1867 + topic: trade
1868 + subtopic: Flows
1869 + unit: current US$
1870 + unit_short: US$
1871 + format: currency
1872 + precision: 0
1873 + aggregation: sum
1874 + bounds: [0, null]
1875 + sources:
1876 + - {connector: worldbank, dataset: WDI, code: TM.VAL.MRCH.CD.WT, priority: 1}
1877 +- slug: high-tech-exports-share
1878 + name: High-technology exports (% of manufactured exports)
1879 + short_name: High-tech exports
1880 + topic: innovation
1881 + subtopic: Technology
1882 + unit: "% of manufactured exports"
1883 + unit_short: "%"
1884 + format: percent
1885 + bounds: [0, 100]
1886 + sources:
1887 + - {connector: worldbank, dataset: WDI, code: TX.VAL.TECH.MF.ZS, priority: 1}
1888 +- slug: high-tech-exports
1889 + name: High-technology exports (current US$)
1890 + topic: innovation
1891 + subtopic: Technology
1892 + unit: current US$
1893 + unit_short: US$
1894 + format: currency
1895 + precision: 0
1896 + aggregation: sum
1897 + bounds: [0, null]
1898 + sources:
1899 + - {connector: worldbank, dataset: WDI, code: TX.VAL.TECH.CD, priority: 1}
1900 +- slug: fuel-exports-share
1901 + name: Fuel exports (% of merchandise exports)
1902 + topic: trade
1903 + subtopic: Composition
1904 + unit: "% of merchandise exports"
1905 + unit_short: "%"
1906 + format: percent
1907 + bounds: [0, 100]
1908 + sources:
1909 + - {connector: worldbank, dataset: WDI, code: TX.VAL.FUEL.ZS.UN, priority: 1}
1910 +- slug: food-exports-share
1911 + name: Food exports (% of merchandise exports)
1912 + topic: trade
1913 + subtopic: Composition
1914 + unit: "% of merchandise exports"
1915 + unit_short: "%"
1916 + format: percent
1917 + bounds: [0, 100]
1918 + sources:
1919 + - {connector: worldbank, dataset: WDI, code: TX.VAL.FOOD.ZS.UN, priority: 1}
1920 +- slug: manufactures-exports-share
1921 + name: Manufactures exports (% of merchandise exports)
1922 + topic: trade
1923 + subtopic: Composition
1924 + unit: "% of merchandise exports"
1925 + unit_short: "%"
1926 + format: percent
1927 + bounds: [0, 100]
1928 + sources:
1929 + - {connector: worldbank, dataset: WDI, code: TX.VAL.MANF.ZS.UN, priority: 1}
1930 +- slug: ores-metals-exports-share
1931 + name: Ores and metals exports (% of merchandise exports)
1932 + topic: trade
1933 + subtopic: Composition
1934 + unit: "% of merchandise exports"
1935 + unit_short: "%"
1936 + format: percent
1937 + bounds: [0, 100]
1938 + sources:
1939 + - {connector: worldbank, dataset: WDI, code: TX.VAL.MMTL.ZS.UN, priority: 1}
1940 +- slug: agricultural-exports-share
1941 + name: Agricultural raw materials exports (% of merchandise exports)
1942 + topic: agriculture
1943 + subtopic: Trade
1944 + unit: "% of merchandise exports"
1945 + unit_short: "%"
1946 + format: percent
1947 + bounds: [0, 100]
1948 + sources:
1949 + - {connector: worldbank, dataset: WDI, code: TX.VAL.AGRI.ZS.UN, priority: 1}
1950 +- slug: services-exports-pct-gdp
1951 + name: Service exports (BoP, current US$)
1952 + short_name: Services exports
1953 + topic: trade
1954 + subtopic: Flows
1955 + unit: current US$
1956 + unit_short: US$
1957 + format: currency
1958 + precision: 0
1959 + aggregation: sum
1960 + bounds: [0, null]
1961 + sources:
1962 + - {connector: worldbank, dataset: WDI, code: BX.GSR.NFSV.CD, priority: 1}
1963 +- slug: terms-of-trade-index
1964 + name: Net barter terms of trade index
1965 + topic: trade
1966 + subtopic: Prices
1967 + unit: index (2015 = 100)
1968 + unit_short: index
1969 + format: index
1970 + ranking_eligible: false
1971 + sources:
1972 + - {connector: worldbank, dataset: WDI, code: TT.PRI.MRCH.XD.WD, priority: 1}
1973 +- slug: tariff-rate-applied-mean
1974 + name: Tariff rate, applied, weighted mean, all products
1975 + short_name: Tariffs
1976 + topic: trade
1977 + subtopic: Policy
1978 + unit: "%"
1979 + unit_short: "%"
1980 + format: percent
1981 + bounds: [0, 100]
1982 + sources:
1983 + - {connector: worldbank, dataset: WDI, code: TM.TAX.MRCH.WM.AR.ZS, priority: 1}
1984 +- slug: logistics-performance-index
1985 + name: Logistics performance index, overall
1986 + topic: infrastructure
1987 + subtopic: Logistics
1988 + unit: score (1 = low, 5 = high)
1989 + unit_short: score
1990 + format: number
1991 + precision: 2
1992 + higher_is_better: true
1993 + bounds: [1, 5]
1994 + sources:
1995 + - {connector: worldbank, dataset: WDI, code: LP.LPI.OVRL.XQ, priority: 1}
1996 +
1997 +# ============================================================ ENERGY ===========================================================
1998 +- slug: electricity-generation
1999 + name: Electricity generation
2000 + topic: energy
2001 + subtopic: Electricity
2002 + unit: terawatt-hours
2003 + unit_short: TWh
2004 + format: number
2005 + precision: 1
2006 + aggregation: sum
2007 + bounds: [0, null]
2008 + sources:
2009 + - {connector: owid, dataset: energy, code: electricity_generation, priority: 1}
2010 +- slug: electricity-consumption-per-capita
2011 + name: Electricity consumption per capita
2012 + topic: energy
2013 + subtopic: Electricity
2014 + unit: kilowatt-hours per person
2015 + unit_short: kWh
2016 + format: kwh
2017 + precision: 0
2018 + bounds: [0, 100000]
2019 + sources:
2020 + - {connector: owid, dataset: energy, code: per_capita_electricity, priority: 1}
2021 + - {connector: worldbank, dataset: WDI, code: EG.USE.ELEC.KH.PC, priority: 2}
2022 +- slug: primary-energy-consumption
2023 + name: Primary energy consumption
2024 + topic: energy
2025 + subtopic: Consumption
2026 + unit: terawatt-hours
2027 + unit_short: TWh
2028 + format: number
2029 + precision: 0
2030 + aggregation: sum
2031 + bounds: [0, null]
2032 + sources:
2033 + - {connector: owid, dataset: energy, code: primary_energy_consumption, priority: 1}
2034 +- slug: energy-use-per-capita
2035 + name: Energy use per capita
2036 + topic: energy
2037 + subtopic: Consumption
2038 + unit: kilowatt-hours per person
2039 + unit_short: kWh
2040 + format: kwh
2041 + precision: 0
2042 + bounds: [0, 500000]
2043 + sources:
2044 + - {connector: owid, dataset: energy, code: energy_per_capita, priority: 1}
2045 +- slug: renewable-electricity-share
2046 + name: Renewable electricity share
2047 + short_name: Renewable electricity
2048 + topic: energy
2049 + subtopic: Electricity mix
2050 + unit: "% of electricity generation"
2051 + unit_short: "%"
2052 + format: percent
2053 + higher_is_better: true
2054 + featured: true
2055 + bounds: [0, 100]
2056 + change_floor: 3
2057 + description: Share of electricity generated from renewables (hydro, wind, solar, bioenergy, other).
2058 + sources:
2059 + - {connector: owid, dataset: energy, code: renewables_share_elec, priority: 1}
2060 + - {connector: worldbank, dataset: WDI, code: EG.ELC.RNEW.ZS, priority: 2}
2061 +- slug: fossil-electricity-share
2062 + name: Fossil fuel electricity share
2063 + topic: energy
2064 + subtopic: Electricity mix
2065 + unit: "% of electricity generation"
2066 + unit_short: "%"
2067 + format: percent
2068 + higher_is_better: false
2069 + bounds: [0, 100]
2070 + sources:
2071 + - {connector: owid, dataset: energy, code: fossil_share_elec, priority: 1}
2072 + - {connector: worldbank, dataset: WDI, code: EG.ELC.FOSL.ZS, priority: 2}
2073 +- slug: low-carbon-electricity-share
2074 + name: Low-carbon electricity share
2075 + topic: energy
2076 + subtopic: Electricity mix
2077 + unit: "% of electricity generation"
2078 + unit_short: "%"
2079 + format: percent
2080 + higher_is_better: true
2081 + bounds: [0, 100]
2082 + sources:
2083 + - {connector: owid, dataset: energy, code: low_carbon_share_elec, priority: 1}
2084 +- slug: hydro-electricity-share
2085 + name: Hydropower electricity share
2086 + topic: energy
2087 + subtopic: Electricity mix
2088 + unit: "% of electricity generation"
2089 + unit_short: "%"
2090 + format: percent
2091 + bounds: [0, 100]
2092 + sources:
2093 + - {connector: owid, dataset: energy, code: hydro_share_elec, priority: 1}
2094 + - {connector: worldbank, dataset: WDI, code: EG.ELC.HYRO.ZS, priority: 2}
2095 +- slug: nuclear-electricity-share
2096 + name: Nuclear electricity share
2097 + topic: energy
2098 + subtopic: Electricity mix
2099 + unit: "% of electricity generation"
2100 + unit_short: "%"
2101 + format: percent
2102 + bounds: [0, 100]
2103 + sources:
2104 + - {connector: owid, dataset: energy, code: nuclear_share_elec, priority: 1}
2105 + - {connector: worldbank, dataset: WDI, code: EG.ELC.NUCL.ZS, priority: 2}
2106 +- slug: solar-electricity-share
2107 + name: Solar electricity share
2108 + topic: energy
2109 + subtopic: Electricity mix
2110 + unit: "% of electricity generation"
2111 + unit_short: "%"
2112 + format: percent
2113 + bounds: [0, 100]
2114 + sources:
2115 + - {connector: owid, dataset: energy, code: solar_share_elec, priority: 1}
2116 +- slug: wind-electricity-share
2117 + name: Wind electricity share
2118 + topic: energy
2119 + subtopic: Electricity mix
2120 + unit: "% of electricity generation"
2121 + unit_short: "%"
2122 + format: percent
2123 + bounds: [0, 100]
2124 + sources:
2125 + - {connector: owid, dataset: energy, code: wind_share_elec, priority: 1}
2126 +- slug: coal-electricity-share
2127 + name: Coal electricity share
2128 + topic: energy
2129 + subtopic: Electricity mix
2130 + unit: "% of electricity generation"
2131 + unit_short: "%"
2132 + format: percent
2133 + higher_is_better: false
2134 + bounds: [0, 100]
2135 + sources:
2136 + - {connector: owid, dataset: energy, code: coal_share_elec, priority: 1}
2137 +- slug: gas-electricity-share
2138 + name: Gas electricity share
2139 + topic: energy
2140 + subtopic: Electricity mix
2141 + unit: "% of electricity generation"
2142 + unit_short: "%"
2143 + format: percent
2144 + bounds: [0, 100]
2145 + sources:
2146 + - {connector: owid, dataset: energy, code: gas_share_elec, priority: 1}
2147 +- slug: solar-generation
2148 + name: Solar electricity generation
2149 + topic: energy
2150 + subtopic: Electricity
2151 + unit: terawatt-hours
2152 + unit_short: TWh
2153 + format: number
2154 + precision: 2
2155 + aggregation: sum
2156 + bounds: [0, null]
2157 + sources:
2158 + - {connector: owid, dataset: energy, code: solar_electricity, priority: 1}
2159 +- slug: wind-generation
2160 + name: Wind electricity generation
2161 + topic: energy
2162 + subtopic: Electricity
2163 + unit: terawatt-hours
2164 + unit_short: TWh
2165 + format: number
2166 + precision: 2
2167 + aggregation: sum
2168 + bounds: [0, null]
2169 + sources:
2170 + - {connector: owid, dataset: energy, code: wind_electricity, priority: 1}
2171 +- slug: hydro-generation
2172 + name: Hydropower electricity generation
2173 + topic: energy
2174 + subtopic: Electricity
2175 + unit: terawatt-hours
2176 + unit_short: TWh
2177 + format: number
2178 + precision: 2
2179 + aggregation: sum
2180 + bounds: [0, null]
2181 + sources:
2182 + - {connector: owid, dataset: energy, code: hydro_electricity, priority: 1}
2183 +- slug: nuclear-generation
2184 + name: Nuclear electricity generation
2185 + topic: energy
2186 + subtopic: Electricity
2187 + unit: terawatt-hours
2188 + unit_short: TWh
2189 + format: number
2190 + precision: 2
2191 + aggregation: sum
2192 + bounds: [0, null]
2193 + sources:
2194 + - {connector: owid, dataset: energy, code: nuclear_electricity, priority: 1}
2195 +- slug: renewable-energy-consumption-share
2196 + name: Renewable energy consumption (% of total final energy consumption)
2197 + short_name: Renewable energy
2198 + topic: energy
2199 + subtopic: Consumption
2200 + unit: "% of final energy consumption"
2201 + unit_short: "%"
2202 + format: percent
2203 + higher_is_better: true
2204 + bounds: [0, 100]
2205 + sources:
2206 + - {connector: worldbank, dataset: WDI, code: EG.FEC.RNEW.ZS, priority: 1}
2207 +- slug: energy-imports-share
2208 + name: Energy imports, net (% of energy use)
2209 + short_name: Energy imports
2210 + topic: energy
2211 + subtopic: Dependence
2212 + unit: "% of energy use"
2213 + unit_short: "%"
2214 + format: percent
2215 + bounds: [-2000, 100]
2216 + sources:
2217 + - {connector: worldbank, dataset: WDI, code: EG.IMP.CONS.ZS, priority: 1}
2218 +- slug: net-electricity-imports-share
2219 + name: Net electricity imports (% of demand)
2220 + topic: energy
2221 + subtopic: Dependence
2222 + unit: "% of electricity demand"
2223 + unit_short: "%"
2224 + format: percent
2225 + bounds: [-500, 100]
2226 + sources:
2227 + - {connector: owid, dataset: energy, code: net_elec_imports_share_demand, priority: 1}
2228 +- slug: energy-intensity
2229 + name: Energy intensity of GDP
2230 + topic: energy
2231 + subtopic: Intensity
2232 + unit: kilowatt-hours per US$ (2011 PPP)
2233 + unit_short: kWh/$
2234 + format: number
2235 + precision: 2
2236 + higher_is_better: false
2237 + bounds: [0, 50]
2238 + sources:
2239 + - {connector: owid, dataset: energy, code: energy_per_gdp, priority: 1}
2240 +- slug: access-to-electricity
2241 + name: Access to electricity (% of population)
2242 + topic: energy
2243 + subtopic: Access
2244 + unit: "% of population"
2245 + unit_short: "%"
2246 + format: percent
2247 + higher_is_better: true
2248 + bounds: [0, 100]
2249 + sources:
2250 + - {connector: worldbank, dataset: WDI, code: EG.ELC.ACCS.ZS, priority: 1}
2251 +- slug: carbon-intensity-electricity
2252 + name: Carbon intensity of electricity
2253 + topic: energy
2254 + subtopic: Intensity
2255 + unit: grams of CO₂ per kWh
2256 + unit_short: gCO₂/kWh
2257 + format: number
2258 + precision: 0
2259 + higher_is_better: false
2260 + bounds: [0, 1500]
2261 + sources:
2262 + - {connector: owid, dataset: energy, code: carbon_intensity_elec, priority: 1}
2263 +- slug: oil-production
2264 + name: Oil production
2265 + topic: energy
2266 + subtopic: Production
2267 + unit: terawatt-hours
2268 + unit_short: TWh
2269 + format: number
2270 + precision: 0
2271 + aggregation: sum
2272 + bounds: [0, null]
2273 + sources:
2274 + - {connector: owid, dataset: energy, code: oil_production, priority: 1}
2275 +- slug: gas-production
2276 + name: Gas production
2277 + topic: energy
2278 + subtopic: Production
2279 + unit: terawatt-hours
2280 + unit_short: TWh
2281 + format: number
2282 + precision: 0
2283 + aggregation: sum
2284 + bounds: [0, null]
2285 + sources:
2286 + - {connector: owid, dataset: energy, code: gas_production, priority: 1}
2287 +- slug: coal-production
2288 + name: Coal production
2289 + topic: energy
2290 + subtopic: Production
2291 + unit: terawatt-hours
2292 + unit_short: TWh
2293 + format: number
2294 + precision: 0
2295 + aggregation: sum
2296 + bounds: [0, null]
2297 + sources:
2298 + - {connector: owid, dataset: energy, code: coal_production, priority: 1}
2299 +
2300 +# =========================================================== CLIMATE ===========================================================
2301 +- slug: co2-emissions
2302 + name: CO₂ emissions (fossil fuels and industry)
2303 + short_name: CO₂ emissions
2304 + topic: climate
2305 + subtopic: Emissions
2306 + unit: million tonnes
2307 + unit_short: Mt
2308 + format: tonnes
2309 + precision: 1
2310 + aggregation: sum
2311 + featured: true
2312 + bounds: [0, null]
2313 + sources:
2314 + - {connector: owid, dataset: co2, code: co2, priority: 1}
2315 +- slug: co2-per-capita
2316 + name: CO₂ emissions per capita
2317 + short_name: CO₂ per capita
2318 + topic: climate
2319 + subtopic: Emissions
2320 + unit: tonnes per person
2321 + unit_short: t
2322 + format: tonnes
2323 + precision: 2
2324 + higher_is_better: false
2325 + featured: true
2326 + bounds: [0, 120]
2327 + change_floor: 0.5
2328 + sources:
2329 + - {connector: owid, dataset: co2, code: co2_per_capita, priority: 1}
2330 +- slug: co2-per-gdp
2331 + name: CO₂ emissions per unit of GDP
2332 + short_name: CO₂ intensity
2333 + topic: climate
2334 + subtopic: Intensity
2335 + unit: kg per US$ (2011 PPP)
2336 + unit_short: kg/$
2337 + format: number
2338 + precision: 3
2339 + higher_is_better: false
2340 + bounds: [0, 10]
2341 + sources:
2342 + - {connector: owid, dataset: co2, code: co2_per_gdp, priority: 1}
2343 +- slug: consumption-co2-per-capita
2344 + name: Consumption-based CO₂ emissions per capita
2345 + topic: climate
2346 + subtopic: Emissions
2347 + unit: tonnes per person
2348 + unit_short: t
2349 + format: tonnes
2350 + precision: 2
2351 + higher_is_better: false
2352 + bounds: [0, 120]
2353 + sources:
2354 + - {connector: owid, dataset: co2, code: consumption_co2_per_capita, priority: 1}
2355 +- slug: cumulative-co2
2356 + name: Cumulative CO₂ emissions
2357 + topic: climate
2358 + subtopic: Emissions
2359 + unit: million tonnes
2360 + unit_short: Mt
2361 + format: tonnes
2362 + precision: 0
2363 + aggregation: sum
2364 + bounds: [0, null]
2365 + sources:
2366 + - {connector: owid, dataset: co2, code: cumulative_co2, priority: 1}
2367 +- slug: share-global-co2
2368 + name: Share of global CO₂ emissions
2369 + topic: climate
2370 + subtopic: Emissions
2371 + unit: "% of global emissions"
2372 + unit_short: "%"
2373 + format: percent
2374 + precision: 2
2375 + bounds: [0, 100]
2376 + sources:
2377 + - {connector: owid, dataset: co2, code: share_global_co2, priority: 1}
2378 +- slug: methane-emissions
2379 + name: Methane emissions
2380 + topic: climate
2381 + subtopic: Other gases
2382 + unit: million tonnes CO₂-equivalent
2383 + unit_short: Mt CO₂e
2384 + format: tonnes
2385 + precision: 1
2386 + aggregation: sum
2387 + bounds: [0, null]
2388 + sources:
2389 + - {connector: owid, dataset: co2, code: methane, priority: 1}
2390 +- slug: nitrous-oxide-emissions
2391 + name: Nitrous oxide emissions
2392 + topic: climate
2393 + subtopic: Other gases
2394 + unit: million tonnes CO₂-equivalent
2395 + unit_short: Mt CO₂e
2396 + format: tonnes
2397 + precision: 1
2398 + aggregation: sum
2399 + bounds: [0, null]
2400 + sources:
2401 + - {connector: owid, dataset: co2, code: nitrous_oxide, priority: 1}
2402 +- slug: total-ghg-emissions
2403 + name: Total greenhouse gas emissions
2404 + topic: climate
2405 + subtopic: Emissions
2406 + unit: million tonnes CO₂-equivalent
2407 + unit_short: Mt CO₂e
2408 + format: tonnes
2409 + precision: 1
2410 + aggregation: sum
2411 + bounds: [0, null]
2412 + sources:
2413 + - {connector: owid, dataset: co2, code: total_ghg, priority: 1}
2414 +- slug: ghg-per-capita
2415 + name: Greenhouse gas emissions per capita
2416 + topic: climate
2417 + subtopic: Emissions
2418 + unit: tonnes CO₂-equivalent per person
2419 + unit_short: t CO₂e
2420 + format: tonnes
2421 + precision: 2
2422 + higher_is_better: false
2423 + bounds: [0, 200]
2424 + sources:
2425 + - {connector: owid, dataset: co2, code: ghg_per_capita, priority: 1}
2426 +- slug: coal-co2
2427 + name: CO₂ emissions from coal
2428 + topic: climate
2429 + subtopic: By fuel
2430 + unit: million tonnes
2431 + unit_short: Mt
2432 + format: tonnes
2433 + precision: 1
2434 + aggregation: sum
2435 + bounds: [0, null]
2436 + sources:
2437 + - {connector: owid, dataset: co2, code: coal_co2, priority: 1}
2438 +- slug: oil-co2
2439 + name: CO₂ emissions from oil
2440 + topic: climate
2441 + subtopic: By fuel
2442 + unit: million tonnes
2443 + unit_short: Mt
2444 + format: tonnes
2445 + precision: 1
2446 + aggregation: sum
2447 + bounds: [0, null]
2448 + sources:
2449 + - {connector: owid, dataset: co2, code: oil_co2, priority: 1}
2450 +- slug: gas-co2
2451 + name: CO₂ emissions from gas
2452 + topic: climate
2453 + subtopic: By fuel
2454 + unit: million tonnes
2455 + unit_short: Mt
2456 + format: tonnes
2457 + precision: 1
2458 + aggregation: sum
2459 + bounds: [0, null]
2460 + sources:
2461 + - {connector: owid, dataset: co2, code: gas_co2, priority: 1}
2462 +- slug: land-use-change-co2
2463 + name: CO₂ emissions from land-use change
2464 + topic: climate
2465 + subtopic: By fuel
2466 + unit: million tonnes
2467 + unit_short: Mt
2468 + format: tonnes
2469 + precision: 1
2470 + aggregation: sum
2471 + sources:
2472 + - {connector: owid, dataset: co2, code: land_use_change_co2, priority: 1}
2473 +- slug: temperature-change-from-ghg
2474 + name: Contribution to global warming from greenhouse gases
2475 + topic: climate
2476 + subtopic: Temperature
2477 + unit: °C
2478 + unit_short: °C
2479 + format: celsius
2480 + precision: 4
2481 + aggregation: sum
2482 + bounds: [0, 2]
2483 + description: Change in global mean surface temperature caused by the country's cumulative CO₂, methane and N₂O emissions.
2484 + sources:
2485 + - {connector: owid, dataset: co2, code: temperature_change_from_ghg, priority: 1}
2486 +
2487 +# ========================================================= ENVIRONMENT =========================================================
2488 +- slug: forest-area-share
2489 + name: Forest area (% of land area)
2490 + short_name: Forest cover
2491 + topic: environment
2492 + subtopic: Land
2493 + unit: "% of land area"
2494 + unit_short: "%"
2495 + format: percent
2496 + bounds: [0, 100]
2497 + sources:
2498 + - {connector: worldbank, dataset: WDI, code: AG.LND.FRST.ZS, priority: 1}
2499 +- slug: forest-area
2500 + name: Forest area
2501 + topic: environment
2502 + subtopic: Land
2503 + unit: km²
2504 + unit_short: km²
2505 + format: km
2506 + precision: 0
2507 + aggregation: sum
2508 + bounds: [0, null]
2509 + sources:
2510 + - {connector: worldbank, dataset: WDI, code: AG.LND.FRST.K2, priority: 1}
2511 +- slug: pm25-exposure
2512 + name: PM2.5 air pollution, mean annual exposure
2513 + short_name: Air pollution (PM2.5)
2514 + topic: environment
2515 + subtopic: Air
2516 + unit: micrograms per m³
2517 + unit_short: µg/m³
2518 + format: number
2519 + precision: 1
2520 + higher_is_better: false
2521 + featured: true
2522 + bounds: [0, 200]
2523 + sources:
2524 + - {connector: worldbank, dataset: WDI, code: EN.ATM.PM25.MC.M3, priority: 1}
2525 +- slug: protected-areas-share
2526 + name: Terrestrial protected areas (% of total land area)
2527 + topic: environment
2528 + subtopic: Land
2529 + unit: "% of land area"
2530 + unit_short: "%"
2531 + format: percent
2532 + higher_is_better: true
2533 + bounds: [0, 100]
2534 + sources:
2535 + - {connector: worldbank, dataset: WDI, code: ER.LND.PTLD.ZS, priority: 1}
2536 +- slug: agricultural-land-share
2537 + name: Agricultural land (% of land area)
2538 + topic: agriculture
2539 + subtopic: Land
2540 + unit: "% of land area"
2541 + unit_short: "%"
2542 + format: percent
2543 + bounds: [0, 100]
2544 + sources:
2545 + - {connector: worldbank, dataset: WDI, code: AG.LND.AGRI.ZS, priority: 1}
2546 +- slug: arable-land-share
2547 + name: Arable land (% of land area)
2548 + topic: agriculture
2549 + subtopic: Land
2550 + unit: "% of land area"
2551 + unit_short: "%"
2552 + format: percent
2553 + bounds: [0, 100]
2554 + sources:
2555 + - {connector: worldbank, dataset: WDI, code: AG.LND.ARBL.ZS, priority: 1}
2556 +- slug: freshwater-withdrawal-share
2557 + name: Annual freshwater withdrawals (% of internal resources)
2558 + short_name: Water stress
2559 + topic: environment
2560 + subtopic: Water
2561 + unit: "% of internal resources"
2562 + unit_short: "%"
2563 + format: percent
2564 + higher_is_better: false
2565 + bounds: [0, 10000]
2566 + sources:
2567 + - {connector: worldbank, dataset: WDI, code: ER.H2O.FWTL.ZS, priority: 1}
2568 +- slug: renewable-freshwater-per-capita
2569 + name: Renewable internal freshwater resources per capita
2570 + topic: environment
2571 + subtopic: Water
2572 + unit: cubic metres per person
2573 + unit_short: m³
2574 + format: number
2575 + precision: 0
2576 + bounds: [0, null]
2577 + sources:
2578 + - {connector: worldbank, dataset: WDI, code: ER.H2O.INTR.PC, priority: 1}
2579 +
2580 +# ======================================================= INFRASTRUCTURE ========================================================
2581 +- slug: air-passengers
2582 + name: Air transport, passengers carried
2583 + topic: infrastructure
2584 + subtopic: Air
2585 + unit: passengers
2586 + unit_short: passengers
2587 + format: number
2588 + precision: 0
2589 + aggregation: sum
2590 + bounds: [0, null]
2591 + sources:
2592 + - {connector: worldbank, dataset: WDI, code: IS.AIR.PSGR, priority: 1}
2593 +- slug: air-freight
2594 + name: Air transport, freight
2595 + topic: infrastructure
2596 + subtopic: Air
2597 + unit: million tonne-km
2598 + unit_short: Mt-km
2599 + format: number
2600 + precision: 0
2601 + aggregation: sum
2602 + bounds: [0, null]
2603 + sources:
2604 + - {connector: worldbank, dataset: WDI, code: IS.AIR.GOOD.MT.K1, priority: 1}
2605 +- slug: rail-lines
2606 + name: Rail lines (total route-km)
2607 + topic: infrastructure
2608 + subtopic: Rail
2609 + unit: km
2610 + unit_short: km
2611 + format: km
2612 + precision: 0
2613 + aggregation: sum
2614 + bounds: [0, null]
2615 + sources:
2616 + - {connector: worldbank, dataset: WDI, code: IS.RRS.TOTL.KM, priority: 1}
2617 +- slug: rail-passengers
2618 + name: Railways, passengers carried
2619 + topic: infrastructure
2620 + subtopic: Rail
2621 + unit: million passenger-km
2622 + unit_short: M pkm
2623 + format: number
2624 + precision: 0
2625 + aggregation: sum
2626 + bounds: [0, null]
2627 + sources:
2628 + - {connector: worldbank, dataset: WDI, code: IS.RRS.PASG.KM, priority: 1}
2629 +- slug: rail-freight
2630 + name: Railways, goods transported
2631 + topic: infrastructure
2632 + subtopic: Rail
2633 + unit: million tonne-km
2634 + unit_short: Mt-km
2635 + format: number
2636 + precision: 0
2637 + aggregation: sum
2638 + bounds: [0, null]
2639 + sources:
2640 + - {connector: worldbank, dataset: WDI, code: IS.RRS.GOOD.MT.K6, priority: 1}
2641 +- slug: container-port-traffic
2642 + name: Container port traffic
2643 + topic: infrastructure
2644 + subtopic: Shipping
2645 + unit: TEU (20-foot equivalent units)
2646 + unit_short: TEU
2647 + format: number
2648 + precision: 0
2649 + aggregation: sum
2650 + bounds: [0, null]
2651 + sources:
2652 + - {connector: worldbank, dataset: WDI, code: IS.SHP.GOOD.TU, priority: 1}
2653 +- slug: liner-shipping-connectivity
2654 + name: Liner shipping connectivity index
2655 + topic: infrastructure
2656 + subtopic: Shipping
2657 + unit: index (maximum value in 2004 = 100)
2658 + unit_short: index
2659 + format: index
2660 + higher_is_better: true
2661 + sources:
2662 + - {connector: worldbank, dataset: WDI, code: IS.SHP.GCNW.XQ, priority: 1}
2663 +
2664 +# =========================================================== DIGITAL ===========================================================
2665 +- slug: internet-users
2666 + name: Individuals using the Internet (% of population)
2667 + short_name: Internet users
2668 + topic: digital
2669 + subtopic: Adoption
2670 + unit: "% of population"
2671 + unit_short: "%"
2672 + format: percent
2673 + higher_is_better: true
2674 + featured: true
2675 + bounds: [0, 100]
2676 + change_floor: 5
2677 + sources:
2678 + - {connector: worldbank, dataset: WDI, code: IT.NET.USER.ZS, priority: 1}
2679 +- slug: fixed-broadband-subscriptions
2680 + name: Fixed broadband subscriptions (per 100 people)
2681 + short_name: Fixed broadband
2682 + topic: digital
2683 + subtopic: Infrastructure
2684 + unit: per 100 people
2685 + unit_short: /100
2686 + format: number
2687 + precision: 1
2688 + higher_is_better: true
2689 + bounds: [0, 100]
2690 + sources:
2691 + - {connector: worldbank, dataset: WDI, code: IT.NET.BBND.P2, priority: 1}
2692 +- slug: mobile-subscriptions
2693 + name: Mobile cellular subscriptions (per 100 people)
2694 + short_name: Mobile subscriptions
2695 + topic: digital
2696 + subtopic: Infrastructure
2697 + unit: per 100 people
2698 + unit_short: /100
2699 + format: number
2700 + precision: 1
2701 + bounds: [0, 500]
2702 + sources:
2703 + - {connector: worldbank, dataset: WDI, code: IT.CEL.SETS.P2, priority: 1}
2704 +- slug: secure-internet-servers
2705 + name: Secure Internet servers (per 1 million people)
2706 + topic: digital
2707 + subtopic: Infrastructure
2708 + unit: per million people
2709 + unit_short: /M
2710 + format: per_million
2711 + precision: 0
2712 + higher_is_better: true
2713 + bounds: [0, null]
2714 + sources:
2715 + - {connector: worldbank, dataset: WDI, code: IT.NET.SECR.P6, priority: 1}
2716 +- slug: ict-goods-exports-share
2717 + name: ICT goods exports (% of total goods exports)
2718 + topic: digital
2719 + subtopic: Economy
2720 + unit: "% of goods exports"
2721 + unit_short: "%"
2722 + format: percent
2723 + bounds: [0, 100]
2724 + sources:
2725 + - {connector: worldbank, dataset: WDI, code: TX.VAL.ICTG.ZS.UN, priority: 1}
2726 +- slug: ict-service-exports-share
2727 + name: ICT service exports (% of service exports)
2728 + topic: digital
2729 + subtopic: Economy
2730 + unit: "% of service exports"
2731 + unit_short: "%"
2732 + format: percent
2733 + bounds: [0, 100]
2734 + sources:
2735 + - {connector: worldbank, dataset: WDI, code: BX.GSR.CCIS.ZS, priority: 1}
2736 +
2737 +# ========================================================== INNOVATION =========================================================
2738 +- slug: rd-expenditure-pct-gdp
2739 + name: Research and development expenditure (% of GDP)
2740 + short_name: R&D spending
2741 + topic: innovation
2742 + subtopic: Research
2743 + unit: "% of GDP"
2744 + unit_short: "% GDP"
2745 + format: percent
2746 + precision: 2
2747 + higher_is_better: true
2748 + featured: true
2749 + bounds: [0, 10]
2750 + sources:
2751 + - {connector: worldbank, dataset: WDI, code: GB.XPD.RSDV.GD.ZS, priority: 1}
2752 +- slug: researchers-per-million
2753 + name: Researchers in R&D (per million people)
2754 + topic: innovation
2755 + subtopic: Research
2756 + unit: per million people
2757 + unit_short: /M
2758 + format: per_million
2759 + precision: 0
2760 + higher_is_better: true
2761 + bounds: [0, 20000]
2762 + sources:
2763 + - {connector: worldbank, dataset: WDI, code: SP.POP.SCIE.RD.P6, priority: 1}
2764 +- slug: patent-applications-residents
2765 + name: Patent applications, residents
2766 + topic: innovation
2767 + subtopic: Patents
2768 + unit: applications
2769 + unit_short: applications
2770 + format: number
2771 + precision: 0
2772 + aggregation: sum
2773 + bounds: [0, null]
2774 + sources:
2775 + - {connector: worldbank, dataset: WDI, code: IP.PAT.RESD, priority: 1}
2776 +- slug: patent-applications-nonresidents
2777 + name: Patent applications, nonresidents
2778 + topic: innovation
2779 + subtopic: Patents
2780 + unit: applications
2781 + unit_short: applications
2782 + format: number
2783 + precision: 0
2784 + aggregation: sum
2785 + bounds: [0, null]
2786 + sources:
2787 + - {connector: worldbank, dataset: WDI, code: IP.PAT.NRES, priority: 1}
2788 +- slug: scientific-articles
2789 + name: Scientific and technical journal articles
2790 + topic: innovation
2791 + subtopic: Research
2792 + unit: articles
2793 + unit_short: articles
2794 + format: number
2795 + precision: 0
2796 + aggregation: sum
2797 + bounds: [0, null]
2798 + sources:
2799 + - {connector: worldbank, dataset: WDI, code: IP.JRN.ARTC.SC, priority: 1}
2800 +- slug: trademark-applications
2801 + name: Trademark applications, total
2802 + topic: innovation
2803 + subtopic: Patents
2804 + unit: applications
2805 + unit_short: applications
2806 + format: number
2807 + precision: 0
2808 + aggregation: sum
2809 + bounds: [0, null]
2810 + sources:
2811 + - {connector: worldbank, dataset: WDI, code: IP.TMK.TOTL, priority: 1}
2812 +
2813 +# ========================================================== AGRICULTURE ========================================================
2814 +- slug: arable-land-per-capita
2815 + name: Arable land (hectares per person)
2816 + topic: agriculture
2817 + subtopic: Land
2818 + unit: hectares per person
2819 + unit_short: ha
2820 + format: ha
2821 + precision: 2
2822 + bounds: [0, 10]
2823 + sources:
2824 + - {connector: worldbank, dataset: WDI, code: AG.LND.ARBL.HA.PC, priority: 1}
2825 +- slug: cereal-yield
2826 + name: Cereal yield
2827 + topic: agriculture
2828 + subtopic: Production
2829 + unit: kg per hectare
2830 + unit_short: kg/ha
2831 + format: number
2832 + precision: 0
2833 + higher_is_better: true
2834 + bounds: [0, 50000]
2835 + sources:
2836 + - {connector: worldbank, dataset: WDI, code: AG.YLD.CREL.KG, priority: 1}
2837 +- slug: food-production-index
2838 + name: Food production index
2839 + topic: agriculture
2840 + subtopic: Production
2841 + unit: index (2014–2016 = 100)
2842 + unit_short: index
2843 + format: index
2844 + ranking_eligible: false
2845 + sources:
2846 + - {connector: worldbank, dataset: WDI, code: AG.PRD.FOOD.XD, priority: 1}
2847 +- slug: crop-production-index
2848 + name: Crop production index
2849 + topic: agriculture
2850 + subtopic: Production
2851 + unit: index (2014–2016 = 100)
2852 + unit_short: index
2853 + format: index
2854 + ranking_eligible: false
2855 + sources:
2856 + - {connector: worldbank, dataset: WDI, code: AG.PRD.CROP.XD, priority: 1}
2857 +- slug: livestock-production-index
2858 + name: Livestock production index
2859 + topic: agriculture
2860 + subtopic: Production
2861 + unit: index (2014–2016 = 100)
2862 + unit_short: index
2863 + format: index
2864 + ranking_eligible: false
2865 + sources:
2866 + - {connector: worldbank, dataset: WDI, code: AG.PRD.LVSK.XD, priority: 1}
2867 +- slug: fertilizer-consumption
2868 + name: Fertilizer consumption
2869 + topic: agriculture
2870 + subtopic: Inputs
2871 + unit: kg per hectare of arable land
2872 + unit_short: kg/ha
2873 + format: number
2874 + precision: 0
2875 + bounds: [0, 50000]
2876 + sources:
2877 + - {connector: worldbank, dataset: WDI, code: AG.CON.FERT.ZS, priority: 1}
2878 +- slug: oil-rents-pct-gdp
2879 + name: Oil rents (% of GDP)
2880 + topic: agriculture
2881 + subtopic: Resources
2882 + unit: "% of GDP"
2883 + unit_short: "% GDP"
2884 + format: percent
2885 + bounds: [0, 100]
2886 + sources:
2887 + - {connector: worldbank, dataset: WDI, code: NY.GDP.PETR.RT.ZS, priority: 1}
2888 +- slug: mineral-rents-pct-gdp
2889 + name: Mineral rents (% of GDP)
2890 + topic: agriculture
2891 + subtopic: Resources
2892 + unit: "% of GDP"
2893 + unit_short: "% GDP"
2894 + format: percent
2895 + bounds: [0, 100]
2896 + sources:
2897 + - {connector: worldbank, dataset: WDI, code: NY.GDP.MINR.RT.ZS, priority: 1}
2898 +- slug: forest-rents-pct-gdp
2899 + name: Forest rents (% of GDP)
2900 + topic: agriculture
2901 + subtopic: Resources
2902 + unit: "% of GDP"
2903 + unit_short: "% GDP"
2904 + format: percent
2905 + bounds: [0, 100]
2906 + sources:
2907 + - {connector: worldbank, dataset: WDI, code: NY.GDP.FRST.RT.ZS, priority: 1}
2908 +- slug: food-insecurity-prevalence
2909 + name: Prevalence of moderate or severe food insecurity
2910 + topic: agriculture
2911 + subtopic: Food security
2912 + unit: "% of population"
2913 + unit_short: "%"
2914 + format: percent
2915 + higher_is_better: false
2916 + bounds: [0, 100]
2917 + sources:
2918 + - {connector: worldbank, dataset: WDI, code: SN.ITK.MSFI.ZS, priority: 1}
2919 +- slug: undernourishment-prevalence
2920 + name: Prevalence of undernourishment
2921 + topic: agriculture
2922 + subtopic: Food security
2923 + unit: "% of population"
2924 + unit_short: "%"
2925 + format: percent
2926 + higher_is_better: false
2927 + bounds: [0, 100]
2928 + sources:
2929 + - {connector: worldbank, dataset: WDI, code: SN.ITK.DEFC.ZS, priority: 1}
2930 +
2931 +# =========================================================== TOURISM ===========================================================
2932 +- slug: tourist-arrivals
2933 + name: International tourism, number of arrivals
2934 + short_name: Tourist arrivals
2935 + topic: tourism
2936 + subtopic: Flows
2937 + unit: arrivals
2938 + unit_short: arrivals
2939 + format: number
2940 + precision: 0
2941 + aggregation: sum
2942 + featured: true
2943 + bounds: [0, null]
2944 + sources:
2945 + - {connector: worldbank, dataset: WDI, code: ST.INT.ARVL, priority: 1}
2946 +- slug: tourist-departures
2947 + name: International tourism, number of departures
2948 + topic: tourism
2949 + subtopic: Flows
2950 + unit: departures
2951 + unit_short: departures
2952 + format: number
2953 + precision: 0
2954 + aggregation: sum
2955 + bounds: [0, null]
2956 + sources:
2957 + - {connector: worldbank, dataset: WDI, code: ST.INT.DPRT, priority: 1}
2958 +- slug: tourism-receipts
2959 + name: International tourism, receipts (current US$)
2960 + short_name: Tourism receipts
2961 + topic: tourism
2962 + subtopic: Money
2963 + unit: current US$
2964 + unit_short: US$
2965 + format: currency
2966 + precision: 0
2967 + aggregation: sum
2968 + bounds: [0, null]
2969 + sources:
2970 + - {connector: worldbank, dataset: WDI, code: ST.INT.RCPT.CD, priority: 1}
2971 +- slug: tourism-receipts-pct-exports
2972 + name: International tourism receipts (% of total exports)
2973 + topic: tourism
2974 + subtopic: Money
2975 + unit: "% of total exports"
2976 + unit_short: "%"
2977 + format: percent
2978 + bounds: [0, 100]
2979 + sources:
2980 + - {connector: worldbank, dataset: WDI, code: ST.INT.RCPT.XP.ZS, priority: 1}
2981 +- slug: tourism-expenditures
2982 + name: International tourism, expenditures (current US$)
2983 + topic: tourism
2984 + subtopic: Money
2985 + unit: current US$
2986 + unit_short: US$
2987 + format: currency
2988 + precision: 0
2989 + aggregation: sum
2990 + bounds: [0, null]
2991 + sources:
2992 + - {connector: worldbank, dataset: WDI, code: ST.INT.XPND.CD, priority: 1}
2993 +
2994 +# =========================================================== SECURITY ==========================================================
2995 +- slug: homicide-rate
2996 + name: Intentional homicides
2997 + short_name: Homicide rate
2998 + topic: security
2999 + subtopic: Crime
3000 + unit: per 100,000 people
3001 + unit_short: /100k
3002 + format: per_100k
3003 + precision: 1
3004 + higher_is_better: false
3005 + featured: true
3006 + bounds: [0, 150]
3007 + sources:
3008 + - {connector: worldbank, dataset: WDI, code: VC.IHR.PSRC.P5, priority: 1}
3009 +- slug: armed-forces-personnel
3010 + name: Armed forces personnel, total
3011 + topic: security
3012 + subtopic: Defence
3013 + unit: people
3014 + unit_short: people
3015 + format: number
3016 + precision: 0
3017 + aggregation: sum
3018 + bounds: [0, null]
3019 + sources:
3020 + - {connector: worldbank, dataset: WDI, code: MS.MIL.TOTL.P1, priority: 1}
3021 +- slug: armed-forces-personnel-share
3022 + name: Armed forces personnel (% of total labour force)
3023 + topic: security
3024 + subtopic: Defence
3025 + unit: "% of labour force"
3026 + unit_short: "%"
3027 + format: percent
3028 + bounds: [0, 50]
3029 + sources:
3030 + - {connector: worldbank, dataset: WDI, code: MS.MIL.TOTL.TF.ZS, priority: 1}
3031 +- slug: battle-related-deaths
3032 + name: Battle-related deaths
3033 + topic: security
3034 + subtopic: Conflict
3035 + unit: deaths
3036 + unit_short: deaths
3037 + format: number
3038 + precision: 0
3039 + aggregation: sum
3040 + higher_is_better: false
3041 + bounds: [0, null]
3042 + sources:
3043 + - {connector: worldbank, dataset: WDI, code: VC.BTL.DETH, priority: 1}
3044 +
3045 +# ======================================================= QUALITY OF LIFE =======================================================
3046 +- slug: human-development-index
3047 + name: Human Development Index
3048 + short_name: HDI
3049 + topic: quality-of-life
3050 + subtopic: Composite
3051 + unit: index (0–1)
3052 + unit_short: HDI
3053 + format: number
3054 + precision: 3
3055 + higher_is_better: true
3056 + featured: true
3057 + bounds: [0, 1]
3058 + description: UNDP composite of life expectancy, education and income per capita.
3059 + sources:
3060 + - {connector: owid, dataset: grapher, code: human-development-index, priority: 1}
3061 +- slug: life-satisfaction
3062 + name: Self-reported life satisfaction (Cantril ladder)
3063 + short_name: Life satisfaction
3064 + topic: quality-of-life
3065 + subtopic: Wellbeing
3066 + unit: score (0–10)
3067 + unit_short: /10
3068 + format: number
3069 + precision: 2
3070 + higher_is_better: true
3071 + bounds: [0, 10]
3072 + description: Average answer to the Cantril ladder question in the Gallup World Poll, as compiled by the World Happiness Report.
3073 + sources:
3074 + - {connector: owid, dataset: grapher, code: happiness-cantril-ladder, priority: 1}
3075 +- slug: women-in-parliament-share
3076 + name: Proportion of seats held by women in national parliaments
3077 + short_name: Women in parliament
3078 + topic: quality-of-life
3079 + subtopic: Gender
3080 + unit: "% of seats"
3081 + unit_short: "%"
3082 + format: percent
3083 + higher_is_better: true
3084 + bounds: [0, 100]
3085 + sources:
3086 + - {connector: worldbank, dataset: WDI, code: SG.GEN.PARL.ZS, priority: 1}
added registry/topics.yaml +176 −0
@@ -0,0 +1,176 @@
1 +# Topics shown on country pages and in navigation. `headline` = indicators on the country overview (in order).
2 +# `indicators` = ordered list for the topic page (grouped by subtopic in the UI using the indicator's `subtopic`).
3 +headline:
4 + - population
5 + - gdp
6 + - gdp-per-capita
7 + - gdp-growth
8 + - inflation
9 + - unemployment-rate
10 + - life-expectancy
11 + - median-age
12 + - government-debt-pct-gdp
13 + - co2-per-capita
14 + - renewable-electricity-share
15 + - internet-users
16 +
17 +topics:
18 +- id: economy
19 + name: Economy
20 + short: Economy
21 + order: 1
22 + blurb: Output, growth, prices, productivity and external balance.
23 + indicators: [gdp, gdp-ppp, gdp-per-capita, gdp-per-capita-ppp, gdp-growth, gdp-per-capita-growth, gdp-constant,
24 + inflation, inflation-gdp-deflator, policy-rate, lending-rate, exchange-rate, real-effective-exchange-rate,
25 + current-account-balance-pct-gdp, gross-capital-formation-pct-gdp, household-consumption-pct-gdp,
26 + fdi-inflows-pct-gdp, broad-money-pct-gdp, industrial-production-index, gdp-per-hour-worked,
27 + agriculture-value-added-pct-gdp, industry-value-added-pct-gdp, manufacturing-value-added-pct-gdp, services-value-added-pct-gdp,
28 + gross-savings-pct-gdp, natural-resources-rents-pct-gdp, remittances-received-pct-gdp]
29 +- id: government
30 + name: Government & public finance
31 + short: Government
32 + order: 2
33 + blurb: Public debt, deficits, revenue, spending and taxation.
34 + indicators: [government-debt-pct-gdp, general-government-gross-debt-pct-gdp, fiscal-balance-pct-gdp, government-revenue-pct-gdp,
35 + government-expenditure-pct-gdp, tax-revenue-pct-gdp, social-expenditure-pct-gdp, military-expenditure-pct-gdp,
36 + military-expenditure, health-expenditure-pct-gdp, education-expenditure-pct-gdp, interest-payments-pct-revenue,
37 + external-debt-pct-gni, government-effectiveness, control-of-corruption, rule-of-law]
38 +- id: population
39 + name: Population & demographics
40 + short: Population
41 + order: 3
42 + blurb: Size, growth, ages, births, deaths, urbanisation and migration.
43 + indicators: [population, population-growth, population-density, urban-population-share, urban-population, rural-population,
44 + fertility-rate, birth-rate, death-rate, median-age, population-0-14-share, population-15-64-share, population-65-plus-share,
45 + dependency-ratio, old-age-dependency-ratio, net-migration, international-migrant-stock-share, refugee-population,
46 + life-expectancy, life-expectancy-female, life-expectancy-male, adolescent-fertility-rate, population-female-share]
47 +- id: labor
48 + name: Employment & wages
49 + short: Labor
50 + order: 4
51 + blurb: Unemployment, participation, employment, youth, wages and hours.
52 + indicators: [unemployment-rate, youth-unemployment-rate, labor-force-participation-rate, labor-force-participation-female,
53 + employment-to-population-ratio, employment-rate, labor-force, average-annual-wages, hours-worked, minimum-wage-relative,
54 + self-employed-share, vulnerable-employment-share, employment-agriculture-share, employment-industry-share, employment-services-share,
55 + gdp-per-person-employed, gdp-per-hour-worked, part-time-employment-share, long-term-unemployment-share]
56 +- id: income
57 + name: Income & inequality
58 + short: Income
59 + order: 5
60 + blurb: Living standards, poverty and distribution.
61 + indicators: [gni-per-capita, gni-per-capita-ppp, gini-index, income-share-top-10, income-share-bottom-20, poverty-headcount-215,
62 + poverty-headcount-national, median-household-income, at-risk-of-poverty-rate, palma-ratio, household-consumption-per-capita]
63 +- id: housing
64 + name: Housing
65 + short: Housing
66 + order: 6
67 + blurb: Prices, rents, affordability, mortgages and construction.
68 + indicators: [real-house-price-index, nominal-house-price-index, house-price-growth, rent-price-index, price-to-income-ratio, price-to-rent-ratio,
69 + mortgage-rate, housing-starts, building-permits, homeownership-rate, housing-cost-overburden-rate, house-price-to-income-growth]
70 +- id: health
71 + name: Health
72 + short: Health
73 + order: 7
74 + blurb: Longevity, mortality, health system capacity and risk factors.
75 + indicators: [life-expectancy, healthy-life-expectancy, infant-mortality-rate, under-5-mortality-rate, maternal-mortality-ratio,
76 + health-expenditure-pct-gdp, health-expenditure-per-capita, out-of-pocket-health-expenditure-share, physicians-per-1000, nurses-per-1000,
77 + hospital-beds-per-1000, ncd-mortality-30-70, suicide-rate, smoking-prevalence, obesity-prevalence, alcohol-consumption,
78 + measles-immunization, dtp3-immunization, hiv-prevalence, tuberculosis-incidence, safely-managed-water, safely-managed-sanitation,
79 + road-traffic-deaths]
80 +- id: education
81 + name: Education
82 + short: Education
83 + order: 8
84 + blurb: Literacy, enrolment, attainment and spending.
85 + indicators: [literacy-rate-adult, literacy-rate-youth, primary-enrollment, secondary-enrollment, tertiary-enrollment, primary-completion-rate,
86 + tertiary-attainment-25-64, tertiary-attainment-25-34, upper-secondary-attainment, education-expenditure-pct-gdp,
87 + education-expenditure-pct-government, expected-years-of-schooling, mean-years-of-schooling, pupil-teacher-ratio-primary,
88 + out-of-school-children, learning-poverty]
89 +- id: trade
90 + name: Trade
91 + short: Trade
92 + order: 9
93 + blurb: Exports, imports, balances, openness and composition.
94 + indicators: [exports-goods-services, imports-goods-services, trade-balance, exports-pct-gdp, imports-pct-gdp, trade-pct-gdp,
95 + current-account-balance-pct-gdp, current-account-balance, merchandise-exports, merchandise-imports, high-tech-exports-share,
96 + fuel-exports-share, food-exports-share, manufactures-exports-share, ores-metals-exports-share, services-exports-pct-gdp,
97 + terms-of-trade-index, tariff-rate-applied-mean, fdi-inflows-pct-gdp, fdi-outflows-pct-gdp, logistics-performance-index]
98 +- id: energy
99 + name: Energy
100 + short: Energy
101 + order: 10
102 + blurb: Generation, consumption, mix, dependence and intensity.
103 + indicators: [electricity-generation, electricity-consumption-per-capita, primary-energy-consumption, energy-use-per-capita,
104 + renewable-electricity-share, fossil-electricity-share, low-carbon-electricity-share, hydro-electricity-share,
105 + nuclear-electricity-share, solar-electricity-share, wind-electricity-share, coal-electricity-share, gas-electricity-share,
106 + renewable-energy-consumption-share, energy-imports-share, energy-intensity, net-electricity-imports-share, access-to-electricity,
107 + solar-generation, wind-generation, hydro-generation, nuclear-generation, carbon-intensity-electricity, oil-production, gas-production, coal-production]
108 +- id: climate
109 + name: Climate
110 + short: Climate
111 + order: 11
112 + blurb: Greenhouse gases, intensity and temperature contribution.
113 + indicators: [co2-emissions, co2-per-capita, co2-per-gdp, consumption-co2-per-capita, cumulative-co2, share-global-co2, methane-emissions,
114 + nitrous-oxide-emissions, total-ghg-emissions, ghg-per-capita, coal-co2, oil-co2, gas-co2, land-use-change-co2,
115 + temperature-change-from-ghg, carbon-intensity-electricity]
116 +- id: environment
117 + name: Environment
118 + short: Environment
119 + order: 12
120 + blurb: Forests, air quality, land, water and protected areas.
121 + indicators: [forest-area-share, forest-area, pm25-exposure, protected-areas-share, agricultural-land-share, arable-land-share,
122 + freshwater-withdrawal-share, renewable-freshwater-per-capita, threatened-species, deforestation-rate, environmental-performance,
123 + safely-managed-water, safely-managed-sanitation]
124 +- id: infrastructure
125 + name: Infrastructure & transportation
126 + short: Infrastructure
127 + order: 13
128 + blurb: Transport networks, passengers, freight and access.
129 + indicators: [air-passengers, air-freight, rail-lines, rail-passengers, rail-freight, container-port-traffic, logistics-performance-index,
130 + access-to-electricity, road-traffic-deaths, vehicles-per-1000, paved-roads-share, liner-shipping-connectivity]
131 +- id: digital
132 + name: Digital economy & Internet
133 + short: Digital
134 + order: 14
135 + blurb: Connectivity, adoption and digital infrastructure.
136 + indicators: [internet-users, fixed-broadband-subscriptions, mobile-subscriptions, mobile-broadband-subscriptions, secure-internet-servers,
137 + ict-goods-exports-share, ict-service-exports-share, households-with-internet, fixed-broadband-speed, mobile-broadband-speed]
138 +- id: innovation
139 + name: Innovation, research & technology
140 + short: Innovation
141 + order: 15
142 + blurb: R&D, patents, publications, researchers and high-tech.
143 + indicators: [rd-expenditure-pct-gdp, researchers-per-million, patent-applications-residents, patent-applications-nonresidents,
144 + scientific-articles, high-tech-exports-share, high-tech-exports, ict-service-exports-share, trademark-applications,
145 + rd-expenditure, business-rd-share]
146 +- id: agriculture
147 + name: Agriculture & natural resources
148 + short: Agriculture
149 + order: 16
150 + blurb: Land, production, employment and resource rents.
151 + indicators: [agriculture-value-added-pct-gdp, agricultural-land-share, arable-land-share, arable-land-per-capita, cereal-yield,
152 + food-production-index, crop-production-index, livestock-production-index, employment-agriculture-share, fertilizer-consumption,
153 + natural-resources-rents-pct-gdp, oil-rents-pct-gdp, mineral-rents-pct-gdp, forest-rents-pct-gdp, agricultural-exports-share,
154 + oil-production, gas-production, coal-production, food-insecurity-prevalence, undernourishment-prevalence]
155 +- id: tourism
156 + name: Tourism
157 + short: Tourism
158 + order: 17
159 + blurb: Arrivals, departures and tourism receipts.
160 + indicators: [tourist-arrivals, tourist-departures, tourism-receipts, tourism-receipts-pct-exports, tourism-expenditures, tourism-receipts-per-arrival]
161 +- id: security
162 + name: Security & governance
163 + short: Security
164 + order: 18
165 + blurb: Homicide, military spending, refugees, displacement and institutions.
166 + indicators: [homicide-rate, military-expenditure-pct-gdp, military-expenditure, armed-forces-personnel, armed-forces-personnel-share,
167 + refugee-population, refugees-by-origin, internally-displaced-persons, battle-related-deaths, political-stability,
168 + rule-of-law, control-of-corruption, voice-and-accountability, government-effectiveness, regulatory-quality]
169 +- id: quality-of-life
170 + name: Quality of life
171 + short: Quality of life
172 + order: 19
173 + blurb: Human development, happiness, safety, access and environment.
174 + indicators: [human-development-index, life-satisfaction, life-expectancy, healthy-life-expectancy, gini-index, pm25-exposure,
175 + homicide-rate, safely-managed-water, access-to-electricity, internet-users, expected-years-of-schooling, unemployment-rate,
176 + housing-cost-overburden-rate, gender-inequality-index, women-in-parliament-share]
added scripts/build_country_registry.py +191 −0
@@ -0,0 +1,191 @@
1 +#!/usr/bin/env python3
2 +"""Build registry/countries.yaml from the World Bank country list + mledoze/countries.
3 +
4 +World Bank : region, income group, capital, lat/long, WB aggregates (excluded here, listed in groups.yaml).
5 +mledoze : ISO numeric, official name, subregion, currency, area, UN membership, flag, borders, languages, demonym.
6 +
7 +Hand overrides survive regeneration: edit registry/countries.overrides.yaml (keyed by iso3).
8 +Usage: python3 scripts/build_country_registry.py [--offline] (offline = reuse cached /tmp files)
9 +"""
10 +from __future__ import annotations
11 +
12 +import json
13 +import re
14 +import sys
15 +import unicodedata
16 +import urllib.request
17 +from pathlib import Path
18 +
19 +import yaml
20 +
21 +ROOT = Path(__file__).resolve().parents[1]
22 +OUT = ROOT / "registry" / "countries.yaml"
23 +OVERRIDES = ROOT / "registry" / "countries.overrides.yaml"
24 +CACHE = Path("/tmp/countryatlas-registry")
25 +CACHE.mkdir(parents=True, exist_ok=True)
26 +
27 +WB_URL = "https://api.worldbank.org/v2/country?format=json&per_page=400"
28 +MLEDOZE_URL = "https://raw.githubusercontent.com/mledoze/countries/master/countries.json"
29 +
30 +CONTINENT_BY_REGION = {
31 + "Africa": "Africa",
32 + "Americas": "Americas",
33 + "Asia": "Asia",
34 + "Europe": "Europe",
35 + "Oceania": "Oceania",
36 + "Antarctic": "Antarctica",
37 +}
38 +
39 +# Short display names preferred over the WB/mledoze defaults
40 +SHORT_NAME_OVERRIDES = {
41 + "USA": "United States",
42 + "GBR": "United Kingdom",
43 + "RUS": "Russia",
44 + "KOR": "South Korea",
45 + "PRK": "North Korea",
46 + "IRN": "Iran",
47 + "SYR": "Syria",
48 + "VEN": "Venezuela",
49 + "BOL": "Bolivia",
50 + "TZA": "Tanzania",
51 + "LAO": "Laos",
52 + "VNM": "Vietnam",
53 + "EGY": "Egypt",
54 + "YEM": "Yemen",
55 + "GMB": "Gambia",
56 + "BHS": "Bahamas",
57 + "COD": "DR Congo",
58 + "COG": "Republic of the Congo",
59 + "CIV": "Côte d'Ivoire",
60 + "CZE": "Czechia",
61 + "SVK": "Slovakia",
62 + "MKD": "North Macedonia",
63 + "MDA": "Moldova",
64 + "KGZ": "Kyrgyzstan",
65 + "BRN": "Brunei",
66 + "FSM": "Micronesia",
67 + "STP": "São Tomé and Príncipe",
68 + "TUR": "Türkiye",
69 + "HKG": "Hong Kong",
70 + "MAC": "Macao",
71 + "PSE": "Palestine",
72 + "TWN": "Taiwan",
73 + "CPV": "Cabo Verde",
74 + "SWZ": "Eswatini",
75 + "TLS": "Timor-Leste",
76 + "VIR": "U.S. Virgin Islands",
77 + "VGB": "British Virgin Islands",
78 + "SXM": "Sint Maarten",
79 + "MAF": "Saint Martin",
80 + "CUW": "Curaçao",
81 + "XKX": "Kosovo",
82 +}
83 +
84 +
85 +def fetch(url: str, name: str, offline: bool) -> bytes:
86 + p = CACHE / name
87 + if offline and p.exists():
88 + return p.read_bytes()
89 + req = urllib.request.Request(url, headers={"User-Agent": "CountryAtlas registry builder (contact@countryatlas.co)"})
90 + with urllib.request.urlopen(req, timeout=60) as r:
91 + data = r.read()
92 + p.write_bytes(data)
93 + return data
94 +
95 +
96 +def slugify(name: str) -> str:
97 + s = unicodedata.normalize("NFKD", name).encode("ascii", "ignore").decode()
98 + s = s.lower().replace("&", "and").replace("'", "")
99 + s = re.sub(r"[^a-z0-9]+", "-", s).strip("-")
100 + return s
101 +
102 +
103 +def main() -> None:
104 + offline = "--offline" in sys.argv
105 + wb = json.loads(fetch(WB_URL, "wb-countries.json", offline))[1]
106 + ml = json.loads(fetch(MLEDOZE_URL, "mledoze.json", offline))
107 + ml_by3 = {c["cca3"]: c for c in ml}
108 + overrides = yaml.safe_load(OVERRIDES.read_text()) if OVERRIDES.exists() else {}
109 + overrides = overrides or {}
110 +
111 + countries: list[dict] = []
112 + seen = set()
113 + for c in wb:
114 + if c["region"]["id"] == "NA" or not c["region"]["id"]:
115 + continue # aggregate
116 + iso3 = c["id"]
117 + m = ml_by3.get(iso3)
118 + if iso3 == "XKX": # Kosovo: mledoze uses UNK
119 + m = ml_by3.get("UNK")
120 + if iso3 == "CHI": # Channel Islands (WB pseudo-country) — keep as territory using Jersey/Guernsey info
121 + m = None
122 + name = SHORT_NAME_OVERRIDES.get(iso3) or (m["name"]["common"] if m else c["name"])
123 + cur_code, cur_name = None, None
124 + if m and m.get("currencies"):
125 + cur_code = sorted(m["currencies"].keys())[0]
126 + cur_name = m["currencies"][cur_code].get("name")
127 + region_ml = m["region"] if m else None
128 + entry = {
129 + "id": iso3,
130 + "iso2": c["iso2Code"],
131 + "iso3": iso3,
132 + "iso_numeric": (m or {}).get("ccn3") or None,
133 + "slug": slugify(name),
134 + "short_name": name,
135 + "official_name": (m["name"]["official"] if m else c["name"]),
136 + "capital": (m["capital"][0] if m and m.get("capital") else c.get("capitalCity") or None),
137 + "continent": CONTINENT_BY_REGION.get(region_ml or "", None),
138 + "region_wb": c["region"]["id"],
139 + "region_wb_name": c["region"]["value"].strip(),
140 + "subregion": (m or {}).get("subregion") or None,
141 + "income_group": c["incomeLevel"]["id"] if c["incomeLevel"]["id"] not in ("", "INX") else None,
142 + "income_group_name": c["incomeLevel"]["value"] if c["incomeLevel"]["id"] not in ("", "INX") else None,
143 + "currency_code": cur_code,
144 + "currency_name": cur_name,
145 + "area_km2": (m or {}).get("area"),
146 + "latitude": float(c["latitude"]) if c.get("latitude") else ((m or {}).get("latlng") or [None, None])[0],
147 + "longitude": float(c["longitude"]) if c.get("longitude") else ((m or {}).get("latlng") or [None, None])[1],
148 + "flag_emoji": (m or {}).get("flag") or "".join(chr(0x1F1E6 + ord(ch) - 65) for ch in c["iso2Code"] if ch.isalpha()),
149 + "un_member": bool((m or {}).get("unMember", False)),
150 + "independent": bool((m or {}).get("independent", False)),
151 + "landlocked": bool((m or {}).get("landlocked", False)),
152 + "borders": (m or {}).get("borders") or [],
153 + "languages": sorted(((m or {}).get("languages") or {}).values()),
154 + "demonym": (((m or {}).get("demonyms") or {}).get("eng") or {}).get("m") or None,
155 + "status": "country" if (m and m.get("independent")) else "territory",
156 + "kind": "country",
157 + }
158 + # WB lists some territories with income levels; status from independence
159 + entry.update(overrides.get(iso3, {}))
160 + if entry["slug"] in seen:
161 + raise SystemExit(f"duplicate slug {entry['slug']} ({iso3})")
162 + seen.add(entry["slug"])
163 + countries.append(entry)
164 +
165 + # Taiwan is not in the WB list — add from mledoze so the registry is complete (data will be sparse).
166 + if "TWN" not in {c["id"] for c in countries} and "TWN" in ml_by3:
167 + m = ml_by3["TWN"]
168 + countries.append({
169 + "id": "TWN", "iso2": "TW", "iso3": "TWN", "iso_numeric": m.get("ccn3"), "slug": "taiwan",
170 + "short_name": "Taiwan", "official_name": m["name"]["official"], "capital": m["capital"][0],
171 + "continent": "Asia", "region_wb": "EAS", "region_wb_name": "East Asia & Pacific", "subregion": m.get("subregion"),
172 + "income_group": "HIC", "income_group_name": "High income", "currency_code": "TWD", "currency_name": "New Taiwan dollar",
173 + "area_km2": m.get("area"), "latitude": m["latlng"][0], "longitude": m["latlng"][1], "flag_emoji": m.get("flag"),
174 + "un_member": False, "independent": False, "landlocked": False, "borders": [], "languages": sorted(m["languages"].values()),
175 + "demonym": "Taiwanese", "status": "territory", "kind": "country",
176 + **overrides.get("TWN", {}),
177 + })
178 +
179 + countries.sort(key=lambda x: x["short_name"])
180 + header = (
181 + "# Canonical CountryAtlas country registry — GENERATED by scripts/build_country_registry.py\n"
182 + "# Sources: World Bank country API (region, income, capital, coordinates) + mledoze/countries (ISO numeric, official name,\n"
183 + "# subregion, currency, area, UN membership, flag, borders, languages). Edit registry/countries.overrides.yaml, not this file.\n"
184 + )
185 + OUT.write_text(header + yaml.safe_dump({"countries": countries}, allow_unicode=True, sort_keys=False, width=120))
186 + n_country = sum(1 for c in countries if c["status"] == "country")
187 + print(f"wrote {OUT} — {len(countries)} entries ({n_country} independent countries, {len(countries)-n_country} territories)")
188 +
189 +
190 +if __name__ == "__main__":
191 + main()
added src/countryatlas/__init__.py +0 −0
added src/countryatlas/api/__init__.py +0 −0
added src/countryatlas/config.py +59 −0
@@ -0,0 +1,59 @@
1 +"""Runtime settings (environment-driven). Data lives OUTSIDE the repo by default (~/countryatlas-data)."""
2 +from __future__ import annotations
3 +
4 +import os
5 +from pathlib import Path
6 +
7 +from pydantic import BaseModel
8 +
9 +ROOT = Path(__file__).resolve().parents[2] # repo root
10 +
11 +
12 +class Settings(BaseModel):
13 + data_dir: Path = Path(os.environ.get("CA_DATA_DIR", str(Path.home() / "countryatlas-data"))).expanduser()
14 + registry_dir: Path = Path(os.environ.get("CA_REGISTRY_DIR", str(ROOT / "registry")))
15 + api_host: str = os.environ.get("CA_API_HOST", "127.0.0.1")
16 + api_port: int = int(os.environ.get("CA_API_PORT", "8291"))
17 + admin_token: str | None = os.environ.get("CA_ADMIN_TOKEN")
18 + fred_api_key: str | None = os.environ.get("FRED_API_KEY")
19 + site_url: str = os.environ.get("CA_SITE_URL", "https://www.countryatlas.co")
20 + timezone: str = os.environ.get("CA_TZ", "America/Toronto")
21 + refresh_hour: int = int(os.environ.get("CA_REFRESH_HOUR", "3"))
22 + refresh_minute: int = int(os.environ.get("CA_REFRESH_MINUTE", "15"))
23 + keep_snapshots: int = int(os.environ.get("CA_KEEP_SNAPSHOTS", "7"))
24 + http_concurrency: int = int(os.environ.get("CA_HTTP_CONCURRENCY", "6"))
25 +
26 + @property
27 + def raw_dir(self) -> Path:
28 + return self.data_dir / "raw"
29 +
30 + @property
31 + def staging_dir(self) -> Path:
32 + return self.data_dir / "staging"
33 +
34 + @property
35 + def build_dir(self) -> Path:
36 + return self.data_dir / "build"
37 +
38 + @property
39 + def snapshots_dir(self) -> Path:
40 + return self.data_dir / "snapshots"
41 +
42 + @property
43 + def exports_dir(self) -> Path:
44 + return self.data_dir / "exports"
45 +
46 + @property
47 + def logs_dir(self) -> Path:
48 + return self.data_dir / "logs"
49 +
50 + @property
51 + def db_path(self) -> Path:
52 + return self.data_dir / "atlas.duckdb"
53 +
54 + def ensure_dirs(self) -> None:
55 + for d in (self.raw_dir, self.staging_dir, self.build_dir, self.snapshots_dir, self.exports_dir, self.logs_dir):
56 + d.mkdir(parents=True, exist_ok=True)
57 +
58 +
59 +settings = Settings()
added src/countryatlas/connectors/__init__.py +0 −0
added src/countryatlas/connectors/base.py +203 −0
@@ -0,0 +1,203 @@
1 +"""Connector base class: HTTP with retries/backoff/rate limiting, raw storage, and the normalize contract.
2 +
3 +Every connector lives in `countryatlas/connectors/<id>.py`, subclasses `Connector`, sets `id`, and is registered in
4 +`countryatlas/connectors/__init__.py::CONNECTORS`. See docs/ARCHITECTURE.md §5.
5 +"""
6 +from __future__ import annotations
7 +
8 +import gzip
9 +import hashlib
10 +import json
11 +import threading
12 +import time
13 +from abc import ABC, abstractmethod
14 +from datetime import datetime, timezone
15 +from pathlib import Path
16 +from typing import Any, ClassVar
17 +
18 +import httpx
19 +from tenacity import retry, retry_if_exception_type, stop_after_attempt, wait_exponential_jitter
20 +
21 +from countryatlas.config import settings
22 +from countryatlas.models import (
23 + DatasetDescriptor,
24 + IndicatorSourceSpec,
25 + NormalizedObservation,
26 + RawPayload,
27 + ValidationIssue,
28 + ValidationReport,
29 +)
30 +
31 +USER_AGENT = "CountryAtlas/0.1 (+https://www.countryatlas.co; data@countryatlas.co)"
32 +
33 +
34 +class RateLimiter:
35 + """Simple token bucket: `rate` requests per `per` seconds, shared per connector."""
36 +
37 + def __init__(self, rate: int, per: float = 60.0) -> None:
38 + self.rate, self.per = rate, per
39 + self._tokens = float(rate)
40 + self._last = time.monotonic()
41 + self._lock = threading.Lock()
42 +
43 + def acquire(self) -> None:
44 + with self._lock:
45 + now = time.monotonic()
46 + self._tokens = min(self.rate, self._tokens + (now - self._last) * self.rate / self.per)
47 + self._last = now
48 + if self._tokens < 1:
49 + sleep = (1 - self._tokens) * self.per / self.rate
50 + time.sleep(sleep)
51 + self._tokens = 0
52 + else:
53 + self._tokens -= 1
54 +
55 +
56 +class TransientHTTPError(Exception):
57 + pass
58 +
59 +
60 +class Connector(ABC):
61 + id: ClassVar[str] = ""
62 + name: ClassVar[str] = ""
63 + organization: ClassVar[str] = ""
64 + url: ClassVar[str] = ""
65 + licence: ClassVar[str] = ""
66 + attribution: ClassVar[str] = ""
67 + api_base: ClassVar[str] = ""
68 + rate_per_minute: ClassVar[int] = 60
69 + timeout: ClassVar[float] = 60.0
70 + # country code system used by the source: iso3 | iso2 | wb (iso3 + WB pseudo codes) | eurostat (iso2 with EL/UK quirks)
71 + country_codes: ClassVar[str] = "iso3"
72 +
73 + def __init__(self) -> None:
74 + self._limiter = RateLimiter(self.rate_per_minute)
75 + self._client = httpx.Client(
76 + timeout=self.timeout,
77 + headers={"User-Agent": USER_AGENT, "Accept": "application/json, text/csv;q=0.9, */*;q=0.8"},
78 + follow_redirects=True,
79 + )
80 +
81 + # ---------------------------------------------------------------- HTTP
82 + @retry(
83 + reraise=True,
84 + stop=stop_after_attempt(5),
85 + wait=wait_exponential_jitter(initial=2, max=60),
86 + retry=retry_if_exception_type((TransientHTTPError, httpx.TransportError)),
87 + )
88 + def get(self, url: str, params: dict[str, Any] | None = None, headers: dict[str, str] | None = None) -> httpx.Response:
89 + self._limiter.acquire()
90 + r = self._client.get(url, params=params, headers=headers)
91 + if r.status_code in (429, 500, 502, 503, 504):
92 + retry_after = r.headers.get("Retry-After")
93 + if retry_after and retry_after.isdigit():
94 + time.sleep(min(int(retry_after), 120))
95 + raise TransientHTTPError(f"{r.status_code} {url}")
96 + r.raise_for_status()
97 + return r
98 +
99 + def payload(self, r: httpx.Response, dataset: str, code: str, pages: int = 1, **meta: Any) -> RawPayload:
100 + lm = r.headers.get("Last-Modified")
101 + src_upd = None
102 + if lm:
103 + try:
104 + from email.utils import parsedate_to_datetime
105 +
106 + src_upd = parsedate_to_datetime(lm)
107 + except Exception: # noqa: BLE001
108 + src_upd = None
109 + return RawPayload(
110 + connector=self.id,
111 + dataset=dataset,
112 + code=code,
113 + url=str(r.url),
114 + retrieved_at=datetime.now(timezone.utc),
115 + status_code=r.status_code,
116 + content_type=r.headers.get("Content-Type"),
117 + body=r.content,
118 + source_updated_at=src_upd,
119 + pages=pages,
120 + meta=meta,
121 + )
122 +
123 + # ------------------------------------------------------------- raw store
124 + def store_raw(self, raw: RawPayload) -> Path:
125 + """Persist the payload gzip'd under raw/<connector>/<dataset>/<date>/<code>-<hash>.{json|csv}.gz + sidecar .meta.json."""
126 + day = raw.retrieved_at.strftime("%Y-%m-%d")
127 + safe = "".join(ch if ch.isalnum() or ch in "-_." else "_" for ch in raw.code) or "payload"
128 + ext = "csv" if raw.content_type and "csv" in raw.content_type else "json"
129 + h = hashlib.sha1(raw.body).hexdigest()[:10]
130 + d = settings.raw_dir / self.id / raw.dataset / day
131 + d.mkdir(parents=True, exist_ok=True)
132 + p = d / f"{safe}-{h}.{ext}.gz"
133 + if not p.exists():
134 + with gzip.open(p, "wb") as f:
135 + f.write(raw.body)
136 + p.with_suffix(".meta.json").write_text(
137 + json.dumps(
138 + {
139 + "url": raw.url,
140 + "retrieved_at": raw.retrieved_at.isoformat(),
141 + "status_code": raw.status_code,
142 + "content_type": raw.content_type,
143 + "source_updated_at": raw.source_updated_at.isoformat() if raw.source_updated_at else None,
144 + "pages": raw.pages,
145 + "bytes": len(raw.body),
146 + "sha1": h,
147 + "meta": raw.meta,
148 + },
149 + default=str,
150 + )
151 + )
152 + return p
153 +
154 + # -------------------------------------------------------------- contract
155 + def discover(self) -> list[DatasetDescriptor]:
156 + return [DatasetDescriptor(connector=self.id, dataset="default", name=self.name, url=self.url, licence=self.licence)]
157 +
158 + @abstractmethod
159 + def fetch(self, spec: IndicatorSourceSpec) -> RawPayload | list[RawPayload]:
160 + """Download everything needed for one indicator-source spec (all countries, all years). Store nothing here;
161 + the pipeline calls store_raw(). May return several payloads (pagination handled inside → concatenated)."""
162 +
163 + @abstractmethod
164 + def normalize(self, raw: RawPayload | list[RawPayload], spec: IndicatorSourceSpec) -> list[NormalizedObservation]:
165 + """Parse raw payload(s) into canonical rows. Must map country codes to registry ISO3 (use
166 + countryatlas.registry.lookup helpers), drop aggregates, apply `spec.transform`, set is_forecast/is_estimate."""
167 +
168 + def validate(self, rows: list[NormalizedObservation]) -> ValidationReport:
169 + """Source-specific validation. Default: duplicate-key check only (generic rules run in the pipeline)."""
170 + seen: set[tuple[str, str, str, str]] = set()
171 + issues: list[ValidationIssue] = []
172 + for r in rows:
173 + k = (r.country_id, r.indicator_id, r.period.isoformat(), r.frequency)
174 + if k in seen:
175 + issues.append(
176 + ValidationIssue(
177 + severity="error",
178 + code="duplicate",
179 + message=f"duplicate key {k}",
180 + indicator_id=r.indicator_id,
181 + country_id=r.country_id,
182 + period=r.period,
183 + )
184 + )
185 + seen.add(k)
186 + return ValidationReport(
187 + connector=self.id,
188 + dataset=rows[0].source_dataset if rows else "",
189 + rows_in=len(rows),
190 + rows_out=len(rows) - len(issues),
191 + issues=issues,
192 + quarantine_dataset=bool(issues),
193 + )
194 +
195 + # ---------------------------------------------------------------- utils
196 + @staticmethod
197 + def apply_transform(value: float, transform: str | None) -> float:
198 + if not transform:
199 + return value
200 + return float(eval(transform, {"__builtins__": {}}, {"x": value})) # noqa: S307 — registry-controlled expressions
201 +
202 + def close(self) -> None:
203 + self._client.close()
added src/countryatlas/models.py +121 −0
@@ -0,0 +1,121 @@
1 +"""Shared data models for the CountryAtlas data platform (pipeline, connectors, API).
2 +
3 +These are the *only* types connectors may emit. Keep them stable; see docs/ARCHITECTURE.md §2.1 / §5.
4 +"""
5 +from __future__ import annotations
6 +
7 +from datetime import date, datetime
8 +from typing import Any, Literal
9 +
10 +from pydantic import BaseModel, Field
11 +
12 +Frequency = Literal["A", "Q", "M"]
13 +Status = Literal["verified", "imported", "warning", "stale", "quarantined"]
14 +Severity = Literal["info", "warning", "error"]
15 +
16 +
17 +class IndicatorSourceSpec(BaseModel):
18 + """One external series mapped onto a canonical indicator (an entry of `indicators[].sources` in the registry)."""
19 +
20 + indicator_id: str # canonical slug
21 + connector: str # worldbank | imf | oecd | eurostat | who | fred | owid | bis | ilo
22 + dataset: str = "" # WDI, WEO, GHO, energy, co2, grapher, <oecd dataflow>, <eurostat dataset>, WS_SPP …
23 + code: str = "" # series / indicator / column code inside the dataset
24 + params: dict[str, Any] = Field(default_factory=dict) # extra filters (WHO Dim1, Eurostat dimensions, …)
25 + priority: int = 1 # 1 = preferred
26 + transform: str | None = None # python expression on `x`, e.g. "x*1e9" (applied at normalize time)
27 + countries: list[str] | None = None # restrict this source to these ISO3 (e.g. FRED → ["USA"])
28 + frequency: Frequency | None = None # override the indicator frequency for this source
29 + notes: str | None = None
30 +
31 + @property
32 + def key(self) -> str:
33 + return f"{self.connector}:{self.dataset}:{self.code}:{self.indicator_id}"
34 +
35 +
36 +class DatasetDescriptor(BaseModel):
37 + connector: str
38 + dataset: str
39 + name: str
40 + url: str | None = None
41 + licence: str | None = None
42 + notes: str | None = None
43 +
44 +
45 +class RawPayload(BaseModel):
46 + """What `fetch` returns and what is stored under raw/. `body` is bytes (JSON/CSV as served)."""
47 +
48 + connector: str
49 + dataset: str
50 + code: str
51 + url: str
52 + retrieved_at: datetime
53 + status_code: int
54 + content_type: str | None = None
55 + body: bytes
56 + source_updated_at: datetime | None = None # from headers or payload metadata when available
57 + pages: int = 1
58 + meta: dict[str, Any] = Field(default_factory=dict)
59 +
60 +
61 +class NormalizedObservation(BaseModel):
62 + """The canonical row. One per (country, indicator, period, frequency) per source."""
63 +
64 + country_id: str # ISO3 from the registry (aggregates are dropped or mapped to a group code elsewhere)
65 + indicator_id: str
66 + period: date # first day of the period
67 + year: int
68 + frequency: Frequency
69 + value: float
70 + unit: str
71 + source_id: str
72 + source_dataset: str
73 + source_series_code: str
74 + is_estimate: bool = False
75 + is_forecast: bool = False
76 + retrieved_at: datetime
77 + source_updated_at: datetime | None = None
78 + status: Status = "imported"
79 + metadata: dict[str, Any] = Field(default_factory=dict)
80 +
81 +
82 +class ValidationIssue(BaseModel):
83 + severity: Severity
84 + code: str # duplicate | out_of_bounds | unit_mismatch | extreme_jump | partial_download | unknown_country | stale | schema_change
85 + message: str
86 + indicator_id: str | None = None
87 + country_id: str | None = None
88 + period: date | None = None
89 +
90 +
91 +class ValidationReport(BaseModel):
92 + connector: str
93 + dataset: str
94 + rows_in: int
95 + rows_out: int
96 + issues: list[ValidationIssue] = Field(default_factory=list)
97 + quarantine_dataset: bool = False # true → the staging file must be ignored and the previous one kept
98 +
99 + @property
100 + def errors(self) -> int:
101 + return sum(1 for i in self.issues if i.severity == "error")
102 +
103 + @property
104 + def warnings(self) -> int:
105 + return sum(1 for i in self.issues if i.severity == "warning")
106 +
107 +
108 +class ImportRun(BaseModel):
109 + run_id: str
110 + connector: str
111 + dataset: str
112 + started_at: datetime
113 + finished_at: datetime | None = None
114 + status: Literal["running", "ok", "failed", "partial", "quarantined"] = "running"
115 + rows_raw: int = 0
116 + rows_norm: int = 0
117 + rows_valid: int = 0
118 + warnings: int = 0
119 + errors: int = 0
120 + message: str | None = None
121 + raw_path: str | None = None
added src/countryatlas/pipeline/__init__.py +0 −0
added src/countryatlas/registry/__init__.py +368 −0
@@ -0,0 +1,368 @@
1 +"""Registry loaders (countries, groups, indicators, topics) + country-code lookup helpers.
2 +
3 +Loaded once per process (lru_cache). All connectors MUST map source country codes through `lookup`.
4 +"""
5 +from __future__ import annotations
6 +
7 +from dataclasses import dataclass, field
8 +from functools import lru_cache
9 +from typing import Any
10 +
11 +import yaml
12 +
13 +from countryatlas.config import settings
14 +from countryatlas.models import IndicatorSourceSpec
15 +
16 +TOPICS = [
17 + "economy", "government", "population", "labor", "income", "housing", "health", "education", "trade", "energy",
18 + "climate", "environment", "infrastructure", "digital", "innovation", "agriculture", "tourism", "security", "quality-of-life",
19 +]
20 +CONNECTORS = ["worldbank", "imf", "oecd", "eurostat", "who", "fred", "owid", "bis", "ilo"]
21 +
22 +INDICATOR_DEFAULTS: dict[str, Any] = {
23 + "short_name": None,
24 + "description": "",
25 + "subtopic": "",
26 + "unit_short": "",
27 + "format": "number",
28 + "frequency": "A",
29 + "precision": 1,
30 + "aggregation": "none",
31 + "higher_is_better": None,
32 + "ranking_eligible": True,
33 + "featured": False,
34 + "scale": "raw",
35 + "bounds": [None, None],
36 + "jump_threshold": 4.0,
37 + "change_floor": None,
38 + "stale_after_days": None,
39 + "methodology": "",
40 + "tags": [],
41 + "per_capita_of": None,
42 +}
43 +STALE_DAYS_BY_FREQ = {"A": 800, "Q": 200, "M": 75}
44 +
45 +
46 +def _read(name: str) -> Any:
47 + return yaml.safe_load((settings.registry_dir / name).read_text())
48 +
49 +
50 +# ------------------------------------------------------------------------------------------------ countries
51 +@dataclass
52 +class Country:
53 + id: str
54 + iso2: str
55 + iso3: str
56 + slug: str
57 + short_name: str
58 + official_name: str
59 + capital: str | None
60 + continent: str | None
61 + region_wb: str
62 + region_wb_name: str
63 + subregion: str | None
64 + income_group: str | None
65 + income_group_name: str | None
66 + currency_code: str | None
67 + currency_name: str | None
68 + area_km2: float | None
69 + latitude: float | None
70 + longitude: float | None
71 + flag_emoji: str
72 + un_member: bool
73 + independent: bool
74 + landlocked: bool
75 + borders: list[str]
76 + languages: list[str]
77 + demonym: str | None
78 + status: str
79 + kind: str = "country"
80 + iso_numeric: str | None = None
81 +
82 + def as_row(self) -> dict[str, Any]:
83 + return self.__dict__.copy()
84 +
85 +
86 +@lru_cache(maxsize=1)
87 +def countries() -> list[Country]:
88 + raw = _read("countries.yaml")["countries"]
89 + out = []
90 + for c in raw:
91 + c = dict(c)
92 + c["iso_numeric"] = str(c["iso_numeric"]).zfill(3) if c.get("iso_numeric") not in (None, "") else None
93 + out.append(Country(**c))
94 + return out
95 +
96 +
97 +@lru_cache(maxsize=1)
98 +def countries_by_id() -> dict[str, Country]:
99 + return {c.id: c for c in countries()}
100 +
101 +
102 +@lru_cache(maxsize=1)
103 +def countries_by_slug() -> dict[str, Country]:
104 + return {c.slug: c for c in countries()}
105 +
106 +
107 +# ------------------------------------------------------------------------------------------------ groups
108 +@dataclass
109 +class Group:
110 + id: str
111 + slug: str
112 + name: str
113 + kind: str
114 + description: str
115 + wb_code: str | None
116 + members: list[str] = field(default_factory=list)
117 +
118 +
119 +@lru_cache(maxsize=1)
120 +def groups() -> list[Group]:
121 + raw = _read("groups.yaml")["groups"]
122 + cs = countries()
123 + out = []
124 + for g in raw:
125 + m = g.get("members", [])
126 + if m == "ALL":
127 + members = [c.id for c in cs]
128 + elif isinstance(m, str) and m.startswith("WB_REGION:"):
129 + members = [c.id for c in cs if c.region_wb == m.split(":", 1)[1]]
130 + elif isinstance(m, str) and m.startswith("WB_INCOME:"):
131 + members = [c.id for c in cs if c.income_group == m.split(":", 1)[1]]
132 + elif isinstance(m, str) and m.startswith("CONTINENT:"):
133 + members = [c.id for c in cs if c.continent == m.split(":", 1)[1]]
134 + else:
135 + known = countries_by_id()
136 + members = [x for x in m if x in known]
137 + out.append(
138 + Group(
139 + id=g["id"],
140 + slug=g.get("slug", g["id"]),
141 + name=g["name"],
142 + kind=g.get("kind", "custom"),
143 + description=g.get("description", ""),
144 + wb_code=g.get("wb_code"),
145 + members=members,
146 + )
147 + )
148 + return out
149 +
150 +
151 +@lru_cache(maxsize=1)
152 +def groups_by_id() -> dict[str, Group]:
153 + return {g.id: g for g in groups()}
154 +
155 +
156 +# ------------------------------------------------------------------------------------------------ indicators
157 +@dataclass
158 +class Indicator:
159 + slug: str
160 + name: str
161 + topic: str
162 + unit: str
163 + short_name: str | None
164 + description: str
165 + subtopic: str
166 + unit_short: str
167 + format: str
168 + frequency: str
169 + precision: int
170 + aggregation: str
171 + higher_is_better: bool | None
172 + ranking_eligible: bool
173 + featured: bool
174 + scale: str
175 + bounds: list[float | None]
176 + jump_threshold: float
177 + change_floor: float | None
178 + stale_after_days: int
179 + methodology: str
180 + tags: list[str]
181 + per_capita_of: str | None
182 + sources: list[IndicatorSourceSpec]
183 +
184 + @property
185 + def id(self) -> str:
186 + return self.slug
187 +
188 + @property
189 + def display_name(self) -> str:
190 + return self.short_name or self.name
191 +
192 +
193 +@lru_cache(maxsize=1)
194 +def indicators() -> list[Indicator]:
195 + raw = _read("indicators.yaml")["indicators"]
196 + out: list[Indicator] = []
197 + seen: set[str] = set()
198 + for i in raw:
199 + if i["slug"] in seen:
200 + raise ValueError(f"duplicate indicator slug {i['slug']}")
201 + seen.add(i["slug"])
202 + if i["topic"] not in TOPICS:
203 + raise ValueError(f"indicator {i['slug']}: unknown topic {i['topic']}")
204 + d = {**INDICATOR_DEFAULTS, **i}
205 + if d["stale_after_days"] is None:
206 + d["stale_after_days"] = STALE_DAYS_BY_FREQ[d["frequency"]]
207 + specs = []
208 + for s in d.pop("sources", []) or []:
209 + if s["connector"] not in CONNECTORS:
210 + raise ValueError(f"indicator {i['slug']}: unknown connector {s['connector']}")
211 + specs.append(IndicatorSourceSpec(indicator_id=i["slug"], **{k: v for k, v in s.items()}))
212 + specs.sort(key=lambda s: s.priority)
213 + out.append(Indicator(**d, sources=specs))
214 + return out
215 +
216 +
217 +@lru_cache(maxsize=1)
218 +def indicators_by_id() -> dict[str, Indicator]:
219 + return {i.slug: i for i in indicators()}
220 +
221 +
222 +def source_specs(connector: str | None = None, indicator: str | None = None) -> list[IndicatorSourceSpec]:
223 + out = []
224 + for ind in indicators():
225 + if indicator and ind.slug != indicator:
226 + continue
227 + for s in ind.sources:
228 + if connector and s.connector != connector:
229 + continue
230 + out.append(s)
231 + return out
232 +
233 +
234 +# ------------------------------------------------------------------------------------------------ topics
235 +@lru_cache(maxsize=1)
236 +def topics() -> dict[str, Any]:
237 + t = _read("topics.yaml")
238 + known = indicators_by_id()
239 + t["headline"] = [s for s in t["headline"] if s in known]
240 + for topic in t["topics"]:
241 + topic["indicators"] = [s for s in topic["indicators"] if s in known]
242 + return t
243 +
244 +
245 +# ------------------------------------------------------------------------------------------------ lookups
246 +class Lookup:
247 + """Map source country codes → registry ISO3. Returns None for aggregates/unknowns (callers drop them)."""
248 +
249 + def __init__(self) -> None:
250 + cs = countries()
251 + self.iso3 = {c.iso3 for c in cs}
252 + self.iso2_to_iso3 = {c.iso2: c.iso3 for c in cs}
253 + self.numeric_to_iso3 = {c.iso_numeric: c.iso3 for c in cs if c.iso_numeric}
254 + self.slug_to_iso3 = {c.slug: c.iso3 for c in cs}
255 + self.name_to_iso3 = {c.short_name.lower(): c.iso3 for c in cs}
256 + self.name_to_iso3.update({c.official_name.lower(): c.iso3 for c in cs})
257 + # Common alternative names seen in sources (OWID, WHO, IMF)
258 + self.name_to_iso3.update(
259 + {
260 + "united states of america": "USA", "russian federation": "RUS", "korea, rep.": "KOR", "republic of korea": "KOR",
261 + "korea, dem. people's rep.": "PRK", "iran, islamic rep.": "IRN", "iran (islamic republic of)": "IRN",
262 + "egypt, arab rep.": "EGY", "venezuela, rb": "VEN", "venezuela (bolivarian republic of)": "VEN",
263 + "yemen, rep.": "YEM", "gambia, the": "GMB", "bahamas, the": "BHS", "congo, dem. rep.": "COD",
264 + "democratic republic of congo": "COD", "democratic republic of the congo": "COD", "congo, rep.": "COG", "congo": "COG",
265 + "cote d'ivoire": "CIV", "côte d'ivoire": "CIV", "czech republic": "CZE", "slovak republic": "SVK",
266 + "turkiye": "TUR", "turkey": "TUR", "hong kong sar, china": "HKG", "hong kong": "HKG", "macao sar, china": "MAC", "macao": "MAC",
267 + "west bank and gaza": "PSE", "palestine": "PSE", "lao pdr": "LAO", "laos": "LAO", "micronesia, fed. sts.": "FSM",
268 + "micronesia (country)": "FSM", "st. lucia": "LCA", "saint lucia": "LCA", "st. kitts and nevis": "KNA",
269 + "st. vincent and the grenadines": "VCT", "kyrgyz republic": "KGZ", "brunei darussalam": "BRN", "viet nam": "VNM",
270 + "vietnam": "VNM", "syrian arab republic": "SYR", "syria": "SYR", "bolivia (plurinational state of)": "BOL",
271 + "united republic of tanzania": "TZA", "tanzania": "TZA", "republic of moldova": "MDA", "moldova": "MDA",
272 + "north macedonia": "MKD", "eswatini": "SWZ", "cabo verde": "CPV", "cape verde": "CPV", "timor": "TLS", "east timor": "TLS",
273 + "timor-leste": "TLS", "sao tome and principe": "STP", "são tomé and príncipe": "STP", "curacao": "CUW", "curaçao": "CUW",
274 + "united kingdom": "GBR", "uk": "GBR", "us": "USA", "united states": "USA", "taiwan": "TWN", "kosovo": "XKX",
275 + "netherlands (kingdom of the)": "NLD", "türkiye": "TUR", "the bahamas": "BHS", "the gambia": "GMB", "somalia, fed. rep.": "SOM",
276 + }
277 + )
278 + # Aggregate / non-country codes frequently seen in sources → always dropped
279 + self.non_country_codes = {
280 + "WLD", "OED", "EUU", "EMU", "HIC", "UMC", "LMC", "LIC", "MIC", "LMY", "NAC", "LCN", "ECS", "MEA", "SAS", "EAS", "SSF",
281 + "ARB", "CEB", "EAP", "EAR", "ECA", "FCS", "HPC", "IBD", "IBT", "IDA", "IDB", "IDX", "INX", "LAC", "LDC", "LTE", "MNA",
282 + "OSS", "PRE", "PSS", "PST", "SSA", "SST", "TEA", "TEC", "TLA", "TMN", "TSA", "TSS", "AFE", "AFW", "CSS", "EU27_2020", "EA20",
283 + "EA19", "EA", "EU", "EU28", "EU27", "G20", "G7", "OECD", "OAVG", "WORLD",
284 + }
285 +
286 + def from_iso3(self, code: str | None) -> str | None:
287 + if not code:
288 + return None
289 + code = code.strip().upper()
290 + if code == "UNK":
291 + code = "XKX"
292 + return code if code in self.iso3 else None
293 +
294 + def from_iso2(self, code: str | None) -> str | None:
295 + if not code:
296 + return None
297 + code = code.strip().upper()
298 + if code in ("EL",): # Eurostat Greece
299 + code = "GR"
300 + if code in ("UK",): # Eurostat United Kingdom
301 + code = "GB"
302 + if code == "XK":
303 + return "XKX"
304 + return self.iso2_to_iso3.get(code)
305 +
306 + def from_numeric(self, code: str | int | None) -> str | None:
307 + if code is None:
308 + return None
309 + return self.numeric_to_iso3.get(str(code).zfill(3))
310 +
311 + def from_name(self, name: str | None) -> str | None:
312 + if not name:
313 + return None
314 + return self.name_to_iso3.get(name.strip().lower())
315 +
316 + def any(self, code: str | None) -> str | None:
317 + """Best effort: iso3, then iso2, then numeric, then name."""
318 + if not code:
319 + return None
320 + c = code.strip()
321 + if len(c) == 3 and c.isalpha():
322 + return self.from_iso3(c)
323 + if len(c) == 2 and c.isalpha():
324 + return self.from_iso2(c)
325 + if c.isdigit():
326 + return self.from_numeric(c)
327 + return self.from_name(c)
328 +
329 +
330 +@lru_cache(maxsize=1)
331 +def lookup() -> Lookup:
332 + return Lookup()
333 +
334 +
335 +def validate_registry() -> list[str]:
336 + """Return a list of problems (empty = OK)."""
337 + problems: list[str] = []
338 + try:
339 + cs = countries()
340 + slugs = [c.slug for c in cs]
341 + if len(slugs) != len(set(slugs)):
342 + problems.append("duplicate country slugs")
343 + except Exception as e: # noqa: BLE001
344 + problems.append(f"countries.yaml: {e}")
345 + try:
346 + inds = indicators()
347 + n_no_source = [i.slug for i in inds if not i.sources]
348 + if n_no_source:
349 + problems.append(f"{len(n_no_source)} indicators without sources (allowed, hidden until a connector maps them): "
350 + + ", ".join(n_no_source[:12]) + (" …" if len(n_no_source) > 12 else ""))
351 + except Exception as e: # noqa: BLE001
352 + problems.append(f"indicators.yaml: {e}")
353 + try:
354 + groups()
355 + except Exception as e: # noqa: BLE001
356 + problems.append(f"groups.yaml: {e}")
357 + try:
358 + t = _read("topics.yaml")
359 + known = {i.slug for i in indicators()}
360 + for topic in t["topics"]:
361 + if topic["id"] not in TOPICS:
362 + problems.append(f"topics.yaml: unknown topic id {topic['id']}")
363 + missing = [s for s in topic["indicators"] if s not in known]
364 + if missing:
365 + problems.append(f"topics.yaml[{topic['id']}]: unknown indicators {missing}")
366 + except Exception as e: # noqa: BLE001
367 + problems.append(f"topics.yaml: {e}")
368 + return problems
added src/countryatlas/storage/__init__.py +0 −0
added src/countryatlas/storage/schema.sql +104 −0
@@ -0,0 +1,104 @@
1 +-- CountryAtlas DuckDB schema — SINGLE SOURCE OF TRUTH for pipeline (writer) and API (reader).
2 +-- schema_version is stored in meta. Bump it and add a migration note in docs/ARCHITECTURE.md when changing.
3 +
4 +CREATE TABLE IF NOT EXISTS meta (key TEXT PRIMARY KEY, value TEXT);
5 +
6 +CREATE TABLE IF NOT EXISTS countries (
7 + id TEXT PRIMARY KEY, iso2 TEXT, iso3 TEXT, iso_numeric TEXT, slug TEXT UNIQUE, short_name TEXT, official_name TEXT,
8 + capital TEXT, continent TEXT, region_wb TEXT, region_wb_name TEXT, subregion TEXT, income_group TEXT, income_group_name TEXT,
9 + currency_code TEXT, currency_name TEXT, area_km2 DOUBLE, latitude DOUBLE, longitude DOUBLE, flag_emoji TEXT,
10 + un_member BOOLEAN, independent BOOLEAN, landlocked BOOLEAN, borders TEXT[], languages TEXT[], demonym TEXT,
11 + status TEXT, kind TEXT
12 +);
13 +
14 +CREATE TABLE IF NOT EXISTS groups (
15 + id TEXT PRIMARY KEY, slug TEXT UNIQUE, name TEXT, kind TEXT, description TEXT, wb_code TEXT, n_members INTEGER
16 +);
17 +CREATE TABLE IF NOT EXISTS group_members (group_id TEXT, country_id TEXT);
18 +
19 +CREATE TABLE IF NOT EXISTS sources (
20 + id TEXT PRIMARY KEY, name TEXT, organization TEXT, url TEXT, licence TEXT, attribution TEXT, api_base TEXT,
21 + last_success_at TIMESTAMP, n_indicators INTEGER, n_observations BIGINT, notes TEXT
22 +);
23 +
24 +CREATE TABLE IF NOT EXISTS indicators (
25 + id TEXT PRIMARY KEY, slug TEXT UNIQUE, name TEXT, short_name TEXT, description TEXT, topic TEXT, subtopic TEXT,
26 + unit TEXT, unit_short TEXT, frequency TEXT, precision INTEGER, aggregation TEXT, higher_is_better BOOLEAN,
27 + ranking_eligible BOOLEAN, featured BOOLEAN, format TEXT, scale TEXT, bounds_min DOUBLE, bounds_max DOUBLE,
28 + methodology TEXT, tags TEXT[], per_capita_of TEXT,
29 + -- coverage (filled by build)
30 + n_countries INTEGER, n_observations BIGINT, first_year INTEGER, last_year INTEGER, latest_source_updated_at TIMESTAMP,
31 + primary_source_id TEXT
32 +);
33 +
34 +CREATE TABLE IF NOT EXISTS indicator_sources (
35 + indicator_id TEXT, source_id TEXT, dataset TEXT, series_code TEXT, params JSON, priority INTEGER, transform TEXT,
36 + countries TEXT[], notes TEXT, source_url TEXT,
37 + -- coverage of this particular source in the current build
38 + n_observations BIGINT, n_countries INTEGER, last_year INTEGER, last_run_id TEXT, last_status TEXT
39 +);
40 +
41 +-- One row per (country, indicator, period, frequency): the highest-priority source having a value.
42 +CREATE TABLE IF NOT EXISTS observations (
43 + country_id TEXT, indicator_id TEXT, period DATE, year INTEGER, frequency TEXT, value DOUBLE, unit TEXT,
44 + source_id TEXT, source_dataset TEXT, source_series_code TEXT, is_estimate BOOLEAN, is_forecast BOOLEAN,
45 + revision INTEGER, retrieved_at TIMESTAMP, source_updated_at TIMESTAMP, status TEXT, metadata JSON
46 +);
47 +-- Same shape: values from lower-priority sources (kept for provenance / alternative views).
48 +CREATE TABLE IF NOT EXISTS observations_alt (
49 + country_id TEXT, indicator_id TEXT, period DATE, year INTEGER, frequency TEXT, value DOUBLE, unit TEXT,
50 + source_id TEXT, source_dataset TEXT, source_series_code TEXT, is_estimate BOOLEAN, is_forecast BOOLEAN,
51 + revision INTEGER, retrieved_at TIMESTAMP, source_updated_at TIMESTAMP, status TEXT, metadata JSON
52 +);
53 +CREATE TABLE IF NOT EXISTS observation_revisions (
54 + country_id TEXT, indicator_id TEXT, period DATE, frequency TEXT, old_value DOUBLE, new_value DOUBLE,
55 + old_source_id TEXT, new_source_id TEXT, changed_at TIMESTAMP, run_id TEXT
56 +);
57 +
58 +CREATE TABLE IF NOT EXISTS latest (
59 + country_id TEXT, indicator_id TEXT, period DATE, year INTEGER, frequency TEXT, value DOUBLE,
60 + prev_period DATE, prev_value DOUBLE, change_abs DOUBLE, change_pct DOUBLE,
61 + rank_world INTEGER, n_world INTEGER, rank_region INTEGER, n_region INTEGER, rank_income INTEGER, n_income INTEGER,
62 + rank_year INTEGER, source_id TEXT, is_forecast BOOLEAN, is_estimate BOOLEAN, status TEXT,
63 + value_10y_ago DOUBLE, change_10y_abs DOUBLE, change_10y_pct DOUBLE
64 +);
65 +
66 +CREATE TABLE IF NOT EXISTS rankings (
67 + indicator_id TEXT, year INTEGER, country_id TEXT, value DOUBLE, rank INTEGER, n INTEGER, pct_rank DOUBLE
68 +);
69 +
70 +CREATE TABLE IF NOT EXISTS changes (
71 + id TEXT, country_id TEXT, indicator_id TEXT, kind TEXT, period DATE, year INTEGER, value DOUBLE, ref_value DOUBLE,
72 + delta DOUBLE, delta_pct DOUBLE, window_years INTEGER, severity DOUBLE, headline TEXT, detail JSON, detected_at TIMESTAMP
73 +);
74 +CREATE TABLE IF NOT EXISTS events (
75 + id TEXT, country_id TEXT, indicator_id TEXT, kind TEXT, period DATE, year INTEGER, value DOUBLE, ref_value DOUBLE,
76 + delta DOUBLE, delta_pct DOUBLE, window_years INTEGER, severity DOUBLE, headline TEXT, detail JSON
77 +);
78 +
79 +CREATE TABLE IF NOT EXISTS similarity (
80 + country_id TEXT, mode TEXT, peer_id TEXT, score DOUBLE, rank INTEGER, contributions JSON
81 +);
82 +
83 +CREATE TABLE IF NOT EXISTS insights (
84 + id TEXT, country_id TEXT, template_id TEXT, text TEXT, values JSON, indicators TEXT[], computed_at TIMESTAMP
85 +);
86 +
87 +CREATE TABLE IF NOT EXISTS country_dna (country_id TEXT, dims JSON, year_ref INTEGER);
88 +
89 +CREATE TABLE IF NOT EXISTS coverage (
90 + country_id TEXT, n_indicators INTEGER, n_observations BIGINT, latest_year INTEGER, coverage_pct DOUBLE, updated_at TIMESTAMP
91 +);
92 +
93 +CREATE TABLE IF NOT EXISTS import_runs (
94 + run_id TEXT, connector TEXT, dataset TEXT, started_at TIMESTAMP, finished_at TIMESTAMP, status TEXT,
95 + rows_raw BIGINT, rows_norm BIGINT, rows_valid BIGINT, warnings INTEGER, errors INTEGER, message TEXT, raw_path TEXT
96 +);
97 +CREATE TABLE IF NOT EXISTS validation_issues (
98 + run_id TEXT, connector TEXT, indicator_id TEXT, country_id TEXT, period DATE, severity TEXT, code TEXT, message TEXT
99 +);
100 +
101 +-- Search index (denormalised, small): type ∈ country|indicator|topic|region|source
102 +CREATE TABLE IF NOT EXISTS search_index (
103 + type TEXT, id TEXT, slug TEXT, name TEXT, alt_names TEXT, hint TEXT, weight DOUBLE
104 +);
105