UltraChampsaur-Rennen
Im Juli 2022 lief ich ein Bergrennen mit ca. 30 km / ca. 1500 Höhenmetern. Aufgrund der Pandemie war das mein erstes Rennen seit dem 2. Oktober 2019 1/2 vor Jahren.


Das Rennen verlief gut. Ich war die meiste Zeit des Rennens vor meinen Teamkollegen, bis Pascal 6 km vor dem Ziel zu mir kam und wir gemeinsam die Ziellinie überquerten (auf den letzten Kilometern wartete er tatsächlich auf mich, um dank ihm dieses freundliche Ziel zu erreichen). Beim letzten Anstieg (siehe den Gipfel links bei km 20 unten) und beim Abstieg, dem letzten Drittel des Rennens, fühlte ich mich müde.

Daten importieren
Um die Leistungen zu vergleichen, habe ich mich für den Download entschieden Chronosport Daten (Excel-Datei), die ich mit JMP öffne.

Aus irgendeinem Grund wurden die Zeit bei Piolit (Spalte „Piolit 1“) und die Zeit bei der Ankunft (Spalte „Temps“) in der Excel-Datei nicht auf die gleiche Weise definiert und man wurde als kontinuierliche Variable („Temps“ mit erkannt ein blaues Dreieck), während die andere als kategoriale Variable erkannt wurde („Piolit 1“ mit roten Balken).
Keine Sorge, es war der perfekte Zeitpunkt, die neuen Erkenntnisse aus dem JMP-Skriptleitfaden, den ich gerade lese, in die Praxis umzusetzen ... Keine Angst, ich bin kein Geek, ich lese in meiner Freizeit Romane und lerne während meiner Arbeitszeit das Schreiben von Drehbüchern.
Daten transformieren: Spaltenformeleditor
Ich wollte in wenigen Minuten Zeit haben.
Mit dieser Formel ist es einfach, die kontinuierliche Variable „Temps = 2:32:43“ (leider nicht meine Zeit, da ich noch 2 Stunden und 10 Minuten mehr gebraucht habe, um fertig zu werden) in 153 Minuten umzuwandeln.

In Minuten() Wandelt eine Zeit in Minuten um, die gleiche Transformation existiert für Jahre, Monate, Wochen, … Sekunden.
Die Transformation der kategorialen Variablen „Piolit 1 = 1:54:57“ (immer noch nicht meine Zeit, aber die des Gewinners) in 115 Minuten war eine gute Gelegenheit, diese zu nutzen Regex() Das ist eine wunderbare Möglichkeit, mit komplexen kategorialen Variablen umzugehen (mein Beispiel ist eigentlich ganz einfach).

Der Hauptpunkt besteht darin, die verschiedenen Gruppen zu identifizieren, aus denen Ihre Eingabe besteht
( Regex ( :Piolit 1, " (\d)(\W)(\d\d)(\W)(\d\d) ")).
:Piolit 1 ist die Spaltenvariable. Regex() Ziel ist es, Gruppen in dieser Spaltenvariablen zu identifizieren, wobei jedes Klammerpaar eine Gruppe darstellt. Hier suchen wir 5 Gruppen:
- Gruppe 1 = (\D) = die Stunden, die nur eine Ziffer enthalten
- Gruppe 3 = (\d\d) = die Minuten, die 2 Ziffern enthalten
- Gruppe 5 = (\d\d) = die Sekunden, die 2 Ziffern enthalten
- Gruppe 2 und Gruppe 4 = (\W) = das „:“-Trennzeichen zwischen Stunde:Minuten und Minuten:Sekunden (das Code (\W) erkennt tatsächlich nicht-alphanumerische Zeichen)
Sobald wir das getan haben, verwenden wir die Gruppen 1, 3 und 5 wieder:
- Gruppe 1 für Stunden: Num ( Regex (:Piolit 1," (\d)(\W)(\d\d)(\W)(\d\d) ","\1")) * 60
Sie ersetzen :Piolit 1 (1:54:57 in Zeile 1) durch Gruppe 1 (dafür steht das „\1“) und wandeln es in eine Zahl um (dafür steht). Num tut) und mit 60 multiplizieren (das macht * 60).
- Gruppe 3 für Minuten: Num ( Regex (:Piolit 1," (\d)(\W)(\d\d)(\W)(\d\d) ","\3" ) )
Sie ersetzen :Piolit 1 (1:54:57 in Zeile 1) durch Gruppe 3 (dafür steht das „\3“) und wandeln es in eine Zahl um (dafür steht). Num tut).
- Gruppe 5 für Sekunden: Num ( Regex (:Piolit 1," (\d)(\W)(\d\d)(\W)(\d\d) " ,"\5")) / 60
Sie ersetzen :Piolit 1 (1:54:57 in Zeile 1) durch Gruppe 5 (dafür steht das „\5“) und wandeln es in eine Zahl um (dafür steht). Num tut) und dividiere durch 60 (das ist es, was / 60 tut).
Am Ende addiert man die 3 Komponenten und rundet auf (das ist es). Runden tut), um die 115 Minuten zu bekommen (ich bin immer noch der Gewinner, davon bin ich weit entfernt).
Rang bei der Ankunft: Graph Builder
Zunächst habe ich unsere Leistung vs.
a) alle Läufer b) nur Männer c) unsere Kategorie (M3H = 50-55 Jahre alt)


