Skip to main content

Data & Python

Dhaka Livability Index

A data case study comparing Dhaka neighborhoods using mapped amenities, 7 day air quality, and evening peak mobility.

Dhaka neighborhoods are usually judged by reputation, rent, traffic, or personal experience. This project turns that question into a small data product. It compares selected areas using amenity access, Public Space Access, 7 day air quality, and evening peak travel time to other areas in the dataset.

Areas analyzed

0

Amenity radius

0m

About 7.07 sq km around each area center

Air quality sample

0 days

Mobility mode

Evening peak peer area travel

This is a comparative experimental index across the selected 10 areas, not an official livability index.

Findings

Key Findings

Top overall rank

Banani

Banani ranked first in this experimental index with a score of 83.43.

Best evening peak mobility

Banani

Banani had the strongest peer area evening peak mobility score.

Best 7 day AQI sample

Badda and Bashundhara

Badda and Bashundhara performed strongest on Google Universal AQI.

Read the scores as relative

0 to 100

100 means strongest among the selected areas. 0 means weakest among the selected areas. It does not mean perfect or absent.

Methodology

Methodology Summary

The scoring is deliberately simple and relative. It is meant to compare the selected 10 areas in a transparent portfolio case study, not to produce an official citywide model.

Why 1500m?

For amenity access, this index uses a 1500m radius around each area's selected center point. This creates a circle of about 7.07 sq km. The goal is to compare nearby amenity concentration rather than everything that might fall within a broad neighborhood name.

This makes the score more about local accessibility than total neighborhood size. Larger or more spread out areas may score lower if key amenities are located outside the 1500m circle.

For example, Bashundhara performs poorly in the amenity based categories in this version. This does not necessarily mean Bashundhara has few amenities overall. It more likely means that, within the selected 1500m circle around the chosen center point, mapped amenities are less concentrated than in denser areas such as Banani or Dhanmondi. In a larger radius model, Bashundhara's result could change.

Amenity access

Counts mapped places within 1500m, converts them to density per square km, applies log transformation, and normalizes scores from 0 to 100.

Mobility

Measures evening peak travel time from each area to every other area in the selected list. Self routes are excluded. Lower average travel time gives a higher mobility score.

Air quality

Google Universal AQI is used, where higher values are better. The page scores the 7-day historical sample in that direction.

Overall score

Uses the frozen formula: 40% essential amenities, 25% mobility, 20% air quality, 10% Public Space Access, and 5% data confidence.

Ranking

Overall Livability Ranking

The ranking uses the frozen local dataset score. Scores are relative to the selected 10 areas.

100 means strongest among selected areas.
0 means weakest among selected areas.
It does not mean perfect or absent.

Scroll sideways to view all columns.

Frozen Dhaka Livability Index ranking
1Banani
83.43
75.25
100.00
66.67
100.00
2Gulshan
74.35
74.91
90.89
33.33
100.00
3Badda
64.47
74.70
26.71
100.00
29.14
4Mohammadpur
63.95
92.89
55.34
0.00
79.55
5Mirpur
60.63
74.82
67.73
16.67
54.33
6Dhanmondi
59.04
83.33
44.83
16.67
61.66
7Uttara
57.54
57.48
25.97
83.33
63.92
8Motijheel
54.12
84.36
13.11
33.33
54.33
9Khilgaon
52.53
71.90
0.00
66.67
54.33
10Bashundhara
41.88
0.00
67.51
100.00
0.00

Interactive

Build Your Own Ranking

Adjust the weights to see how the ranking changes when priorities shift. The calculation normalizes weights if the total is not exactly 100.

Weight total

100 / 100

Scroll sideways to view all columns.

Custom Dhaka Livability Index ranking
1Banani
83.43
75.25
100.00
66.67
100.00
2Gulshan
74.35
74.91
90.89
33.33
100.00
3Badda
64.47
74.70
26.71
100.00
29.14
4Mohammadpur
63.95
92.89
55.34
0.00
79.55
5Mirpur
60.63
74.82
67.73
16.67
54.33
6Dhanmondi
59.04
83.33
44.83
16.67
61.66
7Uttara
57.54
57.48
25.97
83.33
63.92
8Motijheel
54.12
84.36
13.11
33.33
54.33
9Khilgaon
52.53
71.90
0.00
66.67
54.33
10Bashundhara
41.88
0.00
67.51
100.00
0.00

Topics

Topic Wise Ranking

Each topic is scored from 0 to 100 relative to the selected 10 Dhaka areas. Public Space Access uses mapped parks as a proxy.

