OD Matrix Analyser

For zonal mode share, production–attraction summaries
Developed by Srirama Bhamidipati Back to Toolbox
Analysis
User Manual

Drop your ODS file here

or click to browse  ·  Expects sheets named Fiets_etm, OV_os, Auto_as, Vracht_rd etc.

Detected sheets

Select modes to include in analysis

Modal shares will be recalculated based on selected modes only and will add up to 100%.

Zone aggregation mapping (optional)

Upload mapping (CSV or Excel)
Two columns required: zone_name and group_name. If no mapping is loaded, original zones are used as-is.
Modal share
Production & Attraction
Time share
Symmetry check
Advanced symmetry

Getting started

The OD Matrix Analyser is a browser-based tool for exploring origin–destination matrices by mode, time period, and zone. No installation is required and no data leaves your computer — all processing happens locally in your browser.

To begin, drag and drop your ODS, XLSX, or XLS file onto the drop zone on the Analysis tab, or click the drop zone to browse for a file. The tool will automatically detect all sheets that follow the expected naming convention.

File format and sheet naming

Each sheet must contain a square OD matrix: the first row is a header where the first cell is empty and the remaining cells are zone names. The first column contains zone names as row labels, and the remaining cells contain trip volumes as numbers.

Sheet names must start with the mode name, optionally followed by an underscore and a time period suffix. Recognised modes and periods:

  • Modes: Fiets (bicycle), OV (public transport), Auto (car), Vracht (freight)
  • Time periods: _os (morning peak), _rd (rest of day), _as (evening peak), _etm (full day)

Valid examples: Fiets_etm, OV_os, Auto_as, Vracht_rd, Fiets. Sheet names are not case-sensitive.

If no sheets are detected, check that your sheet names start with one of the four recognised mode names.

Preparing for comparison

The "Preparing for comparison" toggle appears after a file is loaded. Enable it when you want to tag the current analysis with metadata that identifies which model run the file belongs to — useful when comparing multiple runs in a separate tool or spreadsheet.

When enabled, four fields appear:

  • Year — the forecast or model year, must be a 4-digit number (e.g. 2030).
  • Type — the model type. Pre-defined options are Synthetic and Calibrated, but you can type any custom value directly in the field.
  • Model — the model version identifier. Must start with the letter v followed by integers only (e.g. v300, v32, v410). You can pick from the preset list or type a new version. The field turns red if the format is incorrect.
  • Variant — the scenario variant. Pre-defined options include None, WLOHoog, WLOLaag, and STED_Ref, but you can type any custom value.

Click Apply to confirm the metadata. The applied values appear as a badge next to the Apply button and are included in the file title line, the Excel cover sheet, and the PDF header on every page. When a new file is loaded, all fields reset automatically.

All four fields are required before Apply will accept the input. If you do not need comparison metadata, simply leave the toggle off — it has no effect on the analysis.

Mode selection

After a file is loaded, checkboxes appear for each detected mode. All modes are selected by default. Deselect any modes you want to exclude before clicking Run analysis. Modal shares are recalculated so that the selected modes together add up to 100%.

You can change the mode selection and re-run the analysis at any time without reloading the file.

Zone aggregation mapping

By default the analysis uses all zones as they appear in the OD matrix. To aggregate zones into groups, upload a zone mapping file.

Preparing the mapping file

Click Download template to get a CSV pre-filled with all zone names. Fill in the group_name column for each zone, save as CSV, and upload it using the mapping drop zone. The file must have exactly two columns: zone_name and group_name. Any unmapped zone is kept as its own group.

How aggregation works

Each matrix cell value is summed into the corresponding group pair. Trips between zones in the same group become intra-group (diagonal) trips in the aggregated matrix. The zone state badge next to the download buttons confirms whether the current results use original or aggregated zones.

The mapping only affects the current run. Click Clear mapping and re-run to revert to original zones. The template always uses original zone names regardless of any active mapping.

Output 1 — Modal share by zone

This table shows, for each origin zone, how trips are distributed across modes. Columns are grouped into three sections:

  • Productions — trips originating from the zone (row sums). Percentage = mode share of total productions for that zone.
  • Attractions — trips destined for the zone (column sums). Percentage = mode share of total attractions for that zone.
  • Intrazonal — trips where origin and destination are the same zone (matrix diagonal). Percentage = mode share of total intrazonal trips for that zone.

If the file contains multiple time period sheets, a tab appears per period.

Sorting

Click the sort arrow on any column header. For columns showing a value and a percentage together, two sort buttons are provided: the left sorts by absolute number, the right by percentage. Click once for descending, again for ascending, a third time to reset.

Filtering

Click the Filters toggle above the table to expand the filter panel. Each mode has two sliders: a percentage threshold and a trips threshold (in thousands). A zone row is shown only if it meets all active thresholds across all modes simultaneously. Filtering is purely visual — the TOTAL row and all downloads are unaffected. Click Reset filters to clear all thresholds.

