Eric Glass

GIS/Metadata Librarian, Columbia University Libraries

Exploratory spatial data analysis

A series of browser-based linked-view tools built with D3.js. Each takes the brushing model from GeoDa — select features in one view and watch them highlight in the others — and makes it work on the open web with no install and no build step. All are data-agnostic: point the config file at your own GeoJSON and the tool adapts.

Choropleth EDA — Univariate

A classified choropleth linked to a histogram of the mapped variable. Select features on the map to see where they fall in the distribution, or brush a range in the histogram to see where those features are. Quantile and equal-interval classification, 3–8 classes, 27 ColorBrewer palettes, and a summary statistics panel comparing selection against full population.

Live demo Source Demo data: NYC census tracts, 2020

Choropleth EDA — Bivariate

A 3×3 bivariate choropleth linked to a scatterplot with OLS regression. Selecting a subset draws a second regression line for that subset, so its slope and correlation can be read directly against the full population. Six bivariate color schemes adapted from Joshua Stevens.

Live demo Source Demo data: NYC COVID-19 vaccination rates by MODZCTA, 2021

Choropleth EDA — Two Maps

Two stacked choropleths with independent variables, palettes, and legends, sharing synchronized zoom and pan, plus a scatterplot of one against the other. Selection in any of the three views propagates to the other two.

Live demo Source Demo data: NYC COVID-19 vaccination rates by MODZCTA, 2021

Pictogram Bivariate EDA

A bivariate choropleth linked to a brushable scatterplot in which every scatter mark is the silhouette of the state it represents, normalized so each encloses the same area. The map shows where, the scatterplot shows how much, and the mark itself shows which — so Texas or Michigan is identifiable in the scatter without a tooltip or a legend lookup. Deliberately narrow: it only works for geographies whose outlines a reader already carries in their head.

Live demo Source US states

Cartographic experiments

Maps that argue something rather than serving as general-purpose tools.

Silhouette Districts

All 435 congressional districts redrawn so every district is the shape of its own state — district 1 a solid scaled copy, districts 2 through n nested rings around it, each holding an equal share of the state's 2020 census population. A geometric thought experiment, not a redistricting proposal. What it actually renders is a radial population-density profile: ring width is inverse density, so New York's outermost districts come out roughly one-ninetieth the width of its innermost.

Live demo Source 2020 census blocks (PL 94-171)

Linked Network Graph + Choropleth MapWork in progress

A dual-panel visualization pairing a force-directed network graph with a choropleth of the same geography. Selecting a node re-colors the map by that node's edge weights, so the abstract topology of the graph and the real geography it describes can be read against each other. The test case is 2025 NYC Citi Bike trips aggregated to Community District Tabulation Areas.

Live demo Source Citi Bike system data, 2025

Data visualization

The same D3 toolkit applied to non-spatial data.

NCAAF SRS Timeline

An interactive timeline of college football team quality from 1869 to 2025, measured by Simple Rating System score, with the data pipeline behind it. SRS rather than Elo because it is centered on each season's mean by construction, which makes it comparable across eras without extra normalization. The design owes an obvious debt to FiveThirtyEight's now-defunct Complete History of the NBA.

Live demo Source Sports-Reference/CFB, fetched via the Internet Archive

Senate Ages by Congress

The age of every sitting senator on the day each Congress convened, 1789–2025 — the whole chamber, not the incoming class, so a senator serving thirty years contributes fifteen observations at fifteen different ages. Two layers share one count axis: a grey silhouette showing how the seats would be distributed if the chamber were ordinary, and party-colored dots showing what it actually looked like.

Live demo Source

Presidential Ages in Office

A Wilkinson dot plot of how old presidents were while they held the office. One dot is one president at one integer age, with no sampling, so every president appears — including William Henry Harrison, whose entire presidency is a single dot at 68. Within a column dots stack chronologically, so reading bottom to top is reading forward in time.

Live demo Source

Guardian Top 100 Novels — Vote Network

A force-directed network of the Guardian's 2026 best-novels poll, with a node for every novel and every voter and an edge for every vote cast. Edge length is weighted by ballot position, so critics with orthodox taste pull toward the center while idiosyncratic ballots and niche novels drift to the edges. Dashed edges connect novels appearing together on eight or more ballots.

Live demo Source Data compiled by Matthew Aldridge

Teaching and reference

Instructional material for researchers and students new to spatial data.

Census Geographies — A Guided Tour

An interactive walk through fifteen geographies used for the Decennial Census and the ACS, built for the Columbia University Libraries census research guide and aimed at complete novices. Every step has its own URL fragment so a guide can link straight to a single geography, hovering any unit decomposes its GEOID into labelled runs, and each step states in words what it does and does not nest inside — because the census hierarchy is not a clean tree and most introductions hide that. NYC-centric by design.

Live demo Source 2020 vintage geometry