Methodology
How we turn open data into plain answers.
Short version: we use published numbers, compare each district with a typical district, write the finding as one sentence, and show the source.
1. “Typical” means the middle district
When we say “a typical district”, we mean the median: line up all districts with data from lowest to highest and take the middle one. For TepMap that is the median of the 142 districts with DOSM data. We use the median, not the average, so a few very large or very small districts don’t pull it.
Example (Pasir Mas, Kelantan)
Pasir Mas has 11.5 food places per 10,000 residents, so 1 food place for about 870 people. The median district has 20.7 per 10,000, so 1 for about 480 people.
2. Rates per 10,000 residents
Counts are divided by the district’s DOSM population estimate (2026) and multiplied by 10,000. In the text we turn rates into human units (“1 food place per 870 people”) and round them, usually to the nearest 10.
3. Places on the map
- We combine OpenStreetMap and Overture Maps places, remove duplicates that sit close together with similar names, and sort them into one list of categories (food & drink, groceries, mosques & surau, schools, clinics, offices and more).
- Coverage differs by area: rural places and small stalls are often missing. We say so on the page with a confidence note.
- The map dots show the places we hold for the district. The totals in the text use the same fused data.
4. Verdicts
“Is the market crowded?” compares people per food place with the typical district and gives one of four plain verdicts (crowded, about normal, some room, underserved). A verdict always comes with the numbers behind it and a “check the street before you commit” note. It is a starting point, not advice.
5. Age groups
Under 15, 15–34, 35–54 (shown as working adults) and 65+, from DOSM district estimates by age. “6 out of 10 people are under 35” means the 0–34 groups add up to about 60% of residents. Pictograms use a stated scale, e.g. one person icon = 100 residents.
6. What we don’t do
- We don’t estimate or fill missing numbers. Missing data shows as “no data”.
- We don’t adjust survey numbers unless the story says so.
- We don’t publish anything about individuals. Small counts in small areas are suppressed.
- We don’t take a political position. We describe what the data shows, not why.
7. Checks and corrections
Every headline number is checked twice against the source before publishing. If we get something wrong, we fix it and say what changed and when, on the page itself. Report an error.
District boundaries: OCHA COD-AB 2021 (144 districts). Districts created after 2021 are counted inside their parent until boundaries are updated.