Output 2 — Production & Attraction by zone

This table shows absolute trip volumes for productions and attractions side by side for each zone and mode, without percentages. In a balanced model, total productions and total attractions across all zones are equal per mode.

Output 3 — Time share

This table and chart show how each mode's trips are distributed across time periods. Rows are modes, columns are OS, RD, and AS in that order. Each row sums to 100%, showing what fraction of that mode's daily trips occur in each period.

ETM (full day) is excluded because it is the arithmetic sum of the three periods — including it would cause double-counting.

The bar chart groups bars by mode, with one bar per time period, making it easy to compare temporal distributions between modes.

Time share requires at least two time period sheets. If only a full-day sheet is available, this output shows a message instead.

Output 4 — Symmetry check

This output analyses how symmetric each mode's OD matrix is. For a perfectly symmetric matrix, trips from zone i to zone j equal trips from j to i for every zone pair. The analysis uses the ETM matrix if available, otherwise the no-suffix full-day sheet.

For each mode, all zone pairs (i, j) where i is less than j are extracted from the upper triangle of the matrix. Each pair becomes one scatter point: X is the upper triangle value (i→j) and Y is the lower triangle value (j→i). The difference shown in the tooltip is always upper minus lower, meaning X minus Y, meaning i→j minus j→i. A positive difference means more trips from i to j than the reverse; a negative difference means more trips in the return direction.

Points on the dashed 45-degree line indicate perfect symmetry. Points above the line mean more return trips (j→i) than outbound; points below mean more outbound (i→j). Use the mode toggle buttons to show or hide individual modes. Scroll to zoom in, drag to pan, and click Reset zoom to return to the full view.

Metrics

  • MAD (Mean absolute difference) — average of |i→j − j→i| across all zone pairs, in trip units. Denominator is the number of unique zone pairs N×(N−1)/2. Tells you how large the asymmetry is on average per corridor. Lower is more symmetric.
  • SI (Symmetry index) — defined as 1 − (MAD / mean flow), where mean flow is the average of (i→j + j→i)/2 per pair. Ranges from 0 to 1 where 1.0 is perfect symmetry. Rough guide: above 0.90 = high, 0.75–0.90 = moderate, below 0.75 = asymmetric.
  • MSD (Mean signed difference) — average of (i→j − j→i) keeping the sign. A positive MSD means the upper triangle is systematically heavier (more outbound than return trips). A negative MSD means more return than outbound. Unlike MAD, MSD tells you which direction the imbalance leans.
  • AR (Asymmetry ratio) — total upper triangle divided by total lower triangle. A value of 1.0 means perfectly balanced overall. AR = 1.12 means 12% more outbound than return trips across the whole matrix.
MAD and SI are the primary metrics — they directly measure the size and normalised scale of asymmetry. MSD reveals directional bias, and AR gives an overall balance ratio. All four together give a complete picture of the asymmetry structure.

Exporting results

Click Download Excel to export all outputs to a multi-sheet Excel file with a cover sheet, a Raw data sheet per period (with P_, A_, I_ prefixed columns), and a Production and Attraction cross-check sheet per period. All sheets use a flat single-row header ready for further processing.

Click Download PDF to export the tables to a landscape A3 PDF. Each page has a header bar with the analysis name, filename, period, and page number.

Both exports always contain the full unfiltered dataset. Active visual filters do not affect downloads. If a zone aggregation mapping was active when you ran the analysis, exports contain the aggregated zones — the zone state badge confirms this.

Aan de slag

De OD Matrix Analyser is een browsergebaseerde tool voor het verkennen van herkomst-bestemmingsmatrices per modaliteit, tijdvak en zone. Er is geen installatie vereist en er verlaat geen data uw computer — alle verwerking vindt lokaal in uw browser plaats.

Sleep uw ODS-, XLSX- of XLS-bestand naar de dropzone op het tabblad Analyse, of klik op de dropzone om het bestand te zoeken. De tool detecteert automatisch alle werkbladen die de verwachte naamgeving volgen.

Bestandsformaat en werkbladnamen

Elk werkblad moet een vierkante OD-matrix bevatten: de eerste rij is een koptekst waarbij de eerste cel leeg is en de overige cellen zonenamen zijn. De eerste kolom bevat zonenamen als rijlabels en de overige cellen bevatten ritaantallen als getallen.

Werkbladnamen moeten beginnen met de modaliteitsnaam, optioneel gevolgd door een underscore en een tijdvaksuffix. Herkende modaliteiten en tijdvakken:

  • Modaliteiten: Fiets, OV, Auto, Vracht
  • Tijdvakken: _os (ochtendspits), _rd (rest van de dag), _as (avondspits), _etm (etmaal)

