Gara UltraChampsaur
Nel luglio 2022, ho corso una corsa in montagna di circa ~ 30 km / ~ 1500 m di dislivello. A causa della pandemia quella è stata la mia prima gara dal 2 ottobre 2019 1/2 anni prima.


La gara è andata bene. Sono stato davanti ai miei compagni di squadra per gran parte della gara finché Pascal mi ha raggiunto a 6 km dalla fine e abbiamo tagliato insieme il traguardo (in realtà mi ha aspettato negli ultimi chilometri per fare questo arrivo amichevole, grazie a lui). Mi sono sentito stanco durante l'ultima salita (vedi vetta a sinistra al km 20 sotto) e la discesa che è l'ultimo terzo della gara.

Importa dati
Per valutare le prestazioni ho deciso di scaricare Cronosport data (file Excel) che apro utilizzando JMP.

Per qualche motivo l'ora al Piolit (colonna "Piolit 1") e l'ora all'arrivo (colonna "Temps") non erano definite allo stesso modo sul file excel e ne veniva riconosciuta una come variabile continua ("Temps" con un triangolo blu) mentre l'altra è stata riconosciuta come variabile categoriale ("Piolit 1" con barre rosse).
Non preoccuparti, era il momento perfetto per mettere in pratica le nuove lezioni apprese nella guida allo scripting JMP che sto leggendo... Non aver paura, non sono un geek, leggo romanzi nel tempo libero e imparo a scrivere testi durante l'orario di lavoro.
Trasforma i dati: editor di formule di colonna
Volevo avere tempo in minuti.
Trasformare la variabile continua "Temps = 2:32:43" (non il mio tempo purtroppo perché mi ci sono volute 2 ore e 10 minuti in più per finire) in 153 minuti è semplice con questa formula.

In minuti() trasforma un tempo in minuti, la stessa trasformazione esiste per anni, mesi, settimana, … secondi.
Trasformare la variabile categoriale “Piolit 1 = 1:54:57” (ancora non il mio tempo ma quello del vincitore) in 115 minuti è stata una buona occasione da sfruttare espressione regolare() che è un modo meraviglioso per gestire variabili categoriali complesse (il mio esempio è in realtà abbastanza semplice).

Il punto principale è identificare i vari gruppi che compongono il tuo input utilizzando
( Regex (:Piolit 1, " (\d)(\W)(\d\d)(\W)(\d\d) ")).
:Piolit 1 è la variabile di colonna. espressione regolare() mirare a identificare i gruppi in questa variabile di colonna, ogni coppia di parentesi essendo un gruppo. Qui stiamo cercando 5 gruppi:
- Gruppo 1 = (\D) = le ore che contengono solo 1 cifra
- Gruppo 3 = (\d\d) = i minuti che contengono 2 cifre
- Gruppo 5 = (\d\d) = i secondi che contengono 2 cifre
- Gruppo 2 e Gruppo 4 = (\W) = il separatore “:” tra ora:minuti e minuti:secondi (the codice (\W) riconosce effettivamente i caratteri non alfanumerici)
Una volta fatto ciò, riutilizziamo i Gruppi 1, 3 e 5:
- Gruppo 1 per ore: Num ( Regex (: Piolit 1," (\d)(\W)(\d\d)(\W)(\d\d) ","\1")) * 60
Sostituisci :Piolit 1 (1:54:57 nella riga 1) con il Gruppo 1 (questo è ciò che significa "\1") trasformalo come un numero (questo è ciò che significa Num fa) e moltiplicare per 60 (questo è ciò che fa * 60).
- Gruppo 3 per minuti: Num ( Regex (: Piolit 1," (\d)(\W)(\d\d)(\W)(\d\d) ","\3" ) )
Sostituisci :Piolit 1 (1:54:57 nella riga 1) con il Gruppo 3 (questo è ciò che significa "\3") trasformalo come un numero (questo è ciò che significa Num fa).
- Gruppo 5 per secondi: Num ( Regex (: Piolit 1," (\d)(\W)(\d\d)(\W)(\d\d) " ,"\5")) / 60
Sostituisci :Piolit 1 (1:54:57 nella riga 1) con il Gruppo 5 (questo è ciò che significa "\5") trasformalo come un numero (questo è ciò che significa Num fa) e dividere per 60 (questo è ciò che fa / 60).
Alla fine, sommi i 3 componenti e arrotondi per eccesso (questo è ciò che Girare fa) per ottenere i 115 minuti (ancora il vincitore sono lontano da esso).
Classifica all'arrivo: costruttore di grafici
Prima di tutto ho valutato la nostra prestazione vs.
a) tutti i corridori b) solo uomini c) la nostra categoria (M3H = 50-55 anni)