Scroll sideways to view all columns.

Healthcare ranking
1Dhanmondi
96.42
2Mohammadpur
95.07
3Mirpur
88.93
4Motijheel
87.37
5Khilgaon
84.37
6Badda
73.44
7Gulshan
70.25
8Uttara
68.42
9Banani
67.31
10Bashundhara
0.00

Appendix

Appendix: Detailed Methodology and Data Tables

These tables are summary-level views of the frozen dataset. The raw hourly air quality rows are intentionally not rendered here.

Detailed Methodology

Formula, transformations, and limitations.

A. Data sources

Amenities were collected from Google Places Aggregate API. Mobility was collected from Google Routes API. Air quality was collected from Google Air Quality API history lookup. No live APIs are called from this portfolio page; it uses a frozen local dataset.

B. Amenity collection

For each selected area, the system used the area center coordinate and a 1500m radius. For each amenity category, it collected mapped place counts. The count is mapped amenity availability from Google Places, not an official census.

C. Why the radius matters

The amenity model is intentionally a 1500m radius around a selected center point for each area. The measured area of that circle is:

area_km2 = π × radius_meters² / 1,000,000

For 1500m: area_km2 = π × 1500² / 1,000,000 ≈ 7.07 sq km

The index compares amenity density inside this circle, so a compact dense area can score better than a larger more spread out area. This is intentional: the current model is measuring nearby access, not total area level inventory.

A future version could compare multiple radius options such as 1500m, 2500m, and 3000m.

D. Amenity category mapping

Topic scoreAmenity categories usedMeaning
Healthcarehospital, pharmacyAccess to mapped healthcare related amenities
EducationschoolAccess to mapped schools
Financebank, atmAccess to mapped banking and cash withdrawal points
Food and Daily Needsrestaurant, supermarketAccess to mapped food and grocery related places
Transport Accessbus_stationAccess to mapped bus related transport points
Public Space AccessparkAccess to mapped parks as a proxy for Public Space Access

E. How individual category scores are calculated

For every area and every amenity category, the system starts with the raw mapped count from Google Places Aggregate API. Example: Area: Banani; Category: restaurant; Radius: 1500m; Raw count: number of mapped restaurants found within 1500m.

The raw count is converted into density so every area can be compared fairly.

area_km2 = π × radius_meters² / 1,000,000

For 1500m: area_km2 ≈ 7.07 sq km

count_per_sq_km = raw_count / area_km2

transformed_value = log1p(count_per_sq_km)

Google Places counts can be very high in dense areas. log1p reduces the impact of extreme counts so one category does not dominate the score only because the raw count is very large.

category_score = (transformed_value_for_area - minimum_transformed_value_for_that_category)

/ (maximum_transformed_value_for_that_category - minimum_transformed_value_for_that_category) × 100

For each category, the area with the strongest transformed density gets 100. The area with the weakest transformed density gets 0. Other areas receive scores between 0 and 100.

If Banani has the highest transformed restaurant density among the selected 10 areas, Banani gets restaurant_score = 100. If Bashundhara has the lowest transformed restaurant density, Bashundhara gets restaurant_score = 0. This does not mean Bashundhara has no restaurants. It only means it is weakest for restaurant density within this selected comparison set.

F. Topic score calculation

When a topic has multiple categories, the topic score is the average of those category scores.

  • Healthcare: average of hospital_score and pharmacy_score
  • Finance: average of bank_score and atm_score
  • Food and Daily Needs: average of restaurant_score and supermarket_score
  • Education: school_score
  • Transport Access: bus_station_score
  • Public Space Access: park_score

G. Essential Amenities calculation

Essential Amenities is calculated from Healthcare, Education, Finance, Food and Daily Needs, and Transport Access.

essential_amenities_score =

average of healthcare_score, education_score, finance_score,

food_and_daily_needs_score, and transport_access_score

H. Mobility scoring

The mobility score uses an evening peak mobility sample. Each area is routed to every other selected area. Self routes are excluded. For 10 areas, this creates 90 route pairs.

The system calculates average travel time for each area. Lower average travel time gives a higher mobility score. This avoids the old bias where Motijheel or Gulshan scored well because they were also fixed destinations.

average_duration_seconds = average travel time from one area to all other selected areas

mobility_score = inverse normalized score from 0 to 100

I. Air quality scoring

The air quality score uses 7 days of hourly Google Universal AQI data. Google Universal AQI is higher is better. Median AQI is used for scoring. PM2.5 and PM10 are shown as diagnostics, but they are not the main score.