Geldige voorbeelden: Fiets_etm, OV_os, Auto_as, Vracht_rd, Fiets. Werkbladnamen zijn niet hoofdlettergevoelig.

Als er geen werkbladen worden gedetecteerd, controleer dan of uw werkbladnamen beginnen met een van de vier herkende modaliteitsnamen.

Voorbereiding voor vergelijking

De schakelaar "Voorbereiding voor vergelijking" verschijnt nadat een bestand is geladen. Schakel deze in wanneer u de huidige analyse wilt taggen met metadata die aangeeft bij welke modelrun het bestand hoort — handig bij het vergelijken van meerdere runs in een extern hulpmiddel of spreadsheet.

Wanneer ingeschakeld, verschijnen vier velden:

  • Jaar — het prognose- of modeljaar, moet een 4-cijferig getal zijn (bijv. 2030).
  • Type — het modeltype. Vooraf gedefinieerde opties zijn Synthetic en Calibrated, maar u kunt ook een eigen waarde direct intypen.
  • Model — de modelversionidentificatie. Moet beginnen met de letter v gevolgd door uitsluitend gehele getallen (bijv. v300, v32, v410). U kunt kiezen uit de voorgestelde lijst of een nieuwe versie intypen. Het veld wordt rood als het formaat onjuist is.
  • Variant — de scenariovariant. Vooraf gedefinieerde opties zijn None, WLOHoog, WLOLaag en STED_Ref, maar u kunt ook een eigen waarde invoeren.

Klik op Toepassen om de metadata te bevestigen. De toegepaste waarden verschijnen als badge naast de knop en worden opgenomen in de bestandstitelregel, het Excel-omslagblad en de PDF-koptekst op elke pagina. Bij het laden van een nieuw bestand worden alle velden automatisch gereset.

Alle vier velden zijn verplicht voordat Toepassen de invoer accepteert. Als u geen vergelijkingsmetadata nodig heeft, laat de schakelaar dan gewoon uit — dit heeft geen invloed op de analyse.

Modaliteitsselectie

Na het laden van een bestand verschijnen selectievakjes voor elke gedetecteerde modaliteit. Standaard zijn alle modaliteiten geselecteerd. Deselecteer modaliteiten die u wilt uitsluiten voordat u op Analyse uitvoeren klikt. Modale aandelen worden herberekend zodat de geselecteerde modaliteiten samen 100% vormen.

U kunt de modaliteitsselectie wijzigen en de analyse opnieuw uitvoeren zonder het bestand opnieuw te laden.

Zoneaggregatie

Standaard gebruikt de analyse alle zones zoals ze in de OD-matrix staan. Om zones samen te voegen tot groepen, upload een zonemapping-bestand.

Het mapping-bestand voorbereiden

Klik op Template downloaden om een CSV te krijgen met alle zonenamen. Vul de kolom group_name in, sla op als CSV en upload via de mapping-dropzone. Het bestand moet exact twee kolommen bevatten: zone_name en group_name. Niet-gemapte zones worden als eigen groep behandeld.

Hoe aggregatie werkt

Elke matrixcelwaarde wordt opgeteld bij het bijbehorende groepspaar. Ritten tussen zones in dezelfde groep worden intrazonale ritten in de geaggregeerde matrix. De zonestatus-badge naast de downloadknoppen bevestigt of de resultaten originele of geaggregeerde zones bevatten.

De mapping heeft alleen invloed op de huidige run. Klik op Mapping wissen en voer de analyse opnieuw uit om terug te keren naar de originele zones.

Uitvoer 1 — Modaal aandeel per zone

Deze tabel toont per herkomstzone hoe ritten verdeeld zijn over modaliteiten. Kolommen zijn gegroepeerd in drie secties:

  • Producties — ritten die vanuit de zone vertrekken (rijsommen). Percentage = aandeel van de modaliteit in de totale producties van die zone.
  • Attracties — ritten met bestemming de zone (kolomsommen). Percentage = aandeel van de modaliteit in de totale attracties van die zone.
  • Intrazonal — ritten waarbij herkomst en bestemming dezelfde zone zijn (diagonaal). Percentage = aandeel van de modaliteit in de totale intrazonale ritten van die zone.

Als het bestand meerdere tijdvakwerkbladen bevat, verschijnt een tabblad per tijdvak.

Sorteren

Klik op de sorteer-pijl bij een kolomkoptekst. Voor kolommen met een waarde én een percentage zijn twee sorteerknoppen beschikbaar: links sorteert op absoluut getal, rechts op percentage. Eén klik = aflopend, opnieuw klikken = oplopend, derde klik = originele volgorde.

Filteren

