Different ways of analyzing orienteering data (split times), directly from your web-browser.

Background

Stumbled upon the fantastic application WinSplits Online. Thought that the interesting real-world data found there could be used when creating a spare time project investigating JavaScript frameworks from Chart.js and Vue. Thought it would be fun and educating to examine different ways of visualizing, comparing and presenting various information about the athletes performances in tables/charts/graphs (and yes, so far it has really been a fun and educating trip).

Note: This is the first version of this analyzing tool. Hopefully it will be enhanced in the future.

Documentation

The data is more or less only lists of split times from a series of controls, but it can be used in many, many ways as you will see.

You can thoroughly examine the data in detail from the comprehensive results table and different charts.

Definitions

Explanations of some of the terms that are used.

Number of controls
The actual number of controls, denoted n.
Number of legs
The number of controls plus one, i.e. n+1, since the last leg will be from the last control to the finish line. The legs are start to control 1, control 1 to control 2, ..., control n-1 to control n and control n to finish line.
Leg time
The time it takes between two consecutive controls, with start to first control and last control to finish line as special cases.
Split time
The total elapsed time from the start to a specific control, with the special case of start to finish (total time).
Optimal total time
This value is calculated by adding all the best leg times and is an indicator of what the total time optimally could have been.
Actual time
The actual time for a leg or split.
Relative time
Often it is more interesting to show the relative time instead of the actual time. The relative time is (most often) calculated from the best leg or split time. For example, if the best time for a leg is 8:45 and the leg time for athlete X is 10:20 the relative time for athlete X on the leg is +1:35. The relative times are always prefixed with either + or -.
%-loss
The time (in percentage) an athlete has lost, compared to the fastest athlete, on a specific leg, i.e. the leg times are compared. This value can be used when calculating possible mistakes.
Average %-loss
The average %-loss value for all legs, i.e. the arithmetic mean of n+1 values.
Median %-loss
The median %-loss value for all legs, i.e. the median of n+1 values.
%-behind
The time (in percentage) an athlete is behind the fastest athlete on a specific control, i.e. the split times are compared. The %-behind value has nothing to do with the average or median values for %-loss. The %-behind value for an athlete often fluctuates for the first controls and stabilizes towards the finish line (which is natural since the value is a comparison against the elapsed split time).
Possible mistake
Indicates that an athlete may have made a mistake on a leg. The %-loss on a specific leg is compared against the median %-loss value, and if the specific value is "much" larger than the median value, the leg is marked as a possible mistake. The percentage points for how much larger a value should be can be configured (default value is 25). For example, if athlete X has a median %-loss of 15%, then a leg with %-loss 39% will not be marked as possible mistake, but a leg with %-loss of 40% will.

Data importer

It is quite easy to import your own data to analyze. Either you import data that contain actual split times or relative split times.

Note: When using actual, the time at each control is the actual leg/split time at that control, regardless of the athlete's place. When using relative, the time at each control is instead the relative leg/split time at that control (prefixed with a '+'), unless the athlete's place is 1.

  1. Visit WinSplits Online.
    1. Choose your event.
    2. Verify the state of the two checkboxes "relative split times" and "relative total times":
      • If using actual split times, the two boxes should be cleared.
      • If using relative split times, the two boxes should be checked.
    3. Press OK.
    4. Use the "Export the split times in text format" link at the top.
    5. Copy all the generated text content (Ctrl/Cmd + A and Ctrl/Cmd + C).
  2. Back here in NNM Orienteering Analyzer, in the section Raw data importer.
    1. Make sure that you select the correct "Type of split times", either ACTUAL or RELATIVE.
    2. Paste into the "Exported split times" text area (Ctrl/Cmd + V).
    3. The page is automatically updated with your new information.

If you have split times data from other sources, you can of course use those also, if you follow the same easy-to-grasp format as WinSplits Online exports.

Note: Below is a small example with the ACTUAL type. To try it out, copy the text, select ACTUAL as "Type of split times", paste in the text into the "Exported split times" text area.

Pos	Name	Total	Diff	S-1		1-2		2-3		3-4		4-F		Name
	Club							                                		Club
