울트라챔프사우루스 경주
2022년 7월에 약 ~30km/~1500m 높이의 산악 경주를 달렸습니다. 2019년 10월 이후 첫 경주였던 전염병으로 인해 2 1/2 몇 년 전에.


경주는 잘 진행되었습니다. Pascal이 6km를 남기고 나와 합류하여 함께 결승선을 통과할 때까지 나는 대부분의 경주에서 팀 동료보다 앞서 있었습니다. (그는 실제로 마지막 몇 킬로미터 동안 나를 기다려 준 덕분에 우호적인 마무리를 했습니다.) 나는 마지막 오르막(아래 20km 지점 왼쪽 정상 참조)과 경주의 마지막 3분의 1인 내리막에서 피곤함을 느꼈습니다.

데이터 가져오기
성능을 벤치마킹하기 위해 다운로드하기로 결정했습니다. 크로노스포츠 JMP를 사용하여 연 데이터(엑셀 파일)입니다.

무슨 이유에서인지 엑셀 파일에서 Piolit에서의 시간("Piolit 1" 열)과 도착 시간("Temps" 열)이 동일하게 정의되지 않고 하나가 연속형 변수("Temps"로 인식됨) 파란색 삼각형) 다른 하나는 범주형 변수(빨간색 막대가 있는 "Piolit 1")로 인식되었습니다.
걱정하지 마세요. 제가 읽고 있는 JMP 스크립팅 가이드에서 배운 새로운 교훈을 실제로 적용하기에 완벽한 시간이었습니다... 두려워하지 마십시오. 저는 괴짜가 아닙니다. 여가 시간에는 소설을 읽고 근무 시간에는 대본 작성을 배웁니다.
데이터 변환: 열 수식 편집기
나는 몇 분 안에 시간을 갖고 싶었습니다.
이 공식을 사용하면 연속 변수 "Temps = 2:32:43"(완료하는 데 2시간 10분 더 걸렸기 때문에 안타깝게도 내 시간은 아님)을 153분으로 변환하는 것은 간단합니다.

분 후() 시간을 분 단위로 변환하면 연, 월, 주, … 초에도 동일한 변환이 존재합니다.
범주형 변수 “Piolit 1 = 1:54:57”(여전히 내 시간은 아니지만 승자의 시간)을 115분 만에 변환하는 것은 좋은 기회였습니다. 정규식() 이는 복잡한 범주형 변수를 처리하는 훌륭한 방법입니다(제 예는 실제로 매우 간단합니다).

중요한 점은 다음을 사용하여 입력을 구성하는 다양한 그룹을 식별하는 것입니다.
( 정규식 ( :피올리트 1, " (\d)(\W)(\d\d)(\W)(\d\d) ")).
:Piolit 1은 열 변수입니다. 정규식() 이 열 변수에서 그룹을 식별하는 것을 목표로 하며 각 괄호 쌍은 그룹입니다. 여기서는 5개의 그룹을 찾고 있습니다.
- 그룹 1 = (\디) = 1자리 숫자만 포함된 시간
- 그룹 3 = (\d\d) = 2자리 숫자를 포함하는 분
- 그룹 5 = (\d\d) = 2자리 숫자를 포함하는 초
- 그룹 2 및 그룹 4 = (\W) = 시:분과 분:초 사이의 ":" 구분 기호( 암호 (\W) 실제로 영숫자가 아닌 문자를 인식합니다)
이 작업을 완료한 후에는 그룹 1, 3, 5를 재사용합니다.
- 몇 시간 동안 그룹 1: 숫자 ( 정규식 (:피올리트 1," (\d)(\W)(\d\d)(\W)(\d\d) ","\1")) * 60
:Piolit 1(1행의 1:54:57)을 그룹 1("\1"의 약자)로 대체하여 숫자로 변환합니다(이것이 바로 숫자 않습니다) 그리고 60을 곱합니다(* 60이 하는 일입니다).
- 분 동안 그룹 3: 숫자 ( 정규식 (:피올리트 1," (\d)(\W)(\d\d)(\W)(\d\d) ","\삼" ) )
:Piolit 1(1행의 1:54:57)을 그룹 3("\3"의 약자)로 대체하여 숫자로 변환합니다(이것이 바로 숫자 하다).
- 초 동안 그룹 5: 숫자 ( 정규식 (:피올리트 1," (\d)(\W)(\d\d)(\W)(\d\d) " ,"\5")) / 60
:Piolit 1(1행의 1:54:57)을 그룹 5("\5"의 약자)로 대체하여 숫자로 변환합니다(이것이 바로 숫자 )를 60으로 나눕니다(이것이 / 60의 역할입니다).
마지막에는 3개의 구성요소를 합산하여 반올림합니다(이것이 바로 둥근 않습니다) 115분을 얻으려면 (여전히 승자는 아직 멀었습니다).
도착 시 순위 : 그래프 빌더
우선 저는 우리의 성과를 비교 평가했습니다.
a) 모든 주자 b) 남성만 해당 c) 우리 카테고리(M3H = 50-55세)


