Methodology and sources

Complete sources, processing methods, coverage and limitations for Pakistan census, survey, trade, budget, monetary and satellite datasets.

Data Darbar is built from a reproducible pipeline: raw PBS and Finance Division publications (PDF tables parsed programmatically, CSV releases and survey microdata) and State Bank series fetched from its API are cleaned and normalised into a DuckDB + Parquet warehouse, then exported as the compact data files the site loads. The notes below cover each view in turn.

District & Tehsil Map

District-name matching & crosswalk

A core challenge in Pakistani administrative data is inconsistent district naming — the same place appears as "D.G. Khan", "Dera Ghazi Khan" or "DG Khan" across publications. Names are lowercased, stripped of punctuation and mapped through a manually curated crosswalk of name variants to a single canonical name that matches the GeoJSON boundary file (e.g. "Abbotabad" → "Abbottabad", "Naushero Feroze" → "Naushahro Firoz").

Multi-district aggregation

Several districts are reported at sub-district level but appear as one polygon in the boundaries. These are aggregated automatically: Kohistan (Upper + Lower) and Chitral (Upper + Lower). Count indicators are summed; rate indicators (literacy, unemployment) are recomputed from aggregated numerator and denominator counts rather than averaging percentages, which would be incorrect.

Karachi, and districts younger than the surveys

Karachi was previously aggregated into one polygon but is now shown as its seven separate districts — Karachi Central, East, South, West, Korangi, Malir and Keamari. That creates a mismatch with sources whose geography predates the split, and two rules handle it. Both publish the geography that was actually measured and label it, rather than discarding real data or implying a district estimate the source never made.

In both cases sample sizes travel unchanged and describe the parent geography — the city, or Karachi West — which is what the flags are there to signal. The pipeline also checks every incoming row against the boundary file and reports any that fail to match, so this class of silent loss surfaces at build time rather than as an unexplained gap on the map.

Choropleth & change

Values are mapped to fill colours using quantile breaks (5 classes) via Chroma.js, so each class holds roughly the same number of districts — useful for skewed distributions. The "Change" view uses a diverging scale centred at zero (red = decline, green = growth) and computes a simple difference 2023 − 2017, expressed in percentage points for rate indicators.

Survey adjustments (LFS & HIES)

The Labour Force Survey and HIES are designed to be representative at the provincial, not district, level. Two adjustments are applied: a minimum sample-size filter (districts with n < 30 observations are suppressed and flagged), and post-stratification of survey weights to Census 2023 population totals (a sex-ratio reweighting for LFS microdata; a population calibration factor for HIES households). These improve plausibility but do not remove the limits of provincial surveys at fine geographies — district survey estimates should be read as approximate.

Why HIES 2024-25 figures are labelled "rural only"

This is the single most important caveat on the household panels, so it is worth stating plainly. HIES 2024-25 does not record which district an urban household lives in. In PBS's own words, "for urban domain, each administrative division for all four provinces has been considered as an independent stratum", while the rural domain uses "each administrative district in Punjab, Sindh and Khyber Pakhtunkhwa and each administrative division in Balochistan". We verified this directly in the microdata: all 941 urban sampling units carry a district code of zero, against 1,212 rural units that carry a real one. There are 127 rural district strata and 31 urban division strata.

The consequence is that every HIES district figure on this site covers rural households only — 19,163 of the 30,123 sampled households. The 10,960 urban households, 39% of the weighted population, cannot be assigned to a district by any method, and no crosswalk can recover what was never recorded. Districts with no rural sample at all — Lahore, most of Karachi, urban Islamabad — therefore carry no HIES figures rather than a guessed one.

This matters most where it is least obvious. Because urban households are better off almost everywhere, a rural-only figure understates district welfare systematically, and by more in more urban districts. Reconstructing whole-district values using Census 2023 urban shares suggests rural-only per-capita consumption is understated by around 8% in the median district but by roughly 100% in Hyderabad and Karachi West. On a 89-district consumption ranking, the typical district moves about 9 places once urban households are restored, and Hyderabad moves 60. HIES district figures are a sound description of rural conditions and should not be read as district totals.

Food insecurity: two different series

Two food-insecurity measures appear on the site and they are not interchangeable.

The same principle orders the other panels: where a whole-district PSLM series and a rural-only HIES series measure the same thing — piped water, sanitation, mobile and internet access — PSLM is listed first and HIES is offered as the more recent rural supplement. Piped water is a good illustration of why: in Hyderabad the whole-district PSLM figure is 68%, while the rural-only HIES figure is 23%.

Health & demographic indicators (PDHS 2017-18)

The five health layers — Family Planning, Fertility & Child Survival, Maternal Health, Child Immunisation and Child Nutrition — are computed from the Pakistan Demographic and Health Survey (PDHS) 2017-18 microdata, published by the National Institute of Population Studies (NIPS), using the survey's sampling weights. District estimates are validated against the published national PDHS figures — e.g. contraceptive prevalence 33.7% (published 34.2%), modern method 24.7% (25.0%), unmet need 18.4% (17.3%), stunting 37.2% (37.6%), full immunisation 66.0% (66%).

