How every number on the atlas was produced
Every value in this dashboard was computed from the primary source files — no placeholder
or modelled numbers are shown. The badge reads Live data once data/master.json
carries "status": "LIVE", which the build pipeline sets when it finishes.
| Source | What it provides | Coverage | Files read |
|---|---|---|---|
| DGHS / MIS daily dengue bulletin | Daily admissions, deaths, discharges by division, district and hospital | May 2013 – 29 Oct 2025 (district detail from 30 Jul 2019) | 21 workbooks, 6,751 worksheets |
| DGHS patient line lists | Individual case records: age, sex, hospital, upazila, outcome | 2022 – 29 Oct 2025 | 4 workbooks, 522,079 records |
| DGHS death lists | Individual death records | 2016 – 2025 | 10 workbooks |
| Bangladesh Meteorological Department | Temperature, rainfall, humidity, sunshine, wind, cloud, dew point | 1953 – Dec 2022, 42 stations | 15 files, 15.1 million observations |
NOAA GHCN-Daily (climate_data_bangladesh.csv) |
Mean and minimum temperature, rainfall — continues the record after BMD stops | Jan 2023 – 16 Dec 2024, 10 stations | 1 file, 8,706 station-days |
| Department of Environment, CAMS (processed, not published in this build) | PM2.5, PM10, SO₂, NO, NO₂, NOₓ, CO, O₃ and on-site meteorology | Nov 2012 – 2025, 17 stations | 5 workbooks, 360,374 station-hours |
| BBS Population & Housing Census 2022 | Boundaries, geocodes and population for 8 divisions, 64 districts, 600 upazilas | 2022 | 3 GeoJSON files |
The bulletin is a Bengali report pasted into Excel, one worksheet per day, and its layout changes four times across the thirteen years. Four era-specific parsers walk every sheet, read the bulletin date from the sheet body rather than the tab name, and separate detail rows from the district, division and national subtotal rows.
Bulletins from 2013 to 2021 store Bengali in the legacy Bijoy / SutonnyMJ encoding, so a verified lookup maps all 64 legacy district spellings onto the BBS census names before anything is joined.
Monthly district counts are reconstructed two ways — by summing the 24-hour admissions column, and by differencing the year-to-date cumulative column between month ends — and the two are compared. The cumulative column is preferred because it is robust to missing days; single-day spikes are removed with a centred five-day rolling median and the counter is forced monotonic within each year. Each district-year is then rescaled so its months reproduce the bulletin's own year-end figure exactly.
Neither BMD nor DoE supplies station coordinates with these files. Each station is therefore anchored to the centroid of the district it sits in, taken from the census boundary file, and every district is matched to its nearest anchored station. 34 of 64 districts contain a BMD station; the remaining districts sit a median of 41 km from the one used. Only 12 districts contain an air-quality monitor, and the rest average 63 km away — which is why the tooltip always names the station and its distance.
BMD three-hourly observations are aggregated to daily values with explicit rules: maximum and
minimum from the daily extremes, mean from the eight observations, rainfall as the 24-hour sum.
All of BMD's missing codes (* through ***** and the literal string
NaN) become missing values, and every variable is screened against a physical range.
CAMS columns are mapped by header text, never by position, because PM2.5 and PM10 swap places between the 2023 and 2024 workbooks. A daily mean is computed only when at least 18 of the 24 hours are present. Excel error strings and out-of-range readings — Gazipur's negative barometric pressure, humidity above 100% — are removed before aggregation. For 2025 the screened DoE file is used, because it is the only one covering stations 6 to 16.
The BMD files supplied end in December 2022. The GHCN-Daily export covers ten Bangladesh synoptic and airport stations to 16 December 2024, so it continues the temperature and rainfall series past that point. Before splicing, the two were checked against each other.
| Variable | Paired station-months | Correlation | GHCN − BMD | Decision |
|---|---|---|---|---|
| Mean temperature | 50 | r = +0.982 | median −0.02 °C | Per-station offset removed where 3+ paired months exist, pooled median otherwise |
| Minimum temperature | 3 | r = +1.000 | −0.13 °C | Pooled offset removed |
| Rainfall | 20 | r = +0.966 | median ratio 1.0 | Left uncorrected — too few paired wet months to fit a scale factor |
| Maximum temperature | — | — | — | Not continued. GHCN's TMAX field is 66% missing; only 2 months survive the completeness rule |
Nine of the ten stations sit within −0.43 to −0.18 °C of their BMD partner. Chattogram is the exception at +1.02 °C, because the GHCN station is Shah Amanat airport on the coast while the BMD station is inland — a real siting difference, and the reason the correction is applied per station rather than globally. The offset is subtracted from the GHCN values so the joined series stays on the BMD scale, and August mean temperature at Dhaka runs 30.0 · 29.5 · 29.4 · 30.3 (BMD) then 29.5 · 29.1 (GHCN) with no step at the join.
GHCN is also the first source in this project to carry real station coordinates, so its ten stations are placed by point-in-polygon rather than by district centroid — all ten fall inside the district they are named for, and Ishurdi correctly resolves to Pabna. With only ten stations, though, the other 54 districts sit a median of 56 km (maximum 104 km) from the nearest one for 2023–2024, against 41 km under the 42-station BMD network. Those months are flagged in blue as GHCN, spliced onto BMD in every tooltip.
This version carries dengue, temperature and rainfall only — nine indicators. Air
quality is still parsed, screened and written to clean_data/cams_station_month.csv
by the pipeline, and so are humidity, sunshine, wind and cloud; they are simply not written
into master.json. The list lives in one place, the KEEP constant at
the top of scripts/s9_assemble.py — add an id back to it, re-run that script, and
the indicator reappears in the picker. Dropping them took the data file from 1.6 MB to
0.94 MB, so the atlas loads faster.
The map draws on standard OpenStreetMap tiles, which need no account and no API key. CARTO's basemaps now require one, so they are not used. If this atlas ever carries heavy public traffic, move to your own tile host or a provider plan — the OSM tile usage policy asks for light, attributed use, and the attribution in the corner must stay.
The map fits the country to the full panel on load and whenever you change level, and it re-fits when the window is resized. ⤢ Full extent returns to the whole of Bangladesh, computed from the division boundary file rather than a fixed zoom.
Every value on the map carries one of these, shown in the tooltip:
| Limit | Why |
|---|---|
| District-level dengue starts 30 July 2019 | Bulletins before that date list reporting hospitals only, with no district column. 2013–2018 is available as a national series. |
| The 2022 line list holds 54% of that year's cases | The bulletin is used for counts in every year, so the shortfall does not affect the map — but age and sex breakdowns for 2022 are drawn from that partial list. |
| Upazila dengue covers 560 of 600 units, 2022–2025 only | Upazila names in the line list are free text; 145,004 records name a Dhaka city zone or an unrecognisable place and could not be assigned. |
| Weather and air quality are not upazila-level | They are point measurements. The map stays on districts for those indicators rather than painting identical polygons. |
| Dhaka city is folded into Dhaka district | DGHS reports the city separately, but the district polygon contains it. City-only figures remain available in the source tables. |
| Weather after December 2022 comes from 10 stations, not 42 | The GHCN network in Bangladesh is much sparser than BMD's, so 2023–2024 district weather is a longer-distance estimate. Max temperature, humidity, sunshine, wind and cloud stop entirely. |
| GHCN rainfall is uncorrected | Only 2 paired station-months exceeded 10 mm, too few to fit a scale factor. Individual extreme months should be checked against BMD's own 2023–2024 record when it arrives — Dhaka's 812 mm in August 2023 rests on a single 336 mm day. |
| Air quality before 2025 covers five Dhaka-area stations | The CAMS network expanded to 16 stations only in 2025, so district air-quality colour outside greater Dhaka is a long-distance estimate before that year. |
The scripts/ folder holds the entire pipeline in run order. With Python 3 and
pandas openpyxl xlrd pyarrow installed, run them in sequence against the source
folder; the last one writes data/master.json. Nothing in the pipeline modifies
the original files.
Boundaries © Bangladesh Bureau of Statistics, Population & Housing Census 2022. Dengue data © Directorate General of Health Services, Management Information System. Weather data © Bangladesh Meteorological Department. Air quality data © Department of Environment, Clean Air and Sustainable Environment project.