thereās this Naval Ravikant line thatās been living in my head rent free for a while now
there are 3 big decisions in life: what you do, where you live, who you are with
for my Data Exploration and Visualisation unit at Monash (FIT5147, shoutout to my TAs Shruti and Angel), I had to take a messy real-world dataset all the way from a proposal to a wrangled dataset to a statistical exploration to a shipped interactive product. most people in my cohort picked a dataset and then went looking for a story. I went the other way, I had this quote stuck in my head and went looking for a dataset that could answer it, then spent the semester proving it out end to end: sourcing and cleaning the data myself, exploring it rigorously in R, designing the interface on paper first, then building the thing in D3.
this post is the whole arc, not just the pretty final screens.

The Pitch
the original proposal was called āThe Efficiency of Innovationā, later renamed āThe Curiosity Engineā. the premise: governments and VCs pour billions into research and tech districts, but a city having top-tier universities doesnāt guarantee it produces Unicorn startups ($1B+ valuation). some cities do the research and someone else captures the value. I wanted to find, and then visually prove, exactly where that gap opens up.
three questions anchored the whole project:
- how does high-impact academic research intensity in a city relate to Unicorn startup emergence there, 2018ā2025?
- which cities over- or under-perform at converting research into Unicorns, relative to their output, and how has that shifted over time?
- which cities offer the most āefficient slipstreamsā for a career in emerging tech, given the alignment between local research strength and industry focus?
that third question is where the product name comes from, and itās the one the final interactive tool is built to answer directly for whoeverās using it.
Building the Dataset
before any of the visual work, I had to go get the data myself, and none of it arrived clean.
academic side: the OpenAlex API gave me global citation and institution data, filtered down to 68,595 high-impact papers published 2016ā2025 (citations ā„ 1,000). papers are co-authored across institutions in multiple cities, so I used Rās tidyr::separate_rows() to explode multi-institution authorship strings, a landmark Stanford/MIT co-authored paper correctly contributes its full citation value to both cities instead of getting arbitrarily assigned to whoever was first author.
commercial side: CB Insights only publishes current unicorn data, not history. to reconstruct the 2016ā2025 trend I wrote a Python scraper against the Wayback Machine, pulling 50+ timestamped snapshots of their leaderboard with requests and BeautifulSoup. that alone got messy fast, 12% of scraped rows came back with no city field. I built a multi-stage recovery pipeline: first imputing city from the startupās lead investorās HQ, then a recursive corporate-HQ lookup for the stragglers, and finally a geocoding fallback for whatever was left. that took the commercial dataset from 12% missing to a verified 0% missing across all 1,215 unicorn observations.
geographic backbone: SimpleMapsā World Cities database (~48k cities) was the join key that stitched the other two together, but city names disagree with each other constantly. āBangaloreā vs āBengaluru,ā five different renderings of āTel Aviv,ā UK county names instead of city names. I built a resolution engine that ASCII-normalizes and fuzzy-matches against the reference set, with manual heuristic intervention for the 865 stragglers it couldnāt resolve automatically. final result: 97.3% spatial confidence on the geocoded set.
the hardest wrangling problem, though, wasnāt missing data, it was semantic. academic fields and commercial industries donāt speak the same language. a paper says āAdvancements in Battery Materials,ā CB Insights says āEnergy Storage.ā I wrote an aggressive regex-based ontological harmonization script (industry_harmonization_utils.R) that collapsed thousands of fragmented, redundant tags, things like āComputer Vision,ā āFace Recognition,ā and āRPAā all folding into a canonical Artificial Intelligence bucket, cutting noise in later visualisations by roughly 4x. without that step, the two datasets never would have been comparable at all.
What the Data Actually Said
with a clean joined dataset, I moved into R (tidyverse + ggplot2) for the exploratory phase, this is where the story the app eventually tells was actually discovered, not designed.
first surprise: both distributions are brutally power-law. citation counts range up to 800k, unicorn valuations up to $225B (Bytedance). a plain bar chart or linear scatterplot just obliterates everything below the outliers, so log-10 transforms werenāt a stylistic choice, they were the only way to see the rest of the dataset at all.

with that resolved, I built a streamgraph of research topic share over time to chase the ātemporal pulseā question, does academic attention predict where commercial value shows up later? the subfield-level view makes it obvious: Artificial Intelligence holds a steady baseline share through 2016ā2020, then a massive bulge invades the graph between 2021 and 2024, aggressively displacing traditional computational disciplines. cross-referencing that surge against when AI unicorns actually hit their hyper-valuations pointed to a consistent 24ā48 month predictive lag, academic obsession precedes the commercial payoff by roughly two to four years.
next I built a bipartite co-authorship heatmap mapping elite universities against corporate R&D labs (Google, DeepMind, Microsoft, Meta, and so on), to see where industry and academia were actually collaborating versus just coexisting in the same city.

a few bridges are extremely dense, Microsoft Research runs deep into Stanford and MIT, DeepMind is locked into UCL. but huge stretches of the matrix are just empty. plenty of high-output, elite universities have effectively zero corporate co-authorship. I started calling these āIslands of Innovation,ā places doing excellent research that industry simply isnāt tapping into locally. that finding became one of the load-bearing ideas behind the whole product.
then the core result, the one the entire interactive tool got built around: a log-log quadrant scatterplot of every cityās total research citations against total unicorn valuation, sliced at the medians into four archetypes.