1	Alice	45.00	+0.00	15.00	(2)	7.00	(4)	12.00	(1)	9.00	(2)	2.00	(2)	Alice	
	DEN			15.00	(2)	22.00	(3)	34.00	(1)	43.00	(2)	45.00	(1)	DEN
2	Ben	45.15	+0.15	16.00	(3)	5.30	(1)	12.45	(3)	8.30	(1)	2.30	(4)	Ben	
	NOR			16.00	(3)	21.30	(2)	34.15	(3)	42.45	(1)	45.15	(2)	NOR
3	Carol 	45.45	+0.45	14.30	(1)	6.30	(2)	13.00	(4)	10.00	(3)	1.45	(1)	Carol	
	SWE			14.30	(1)	21.00	(1)	34.00	(1)	44.00	(3)	45.45	(3)	SWE
4	Dave 	48.45	+3.45	16.30	(4)	6.45	(3)	12.15	(2)	11.00	(4)	2.15	(3)	Dave	
	FIN			16.30	(4)	23.15	(4)	35.30	(4)	46.30	(4)	48.45	(4)	FIN
                

Note: On page reload, one of the pre-defined example events (as described in the Configuration section below) is randomly selected.

Configuration

From the top-right of the page you can open the configuration modal.

Note: Currently, the examples are all using the relative split times format.

Note: On page reload, the configuration values are reset to default.

List of shown athletes

A compact view of the participants. The list reflects the current sorting.

Results table

The times are often given without useless zeroes, so values below a minute is given with seconds, values below an hour is given with minutes and seconds.

Gold, silver and bronze background colors are shown to indicate the three fastest leg/split times.

Possible mistakes for each leg are shown. It is currently not the same formula used as in WinSplits Online. The length of a leg is not considered. The median %-loss for the legs for an athlete is calculated and if the %-loss for a leg is more than {{ userConfiguration.possibleMistakePercentagePoints}} percentage points higher than the median, the cell is marked as a possible mistake. The percentage point value may be configured.

  • 1st place (gold)
  • 2nd place (silver)
  • 3rd place (bronze)
  • Possible mistake

The optimal total time is shown. The difference for the winner to the total optimal time is also shown.

You can sort the table on leg/split time for each control. The header for the current sorting column is marked with a green background. The default is to sort on split time at finish, i.e. the total time.

Note: If the results table seems to have "strange" values or missing most of the values, make sure that you have selected the correct type of split times (ACTUAL or RELATIVE) when importing the data or trying the example events.

Selecting athletes

By the checkboxes in each row, you can select which athletes you are interested in. When satisfied with your set, click the checkbox in the top left of the Results table, and only your selection will be shown.

Note: You may have to first configure your number of shown athletes.

Athlete details

You can show details about an athlete by clicking on their names in the results table.

A sum of how many medals the athlete has achieved for the legs is shown. For example, , indicates that the athlete was best on four legs, never was second best, and had the third fastest leg six times.

The %-loss column shows how much slower the leg was compared to the fastest leg time. Colors (same colors as in the "Mistakes (percentages)" chart) are used to indicate the loss. Per definition, the winner of the leg has no loss, and therefore it is not written out.

The colors in the relative split column indicate the trend against the current leader (or second best).

  • Positive trend. Either of:
    • If the athlete is the current leader and increases the gap to the others.
    • If the athlete decreases the gap to the current leader.
  • Negative trend. Either of:
    • If the athlete is the current leader and decreases the gap to the others.
    • If the athlete increases the gap to the current leader.

The %-behind column shows how much behind the athlete is compared to the leader at the control.

Charts

You can expand the view of a specific chart by clicking on the expand button in the upper right corner. The expanded chart will open in a modal. You can also often toggle the view of specific datasets by clicking on the legends of the charts.

In some of the charts, all athletes are shown (also those that did not finish, mis-punched, etc), and in some charts only the finishers are shown.

Note: The charts will most certainly be quite useless if you are showing too many athletes. So try to keep the number of athletes shown below 15. Below 5 athletes, the charts will even be useful in compact mode.

Relative leg times (line chart)

Line chart showing each athlete's "time behind", for the leg, at every control.

Relative leg times (grouped bar chart)

Grouped bar chart showing each athlete's "time behind", for the leg, at every control. Note: Same data as the line chart above.

Mistake per leg (percentages) (line chart)

