The tide you can ride.
Every workday morning, Barcelona’s shared bikes pour out of the residential belt — Gràcia, Sagrada Família, Sants — and pile up along the waterfront and the 22@ tech district. Every evening they climb back. I measured that tide from a year of open data: 548stations photographed every five minutes, September 2024 to August 2025.
Each dot is a station, sized by capacity. Colour is the deviation from that station’s own daily average — blue where bikes have left, amber where they gather. Stations near their normal fade out: only the tide is drawn.
Scrub the pulse chart, or press play and watch a whole day breathe: at eight the residential belt turns blue as the bikes pour downhill; through the evening the amber drains back up.
Click any station to ask it the question below.
Pick a station to ask the year of data.
This is a historical frequency, not a model. Backtested on jul–aug 2025 (trained on the 10 months before): when it warned “no bike”, it was right 56% of the time in July — ~6× the base rate — but it caught only 9% of bike-less moments. August broke it (precision 38%): it had never seen an August. Full numbers in the write-up.
The city’s total parked fleet barely moves — 4,765 bikes on average — but its geography swings twice a day. August is the exception: the city empties, the bikes rest, and the tide almost disappears.
bikes a day appear or vanish outside normal trips — the signature of the rebalancing trucks, loudest at 1 AM and again right before the morning rush
Pedralbes fills up at 8 AM while el Camp de l'Arpa del Clot drains by 21 — the tide, measured neighbourhood by neighbourhood
of the times the predictor warned "no bike here", it was right — six times the base rate. A "predictor" that always says yes is right 89% of the time and useful never
Twelve monthly archives from Open Data BCN — the most recent run of twelve consecutive months the portal actually has (two later months were never published).
Snapshots become station-hours, month by month, never all in memory. Occupancy bounded by capacity; every coverage gap is measured and listed, never silently filled.
Net hourly deltas classify stations as morning sources or sinks. The bikes that appear from nowhere are the rebalancing trucks — measured as a finding, not discarded as noise.
P(bike) per station, hour and day type — a frequency table, deliberately. Backtested on two held-out months, against the trivial yes-machine and the hourly oracle ceiling.
Everything the page shows is two static JSON files exported by the pipeline — every number on this page was computed, none was typed.
This is a personal study on open data, and the data ends in August 2025 — the latest unbroken 12-month stretch the city has published (27 of 8,761 hours missing inside it, all listed in the repo). The predictor is a historical average: it knows nothing about rain, strikes, festivals or a broken dock, and having never seen an August, it limps through one — that failure is measured and published, not hidden.
The headline accuracy trap is the study’s favourite lesson: a fake predictor that always answers “there will be a bike” scores 89–92%, because bikes are usually there. Real value lives elsewhere — in the warnings, the calibration, and the distance to the oracle ceiling. Wrong numbers look normal; that’s why every script in this pipeline validates its invariants and aborts loudly.
Code on GitHub·Read the write-up·Labs · 01 — the fire you can’t unsee·Labs · 04 — the washing-machine hour