Different ways of analyzing orienteering data, 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 average 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.

  1. Visit WinSplits Online.
    1. Choose your event.
    2. Make sure to check "relative split times" and "relative total times".
    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.
    1. In the section Raw data importer, paste into the "Exported split times" text area (Ctrl/Cmd + V).
    2. 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: 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: On page reload, the configuration values are reset to defaults.

List of shown athletes

A compact view of the participants.

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 {{ 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.

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. 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.

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/collapse the view of a specific chart by clicking on the chart label. 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: Each chart will fill most of the current viewport area (full width and 95% of the height).

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". Make sure that the checkboxes for "relative split times" and "relative total times" are checked.

List of shown athletes

  1. {{ athlete.name }} {{ athlete.club }}

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

# 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.7.0 2020-09-18

≤1.6.0 2020-07-26

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