분석 프로그램은 엄격한 행-열 구조의 데이터를 필요로 하며, 행은 일반적으로 독립적인 관측치로 취급됩니다. 원인-결과 다이어그램은 행들을 부모-자식 관계 쌍으로 표현되는 계층 구조로 나타냅니다. 원래 품질 관리 분야에서 브레인스토밍 결과를 문서화하기 위해 개발된 이 플랫폼은 다른 구조들을 시각화하는 데에도 강력한 도구로 활용될 수 있습니다.
JSL 스크립팅에서 흔히 사용되는 데이터 구조로는 연관 배열과 리스트가 있습니다. 이러한 구조의 요소는 값, 리스트, 연관 배열 등이 될 수 있어 복잡한 데이터 구조를 빠르고 효율적으로 관리할 수 있는 프레임워크를 제공합니다. 시스템 통신에서 널리 사용되는 JSON 인터페이스 또한 계층적 데이터 구조의 좋은 예입니다. 항목을 다양한 방식으로 처리하고 처리 후 여러 매개변수를 측정하는 경우, 실제 조합을 모두 동일한 방식으로 문서화할 수 있습니다.
이 프레젠테이션에서는 리스트 또는 배열을 순회하며 모든 내용을 데이터 테이블에 저장하는 JSL 함수를 소개하고 예시를 제공합니다. 원인-결과 다이어그램은 내용을 시각적으로 보여줍니다. 응용 예제를 통해 이 개념의 다재다능함과 강력함을 확인할 수 있습니다.
환영합니다. 저와 함께 심오한 계층 구조의 세계로 들어가 보시죠. 먼저 데이터 테이블부터 살펴보겠습니다. 이것이 우리가 원하는 레이아웃입니다. 빈칸이나 누락된 값 없이 완벽한 격자 형태죠. 하지만 이 데이터 테이블을 자세히 보면 레이아웃과 웨이퍼 ID에 중복된 값이 있는 것을 알 수 있습니다. 이것이 바로 계층 구조의 존재를 보여줍니다.
좀 더 쉽게 시작해서 JMP 스크립팅 언어인 JSL을 사용하여 계층 구조와 구조체가 무엇인지 이해해 보겠습니다. 이것은 리스트입니다. 리스트는 중괄호로 묶이고, 리스트의 요소는 위치에 따라 접근됩니다. 여기서 두 번째 위치는 제 성인 하이넨(Heinen)입니다.
이것은 동일한 내용이지만 연관 배열 형태입니다. 연관 배열은 대괄호로 묶이고 요소에는 이름이 있습니다. 이 요소는 'fn'(first name)이라고 하며, 데이터는 바인딩됩니다. 'first name'의 내용이 바인딩됩니다.
데이터 구조를 만드는 방법에는 두 가지가 있습니다. 이러한 구조는 서로 결합되어 다음과 같은 조합 변환을 만들어낼 수 있습니다. 여기에는 중괄호와 대괄호가 많이 사용되고, 마지막에는 대괄호 두 개와 닫힌 중괄호가 나타납니다. 이러한 구조에서는 무엇이 어디에 있는지 파악하기가 상당히 어렵습니다.
하지만 이는 특히 컴퓨터가 인터넷 서비스와 통신하는 소위 REST 인터페이스와 같은 환경에서 데이터가 JSON 구조로 교환되기 때문에 중요합니다. JSON 구조는 정확히 리스트와 연관 배열의 조합이기 때문입니다. 따라서 어떤 요소가 어디에 있는지 파악하는 것이 중요합니다.
이 작업을 수동으로 하는 건 좀 번거롭습니다. 대신 이 작업을 해주는 프로그램이 있습니다. 제가 직접 작성해서 공유해 드립니다. 프로그래밍에 대해 많이 알 필요는 없습니다. 여기서 중요한 건 for 문과 재귀 호출, 두 가지뿐입니다.
`for`는 반복문을 의미합니다. 괄호 안의 내용은 여러 번 반복됩니다. 재귀는 흥미로운 개념입니다. 재귀는 JMP에게 현재 프로그램 실행 위치를 기억하고 전체 프로그램을 다시 실행하라고 지시합니다. 그리고 실행이 끝나면 다시 현재 위치로 돌아와 다음 단계로 진행하라는 것입니다. 재귀는 본질적으로 임의의 횟수만큼 반복될 수 있습니다.
이 프로그램은 무엇을 할까요? 먼저 전체 구조를 살펴봅니다. 리스트인지 연관 배열인지 묻고, 맞다면 부모 역할을 부여합니다. 계층 구조를 생각할 때, 조부모, 부모, 자녀, 손자녀 등 세대를 떠올릴 수 있습니다. 이것이 첫 번째 부모 세대입니다.
우리는 첫 번째 요소, 즉 해당 요소의 첫 번째 자식 요소를 가져와 스택 레벨을 높입니다. 이렇게 하면 이제 2세대에 있음을 기억할 수 있으며, 그런 다음 끝에 도달할 때까지 전체 과정을 다시 시작합니다. 최종 결과는 항상 데이터 요소입니다.
다음으로, 이 데이터 요소의 모든 정보를 저장하고 스택 레벨을 낮춰 한 세대 전으로 돌아갑니다. 현재 손자 세대에 있으므로, 한 세대 전으로 돌아가서 해당 세대에 형제자매가 있는지 확인합니다. 형제자매가 있다면 다음 형제자매를 선택하고, 더 이상 형제자매가 없을 때까지 이 과정을 반복합니다. 결국 최상위 세대인 조부모 세대에 도달하게 됩니다. 이렇게 해서 최종 출력을 생성합니다.
이 경우 출력 결과는, 또는 예를 들어, 부품 간 비교에서 표준화된 부품들이 실험실로 보내져 여러 분석기로 테스트를 거치고, 각 분석기에서 서로 다른 측정값 그룹이 출력되는 것입니다.
해당 데이터는 분석되어 이 표에 표시됩니다. 부모-자식 열이 있는데, 어떤 과정이 진행되는지 쉽게 알 수 있도록 색상을 입혔습니다. 첫 번째 데이터 요소까지의 첫 번째 경로, 그 다음 모든 형제 요소, 한 단계 위로 올라가면 더 이상 자식이 없는 끝을 찾을 수 있고, 다시 한 단계 위로 올라가면 다음 구조 요소가 나타납니다.
데이터를 저장해 두었기 때문에 모든 단계에서 무엇에 대해 이야기하고 있는지 정확히 알 수 있습니다. 실험실, 부품, 실험실 분석의 측정값 그룹에 대한 내용입니다. 맨 아래에는 이 특정 사례에서는 변동 계수(cv)라고 하는 값이 있습니다.
이런 데이터 테이블을 가지고 뭘 할까요? 우리는 이런 다이어그램을 만들고 싶습니다. [분석] 메뉴에서 [분석], [품질 및 프로세스], [다이어그램]을 선택하면 됩니다. 저는 이전에 해본 적이 있어서 자동으로 입력할 수 있습니다. 사실 그렇게 어려운 건 아닙니다.
기본 설정은 피시본 다이어그램입니다. 맨 끝에는 전체 집합이 여기에 있습니다. 이것은 읽기 어렵습니다. 마우스 오른쪽 버튼을 클릭하면(여기서 마우스 오른쪽 버튼을 클릭하면) 유형을 계층 구조로 변경할 수 있습니다. 이제 최대 7단계의 계층 구조가 표시되고, 여기서부터 전체 집합이 시작되는 식으로 이어집니다. 연관 배열도 있고, 리스트도 있습니다.
이러한 그룹 내에서 어떻게 탐색할까요? 물론 전체 집합부터 시작합니다. 그런 다음 각 부분의 연관 배열을 따라 한 단계 아래로 이동하고, 다시 첫 번째 랩을 따라 한 단계 더 아래로 이동합니다. 선이 오른쪽으로 멀리 뻗어 있는 것을 보면 여러 랩이 있다는 것을 알 수 있습니다. 분석기 중 하나인 E2를 예로 들어 보겠습니다. 측정값 그룹은 리스트 형태로 되어 있고, 리스트의 세 번째 요소가 값이 6인 데이터 포인트입니다.
프로그래머가 해당 데이터 포인트에 접근하는 방식이 바로 이렇습니다. 이런 구조를 헤매는 것보다 훨씬 쉽게 찾고 이해할 수 있습니다. 저희는 분석을 수행하는 프로그램을 가지고 있고, 애플리케이션, JSON 인터페이스, REST 인터페이스, JSON 구조 등에서 이 방식이 매우 유용합니다.
모든 게 완벽한가요? 음, 스크립트는 구조가 이미 JSL 구조라고 가정합니다. 사용자가 "이것이 내 데이터 테이블입니다. 이것이 내 열의 계층 구조입니다. 이런 그래프를 생성해 주세요!"라고 말할 수 있는 사용자 인터페이스가 있으면 좋을 것 같습니다. 그러면 프로그램이 해당 그래프를 생성해 줄 것입니다.
이 다이어그램을 살펴보시면 최신 플랫폼처럼 JMP에 100% 통합되어 있지 않다는 것을 알 수 있을 것입니다. 마치 JMP 2 또는 3 버전 시절의 코드를 그대로 가져온 것처럼 보입니다. JMP 개발 담당자께서 이 글을 읽고 계시다면, 해당 플랫폼을 개선해 주시면 감사하겠습니다.
해당 스크립트는 제 디스커버리 프레젠테이션 웹페이지에서 다운로드하실 수 있습니다. 궁금하신 점이 있거나 질문이 있으시거나, 3월 7일 목요일 디스커버리 서밋에서 저를 만나고 싶으시다면, 2번 부스 볼룸으로 오시면 됩니다. 제가 그곳에 있을 예정입니다.