Ich habe die Berechnung als Prozentsatz und nicht als absolute Zahl durchgeführt, also habe ich dividiert
- Der Rang wird anhand der Ankunftszeit berechnet Oberstrang (:"Ankunft (min)"n)
- durch die Anzahl der Ereignisse innerhalb derselben Spalte („Ankunft (min)“) mit Spaltennummer (:"Ankunft min)"n).
Für die Unterkategorien habe ich „nach Variable“ hinzugefügt, sodass die Berechnung innerhalb der Spalte erfolgt, indem die Ebene einer anderen Variablen als Instanz berücksichtigt wird
- b) „Sx“ = „männlich“ oder „weiblich“
- c) „Katze“ = „SEF“, „SHE“, … „M6F“, „M8H“ je nach Geschlecht und Alter.
Der Vorteil besteht darin, dass Sie keine Berechnungen mit mehreren Formeln oder komplexe Wenn/Dann-Anweisungen benötigen und, was noch wichtiger ist, kein Fehlerrisiko besteht, da die Berechnung spaltenweise unter Berücksichtigung der zeilenweisen Ebene erfolgt.
Die unten in unserer Kategorie hervorgehobene Grafik veranschaulicht den Rang in Prozent, wobei wir beide für eine detaillierte Analyse ausgewählt wurden:

Letztendlich spiegeln die % unsere Position wider:
- 52 % im Vergleich zu allen Läufern, wir sind also „durchschnittliche“ Läufer
- 60 % im Vergleich zu allen männlichen Läufern, wir liegen also unter den männlichen Läufern
- 40 % im Vergleich zu männlichen Läufern zwischen 50 und 55 Jahren, was bedeutet, dass unsere Leistung etwas besser ist als die von Männern unseres Alters
Mittlere Leistung (auf dem Piolit-Gipfel) vs. Ankunft: Graph Builder
Jetzt habe ich meine Daten im gleichen Format (Zeit in Minuten für Piolit und Arrival). Ich habe eine Streudiagramm-Visualisierung durchgeführt:

Es besteht eine diagonale Beziehung zwischen diesen beiden Variablen, was darauf hindeutet, dass die Individuen im letzten Drittel des Rennens ungefähr konstant geblieben sind und keine größeren Veränderungen vorgenommen wurden.
Ich zeichne eine Anpassungslinie (nachdem ich den letzten Läufer ausgeschlossen habe, der wie ein Ausreißer aussieht) auf den Daten und speichere die Vorhersageformel sowie die Residuen, um herauszufinden, ob ich im letzten Drittel unterdurchschnittlich abgeschnitten habe (das war mein Gefühl) und/oder ob Pascal übertroffen (ich vermutete).

Es ist interessant festzustellen, dass ich der „durchschnittliche“ Mann mit einem Residuum = -0,2 bin, was bedeutet, dass meine Leistung „normal“ ist, während Pascal ein negatives Residuum (-4,4 Minuten) hat, was bedeutet, dass er im Vergleich weniger Zeit benötigt hat zu den anderen Läufern im letzten Drittel. „Er hatte immer noch etwas unter seinen Füßen“ (ich bin mir nicht sicher, ob das der richtige Ausdruck auf Englisch ist, aber ich denke, jeder kann es verstehen) und denken Sie daran, dass er im letzten Drittel auf mich gewartet hat, also hätte er eigentlich einen noch besseren Job machen sollen.
Ich habe den Rangunterschied auch mit einer zusätzlichen Spaltenformel ausgewertet:

und bewerteten den Rang, den wir im Vergleich zu den anderen Läufern gewonnen oder verloren haben:

Es überrascht nicht, dass Pascal 10 Ränge verbesserte.
Noch überraschender ist, dass ich 6 Ränge gewonnen habe. Das bedeutet, dass
- Insgesamt bin ich, basierend auf den Residuen der gesamten Anpassungslinie, der „durchschnittliche“ Mann
- ABER vor Ort (im Vergleich zu den wenigen Läufern, mit denen ich lief/konkurrierte) habe ich im letzten Drittel gute Arbeit geleistet.
Ich hoffe, dass dieser Blogbeitrag Ihnen hilft, einige der in JMP verfügbaren Formeleditorfunktionen zu verstehen, von den einfachen bis zu den komplexeren (sobald Sie mit der Verwendung beginnen). Regex () Sie können großartige Dinge tun) sowie einige Datenvisualisierungen/-analysen.
Um ehrlich zu sein, analysiere ich meine „Leistung“ normalerweise nicht übermäßig, aber ich dachte, dies wäre ein guter Anwendungsfall, um einige der Vorteile von JMP auszunutzen und dabei nicht-industrielle Daten zu nutzen, um mehr Spaß zu haben.