Final Project: Who Can Walk to the Metro in Tashkent?

Measuring how much of Tashkent the metro actually reaches on foot, which districts are left to the bus, and whether the bus-dependent parts of the city also get the thinnest bus service. Built from OpenStreetMap and a gridded population raster, with walking times computed along the real street network.

1. Topic, Goals, and Questions

The topic

Tashkent runs two transit systems that behave nothing alike. The metro is fast, punctual and unaffected by traffic, but it exists at only 49 stations. The bus network reaches almost everywhere — on the order of two thousand stops — but is slow, crowded and hostage to the same congestion as private cars. Whether a household has a metro station within walking distance is therefore not a small difference in convenience. It decides whether the whole city is available to them on a weekday evening, or only their own end of it.

That divide has been moving. The metro spent three decades as two and a half lines through the Soviet-era core; since 2020 it has grown by an above-ground ring and a southern extension, and the stations added in that push serve a very different kind of neighbourhood than the ones opened in 1977. Nobody has published a map of what that expansion actually bought, counted in residents rather than in kilometres of track.

This project builds that map. For every populated 100-metre cell in the city it computes the walking time — along real streets and footpaths, not straight lines — to the nearest metro entrance, the nearest bus stop, and the nearest bazaar. It then classifies each cell as metro-served, bus-only, or beyond walking distance of either, and aggregates those classifications into population-weighted statistics per district.

Why the bazaar is in this project

A conventional "15-minute city" study measures the walk to a supermarket. In Tashkent that is the wrong destination: daily food shopping happens at the bazaar, and the large bazaars — Chorsu, Alay, Farhod, Kuyluk — are also the transfer nodes where the bus network is densest. Including bazaars as a third destination class makes the analysis mean something locally, and it supplies an independent check: if a district's residents can walk to a bazaar but not to transit, that says something real about the shape of the city rather than about how the metro happens to be drawn.

Visualization goals

Intended audience

Three groups, in order of how much the design owes them. Tashkent residents comparing neighbourhoods, who need to find one place on a map and read one number. Transport planners weighing where a further metro extension or a bus-priority corridor would serve the most people, who need the per-station and per-district comparisons. Researchers and NGOs working on urban service provision in Central Asia, who need the method and its caveats stated plainly enough to reuse. The finished site should be readable in Uzbek and Russian, not only English.

Research questions

  1. Coverage. What share of Tashkent's population lives within a 5-, 10- and 15-minute walk of a metro entrance?
  2. Bus dependency. Which districts are effectively bus-only — what share of each district's residents can walk to a bus stop but not to any metro station?
  3. Double disadvantage. Do bus-dependent areas get denser bus service to compensate, or do they also have the fewest routes per stop? This is the question most likely to produce a finding that is not already obvious from looking at a metro map.
  4. What the expansion bought. How much population did the post-2020 ring and southern extension bring within walking distance, and which individual stations serve the most walk-up residents — and the fewest?
  5. Transit versus daily life. Does walking access to a bazaar coincide with walking access to transit, or are they two different maps of the same city?
  6. Method sensitivity. How much do the headline shares change when a straight-line buffer is replaced by a true network isochrone? Railways, canals and the arterial ring roads should make that gap large in specific, nameable places.

2. Datasets

