Multimodal, time-dependent and equity-aware access to primary and community healthcare in Singapore: a graph-based analysis with observed opening hours

Published: 29 September 2026| Version 1 | DOI: 10.17632/5nbhhfk22j.1
Contributor:

Description

Data and code for a time-dependent, competition-aware analysis of access to primary and community healthcare in Singapore. Census 2020 residents are placed on 10,563 public-housing blocks by dasymetric allocation across flat types. A multimodal walking and public-transport graph is built for four departure windows (Wednesday 07:30, 14:00 and 20:00, and Sunday 13:00), and accessibility is computed with a three-step floating catchment estimator with Huff selection weights, carrying each provider's opening hours on the supply side so that a clinic which is shut contributes no capacity. Opening hours are observed for 1,428 of 1,463 providers. Polyclinic hours, which no Singapore source publishes in machine-readable form, were transcribed by hand from the three operators' own pages on 21 September 2026 and are included here with the source page recorded for each clinic. Contents: the full analysis pipeline (src/), the derived spatial layers (data_processed/), every reported result as JSON together with all 24 tables (outputs/), and the transcribed polyclinic hours (data_raw/). Bulk third-party source files are not redistributed; they are public and the included scripts fetch them directly. The derived layers are computed from OpenStreetMap (ODbL 1.0), Overture Maps, data.gov.sg (Singapore Open Data Licence) and published transit headways. See README.md for full provenance and upstream terms, which continue to apply to reuse of those layers. Coordinates throughout are SVY21 / EPSG:3414.

Files

Steps to reproduce

Run from the project root with the pinned Python environment. Order: (1) fetch scripts in src/ retrieve the public sources; (2) build_block_demand.py and geocode_hdb.py place Census 2020 residents on HDB blocks; (3) build_supply_v2.py assembles the provider roster and parses published schedules, then apply_polyclinic_hours.py attaches the transcribed polyclinic hours; (4) build_lta_graphs.py builds one transit graph per departure window from published headways; (5) rerun_v2.py computes accessibility per window and rerun_all_v2.py runs the 34-specification curve; (6) routes_flows_isochrones.py, access_equity.py and walk_only_bound.py produce the isochrone, equity and walk-only results; (7) lgcp_model.py and lgcp_propagate.py fit the log-Gaussian Cox process and integrate out the 1,041 unobserved clinics; (8) make_tables.py and the make_*_figures.py scripts render every table and figure. Each script states its inputs and outputs in its header docstring.

Categories

Health Geography

Licence