절대값이 아닌 백분율로 계산해서 나누었습니다.
- 도착 시간을 기준으로 계산된 순위 콜 랭크 (:"도착(분)"n)
- 다음을 사용하여 동일한 열('도착(분)') 내의 이벤트 수로 열 번호 (:"도착 분)"n).
하위 범주의 경우 "변수 기준"을 추가하여 다른 변수의 수준을 인스턴스로 고려하여 열 내에서 계산이 수행되도록 했습니다.
- b) “Sx” = “남성” 또는 “여성”
- c) "Cat" = 성별과 연령에 따라 "SEF", "SHE", … "M6F", "M8H".
여러 수식 계산이나 복잡한 if/then 문이 필요하지 않으며 더 중요한 것은 행 단위 수준을 고려하여 열 단위로 계산이 수행되므로 오류 위험이 없다는 이점이 있습니다.
우리 카테고리에 강조 표시된 아래 그래프는 세부 분석을 위해 우리 둘이 선택된 순위 %를 보여줍니다.

궁극적으로 %는 우리의 입장을 반영합니다.
- 52% vs. 모든 주자이므로 우리는 "평균" 주자입니다.
- 60% vs. 모든 남성 주자들이므로 우리는 남성보다 성과가 낮습니다.
- 50~55세 남성 주자들에 비해 40%, 즉 우리 또래 남성들보다 약간 나은 성적을 낸다.
중간 성능(Piolit 정상에서) vs. 도착: 그래프 빌더
이제 동일한 형식(Piolit 및 Arrival 모두에 대한 시간(분))의 데이터가 있습니다. 산점도 시각화를 수행했습니다.

이 두 변수 사이에는 대각선 관계가 있는데, 이는 개인이 인종의 마지막 1/3 동안 큰 변화 없이 대략 일정하게 유지되었음을 나타냅니다.
데이터에 적합선(이상값처럼 보이는 마지막 주자를 제외한 후)을 그리고 예측 공식과 잔차를 저장하여 마지막 3분의 1 동안 성과가 저조했는지(내 느낌이었습니다) 및/또는 Pascal이 (나는 의심했다) 초과 성과를 냈다.

나는 잔차 = -0.2를 갖는 "평균" 남성이라는 점은 흥미롭습니다. 이는 내 성과가 "정상"임을 의미하는 반면, Pascal은 음의 잔차(-4.4분)를 가지고 있어 그에 비해 시간이 덜 걸렸다는 것을 의미합니다. 마지막 1/3에 다른 주자들에게. “He still had some under his foot”(영어로 올바른 표현인지는 확실하지 않지만 모두가 이해할 수 있을 것 같습니다.) 그리고 그가 마지막 3분의 1 동안 나를 기다렸다는 것을 기억하세요. 그래서 그는 실제로 더 나은 일을 했어야 했습니다.
또한 추가 열 수식을 사용하여 순위 차이를 평가했습니다.

다른 주자들과 비교하여 우리가 얻거나 잃은 순위를 평가했습니다.

당연히 Pascal은 10등급을 얻었습니다.
더 놀라운 것은 6등급을 획득했다는 것입니다. 이는 다음을 의미합니다.
- 전 세계적으로 전체 적합선의 잔차를 기준으로 볼 때 나는 "보통" 남성입니다.
- 그러나 로컬에서는(내가 달리거나 경쟁하고 있는 소수의 주자와 비교했을 때) 마지막 3분의 1 동안 괜찮은 일을 했습니다.
이 블로그 게시물이 간단한 것부터 복잡한 것까지 JMP에서 사용할 수 있는 일부 공식 편집기 기능을 이해하는 데 도움이 되기를 바랍니다. 정규식() 당신은 훌륭한 일을 할 수 있습니다)뿐만 아니라 일부 데이터 시각화/분석도 가능합니다.
솔직히 말해서 저는 일반적으로 "성과"를 과도하게 분석하지 않지만, 이는 비산업 데이터를 사용하여 JMP의 이점 중 일부를 활용하여 더 많은 즐거움을 누릴 수 있는 좋은 사용 사례라고 생각했습니다.