OpenStreetMap — transit stops, destinations, city structure
Source: Overpass API, ODbL licence.
Acquisition: Python requests, one query per feature class over the bounding box 41.16, 69.11, 41.40, 69.42; every response cached to disk so the pipeline reruns without hitting the API again.
Processing: pair bus stops that represent opposite sides of one road, attach metro entrances to their parent station, extract per-stop route counts from route relations, reproject to EPSG:32642.
Key attributes: name, name:ru, name:uz, railway, station, public_transport, highway=bus_stop, amenity=marketplace, route relation membership.
Size: roughly 2,200 transit stop features, about 100 bazaars, 11–12 district polygons, and the full walkable street network.
WorldPop — gridded population
Source: WorldPop, CC BY 4.0.
Acquisition: direct download of uzb_ppp_2020_UNadj_constrained.tif — 11.8 MB, no API key required.
Processing: window to the Tashkent bounding box, sample non-empty cells to points, join each point to its district polygon.
Attributes: cell centroid, estimated residents, district.
Size: roughly 30,000 populated 100-metre cells. This is the analysis unit — every headline number in the project is a population-weighted statistic over it.
Geofabrik extract — walking network for isochrones
Source: Geofabrik, ODbL, rebuilt daily.
Acquisition: uzbekistan-latest.osm.pbf, 118 MB, fed to a local OSRM instance running the foot profile in Docker.
Processing: the /table endpoint returns many-to-many walking durations from population cells to candidate stops in batches. Walking speed is fixed at 4.8 km/h and stated explicitly wherever a figure in minutes appears.
Official district population — validation only
Source: Open Data Portal of Uzbekistan and the State Committee on Statistics.
Use: WorldPop is a model. Official district totals are used to check that the raster sums to a believable city, and the ratio is reported rather than hidden. Results are not rescaled unless the discrepancy proves large, in which case the rescaling is documented.
Size: twelve rows, two variables. Small, and worth it.
Wikidata — metro station opening years (stretch)
Source: Wikidata SPARQL endpoint, P1619 (date of official opening) for stations of the Tashkent metro.
Use: research question 4 only. If coverage turns out to be patchy, the fallback is a hand-checked table of the four construction eras (1977–91, 2001, the 2020 ring, the southern extension) — a dozen rows, verifiable by hand.
Risk: this is the one dataset the project can lose without losing a question outright. Question 4 degrades from a year-by-year curve to a four-way comparison.

Verified feature counts

Counts cover nodes, ways and relations over the Tashkent bounding box. The metro station count was re-queried against the live Overpass API on 6 September 2026 and returned 49 nodes, 0 ways, 0 relations. The remaining rows come from the earlier scoping run; the endpoint rate-limited further queries, so re-verifying them is the first task of week 2 rather than a claim made here.

Layer Count Note
Metro stations49railway=station + station=subway; re-verified 6 Sep 2026
Bus stops~2,040highway=bus_stop; inflated by opposite-side pairs
Bazaars~96amenity=marketplace
Metro entrancesto confirmrailway=subway_entrance; decides whether we walk to entrances or to station centroids
Bus route relationsto confirmroute=bus; the basis of the service-level metric
District boundaries11 or 12admin_level=6; see the caveat below

Three data problems, stated up front.

Bus stops are double-counted. A single kerbside location is usually mapped twice, once per direction of travel, and sometimes a third time as a public_transport=platform. This rules out count-based metrics such as "stops per square kilometre". It barely affects distance to the nearest stop, which is why the project is built on distance rather than counts — the same reasoning that makes the metric robust also makes pairing the stops an improvement rather than a precondition.

Tashkent has twelve districts, and OpenStreetMap may still show eleven. Yangihayot was split from Sergeli in 2020. If the boundary relation is absent we either digitise the split or report the two together and say so. Silently publishing a stale eleven-district geography would be the worse error, particularly since Yangihayot is exactly the kind of peripheral district this study is about.

Bus route relations are incomplete. Route counts per stop are a lower bound, not a census. Research question 3 rests entirely on this layer, so week 3 includes an explicit completeness audit; if coverage is too thin to support a service-level claim, the question is dropped rather than answered badly.

3. Analysis and Visualization Methods

Tools

