How the map is made.
A spatial view is only as useful as the methods behind it. Here is the path from public data to an interpretable map.
01 / Geography & coordinate systems
District polygons come from the Department of Statistics Malaysia’s data-open repository. Matching uses exact normalised names within the state; geographic codes from the boundary source supply stable identifiers. Unmatched, duplicate or ambiguous records block the preparation step and are recorded in a reconciliation report.
Geometry is stored as MultiPolygon in WGS84 (EPSG:4326). Invalid polygons are repaired with Shapely make_valid only when the result remains a valid polygon. A state polygon is derived by dissolving district polygons.
02 / Population & density
The official CSV expresses population in thousands of people. Each value is multiplied by 1,000. Only overall ethnicity is selected; totals, sex and age categories are processed separately to avoid double counting. Children are aged 0–14, working age is 15–64, and older people are 65+.
Areas are calculated in the WGS84 / UTM zone of each polygon centroid, covering Peninsular Malaysia and Borneo. This measures all mapped polygon surfaces and may include water. It is not a certified land-area denominator. The projection is chosen per area rather than using Penang’s zone nationwide. State statistics sum district values and can differ from separately published state totals.
03 / Choropleth classification
Equal interval splits the range into equal widths. Quantile uses ordered observations to form groups with approximately equal counts. Ties remain together and duplicate thresholds collapse, so fewer classes may appear. The first interval includes its lower bound; subsequent intervals exclude it. Upper bounds are always included. Constant values receive one class. Missing values are grey and excluded from class calculations.
04 / Time, comparison & missing data
2020 uses adjusted census data; later years are mid-year estimates. One fixed boundary snapshot is applied to all years; historical boundary equivalence has not been established. Changes describe population values and should be interpreted with this limitation.
Null is never converted to zero. Age and state aggregates require all components. Percentage differences use the first selected area as baseline and are undefined when it is zero or missing. Published figures are rounded, so components may not sum exactly to totals. Descriptive district differences do not establish causes or measure individual residents’ circumstances.
Research roadmap
Household income, absolute poverty and basic amenities are available from published DOSM survey estimates. State values come from published series, not district sums or simple averages. Income uses nominal RM; rate changes use percentage points. 2024 Sabah/Sarawak district values are withheld pending compatible boundaries. Education and labour indicators are planned. GPSI is a future research service; no validated socioeconomic score is calculated in V1. Spatial autocorrelation and composite indices require additional data harmonisation and formal validation.