Line chart showing each athlete's "mistake", for the leg, at every control. The mistakes are shown in percent from the best leg times.

Mistake per leg (percentages) (grouped bar chart)

Grouped bar chart showing each athlete's "mistake", for the leg, at every control. The mistakes are shown in percent from the best leg times. Note: Same data as the line chart above.

Relative split times (line chart)

Line chart showing each athlete's "time behind", for the split, at every control.

Behind per split (percentages) (line chart)

Line chart showing each athlete's total "time behind" at every control. The time behind values are shown in percent from the best split times.

Leg places (stacked bar chart)

Stacked bar chart with an athlete's number of best places for each leg. Grouped by:

  • 1st place (gold)
  • 2nd place (silver)
  • 3rd place (bronze)
  • 4th-6th place
  • 7th-12th place

Mistakes (minor, major) (stacked bar chart)

Stacked bar chart with an athlete's number of mistakes for each leg. Grouped by:

  • no mistakes (≤ 15 %)
  • minor mistakes (> 15 % and ≤ 30 %)
  • major mistakes (> 30 %)

Mistakes (percentages) (stacked bar chart)

Stacked bar chart with an athlete's number of mistakes for each leg. Grouped by:

  • < 1 %
  • < 2 %
  • < 4 %
  • < 8 %
  • < 16 %
  • < 32 %
  • < 64 %
  • < 128 %
  • ≥ 128 %

Split times (time chart)

Time chart showing each athlete's actual split time at every control.

Best leg times (horizontal bar chart)

Bar chart showing the best leg time at every control.

Average and median %-loss per leg (vertical bar chart)

Bar chart showing the average and median values for an athlete's loss in percent at each leg.

If the median value is much lower than the average, it may indicate that the athlete has made some large mistakes.

Raw data importer

Insert raw data from WinSplits Online (from orientering.se). The raw data should be the result from "export the split times in text format".

Note: If you want to use relative times, make sure that the two checkboxes for "relative split times" and "relative total times" are checked (in WinSplits Online). Also make sure that you select RELATIVE in the dropdown list below. If you instead want to use actual times, make sure that the two checkboxes for "relative split times" and "relative total times" are not checked (in WinSplits Online). Also make sure that you select ACTUAL in the dropdown list below.

List of shown athletes

Sorted on time at
Selected athletes sorted on a specific leg/split time.
# Time Position Name Club
{{ orienteeringData.best[sorting.type].times[sorting.control - 1] }}
{{ athlete.controls[sorting.control - 1][sorting.type].place }} {{ athlete.controls[sorting.control - 1][sorting.type].relativeTimeMinimized }} {{ athlete.position }} {{ athlete.name }} {{ athlete.club }}

Results table {{ orienteeringData.numberOfControls }} controls, {{ athletes.length }} of {{ orienteeringData.numberOfParticipants }} athletes

Sorted ascending on
Leg/split times for each control for selected athletes. Indicating performance for each control.
# Name Total time Diff {{ control }} Finish Total time Name
Club Average Median %-behind Club
{{ optimalTotalTime }} {{ optimalTotalTimeDiff }} {{ optimalTotalTime }}
{{ athlete.position > 0 ? athlete.position : '' }} {{ athlete.name }} {{ athlete.totalTime }} {{ athlete.diffTotalTime }} {{ athlete.totalTime }} {{ athlete.name }}
{{ athlete.club }} {{ athlete.leg.averagePercentageLoss.toFixed(1) }} % {{ athlete.leg.medianPercentageLoss.toFixed(1) }} % {{ athlete.split.timesPercentages[orienteeringData.numberOfControls + 1].toFixed(1) }} % {{ athlete.club }}

Charts

{{ orienteeringData }}

Changelog

1.14.0 2024-02-03

1.13.0 2021-07-03

1.12.0 2021-05-08

1.11.0 2020-12-21

1.10.0 2020-11-22

1.9.0 2020-11-12

1.8.0 2020-10-04

1.7.0 2020-09-18

≤1.6.0 2020-07-26

Note: Version 1.0.0 was released 2020-06-30.

References

Feedback

Feedback is always appreciated. If you have questions, find errors, have suggestions for improvements, etc, please see the contact details at information page.

First version created by Anders Gustafson in June 2020. Dedicated to my father Åke Gustafson