San Francisco and Beijing sit at the true top-right peak, research and commercial capital moving in near-lockstep. Cambridge, Oxford, and Stanford plot as Academic Monasteries, brutal citation density that just doesnāt convert locally, my residual model estimated theyāre producing research at a volume that could theoretically support 2ā3x more local commercial valuation than currently exists. and thereās a visible cluster of Commercial Predators that clearly import talent and capital rather than growing it from local research. that gap between the monasteries and the predators is what I ended up calling the Translation Gap, and itās the single finding the entire product is designed to let someone explore for their own field, instead of just reading about mine.
Killing the Sankey (Three Times)
with the analysis done, the second half of the semester was a completely different discipline: turning a finding into something someone else could actually use. this unit runs on the Five Design Sheet methodology, sketch a bunch of ideas, build 3 full alternative interfaces, then synthesise a final one. I did the sketches on paper before touching a single line of D3, which if you know me is very unlike me.

my first instinct, and my second, and my third, was a Sankey diagram. research topic flows into industry, the width of the flow shows the strength of the relationship, feels obvious right?
except every single version of it lied. a directional arrow from a research city to a unicorn company visually implies āthis research caused this company,ā which even my own residual analysis only supports as a correlation, not causation. I presented an early version in the DVP Part 1 review and got called out for exactly this, and honestly they were right to call it out. I tried to save the idiom twice more, once as a city-level flow (killed because most city-topic pairs are near-zero, producing a Sankey thatās basically empty air) and once as an industry-first flow highlighted by selection (killed for the same reason, just skewed instead of sparse).
three discarded builds later I landed on something much less flashy: grouped bar charts, research performance and business performance shown as two independent, parallel metrics for your selected cities. no arrows implying a story the data canāt back up. itās the least ācleverā idiom in the whole project and itās the one that actually survived contact with the audience.
the lesson that stuck with me: data structure constraints should precede idiom selection, not follow it. if Iād profiled how sparse the city-topic pairs actually were before sketching a Sankey, Iād have saved myself two entire rebuilds.
Three Decisions, Three Pages
the final structure just is the Naval quote. no clever information architecture, the three decisions became the three pages, in order:
What You Do ā a D3 force-directed network of industries and research topics. click an industry pill and it drags in every research topic mapped to it. this is where you tell the tool what youāre actually curious about.

Where You Live ā a rotatable globe (pure D3, no three.js, more on that below) where every city is a bubble sized by your selected topicsā citation counts and your selected industriesā unicorn valuations at once. colour does the heavy lifting here: violet for research-heavy cities, emerald for commercially-dominant ones, and cyan where the two blend, meaning the city is genuinely synced on both axes, the same archetype logic from the quadrant scatter, just made explorable instead of static.

Who You Are With ā once youāve picked a few cities to compare, this page breaks down the actual institutions behind the numbers, leaderboards of the specific universities and companies driving each cityās score, not just an abstract ranking.

and then a results page ties it back together, a ranked list of your best-fit cities that, when you hover an entry, animates the globe back on Where You Live to re-center on it. full circle.

The Technical Bits Iām Proud Of
a few things that were annoyingly hard in ways that donāt show up in the screenshots:
the globe is 100% D3, no three.js, no WebGL library. rotating it by drag meant hand-rolling quaternion-style rotation with D3ās versor utility and projecting every bubble back onto the sphere surface after each rotation. itās the kind of thing that āshouldā be a three.js one-liner and instead ate a weekend.
the network graph on What You Do runs a live search filter on top of a force simulation with two different node types (industry pills and topic pills, with different collision radii), and the filter has to suppress non-matching nodes and edges without restarting the whole simulation, otherwise every keystroke makes the graph visibly flinch.
and because this is an Astro site with each page as an isolated island, getting the Result pageās hover to reach across and animate a completely different pageās globe meant setting up a shared reactive store with nanostores. small thing, took way longer than it should have to get state syncing cleanly across islands that donāt otherwise know about each other.
Where This Leaves Me
looking back at the whole semester, the thing Iām most glad happened is that the design didnāt start from a blank canvas, it started from a rigorous R analysis that had already found the Translation Gap, the 24ā48 month lag, and the Islands of Innovation. every interface decision after that was in service of a finding I already trusted, not a finding I was hoping the visualisation would somehow reveal. and the Sankey saga proved to me that being wrong about an idiom three times in a row and just building the discarded version anyway is a completely different discipline than sketching, itās the actual job.
Claude helped tighten the written reportsā prose and kept them inside their page limits, and Antigravity/Gemini helped with initial script scaffolding and debugging once the analytical and design decisions were locked. but every wrangling decision, every statistical read, every killed Sankey, and every colour and layout choice was mine to make and defend.
if you want to poke at the finished product yourself, itās live at find-my-slipstream.vercel.app. go find your own slipstream, tell me what industry/topic combo breaks the globe first š
until next time !ļø ā
or you could spot me in the wild š¤ i mean instagram, twitter, linkedin and maybe even youtube where i may make video versions of these blog posts