Offline mode

You're offline. Live cycling data may be delayed.

La bicyclette

Data from Ville de Montreal Open Data + SAAQ (Donnees Quebec). Licensed under CC BY 4.0.

  • Dashboard
  • About

Made in Montréal by Boris Stoyanov-Brignoli

La bicycletteLa bicyclette
DashboardBack
FR

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

On this page

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

Data comes from Ville de Montreal open data and SAAQ accident reports published through Donnees Quebec, under open-data licenses (including CC BY 4.0 where applicable). 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

Five primary datasets are sourced from Ville de Montréal and Quebec open-data portals:

Cycling Counters Dataset

Daily cycling volumes come from the `vmtl-velos-comptage` yearly archives (2009 to present), which are normalized from hourly rows into daily totals. Monthly and yearly aggregates are recomputed from canonical daily records stored in the database. Each record is linked to a counter identifier and timestamp.

Cycling Network Dataset

GeoJSON layers describing the city cycling network for three contexts: 4-season network, summer network, and winter network. These lines are used in the map view so users can switch seasonal infrastructure context directly on the dashboard.

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.

SAAQ Accident Reports Dataset

Yearly collision reports published by the Societe de l assurance automobile du Quebec (SAAQ), distributed via Donnees Quebec. The dashboard uses normalized fields such as severity, month, route category, regional scope, and accident-level involvement indicators (pedestrian, cyclist, motorcycle, light vehicle, heavy vehicle). In this source, severe outcomes are published under a combined label ("Mortel ou grave").

How Data Is Updated

Automated jobs keep the dashboard in sync with open data sources. Cycling data and cycling network layers are synchronized once a week. Cycling sync is incremental: after a one-time backfill (only if daily coverage since 2009 is incomplete), it refreshes only recent yearly archives and updates rows only when values changed. Construction data is refreshed daily — permits and street-level impacts are fetched, missing locations are resolved, and a daily snapshot is stored with a rolling retention window. SAAQ collision data is synchronized from yearly files and each year is refreshed transactionally so reruns stay deterministic.

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. Each KPI shows a trend badge comparing the current value against the same-length prior period (e.g., if you select 90 days, the comparison covers the 90 days before that). A "Data through" label indicates the latest date with available data. The daily chart also includes an optional weather-context overlay (precipitation, snowfall, and mean temperature) sourced from city-level daily weather observations.

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.

Cycling 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. A seasonal cycling-network overlay can be toggled between 4-season, summer, and winter layers. 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. Note: volume reflects the number of counters installed in each borough — boroughs with more counters will naturally show higher totals. The tooltip shows the counter count for each borough to help interpret the comparison.

Seasonality Heatmap

A grid showing month and day of the week, where each cell represents the average daily passages for that combination across all counters for the selected date range. The legend shows the actual value range (minimum to maximum). 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.

Road Safety Matrix

The safety page builds an accident co-involvement matrix and a monthly evolution chart from SAAQ annual collision reports. Rows represent the road-user profile involved in a collision; columns represent counterpart context. Because SAAQ open data is accident-level (not victim-level), one collision can contribute to multiple row-column cells when several user types are present. Filters support year range, severity, Montreal-only scope, and highway exclusion. Severe outcomes are represented by the source combined category ("Mortel ou grave"), and trend interpretation across 2013-2014 should be done with caution due to a structural break in reported material-damage records. This section is intended for prioritization and monitoring trends, not legal fault attribution.

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 is shown for the last 30 days (or the selected date range). You can also toggle weather context on the chart (temperature, precipitation, snowfall, and wind) to support day-level interpretation. 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 weekly, cycling network layers weekly, construction data every 15 minutes, and BIXI station status every minute. Since the construction source is updated once per day and cycling/network sources are updated weekly, more frequent refreshes would not produce newer results.

Have feedback or ideas?

Help us improve La bicyclette — your input shapes the project.

Enjoying La bicyclette?

This project is free and open source. If you find it useful, consider buying me a coffee to help keep it going.

On this page