Processing and analysis

  1. Resolve stops to walkable access points. For the metro this means entrances, not station centroids: a Tashkent station spans a wide intersection and its entrances can sit 150 metres apart, so walking to the centroid systematically misstates access for the households in between. Where entrances are not mapped, the station node is used and the substitution is flagged in the data rather than absorbed silently.
  2. Pair bus stops representing one location on two sides of a road, by clustering within 30 metres and requiring names to match, then keeping one access point per pair.
  3. Reproject everything to EPSG:32642 (UTM 42N) so distances come out in metres. Computing distance in unprojected degrees is the single most likely way to produce numbers that are wrong but plausible.
  4. Sample the population raster to points, drop empty cells, join to districts.
  5. Straight-line baseline. KD-tree nearest-neighbour distance from every populated cell to each destination class. It runs in seconds and gives a working end-to-end pipeline in week 3, before any routing infrastructure exists.
  6. Network isochrones. For each cell, take the eight nearest candidates by straight line, ask OSRM for walking durations to all eight, keep the minimum. Pre-filtering is what makes 30,000 × 2,000 tractable; taking eight rather than one guards against the case where the nearest stop is on the far side of a railway.
  7. Classify every cell at each threshold: metro-served, bus-only, or neither. This three-way classification is the project's core derived variable and feeds four of the six views.
  8. Aggregate into population-weighted district statistics and city-wide cumulative access curves.
  9. Service level per stop — count distinct route relations serving each stop, then take a population-weighted median route count for the bus-only population of each district. Question 3 is answered by plotting that against bus-only share.
  10. Sensitivity. Report every headline figure both ways, straight-line and network, and name the places where the two diverge most. The divergence is a result, not an error term.

User tasks supported

TaskSupported by
Locate and explorePan and zoom on the access surface; find your own neighbourhood and read its walk time
CompareDistrict composition bars; metro versus bus versus bazaar mode toggle
QuantifyCumulative access curve read at whatever threshold the user chooses
Discover relationshipsBus-only share against bus service level
Detect outliersStations with unusually low walk-up population; districts off the service trend line
FilterMode toggle and threshold slider propagating to every linked view
Trace changeMetro schematic coloured by opening era, showing what the expansion added

4. Visualization Sketches

Six views, each a different design idiom, sharing one selection state. They are ordered as an argument — where access ends, who is left on the bus, how many people that is, which districts, which stations, and whether service compensates — rather than as a gallery.

Sketch of a walking-time access surface map with a mode toggle <5 min 10 15+ metro bus 100 m grid, network walk time to nearest entrance
Access surface Choropleth of a continuous field, with mode toggle The primary view for question 1 — it shows where metro walking access ends, and the toggle turns the metro-versus-bus contrast into one click instead of two separate figures.
Sketch of a bivariate choropleth of metro access against bus access metro → bus-only orange = bus-only; purple = metro within 10 min
Bus dependency map Bivariate choropleth Answers question 2 in a single image: the orange corner of the legend is the bus-dependent city, which two separate single-variable maps would leave the reader to intersect by eye.
Sketch of cumulative population access curves for three modes ? % 10 min % of residents within reach walking minutes → bus stop bazaar metro
Cumulative access curves Cumulative distribution function Turns the maps into the headline number at whatever threshold the reader picks, and puts all three modes on one axis so the size of the metro–bus gap is read directly rather than inferred.
Sketch of ranked stacked bars of district population by access class Mirobod Chilonzor Yunusobod Sergeli Yangihayot metro bus only neither
District composition, ranked Ranked stacked bar / part-to-whole The direct answer to question 2 for a planner: districts sorted by metro share, with bus-only and unserved populations shown as counts of people rather than as percentages of a percentage.
Sketch of a metro line schematic with stations sized by walk-up population dashed = opened since 2020 circle area = residents within a 10-minute walk low walk-up
Metro schematic by walk-up population Node-link network diagram Reframes the network from track geometry to people served, answering question 4 and exposing the outliers a planner actually needs: new stations with almost nobody within walking distance.
Sketch of a scatterplot of bus-only share against bus service level compensated outlier routes per stop ↑ share of residents bus-only → circle area = district population
Double disadvantage Scatterplot with trend line Tests question 3. A downward slope means bus-dependent districts are penalised twice; the residuals name the districts that break the pattern in either direction.