Important caveat: the PDHS is designed to be representative at the national, provincial and regional level, not the district level (about 15,000 women across ~130 districts), so district figures are indicative. Each layer carries its own denominator and unweighted sample size, and the same n<30 suppression rule applies — so reliable coverage varies sharply by indicator: family planning and fertility are estimable in ~122 of 133 sampled districts, maternal health in ~98, child nutrition in ~47, and child immunisation in only ~16 (the 12–23-month denominator is very small per district). Suppressed districts are greyed out with their sample size shown in the tooltip. Gilgit-Baltistan and Azad Jammu & Kashmir — excluded from the national weight — use the survey's combined weight, so their within-district estimates are valid; the PDHS is what now fills the 17 AJK/GB districts the PBS census tables don't cover, giving at least some data for all 141 districts.

Trade Atlas

Source & parsing

Imports and exports come from PBS External Trade Statistics at the 8-digit HS commodity level (roughly 1,050 distinct products per direction). The published PDFs are converted with pdftotext -layout and parsed with a stateful reader that pops trailing value columns, repairs HS codes whose leading zeros were dropped and became glued to the commodity name, and re-joins long product names that wrapped onto a second line and pushed their totals down. Each year is validated against the printed GRAND TOTAL: reconstructed exports reconcile to 100% and imports to 93–100% of the published total.

Sector grouping & the treemap

Every 8-digit line is assigned to its HS section (the 21 top-level groupings — textiles, mineral fuels, vegetable products, machinery, and so on) and its 2-digit chapter. The Atlas treemap follows the logic of Harvard's Atlas of Economic Complexity: area is proportional to trade value and colour encodes the HS section, so the composition of what Pakistan buys and sells is legible at a glance. Clicking a sector zooms to its chapters and products; a breadcrumb tracks the drill-down. Values are the customs values as published (nominal Pakistan Rupees), not inflation- or exchange-rate adjusted, and represent recorded formal trade only.

Gap years. PBS did not publish 8-digit data for exports 2017-18 or imports 2018-19 and 2019-20. Exports 2017-18 are filled from UN Comtrade (Pakistan's calendar-2018 exports, shown at HS-section level only, valued in Rs at the fiscal-year average rate); the two import gaps are filled at the total level only from the Pakistan Economic Survey (Pakistan stopped reporting to UN Comtrade after 2018, so no commodity breakdown is available). These years are flagged in the source note.

GDP & Budget

National accounts (GDP by sector & growth)

GDP is taken from the national accounts on the 2015-16 base year. The "economy by sector" view shows value added by the standard sector split (agriculture, industry, services and their sub-sectors); "real GDP growth" is the year-on-year change in constant-price GDP. Long historical series are shown where PBS publishes a consistent constant-price series; a rebasing (e.g. from the older 2005-06 base) introduces a level break, so series are presented on the latest base rather than spliced.

Input-output flows (2015-16)

The chord view is built from the PBS 2015-16 supply-use / input-output table. The published matrix (68 industries) is aggregated to 12 broad sectors, and inter-industry flows are drawn as directed ribbons from supplying to using sector. Table values are published in Rupees million and are converted to billions (÷1,000) for display. The snapshot is structural — it shows how much of each sector's output is used as intermediate input by every other sector in that year — and is not a time series.

Federal budget treemap

Receipts are built from the Finance Division's Explanatory Memorandum on Federal Receipts — the most granular receipts source — for every year 2009-10 to 2026-27. The memorandum classifies each receipt by Pakistan's NAM chart-of-accounts codes (B = tax, C = non-tax), which give a clean hierarchy: Tax Revenue splits into Direct Taxes (Income Tax) and Indirect Taxes (Customs, Sales Tax, Federal Excise), and Non-Tax Revenue into Income from Property, Receipts from Civil Administration, Miscellaneous Receipts and Levies & Fees. The own-year budget estimate is the last numeric column. Because table numbering and which leaves carry codes vary across the 18 years, each parent's captured leaves are reconciled to its printed control subtotal and any gap is placed in an explicit "Other …" child — so every node sums exactly to the published Tax Revenue, Non-Tax Revenue and total-revenue figures.

Expenditure is the current expenditure by function from the "Budget in Brief" (debt servicing, defence, running of civil government, subsidies & grants, etc.), broken into detailed sub-items. Both sides are rendered as a treemap where area is proportional to the Rupee amount; a toggle switches between Expenditure and Receipts and a slider moves across budget years. All figures are nominal budget estimates as published; presentation of some line items changes across years, so cross-year comparison of a single narrow item should be read with the source in mind.

Monetary & External

Source & extraction

Every series comes from the State Bank's EasyData portal through its REST API, one request per series with full history. The portal serves 226 datasets and about 23,000 series; the warehouse holds a curated 1,336 of them (the headline and "core" tiers of a published selection file), with the full catalogue indexed so any other series can be added. Fetching is checkpointed and rate-limited (SBP's binding cap is 250 requests an hour), and two flavours of malformed JSON in the portal's responses — raw control characters and unescaped quotes inside strings — are repaired before parsing. The page itself ships only the ~50 series it draws, as a plain script file, so it loads instantly and works offline.

