DC’s school boundary study will have, as one of its guiding principles, “neighborhood schools.” How do you define the neighborhood? And how do multiple neighborhoods combine to form boundaries for middle and high schools?
I was curious where the middle or high school someone feeds into is actually the easiest to get to, and where it’s not. So, I made some maps (thanks to many sources of free and open data and code, and help from ChatGPT).
Important disclaimer: this is not a specific proposal for middle and high school boundaries. Ease of getting there is not the only consideration. (But, I also think education leaders should keep transportation in mind when making decisions!) This is just a piece of information; it’s not a recommendation of any kind.
The closest schools, by walking or transit
Check out the live maps for high school and middle school. You can click on a dot and see the top three closest schools by transit or walking, and which bus or rail routes the trip used.
The middle school map shows the planned, future Euclid Street middle school at the old Banneker HS building (currently slated to open in fall 2028). “Citywide” schools, or ones that people only get into via lottery and don’t have a boundary, are not included in this map; those include charter schools, DCPS citywide elementary schools, and selective (application-only) high schools.
This is not a boundary proposal
As above, this is not a plan for boundaries, just a transportation map. The biggest reason is simply that just because a middle or high school is closest to a community doesn’t on its own necessarily mean that community should feed that school.
Besides, transit proximity would generate some silly boundaries in some places. For instance, on the middle school map, the area that’s closest to Columbia Heights Education Campus (CHEC) is a long strip up and down 16th Street NW, since the buses there are very frequent and CHEC is right on 16th. That doesn’t mean CHEC’s boundary should be a long, thin stripe. I doubt anyone would suggest Eastern HS have a little satellite boundary bubble around Benning Road Metro, or Hardy MS have an extra exclave at the far edge of neighborhoods feeding Deal.
The map also doesn’t account for capacity. The Coolidge HS and Ida B. Wells MS boundary leaves out neighborhoods nearby that are closer to those schools, but they are full. Multiple neighborhoods are closest to the Adams middle school on 19th Street NW, but Adams (the upper school for Oyster-Adams) couldn’t simply fit all of those students. And so forth.
What do you notice?
Please put what you see in the comments!
There are quite a few places where the current boundaries do follow what’s closest. For instance, the boundary between Anacostia HS and Ballou HS is pretty close to where the green dots and gold dots meet, except around Barry Farm[s].
The boundaries in northeast DC between McKinley MS, Brookland MS, MacFarland MS, and Wheatley EC are eerily close to the edges of their dot zones, and the presence of Eaton ES in the Hardy boundary, while it makes for a strange-shaped boundary, fits with the transportation picture.
Though, as will be no surprise to those who’ve been following the discourse around MacArthur HS, it’s clear that very large segments of its boundary are much less accessible to the school than they are to Jackson-Reed. (Meanwhile, other areas east of the MacArthur boundary are closer to MacArthur than other high schools, though not very decisively.)
What else do you see in these maps?
Or, what kinds of maps would you like to see? It’s fairly quick to make more of them now, so if a proposal arises to — say — make a citywide school (elementary, middle, or high school; DCPS or charter) into a neighborhood-serving school, I can make a map showing the effect of that change.
How did you do this?
DC’s excellent open data catalog includes files containing the locations of all DC schools, school boundaries, and addresses. Meanwhile, WMATA offers data sets containing all transit routes and schedules (following my first DC advocacy effort, fifteen years ago!) And OpenStreetMap has all the streets.
I downloaded these files and using Python code and OpenTripPlanner, programmatically took a random sample of 2,500 addresses; for each, the program planned a trip by walk and/or transit to every high school or middle school. It saved the three shortest in a file.
When you load a map page, some HTML and JavaScript, using the Leaflet map-making software and background tiles from Carto, makes the map, draws the school boundary lines, and plots each address, color-coded by the closest school, as a dot.
It’s fantastic, by the way, that so many useful tools and data sets are available to software developers for free — in my case, all of the data files, Python, OpenTripPlanner, Leaflet, and the map tiles. That makes projects like this possible, where just an individual person wanted to make some maps for a local public policy purpose and wouldn’t be in a position to negotiate licenses with many public and private entities or fit into a pricing scheme meant for bigger projects.
And, AI
I knew some Python and JavaScript but had never used OpenTripPlanner, Leaflet, etc. before or made maps like this. So, I asked ChatGPT 4, which laid out a detailed guide on how to make the maps including each step, and gave me code to do it. When I got an error message, I could paste that into ChatGPT and it would fix the bug (usually). If I wanted to add a feature, like adding the pop-up bubbles or keys to the maps, I just asked it and it gave me code to do that.
It was helpful that I understood enough Python and JavaScript, because sometimes it ran into problems it couldn’t figure out. I discovered, when I added the pop-up bubbles showing which buses the trip took, that none of the trips used the bus. It turned out that ChatGPT had put in the date in the wrong format, so OpenTripPlanner was trying to route people in the year 9 (when no buses were running) instead of September 2023.
In another case, it was trying to fix a Python bug and suggested a change, but that change raised a different error, so it suggested the first approach again, and around and around. I had to figure out more about what was happening and then suggest an overall approach to fixing the problem, which it could then implement.
But while it needed a bit of guidance and there were some errors I had to puzzle out on my own, it was able to write code for me that almost completely worked using software tools I had no prior experience using. The whole project took about a week. Pretty amazing, compared to what I would have had to do before ChatGPT, when I might not have even known which software programs to use let alone learning to use them properly and fixing many bugs along the way.
Now we need a map with the DCPCS schools also!