Ho fatto il calcolo in percentuale anziché in numero assoluto, quindi ho diviso
- la classifica calcolata sull'orario di arrivo utilizzando Col Rango (:"Arrivo (min)"n)
- dal numero di eventi all'interno della stessa colonna (“Arrivo (min)”) utilizzando Numero col (:"Arrivo min)"n).
Per le sottocategorie ho aggiunto un “per variabile” quindi il calcolo viene effettuato all'interno della colonna considerando come istanza il livello di un'altra variabile
- b) “Sx” = “Maschio” o “Femmina”
- c) “Gatto” = “SEF”, “SHE”, … “M6F”, “M8H” a seconda del sesso e dell’età.
Il vantaggio è che non sono necessari calcoli di formule multiple o istruzioni if/then complesse e, cosa più importante, non vi è alcun rischio di errore poiché il calcolo viene eseguito in base alla colonna considerando il livello della riga.
Il grafico sottostante evidenziato sulla nostra categoria illustra la percentuale di rango con noi due selezionati per un'analisi dettagliata:

In definitiva la percentuale riflette la nostra posizione:
- 52% rispetto a tutti i corridori, quindi siamo corridori “medi”.
- 60% rispetto a tutti i corridori maschi, quindi siamo sotto gli uomini con prestazioni elevate
- 40% rispetto ai corridori uomini tra i 50 e i 55 anni, il che significa che le nostre prestazioni sono leggermente migliori rispetto a quelle degli uomini della nostra età
Prestazione intermedia (al vertice del Piolit) rispetto all'Arrivo: costruttore di grafici
Ora che ho i miei dati nello stesso formato (tempo in minuti sia per Piolit che per Arrival) ho eseguito una visualizzazione del grafico a dispersione:

Esiste una relazione diagonale tra queste due variabili, indicando che gli individui sono rimasti più o meno costanti nell’ultimo terzo della gara senza grandi cambiamenti.
Traccio una linea di adattamento (dopo aver escluso l'ultimo corridore che sembra un valore anomalo) sui dati e salvo la formula di previsione così come i residui per capire se ho sottoperformato durante l'ultimo terzo (questa era la mia sensazione) e/o se Pascal sovraperformato (sospettavo).

È interessante notare che io sono l'uomo "medio" con un residuo = -0,2, il che significa che la mia prestazione è "normale", mentre Pascal ha un residuo negativo (-4,4 minuti), il che significa che ha impiegato meno tempo rispetto agli altri corridori nell'ultimo terzo. “Ne aveva ancora un po' sotto i piedi” (non sono sicuro che sia l'espressione giusta in inglese ma penso che tutti possano capire) e ricorda che mi ha aspettato durante l'ultimo terzo quindi avrebbe dovuto fare un lavoro ancora migliore.
Ho anche valutato la differenza di rango con una formula di colonna aggiuntiva:

e valutato la classifica che abbiamo guadagnato o perso rispetto agli altri corridori:

Non sorprende che Pascal abbia guadagnato 10 gradi.
Ancora più sorprendentemente ho guadagnato 6 gradi. Ciò significa che
- globalmente, sulla base dei residui della linea complessiva di adattamento, sono l'uomo “medio”.
- MA a livello locale (rispetto ai pochi corridori con cui correvo/gareggiavo) ho fatto un lavoro decente durante l'ultimo terzo.
Spero che questo post del blog ti aiuti a comprendere alcune delle funzioni dell'editor di formule disponibili in JMP, da quelle semplici a quelle più complesse (una volta che inizi a utilizzare Regex () puoi fare grandi cose) così come alcune visualizzazioni/analisi dei dati.
Ad essere sincero, di solito non analizzo eccessivamente le mie "prestazioni", ma ho pensato che questo fosse un buon caso d'uso per sfruttare alcuni dei vantaggi di JMP utilizzando dati non industriali per divertirmi di più.