Python
This package provides three data models for accessing Philippine barangay information, each optimized for different use cases.
BARANGAY
Dictionary structure has three paths:
- region -> province -> municipality -> barangay
- region -> highly urbanized city (HUC) -> barangay
- region -> municipality -> barangay
The basic BARANGAY data model follows the parent -> child relationship directly with the terminal nodes as list of strings.
from barangay import BARANGAY
ncr: dict = BARANGAY["National Capital Region (NCR)"]
print(f"NCR Components: \n\t{'\n\t'.join(list(ncr.keys()))}")
city_of_manila_municipalities: dict = ncr["City of Manila"]
print(
"City of Manila Municipalities: \n\t"
f"{'\n\t'.join(list(city_of_manila_municipalities.keys()))}"
)
binondo_barangays: list = city_of_manila_municipalities["Binondo"]
print(f"Binondo Barangays: \n\t{'\n\t'.join(binondo_barangays)}")
NCR Components:
City of Manila
City of Caloocan
City of Las Piñas
City of Makati
City of Malabon
City of Mandaluyong
City of Marikina
City of Muntinlupa
City of Navotas
City of Parañaque
City of Pasig
City of San Juan
City of Taguig
City of Valenzuela
Pasay City
Quezon City
Pateros
City of Manila Municipalities:
Binondo
Ermita
Intramuros
Malate
Paco
Pandacan
Port Area
Quiapo
Sampaloc
San Miguel
San Nicolas
Santa Ana
Santa Cruz
Tondo I/II
Binondo Barangays:
Barangay 291
Barangay 290
Barangay 293
Barangay 294
Barangay 292
Barangay 289
Barangay 296
Barangay 287
Barangay 288
Barangay 295
BARANGAY_EXTENDED
BARANGAY_EXTENDED also follows the relationship directly but with a recursive parent -> component structure, allowing a richer metadata (name, code, level).
To demonstrate, let's try traversing the structure.
from barangay import BARANGAY_EXTENDED
import random
Region Hierarchy Tree (Philippines → region)
Let's first examine the data structure:
regions = [x for x in BARANGAY_EXTENDED["components"]]
[{'name': 'Bangsamoro Autonomous Region In Muslim Mindanao (BARMM)',
'type': 'region',
'psgc_id': '1900000000',
'parent_psgc_id': '0000000000',
'nicknames': None,
'components': [{'name': 'Basilan',
'type': 'province',
'psgc_id': '1900700000',
'parent_psgc_id': '1900000000',
'nicknames': None,
'components': [{'name': 'City of Lamitan',
...
Creating container for the names of entities in the children components for easier browsing.
region_names = [x["name"] for x in BARANGAY_EXTENDED["components"]]
['Bangsamoro Autonomous Region In Muslim Mindanao (BARMM)',
'Cordillera Administrative Region (CAR)',
'MIMAROPA Region',
'National Capital Region (NCR)',
'Negros Island Region (NIR)',
'Region I (Ilocos Region)',
'Region II (Cagayan Valley)',
'Region III (Central Luzon)',
...
Then let's print 3 random components from the pool.
sampled_regions = random.sample(region_names, k=3)
print(f"Sample regions in the Philippines: \n\t{'\n\t'.join(sampled_regions)}")
Sample regions in the Philippines:
Region XI (Davao Region)
Bangsamoro Autonomous Region In Muslim Mindanao (BARMM)
MIMAROPA Region
Repeating the Process (Region → province/HUC)
Let's now repeat the process for subsequent levels in the hierarchy by creating using Davao Region as reference.
davao_region = [x for x in regions if x["name"] == "Region XI (Davao Region)"][0]
{'name': 'Region XI (Davao Region)',
'type': 'region',
'psgc_id': '1100000000',
'parent_psgc_id': '0000000000',
'nicknames': None,
'components': [{'name': 'Davao del Norte',
'type': 'province',
'psgc_id': '1102300000',
'parent_psgc_id': '1100000000',
'nicknames': None,
'components': [{'name': 'Asuncion',
...
and then performing the steps done above:
davao_provinces_and_hucs = [x for x in davao_region["components"]]
davao_provinces_and_hucs_names = [x["name"] for x in davao_region["components"]]
print(
"Sample provinces and HUCs in Davao Region: "
f"{random.sample(davao_provinces_and_hucs_names, k=3)}"
)
Sample provinces and HUCs in Davao Region: ['Davao Occidental', 'Davao del Norte', 'Davao de Oro']
HUC → barangay
# Get HUC hierarchical tree
print("\nSample hierarchy for highly urbanized cities (HUCs):")
davao_city = [x for x in davao_provinces_and_hucs if x["name"] == "City of Davao"][0]
# Get barangays in a city
davao_city_barangays = [x for x in davao_city["components"]]
davao_city_barangay_names = [x["name"] for x in davao_city["components"]]
print(f"Sample Davao City barangays: {random.sample(davao_city_barangay_names, k=3)}")
Sample hierarchy for highly urbanized cities (HUCs):
Sample Davao City barangays: ['Barangay 26-C', 'Manambulan', 'Tagluno']
province → municipality → barangay
# Get provincial hierarchical tree
print("\nSample for provinces:")
davao_oriental_province = [
x for x in davao_provinces_and_hucs if x["name"] == "Davao Occidental"
][0]
davao_oriental_municipalities = [x for x in davao_oriental_province["components"]]
davao_oriental_municipalities_names = [
x["name"] for x in davao_oriental_province["components"]
]
print(
f"Sample Davao Oriental municipalities: {random.sample(davao_oriental_municipalities_names, k=3)}"
)
sarangani_municipality = [
x for x in davao_oriental_municipalities if x["name"] == "Sarangani"
][0]
sarangani_barangays = [x for x in sarangani_municipality["components"]]
sarangani_barangay_names = [x["name"] for x in sarangani_municipality["components"]]
print(f"Sample Sarangani barangays: {random.sample(sarangani_barangay_names, k=3)}")
Sample for provinces:
Sample Davao Oriental municipalities: ['Don Marcelino', 'Santa Maria', 'Malita']
Sample Sarangani barangays: ['Patuco', 'Tinina', 'Tucal']
BARANGAY_FLAT
Flat list with parent references. Best for search, filtering, and DataFrame operations.
from barangay import BARANGAY_FLAT
# Filter by type
barangays = [item for item in BARANGAY_FLAT if item["type"] == "barangay"]
print(f"Total barangays: {len(barangays)}")
# Find by PSGC ID
target = next((b for b in barangays if b["psgc_id"] == "1900702001"), None)
print(f"Found: {target['name']} (PSGC: {target['psgc_id']})")