Klik op de Filters-knop boven de tabel om het filterpaneel te openen. Elke modaliteit heeft twee schuifregelaars: een drempel voor het percentage en een drempel voor het ritaantal (in duizenden). Een zonerij wordt alleen getoond als aan alle actieve drempelwaarden voor alle modaliteiten wordt voldaan. Filteren is puur visueel — de TOTAAL-rij en alle downloads worden niet beïnvloed.

Uitvoer 2 — Producties en attracties per zone

Deze tabel toont de absolute ritaantallen voor producties en attracties naast elkaar per zone en modaliteit, zonder percentages. In een gebalanceerd model zijn de totale producties en attracties voor alle zones gelijk per modaliteit.

Uitvoer 3 — Tijdverdeling

Deze tabel en grafiek tonen hoe de ritten per modaliteit verdeeld zijn over de tijdvakken. Rijen zijn modaliteiten, kolommen zijn OS, RD en AS in die volgorde. Elke rij telt op tot 100%, wat aangeeft welk deel van de dagelijkse ritten van die modaliteit in elk tijdvak plaatsvindt.

ETM (etmaal) is bewust uitgesloten omdat het de som is van de drie tijdvakken — inclusie leidt tot dubbeltellingen.

Tijdverdeling vereist minimaal twee tijdvakwerkbladen. Als alleen een etmaalblad beschikbaar is, toont deze uitvoer een melding.

Uitvoer 4 — Symmetriecontrole

Deze uitvoer analyseert hoe symmetrisch de OD-matrix van elke modaliteit is. De analyse gebruikt de ETM-matrix indien beschikbaar, anders de matrix zonder tijdvaksuffix. Voor elk zonepaar (i, j) waar i kleiner is dan j wordt één punt geplot: X is de bovenste driehoekwaarde (i→j) en Y is de onderste driehoekwaarde (j→i). Het verschil in de tooltip is altijd bovenste minus onderste, dus X minus Y, dus i→j minus j→i. Een positief verschil betekent meer ritten van i naar j dan andersom.

Punten op de gestippelde 45-gradenlijn duiden op symmetrie. Punten boven de lijn betekenen meer retourritten (j→i); punten eronder betekenen meer heenritten (i→j). Gebruik de modusknoppen om modaliteiten te tonen of te verbergen. Scroll om in te zoomen, sleep om te pannen, klik Zoom resetten voor volledig overzicht.

Maatstaven

  • MAD (Gemiddeld absoluut verschil) — gemiddelde van |i→j − j→i| voor alle zoneparen, in ritten. De noemer is het aantal unieke zoneparen N×(N−1)/2. Geeft aan hoe groot de asymmetrie gemiddeld per corridor is. Lager is meer symmetrisch.
  • SI (Symmetrie-index) — gedefinieerd als 1 − (MAD / gemiddeld ritvolume), waarbij het gemiddeld ritvolume het gemiddelde is van (i→j + j→i)/2 per paar. Waarde van 1,0 = perfecte symmetrie. Ruwweg: boven 0,90 = hoog, 0,75–0,90 = matig, onder 0,75 = asymmetrisch.
  • MSD (Gemiddeld signed verschil) — gemiddelde van (i→j − j→i) met behoud van het teken. Een positieve MSD betekent dat de bovenste driehoek systematisch zwaarder is (meer heenritten dan retourritten). Een negatieve MSD betekent meer retour- dan heenritten. In tegenstelling tot MAD geeft MSD aan in welke richting het onevenwicht ligt.
  • AR (Asymmetrieverhouding) — totaal bovenste driehoek gedeeld door totaal onderste driehoek. Waarde 1,0 = perfect gebalanceerd. AR = 1,12 betekent 12% meer heenritten dan retourritten over de gehele matrix.
MAD en SI zijn de primaire maatstaven — zij meten de omvang en genormaliseerde schaal van asymmetrie rechtstreeks. MSD onthult richtingsgebonden afwijking en AR geeft een algemene balansverhouding. Alle vier samen geven een volledig beeld van de asymmetriestructuur.

Resultaten exporteren

Klik op Excel downloaden om alle resultaten te exporteren naar een Excel-bestand met een omslagblad, een Raw-datawerkblad per tijdvak (met P_-, A_-, I_-geprefixxte kolommen) en een producties-en-attracties-kruiscontrole-werkblad per tijdvak. Alle werkbladen gebruiken een enkelvoudige kopregel, klaar voor verdere verwerking.

Klik op PDF downloaden om de tabellen te exporteren naar een liggend A3 PDF. Elke pagina heeft een koptekstbalk met analysenaam, bestandsnaam, tijdvak en paginanummer.

Beide exports bevatten altijd de volledige ongefiltreerde dataset. Actieve visuele filters hebben geen invloed op downloads. Als een zoneaggregatie-mapping actief was bij het uitvoeren van de analyse, bevatten de exports de geaggregeerde zones.