What links them. One selected district and one walking threshold are shared global state. Hovering a district in the stacked bars highlights it in both maps and in the scatter; dragging the threshold slider moves the access surface, the classification, the stacked bars and the marker on the cumulative curve together. Without that linkage these are six charts about transit. With it they are one instrument.

5. Group Roles and Responsibilities

To be completed. Replace the placeholder names below before submission. The split assumes three members; if the group is a different size, routing and D3 are where an extra person helps most, since those are the two longest critical paths.

MemberPrimary responsibilityAlso contributes to
[Member 1] Data acquisition and cleaning — Overpass queries for every layer, bus-stop pairing, entrance-to-station linkage, route-relation extraction, completeness audit Methodology documentation, interim slides
[Member 2] Spatial analysis — raster sampling, KD-tree baseline, OSRM setup and network isochrones, the three-way access classification, district aggregation D3 implementation of the two map views; sensitivity analysis
[Member 3] Visualization design and front end — the four chart views, linked selection and threshold slider, colour scales, page layout, Uzbek and Russian labels Exploratory analysis, testing, presentation

Shared by everyone: all three review the full pipeline and can explain any part of it under questioning. Encodings, colour scales and the narrative order of the six views are decided together, because those carry the analytical argument rather than merely displaying it. Each member writes the section of the final documentation covering their own work.

6. Interim Presentation Deliverables

By the interim presentation we expect to demonstrate:

The bus-stop pairing problem will be presented as a solved methodological challenge rather than hidden. It is the clearest example of why the analysis is built on distance rather than counts, and explaining it is the fastest way to show that the numbers on the slides mean what they claim to mean.

7. Timeline and Milestones

Week Milestone Tasks and owners Deliverable
2 Acquisition Overpass fetch and caching for all six layers, including the counts left "to confirm" above [M1]; WorldPop download, clip and district join [M2]; repository scaffold, licence, README, and a decision on whether Yangihayot exists in OSM [M3] Raw data committed; fetch script reruns cleanly from scratch; the count table on this page filled in
3 Processing, and the first real number Bus-stop pairing and entrance linkage [M1]; reprojection and straight-line KD-tree access grid [M2]; exploratory plots, route-relation completeness audit, decision on question 3 [M3] Clean stop dataset, three-way access classification, EDA notebook, and the first straight-line coverage percentage
4 Design and first D3 Settle all six encodings and the narrative order [all]; build the access surface map and district composition bars against real data [M2, M3]; OSRM container running locally [M2]; interim slides [M1] Two working linked charts and a complete design set
5 Interim presentation End-to-end pipeline demonstration and rehearsal [all]; first network isochrone run and comparison against the baseline [M2] Presentation, two live visualizations, one headline number
6 Full build and interaction Remaining four views [M3 leading, M2 on the schematic]; shared selection and threshold slider [M3]; network isochrones over the full grid and the sensitivity table [M2]; Wikidata opening years or the four-era fallback [M1] All six views interactive and linked; straight-line versus network comparison reported
7 Polish and ship Colourblind-safe check on the bivariate scheme, mobile layout, TopoJSON and grid size optimisation [M2, M3]; methodology README and limitations write-up [M1]; final rehearsal [all] Published site, documented public repository, final presentation

Scheduling risk, and the hedge against it. The data is static — OpenStreetMap and WorldPop will look the same in week 6 as in week 2 — so nothing external forces early progress. Two rules guard against that. The week 3 straight-line number is a hard internal deadline: it produces a complete, presentable pipeline with no routing infrastructure at all, so the project always has something true to show. The network isochrones in weeks 5 and 6 are then an upgrade to a working system rather than the thing everything waits on. OSRM is the only component that could fail outright, and it can fail without taking a research question with it — question 6 simply becomes a limitation instead of a finding.

Limitations

Data sources

Map data © OpenStreetMap contributors, ODbL. Population data © WorldPop, CC BY 4.0. Distances computed in EPSG:32642 (UTM 42N); walking times at 4.8 km/h along the OSM pedestrian network.

← Back to home