Fiscal years, partial years and scales

Monthly flows are summed to Pakistan's July–June fiscal year. The newest year is nearly always partial, so the year picker defaults to the last complete year and labels partial ones with their month count; a one-month "year" shown beside a twelve-month one reads as a collapse that never happened. The rupee chart uses a log scale by default: on a series that runs from 3 to 280 per dollar only a log axis shows equal percentage moves as equal distances. Daily KIBOR is thinned to month-end for the chart (the SQL console keeps every day).

The current-account treemap

"Dollars in" and "dollars out" are the credit and debit sides of the BPM6 current account — goods, services, primary income and secondary income — drawn to scale, so the deficit is the extra width of the right-hand box. The build refuses to publish unless credits minus debits equals SBP's reported current-account balance to the dollar, every year. Clicking a box subdivides it in place, inside its own area, so the two sides and the balance stay on screen while you drill; the sub-boxes are drawn as shares of the parent's headline figure. The breakdowns: services by type and transfers by kind come straight from the BPM6 tables; remittances by source use the country-wise table; goods use SBP's export receipts and import payments by commodity; income paid abroad splits into repatriated profits by sector and a residual (interest and other investment income) equal to the primary-income debit less the repatriation table.

Two of those tables have no published hierarchy: the 147 commodity series and the 50 sector series are listed in document order with no level marker, yet many are sub-totals of their neighbours (Transport Group ⊃ Road Motor Vehicles ⊃ CKD ⊃ Motor Cars; Power ⊃ Thermal, Hydel, Coal). Summing everything overstates goods and repatriation totals by up to 28%. The build recovers the tree arithmetically — a series is a parent when the top-level items after it sum to it in every fiscal year — and checks the result against the published totals. The commodity tables are on a "through banks" basis; the balance-of-payments figure deducts freight and adds other flows, so the zoomed header shows both numbers rather than rescaling tiles to force them to match.

Remittances

SBP's country series are nested: U.A.E. already contains Dubai, Abu Dhabi and Sharjah; "Other GCC" contains Bahrain, Kuwait, Oman and Qatar; "ten European countries" contains Belgium through Sweden. Adding every series overstates the total by 42%. The site uses the fifteen-source partition that reconciles exactly to SBP's published total, and the build fails if it ever stops doing so.

Poverty & Wealth (on the District & Tehsil Map)

Multidimensional Poverty Index (district)

An Alkire–Foster adjusted headcount, M0 = H × A, computed directly from PSLM 2019-20 household microdata — from the joint distribution of deprivations across households, not from district averages. Two equally weighted dimensions: education (years of schooling; child school attendance, ¼ each) and living standards (electricity, cooking fuel, sanitation, drinking water, housing materials, 1/10 each). The poverty cutoff is k = 1/3, the global-MPI standard, and estimates are person-weighted using PSLM survey weights. The health dimension is deliberately omitted: MPI health indicators require DHS microdata that cannot be linked to PSLM households, so this is best read as a living-conditions MPI. It covers 119 of 141 districts — the rest were not sampled by PSLM. The national aggregate (M0 = 0.222, headcount 39.2%) sits on top of the official Pakistan MPI headcount.

Satellite layers (tehsil)

Relative Wealth Index is Meta's machine-learning estimate on a ~2.4 km grid, aggregated to tehsils as a population-weighted mean. Population is WorldPop 2020 (UN-adjusted, 1 km), zonal-summed; it totals 220.7 million, matching the UN estimate. Night-time lights are VIIRS DNB June composites for 2020–2026. Two corrections matter and are applied: a 1 nW background floor (over half the raw radiance total is diffuse haze from airglow and moonlit snow or sand), and a persistent-gas-flare mask. Tehsils below one person per km² are flagged and withheld, because over empty terrain the signal measures surface albedo rather than activity. Note that night-lights are themselves an input to the Relative Wealth Index, so those two layers are not independent of each other; the survey-based MPI is the one independent benchmark.

Rural facilities (tehsil)

PBS's Mouza Census 2020, a hundred-per-cent count of 48,738 revenue villages carried out with the provincial revenue departments. For each mouza an enumerator records what exists in it — a girls' primary school, a basic health unit, a metalled street, mains electricity — so every figure here is a share of mouzas, not of people. A mouza of 12,000 counts the same as a mouza of 300, and the frame is rural by construction: cities are not revenue villages, so urban Karachi and the city tehsils sit outside it entirely.

PBS does not publish the denominator, and its own indicator blocks disagree about how many mouzas answered — only 33 of 544 enumerated tehsils give a single consistent base. Each block is therefore divided by its own row sum, and where the blocks diverge by more than 5% the detail panel says so. PBS enumerates 595 tehsils against the boundary file's 553, mostly because it carries sub-tehsils created after the polygons were drawn, so those are pooled into the unit they were carved from; the crosswalk is published alongside the code. Azad Jammu and Kashmir and Gilgit-Baltistan were not enumerated in this round. Neither were Mand and Tump in Kech or Kallag in Panjgur, though every neighbouring sub-tehsil reports normally.

Limitations