air_quality_score = normalized median Universal AQI score across selected areas

Air quality is center point based, so it represents the selected coordinate, not every street inside the neighborhood.

J. Overall formula

Overall Livability Score =

40% Essential Amenities

25% Mobility

20% Air Quality

10% Public Space Access

5% Data Confidence

Data Confidence reflects whether the required data components were available for the area.

K. Limitations

  1. Scores are relative to the selected 10 areas.
  2. Google Places counts are mapped availability, not an official census.
  3. The 1500m radius measures local amenity access around a selected center point.
  4. It does not cover the full boundary of large or irregular neighborhoods.
  5. Results for larger or more spread out areas (for example, Bashundhara) may be sensitive to the chosen center coordinate and radius.
  6. Scores should be read as comparative signals, not absolute judgments.
  7. Amenity quality is not measured.
  8. Public Space Access uses parks as a proxy.
  9. Air quality is center point based.
  10. Mobility reflects one evening peak collection window.
  11. This is a comparative experimental index, not an official urban planning model.

All scores are relative to the selected 10 areas. A score of 100 means strongest within this dataset, not perfect. A score of 0 means weakest within this dataset, not absent.

Overall Ranking Table

Frozen scores and component scores by area.

Scroll sideways to view all columns.

Appendix overall ranking table
1Banani
83.43
75.25
100.00
66.67
100.00
2Gulshan
74.35
74.91
90.89
33.33
100.00
3Badda
64.47
74.70
26.71
100.00
29.14
4Mohammadpur
63.95
92.89
55.34
0.00
79.55
5Mirpur
60.63
74.82
67.73
16.67
54.33
6Dhanmondi
59.04
83.33
44.83
16.67
61.66
7Uttara
57.54
57.48
25.97
83.33
63.92
8Motijheel
54.12
84.36
13.11
33.33
54.33
9Khilgaon
52.53
71.90
0.00
66.67
54.33
10Bashundhara
41.88
0.00
67.51
100.00
0.00

Topic Scores Table

Area-level score inputs used for the index.

Scroll sideways to view all columns.

Appendix topic scores table
Mohammadpur
92.89
95.07
100.00
74.63
94.77
100.00
79.55
55.34
0.00
Motijheel
84.36
87.37
81.26
100.00
95.59
57.56
54.33
13.11
33.33
Dhanmondi
83.33
96.42
97.24
86.33
96.12
40.54
61.66
44.83
16.67
Banani
75.25
67.31
74.68
79.09
82.21
72.97
100.00
100.00
66.67
Gulshan
74.91
70.25
78.71
83.28
84.75
57.56
100.00
90.89
33.33
Mirpur
74.82
88.93
97.02
69.09
97.53
21.53
54.33
67.73
16.67
Badda
74.70
73.44
88.59
74.97
95.95
40.54
29.14
26.71
100.00
Khilgaon
71.90
84.37
95.59
71.65
86.36
21.53
54.33
0.00
66.67
Uttara
57.48
68.42
82.96
53.19
82.84
0.00
63.92
25.97
83.33
Bashundhara
0.00
0.00
0.00
0.00
0.00
0.00
0.00
67.51
100.00

Amenity Category Table

Mapped category counts and density scores.

Scroll sideways to view all columns.

