
이 데모에서는 행렬을 사용하는 몇 가지 방법을 보여드리겠습니다. 수업 일지의 섹션에 있는 치료 시간 데이터를 클릭하겠습니다. 각 날짜의 평균 치료 시간을 구해야 한다고 가정해 보겠습니다. 각 행의 치료 시간 값을 모두 더하고 샘플 수로 나눕니다. 행렬을 사용하여 이 계산을 수행하겠습니다. 다시 한 번 말하지만, 벡터화된 연산은 이 작업을 더 효율적으로 만듭니다. 수업 일지로 돌아가서, "행렬을 사용하여 통계 계산"이라는 미리 작성된 스크립트가 있습니다. 치료 시간 표와 스크립트를 모두 볼 수 있도록 이 스크립트를 옮기겠습니다. 조금 더 넓고 고르게 만들겠습니다. 스크립트는 s라는 변수를 만드는 것으로 시작합니다. s는 J 함수의 결과를 저장합니다. J 함수는 지정된 행 수, 지정된 열 수, 그리고 시작 값을 갖는 행렬을 만듭니다. 이 경우 인수 없이 Nrow 함수를 사용합니다. 따라서 현재 데이터 테이블의 행 수만 살펴보겠습니다. 다음 줄을 실행하고 로그에서 s에 저장된 것이 0으로 구성된 열 벡터인 것을 확인할 수 있습니다. 이를 사용하여 각 경화 시간 값을 제자리에 추가할 것입니다. 따라서 for 루프를 사용하고 있습니다. 경화 시간 데이터의 경우 두 번째 열부터 시작하려고 하므로 c를 equals로 초기화했습니다. c가 열 개수보다 작거나 같은지 테스트합니다. 다시 말하지만, 특히 대규모 데이터 테이블에서 작업하는 경우 for 루프 외부에서 계산을 수행하고 변수에 저장한 다음 c와 해당 변수를 비교하는 것이 가장 좋습니다. 다음으로 파서는 for 루프의 본문을 평가합니다. 먼저 assign 함수의 오른쪽을 살펴보겠습니다. 이번에는 get as matrix to column 메시지를 보낸 다음 s에 제자리에 추가합니다. 그런 다음 후치 증가 연산자로 c를 업데이트합니다. 이렇게 하면 c에 1이 제자리에 추가됩니다. c가 여전히 열의 개수보다 작거나 같은지 테스트합니다. 이제 열을 행렬로 가져와서 s에 추가합니다. 따라서 줄을 계속 실행하겠습니다. for 함수는 누락된 값을 로그에 반환한다는 것을 기억하세요. 하지만 s 위에 마우스를 올려놓으면 이제 5개의 경화 시간 열에 대한 합계인 상당히 큰 숫자가 포함되어 있음을 알 수 있습니다. 마지막으로 현재 데이터 테이블인 새 열 메시지에 메시지를 보냅니다. 새 열의 제목은 평균이 됩니다. 값에 대해서는(다시 말하지만, 설정된 값이나 값이 될 수 있습니다) 실제로 계산을 수행합니다. 다시 말하지만, 변수를 먼저 저장하지 않고도 값 인수에 함수를 제공할 수 있습니다. 따라서 여기 함수는 나누기 함수와 빼기 함수가 있습니다. s를 취하고 있는데, 이는 경화 시간 열의 합계이고, c에서 뺀 값으로 나눕니다. 그리고 c에서 뺀 값입니다. 왜냐하면 c를 세기 시작한 시점이 1이기 때문입니다. 따라서 더한 항목 수에서 1을 뺍니다. 물론 c는 테스트를 지나서 증가해야 했습니다. 테스트에 실패해야 했습니다. 따라서 c의 최종 값은... 마우스를 올려놓으면 1입니다. 그런데 실제로는 항목을 더했을 뿐입니다. 그래서 c에서 뺀 값으로 나눕니다. 마지막 줄을 실행해 보겠습니다. 경화 시간 데이터 테이블에 Average 열이 생성된 것을 볼 수 있습니다. 로그에서 볼 수 있듯이 열 개체의 인스턴스를 생성했습니다. 실제로 해당 열에서 작업을 계속하려면 모든 줄을 변수에 할당할 수 있습니다. 이제 데모의 다음 단계에서는 모든 경화 시간 데이터를 한 번에 작업하여 계산을 수행하고 싶습니다. 따라서 미리 작성된 스크립트에서처럼 한 번에 한 열씩 추출하는 대신 전체 데이터 테이블을 행렬 형태로 추출하겠습니다. 그 전에 방금 만든 열을 제거하고 싶습니다. 스크립트 편집기 창의 전체 내용을 선택합니다. 그리고 현재 데이터 테이블에 메시지를 보냅니다. "열 삭제"를 클릭합니다. 삭제하려는 열은 "평균"입니다. 다시 한번 말씀드리지만, 테스트 중이거나 프레젠테이션을 할 때 "현재 데이터 테이블"을 사용하면 매우 편리합니다. 프로덕션 스크립트에서는 테이블에 대한 명시적인 참조를 사용하는 것이 좋습니다. 스크립팅 연습을 하거나 작동 방식을 테스트할 때는 "현재 데이터 테이블"이 유용합니다. 하지만 실제로 배포하거나 사용할 계획이고 여러 버전의 JMP를 사용하고 여러 상황에서 사용하려는 스크립트의 경우 "현재 데이터 테이블" 대신 명시적인 데이터 테이블 참조를 사용하는 것이 좋습니다. 따라서 이 스크립트를 실행해 보겠습니다. 그러면 제거하려고 했던 열이 삭제됩니다. 스크립트 가능한 메시지를 로그로 반환했습니다. 이제 스크립트 편집기 창의 내용을 지우겠습니다. 전체 데이터 테이블을 행렬로 추출하여 m 변수에 저장하겠습니다. 따라서 m에는 현재 데이터 테이블에 메시지를 보낸 결과가 할당됩니다. 이 메시지는 get as matrix입니다. 실행해 보겠습니다. 로그에서 볼 수 있거나 m 위에 마우스를 올려놓으면 이 행렬이 표시됩니다. 첫 번째 열은 정말 큰 숫자입니다. 물론 일반적으로 get as matrix를 데이터 테이블에 보내면 모든 숫자 열이 추출되기 때문입니다. 여기에는 날짜도 포함됩니다. 따라서 여기서 날짜는 숫자로 처리됩니다. 모델링 유형 아이콘을 보면 연속형이라는 것을 알 수 있습니다. 데이터 유형은 숫자여야 합니다. 더 넓게 만들면 날짜에 문자가 포함되어 있는 것처럼 보이지만 이는 형식일 뿐입니다. 숫자이기 때문에 오른쪽 정렬됩니다. 따라서 get as matrix도 해당 값을 추출했습니다. 그리고 제가 Cure Time에 대한 계산을 하고 싶다면, 사실 제가 하고 싶은 계산은 최소값과 최대값을 찾는 것입니다. 그 행렬에 하루 동안 큰 값이 있는 건 원치 않습니다. 그래서 새로운 행으로 이동하겠습니다. 조심할 겁니다. 이미 창에 넣어둔 코드는 계속 보이게 하되, 전체를 실행하고 싶지는 않습니다. 그래서 한 줄씩 실행하는 데 매우 주의할 겁니다. 첫 번째 열을 없애기 위해 변수 m을 사용하고 0과 1로 첨자를 붙입니다. 첨자를 붙인다는 건 특정 행을 선택하지 않는다는 뜻입니다. 다시 말해, 첫 번째 열의 모든 행을 입력하라는 겁니다. 그리고 그 행에 아무것도 없는 대괄호만 있는 빈 행렬을 할당할 겁니다. 그리고 다시 말하지만, 한 줄만 실행하려면 해당 줄을 강조 표시하고 전체 스크립트를 실행하는 데 사용하는 메서드를 사용하면 됩니다. 하지만 선택되거나 강조 표시된 부분만 실행됩니다. 또는 표준 데스크톱 키보드의 숫자 키패드에서 맨 오른쪽에 있는 Enter 키를 사용할 수 있습니다. 따라서 로그에 반환되는 것은 빈 행렬입니다. 하지만 지금 m 위에 마우스를 올려놓거나 m을 강조 표시하고 실행하면 이제 치료 시간 값만 있는 것을 볼 수 있습니다. 큰 날짜 숫자가 있는 첫 번째 열은 제거되었습니다. 새 줄로 이동하여 사용할 수 있는 다른 행렬 함수를 살펴보겠습니다. 따라서 loc 함수 LOC를 사용한 결과가 할당될 변수 a를 만들 것입니다. 그리고 이 행렬 m에서 값이 다음보다 큰 위치를 찾을 것입니다. 그리고 해당 줄만 실행하면 행렬 m을 행 벡터처럼 취급하고 첫 번째 위치에서 시작하여 행렬에서 다음보다 큰 모든 요소의 위치, 즉 단일 첨자 위치를 반환합니다. 이제 실제 값을 원하면 avals라는 변수를 만들 것입니다. 그리고 변수 a를 사용하여 m에 저장된 행렬을 첨자로 변환한 결과에 서명하려고 합니다. 그리고 바로 그 줄을 실행하겠습니다. 그리고 실제 경화 시간 값이 초과합니다. 물론 이 스크립트를 간소화하기 위해 모든 값의 위치를 저장할 필요가 없다면 loc 함수를 사용하여 행렬 m을 첨자로 변환할 수 있습니다. 이 예제에서 처음에 a에 저장한 위치를 사용해야 하는 다른 이유가 없는 한 위치를 저장하고 사용하는 이러한 추가 단계는 필요하지 않습니다. 따라서 이 행렬에서 다음으로 하려는 것은 변환된 값을 계산하는 것입니다. 그리고 이 변환은 전체 테이블에서 최소값을 뺀 경화 시간의 각 관측치를 최대값에서 최소값까지의 경화 시간 값 범위로 나누고 곱합니다. 따라서 최소 경화 시간으로부터 각 관측치의 거리를 범위의 비율로 취하는 것과 같습니다. 이것은 행렬을 사용하는 또 다른 이점을 보여줍니다. 전체 데이터 테이블에서 최소값을 찾으려면 스크립팅을 하든 대화형으로 작업하든 데이터 테이블의 개별 열을 다루려면 최소값이나 최대값을 찾기 위해 많은 단계가 필요합니다.하지만 행렬을 사용하면 매우 짧은 코드 한 줄로 할 수 있습니다.그래서 스크립트 편집기 창에서--지금 내용을 지우겠습니다--minCT 변수를 만들 것입니다--즉, 최소 경화 시간이고, 그 변수에 m을 인수로 하는 min 함수를 사용한 결과를 할당할 것입니다.그리고 그 줄을 실행하겠습니다.최소값은 다음과 같습니다.그리고 그런 다음 maxCT 변수도 만들 것입니다.그리고 m을 인수로 하는 max 함수를 사용한 결과를 할당할 것입니다.그리고 그 줄만 실행하겠습니다.그리고 그것은 다음과 같습니다.이제 이 변수를 이 변환 계산에 사용할 수 있습니다.변수 t를 만들어 변환 값을 저장하겠습니다.새로운 줄로 이동하겠습니다. 따라서 t에 시간의 결과가 할당되고 분자 m에서 minCT를 뺀 괄호가 열리고 나누기 기호가 닫힌 괄호가 열리고 분모인 maxCT에서 minCT를 뺀 괄호가 열립니다.그러므로 해당 줄만 실행하면 이러한 변환 값을 얻을 수 있습니다.각 관찰값에서 최소값을 뺀 값이 경화 시간 값 범위의 비율입니다.이제 소수 자릿수가 많습니다.정밀도가 그렇게 높지 않습니다.따라서 실제로 이 값을 반올림할 수 있습니다.그리고 다시 새 줄로 이동합니다.t에 있는 값을 덮어쓰고 round 함수의 결과를 t에 다시 할당합니다.원본을 유지하려면 새 변수에서 이 작업을 수행할 수 있습니다.하지만 t를 입력한 다음 할당 연산자인 round 함수를 입력합니다.인수는 먼저 무엇을 반올림할까요?즉 t에 저장된 값을 반올림합니다.그런 다음 소수 자릿수가 몇 개 필요할까요?0을 원합니다.이제 행렬의 값을 잘라냅니다. 이는 전체 값이 백그라운드에 저장되는 데이터 열의 소수 자릿수를 0으로 지정하는 것과는 다릅니다. 따라서 여기서는 서식을 지정하지 않습니다. 실제로 값을 잘라내는 것입니다. 계속해서 실행해 보겠습니다. 이제 변환된 값에 대한 정수 값을 얻었습니다. 이 값을 경화 시간 데이터 테이블에 다시 넣으려면 행렬을 반복하여 새 열을 만들 수 있습니다. 완전히 새로운 데이터 테이블을 만들려면 as table이라는 매우 간단한 함수가 있습니다. 이 테이블과 열의 이름을 지정하는 선택적 인수가 있습니다. 이 데모에서는 as table의 인수로 변수 t를 사용하여 간단하게 설명하겠습니다. 이 함수를 실행하면 일반적인 열 이름이 있는 제목 없는 테이블이 생성됩니다. 하지만 이 테이블에는 해당 변환 행렬의 모든 값이 채워집니다. 다시 말하지만, as table 인수의 일부로 이름과 열 머리글을 지정할 수 있습니다. 또는 스크립트를 사용하여 나중에 이 값을 수정할 수도 있습니다. 그래서 우리는 데이터 테이블에서 숫자 값을 추출하는 여러 가지 방법을 살펴보았습니다. 열 단위나 전체 데이터 테이블, 모든 숫자 열, 전체 데이터 테이블, 그리고 행렬을 사용하여 할 수 있는 몇 가지 조작을 살펴보았습니다.