Making Cycling Data Visible

La bicyclette is an independent dashboard that brings Montreal's cycling data to life. Born from the belief that good public infrastructure decisions start with transparent, accessible data.

Cyclist on a Montreal bike path

Why This Project Exists

Montreal has invested significantly in cycling infrastructure — permanent counters, protected bike paths, and seasonal programs. The city publishes rich open data, but it's scattered across multiple datasets and formats. La bicyclette bridges that gap: it ingests, transforms, and visualizes this data so that citizens, researchers, urban planners, and cycling advocates can explore it effortlessly.

Who's Behind It

La bicyclette is a personal project designed and maintained by Boris Stoyanov-Brignoli, a developer based in Montreal, driven by the desire to share and make urban mobility data more accessible to everyone.

Open Data

All data comes from Ville de Montréal's open data portal and is licensed under CC BY 4.0. No personal data is collected, no tracking is used, and no cookies are stored.

Aerial view of Montreal cycling infrastructure

Methodology & How It Works

Transparency in how data is collected, processed, and presented is fundamental to the project. Below is a plain-language breakdown of where the data comes from, how it is kept up to date, and what each section of the dashboard shows.

Data Sources

Three primary datasets are sourced from Ville de Montréal's open data portal:

Cycling Counters Dataset

Contains passage counts from permanent cycling counters spread across the city. Each record includes a counter identifier, a timestamp (period), a volume count, a direction, and an optional average speed. Data is available at daily, monthly, and yearly aggregation levels.

BIXI Station Status Feed

GBFS station information and live status for each BIXI station, including location, capacity, available bikes, available docks, and last-reported timestamps. Refreshed continuously by BIXI and cached briefly in the app.

Construction & Roadwork Dataset

Two linked files: construction permits (with location, dates, reason, and borough) and their impacts (street-level details including bike path blockage type, sidewalk impact, and street impact width). Updated daily.

How Data Is Updated

Automated jobs keep the dashboard in sync with the city's open data. Cycling data is downloaded weekly, and new counter readings are added automatically. Construction data is refreshed daily — permits and their street-level impacts are fetched, missing locations are resolved, and a daily snapshot is saved so changes can be tracked over time.

Overview Dashboard

The overview combines all daily cycling records within your selected date range. Total rides is the sum of all passages recorded across every counter. Active counters shows how many counters reported data during that period. The daily average is the total volume divided by the number of days in the range. Average speed reflects the overall speed across all counters that report speed data, weighted by how many cyclists each counter recorded.

Trends

Monthly volumes are grouped by calendar month and organized by cycling season (June to February). The chart overlays the current season against the previous one so you can spot differences at a glance. The values shown are the actual recorded totals — no averaging or smoothing is applied.

Counter Map

Each cycling counter is placed at its geographic location. Larger circles represent higher traffic volume within the selected date range, scaled so that both busy and quiet counters remain visible. BIXI stations are overlaid from the live GBFS feed with current bike and dock availability. Construction markers always reflect the most recent daily data, regardless of the date filter. Sites where the bike path is fully blocked appear in red; partially obstructed sites appear in amber.

Boroughs

Cycling volume is grouped by borough based on each counter's location. Totals are ranked so you can see which boroughs have the most cycling activity. The chart shows the relative share of each borough within the selected date range.

Seasonality Heatmap

A grid showing month and day of the week, where each cell represents the average daily volume for that combination across all counters and years. This helps reveal patterns like higher ridership on weekday commutes versus weekends, and summer peaks versus winter lows.

Construction Impact

Only construction permits with a bike path impact other than "Aucun impact / non applicable" (no impact) are displayed. Each row is enriched with:

Severity Score

A score from 0 to 100 that combines several factors to estimate overall disruption. The biggest factor is whether the bike path is fully blocked or partially obstructed. Additional points are added for arterial roads, full street closures, wider impact areas, effects on sidewalks or transit, and longer permit durations.

Nearest Counter Matching

For each construction site with a known location, the system identifies the closest permanent cycling counter based on straight-line geographic distance. This nearby counter is then used as the reference point to estimate how construction may be affecting cycling traffic in the area.

Volume Impact Estimation

The average daily cycling volume at the nearest counter is computed for a 28-day baseline period before the construction start date, and for the duration of the construction (start date to today or permit end date). The percentage change between these two averages is reported. A signal is assigned: "decrease" (≤ −8%), "increase" (≥ +8%), "stable" (between), or "insufficient" when minimum data thresholds are not met (7 days before, 5 days during).

Duration Buckets

Permit start and end dates are used to calculate calendar duration, then bucketed: 0–2 days, 3–14 days, 15–60 days, 61–180 days, or 180+ days.

Monthly Comparison

You select a compared month and a baseline month. For each counter, monthly totals are shown for both months, while percent change is calculated from average daily volume (monthly total divided by calendar days) so month-length differences are normalized. Rows can be explored through ranking views (largest increases, largest decreases, most stable), filtered by borough/construction/thresholds, and expanded to show a 12-month trend with highlighted compared and baseline points. Days-with-data coverage is displayed to flag lower-confidence comparisons.

Counter Detail

When a counter is selected, its daily volume and average speed are shown for the last 30 days (or the selected date range). A direction breakdown shows how traffic splits between travel directions. Any active construction within roughly 1 km is listed along with its estimated impact on cycling.

Caching & Freshness

To keep the dashboard fast, data is refreshed periodically rather than on every visit — cycling data every hour, construction data every 15 minutes, and BIXI station status every minute. Since construction information is updated once per day at the source, more frequent refreshes would not produce newer results.