Appendix amenity category table
BaddaHospital8011.32
61.77
BaddaPharmacy35049.51
86.78
BaddaSchool22531.83
88.59
BaddaBank12317.40
75.77
BaddaATM8211.60
73.99
BaddaRestaurant829117.28
89.19
BaddaSupermarket618.63
100.00
BaddaPark91.27
29.14
BaddaBus Station20.28
40.54
BaddaMosque14320.23
78.44
BananiHospital10615.00
69.60
BananiPharmacy12918.25
64.69
BananiSchool14420.37
74.68
BananiBank14220.09
79.32
BananiATM9813.86
78.81
BananiRestaurant868122.80
90.41
BananiSupermarket365.09
77.29
BananiPark436.08
100.00
BananiBus Station40.57
72.97
BananiMosque9613.58
62.70
BashundharaHospital40.57
0.00
BashundharaPharmacy10.14
0.00
BashundharaSchool81.13
0.00
BashundharaBank00.00
0.00
BashundharaATM00.00
0.00
BashundharaRestaurant233.25
0.00
BashundharaSupermarket20.28
0.00
BashundharaPark30.42
0.00
BashundharaBus Station00.00
0.00
BashundharaMosque162.26
0.00
DhanmondiHospital30543.15
100.00
DhanmondiPharmacy44863.38
92.33
DhanmondiSchool29641.88
97.24
DhanmondiBank16923.91
83.65
DhanmondiATM14520.51
89.61
DhanmondiRestaurant1,244175.99
100.00
DhanmondiSupermarket537.50
93.80
DhanmondiPark202.83
61.66
DhanmondiBus Station20.28
40.54
DhanmondiMosque17725.04
87.00
GulshanHospital11716.55
72.38
GulshanPharmacy14921.08
67.83
GulshanSchool16423.20
78.71
GulshanBank17124.19
83.94
GulshanATM11215.84
82.46
GulshanRestaurant972137.51
93.42
GulshanSupermarket385.38
79.54
GulshanPark436.08
100.00
GulshanBus Station30.42
57.56
GulshanMosque9914.01
63.91
KhilgaonHospital11115.70
70.89
KhilgaonPharmacy62388.14
99.78
KhilgaonSchool28139.75
95.59
KhilgaonBank9313.16
68.95
KhilgaonATM8512.03
74.95
KhilgaonRestaurant935132.28
92.39
KhilgaonSupermarket415.80
82.74
KhilgaonPark172.41
54.33
KhilgaonBus Station10.14
21.53
KhilgaonMosque23733.53
98.82
MirpurHospital14921.08
79.25
MirpurPharmacy62988.99
100.00
MirpurSchool29441.59
97.02
MirpurBank8111.46
65.63
MirpurATM8011.32
73.32
MirpurRestaurant1,118158.16
97.15
MirpurSupermarket588.21
97.76
MirpurPark172.41
54.33
MirpurBus Station10.14
21.53
MirpurMosque20028.29
91.93
MohammadpurHospital23533.25
92.39
MohammadpurPharmacy57981.91
98.13
MohammadpurSchool32345.70
100.00
MohammadpurBank10514.85
71.90
MohammadpurATM9513.44
77.97
MohammadpurRestaurant981138.78
93.67
MohammadpurSupermarket557.78
95.42
MohammadpurPark294.10
79.55
MohammadpurBus Station60.85
100.00
MohammadpurMosque21530.42
94.86
MotijheelHospital17624.90
84.03
MotijheelPharmacy42660.27
91.20
MotijheelSchool17825.18
81.26
MotijheelBank32345.70
100.00
MotijheelATM21029.71
100.00
MotijheelRestaurant966136.66
93.26
MotijheelSupermarket578.06
97.00
MotijheelPark172.41
54.33
MotijheelBus Station30.42
57.56
MotijheelMosque24434.52
100.00
UttaraHospital669.34
56.52
UttaraPharmacy28340.04
82.02
UttaraSchool18826.60
82.96
UttaraBank466.51
52.45
UttaraATM385.38
54.10
UttaraRestaurant70199.17
84.73
UttaraSupermarket405.66
81.70
UttaraPark212.97
63.92
UttaraBus Station00.00
0.00
UttaraMosque11716.55
70.47

Mobility Table

Evening peak peer-area travel summary.

Scroll sideways to view all columns.

Appendix mobility table
Banani927.3 min27.7 min32.5 min228.3 sec/km
100.00
Gulshan929.8 min29.5 min35.0 min296.3 sec/km
90.89
Mirpur936.2 min33.1 min46.9 min223.4 sec/km
67.73
Bashundhara936.3 min37.5 min43.7 min154.2 sec/km
67.51
Mohammadpur939.7 min42.5 min44.8 min241.5 sec/km
55.34
Dhanmondi942.6 min42.0 min50.0 min267.8 sec/km
44.83
Badda947.7 min45.7 min51.9 min353.7 sec/km
26.71
Uttara947.9 min50.3 min54.6 min174.6 sec/km
25.97
Motijheel951.4 min56.1 min62.1 min291.6 sec/km
13.11
Khilgaon955.1 min58.6 min67.4 min316.9 sec/km
0.00

Air Quality Table

7-day summarized Google Universal AQI sample.

Scroll sideways to view all columns.

Appendix air quality summary table
Badda16847.049.035.745.8
100.00
high
Bashundhara16847.049.235.545.2
100.00
high
Uttara16846.048.735.745.0
83.33
high
Banani16845.048.736.145.8
66.67
high
Khilgaon16845.046.439.452.0
66.67
high
Gulshan16843.045.840.452.2
33.33
high
Motijheel16843.045.641.152.7
33.33
high
Dhanmondi16842.045.441.452.4
16.67
high
Mirpur16842.045.640.852.2
16.67
high
Mohammadpur16841.045.241.652.4
0.00
high