안녕하세요, 여러분. 저는 네이선 클라크입니다. IDEXX 연구소에서 일하고 있습니다. JMP를 22년째 사용해 왔고, 오늘 표 메뉴에 대한 강연을 하게 되었습니다. 표 메뉴는 JMP가 제공하는 가장 큰 장점 중 하나라고 생각합니다. 말장난처럼 말이죠. 데이터를 조작하고, 다듬고, 다양한 작업을 수행할 수 있는 강력한 기능을 제공하여 훨씬 더 다양한 추가 분석을 가능하게 하기 때문입니다. 표 메뉴를 완벽하게 활용한다면, 복사해서 붙여넣기 같은 기존 방식보다 훨씬 더 높은 수준의 분석 능력을 갖추게 될 것입니다.
오늘은 제가 표 메뉴를 어떻게 사용하는지, 그리고 사람들이 표 메뉴 사용에 익숙해지려고 할 때 지난 몇 년 동안 겪었던 몇 가지 함정, 그리고 그 과정에서 얻을 수 있는 몇 가지 팁과 요령에 대해 이야기해 보겠습니다. 자, 그럼 시작해 볼까요? 제가 수정한 몇 가지를 사용하여 모두가 좋아하는 큰 클래스에 대해 알아보겠습니다. 표 메뉴 맨 위에 있는 요약부터 시작하겠습니다.
예상하셨겠지만, 요약은 요약 통계를 위한 것입니다. 열면 여러 옵션이 있습니다. 키와 같은 반응 변수를 선택하면 평균, 표준편차(SD)를 구할 수 있습니다. 표 메뉴의 모든 항목에 대해 미리 보기가 팝업으로 표시됩니다. 정말 놀랍습니다. 이 기능이 얼마나 좋은지 말로 다 표현할 수 없을 정도입니다. 이렇게 하면 표에서 무엇을 보게 될지 빠르게 살펴볼 수 있기 때문입니다.
지금 보시는 것처럼 요약이 있습니다. 42개 행과 평균, 그리고 키가 있습니다. 여기서는 다른 요소는 고려하지 않습니다. 이는 모든 데이터의 총 평균과 총 표준 편차를 나타냅니다. 이를 나누고 싶다면 그룹화 섹션으로 드래그하기만 하면 됩니다. 이제 남녀의 평균과 키가 있습니다.
요약의 핵심 의도는 바로 이것입니다. "확인"을 클릭하면 요약이 표시되고, 그다음 "여기"로 가서 이 핫스팟 열의 통계를 추가할 수 있습니다. 뭔가 깜빡하고 체중 평균도 추가하고 싶다면 "확인"을 클릭하면 추가됩니다.
정말 멋지네요. 제가 이걸 많이 쓰거든요. 바로 여기 이 항목들이 잠긴 곳에 메모를 남겨둘게요. 잠긴 항목은 편집할 수 없다는 뜻이에요. 다른 숫자를 입력하려고 하면 여기에 알림이 뜨는데, 요약이나 통계를 볼 때 사용하지만, 좀 더 다양한 용도로 훨씬 더 많이 쓰죠. 이 부분을 닫고 다시 열어서 몇 가지 다른 점을 지적할게요.
방금 열 잠금에 대해 언급했던 걸 보셨죠? 이 체크박스를 해제하면 해당 열은 잠기지 않지만, 데이터와 연결되지도 않습니다. 이는 곧 살펴보게 될 기능들을 좀 더 원활하게 만들어 줍니다.
이 섹션을 마치면서, 표 메뉴에서 자주 보이는 두 개의 상자를 알려드리겠습니다. "대화 상자 열어두기"입니다. "확인"을 클릭한 후에도 이 상자를 열어두겠습니다. 이렇게 하면 다양한 아이디어를 빠르게 시도해 볼 수 있습니다. 그런 다음 스크립트를 원본 테이블에 저장하면, 생성하는 테이블에 스크립트와 스크립트가 어떻게 만들어졌는지가 저장될 뿐만 아니라, 이제 동일한 스크립트가 테이블의 원래 위치에 저장됩니다. 한두 버전 전에 나온 이 기능은 정말 훌륭하다고 생각합니다.
이제 제가 요약 기능을 어떻게 사용하는지 자세히 알아보겠습니다. 바로 데이터를 깊이 있게 이해하고 다양한 인구 통계를 분석하는 것입니다. 예를 들어, 여기서 '성별'만 선택하고 그룹화에 추가하면 통계는 그대로 유지됩니다. 표는 그대로 표시됩니다. 이 표에는 분석 결과와 행 개수가 표시됩니다. '확인'을 클릭하면 표가 표시됩니다. 표가 링크되어 있어서 클릭할 때마다 관심 있는 모든 정보가 선택됩니다.
이 방법은 나중에 자세히 설명하겠지만, 데이터를 부분집합으로 만들기 위해 데이터를 탐색하고 데이터의 다른 측면을 이해하는 데 매우 유용합니다. 이 부분은 다시 이 주제로 돌아와서 좀 더 자세히 살펴보겠습니다. 여기서 이름을 기준으로 살펴보면 성별과 그에 따른 이름도 구분되어 있음을 알 수 있습니다. 아시다시피, 이 부분은 N개의 행 중 일부가 실제로는 하나인 부분을 나타냅니다.
여기서 요약과 함께 이야기하겠지만, 앞으로 다룰 다른 많은 플랫폼에서도 매우 중요한 부분입니다. 특히 데이터에서 뭔가 이상해 보여서 문제를 해결해야 할 때 더욱 그렇습니다. 바로 이것이 고유성이라는 개념입니다.
어떤 테이블을 다루든, 다양한 조합의 열이 각기 다른 고유성을 갖는지 항상 파악할 수 있어야 합니다. 이 두 가지를 모두 제거한다면, 제가 이야기하려는 것은 이것부터 시작하겠습니다. 일반적으로 상당히 고유한 식별자라고 생각하는 name을 예로 들면, 여기서는 이름별로 그룹화할 수 있습니다.
스크롤해서 보면 대부분 하나라는 걸 알 수 있습니다. 여기 아래에는 로버트와 팻이 있는데, 둘 다 두 개의 행으로 연결되어 있습니다. 이름만으로는 이 데이터 세트에서 고유성을 갖기에는 부족하므로 열을 더 추가해야 합니다. 여기에 성별을 추가하면 이런 느낌을 얻을 수 있을 것 같습니다.
여전히 N개의 행이 1개이므로 고유성은 확보되지만, 여기 아래에는 여전히 로버트가 두 명 있습니다. 남자 한 명이고 그와 연관된 행이 두 개 있습니다. 즉, 필요한 고유성 수준을 얻으려면 열을 하나 더 추가해야 합니다. 나이를 낮추겠습니다. 이제 데이터의 고유성이 완전히 확보된 것을 확인할 수 있습니다. 가로로 1이 쭉 이어져 있습니다.
미리보기는 이를 확인하는 좋은 방법입니다. 미리보기에 잘 맞는 데이터가 더 있다면 언제든지 확인을 클릭하거나 대화 상자를 열어둔 채로 유지할 수 있습니다. 데이터를 다룰 때는 무엇이 고유한지 파악하고, 처음부터 고유하지 않은 데이터를 고유하게 만들기 위해 열을 추가하는 것이 매우 중요합니다. 앞으로 다룰 다른 방법들을 다룰 때 이 부분이 중요해지기 때문입니다.
그 이야기가 나와서 말인데, 바로 Subset 플랫폼으로 들어가 보겠습니다. Subset 플랫폼은 제안하는 대로 데이터를 하위로 나눌 수 있는 기능을 제공합니다. 모든 행이나 선택한 행을 필터링할 수 있고, 행별로 필터링할 수도 있습니다. 이렇게 하면 원본 데이터 테이블에 연결할 수도 있는데, 여기서는 좀 더 빠르고 쉬운 다른 방법을 살펴보겠습니다. JMP는 테이블에 실제로 있는 내용을 기반으로도 도움을 줍니다. 언제나 그렇듯이 미리보기가 도움이 될 것입니다.
여기로 가면 M을 클릭하고 마우스 오른쪽 버튼을 클릭한 후 '일치하는 셀'을 선택할 수 있습니다. 모든 M이 선택되어 있죠. 그런 다음 '표 및 하위 집합'으로 이동하면 자동으로... 선택한 행만 선택한다고 가정해 보겠습니다. 모든 열을 선택할 수도 있고, 선택한 열(현재 성별이 선택된 열입니다)을 선택할 수도 있고, 모든 열로 유지할 수도 있습니다.
수식을 복사하고 숨기는 것은 데이터를 깔끔하게 유지하는 데 도움이 됩니다. 수식은 정말 필요할 때만 계산하세요. 확인을 클릭하면 하위 집합이 생성됩니다. 이 하위 집합은 데이터와 연결되어 있지 않습니다. 여기를 클릭하면 됩니다. 이것이 독립형 표입니다.
연결된 하위 집합을 원하시면 네, 여기 '하위 집합'으로 가실 수 있습니다. '재확인'을 하고, 여기를 클릭한 후 '확인'을 클릭합니다. 이제 데이터와 연결되었습니다. 하지만 제가 원하는 것보다 몇 번 더 클릭해야 합니다. 저는 보통 마우스 오른쪽 버튼을 클릭하고 '일치하는 셀'을 선택한 후 원하는 선택 영역으로 이동합니다. 이렇게 하면 여러 가지 방법이 있습니다. 여기 아래에 23개의 행이 선택되어 있는 것을 보실 수 있습니다. 여기서 마우스 오른쪽 버튼을 클릭하면 '데이터 보기'로 이동할 수 있습니다. 그러면 바로 연결된 하위 집합이 생성됩니다.
이 옵션은 선택한 열만 표시하는 기능을 제공하지 않습니다. 이 데이터 보기는 항상 모든 열을 표시하지만, 저는 이 기능을 자주 사용합니다. 예를 들어, 데이터 집합에서 맨 위와 맨 아래에 행이 하나씩 선택되어 있고 두 행을 나란히 보고 싶은 경우, 데이터 보기를 통해 두 행을 모두 표시하여 바로 확인하고 현재 상황을 파악할 수 있습니다.
이 기능이 정말 마음에 들어요. 자주 사용하거든요. 하지만 데이터 뷰를 사용할 때 주의해야 할 점은, 데이터 세트에 연결되어 있기 때문에 이 데이터 뷰에서 변경 사항을 적용하면 변경 사항이 반영된다는 것입니다. 보시다시피, Tim이 강조 표시되어 있습니다. 이 부분을 소문자 M으로 바꾸면 테이블 자체에도 반영됩니다. 이 기능을 사용할 때는 주의해야 합니다. 독립적인 하위 세트처럼 취급하면 실제로는 주 데이터가 변경될 수 있기 때문입니다.
이 기능을 유용하게 활용할 수 있습니다. 표에 없는 모든 M을 소문자 M으로 바꿔야 한다면, 첫 번째 M만 소문자 M으로 바꾸고 마우스 오른쪽 버튼을 클릭한 후 표 끝까지 채우기를 실행하면 모든 M이 소문자 M으로 바뀝니다. 이렇게 하면 많은 데이터를 수정하거나 다른 방식으로 데이터를 보강하는 데 매우 유용한 방법이 될 수 있습니다. 데이터를 활용하고 다양한 작업을 할 때 꼭 알아두어야 할 사항입니다. 데이터를 활용하고 다양한 작업을 할 때 정말 유용한 기능입니다.
정렬은 말 그대로입니다. 강력하면서도 간단해서 좋은 플랫폼입니다. 정렬 기능을 사용할 수 있습니다. 여기서 이름순으로 정렬해 보겠습니다. 기본적으로 오름차순으로 정렬됩니다. 클릭하면 내림차순으로 정렬할 수 있습니다. 여기에 항목을 추가하면 자동으로 정렬되고, 오름차순이나 내림차순으로 정렬할 수 있으므로 필요한 만큼 많은 열을 정렬할 수 있습니다. "확인"을 클릭하면 JMP가 새 열을 생성합니다.
정말 유용하다고 생각해요. 특히 큰 데이터 세트일 때요. 어떻게 정렬해야 할지 알 것 같아요. 모양이 중요하다면 제가 원하는 대로 보일 거예요. 게다가 엉뚱한 결과를 내놓고 원래 테이블로 돌아가려고 엄청 애쓰는 것도 원치 않아요. 이렇게 하면 완전히 별도의 테이블이 생기거든요.
저는 종종 이렇게 합니다. 이 표를 보면서 스스로에게 "이게 내가 보고 싶은 걸까? 이게 내 최종 목표일까?"라고 묻습니다. 그리고 이 표를 닫습니다. 만약 내가 원하는 것이라면, 바로 정렬 메뉴로 돌아갑니다. 다시 불러오기를 한 후, 표를 바꿉니다. 이렇게 하면 이제 제가 가진 주요 표를 정렬해서 표의 개수를 최소한으로 유지할 수 있습니다.
그렇게 할 수 있는 옵션이 있다니 정말 좋네요. 저는 표를 만들 때 자주 그렇게 해요. 그런 다음 다시 돌아가서 표를 바꿔서 메인 테이블에 하는 작업이 제가 원하는 대로 되는지 확인하곤 해요. 특히 열이 많고 데이터가 많은 경우에는 데이터가 쓸모없어 보이고 보기에도 불편해서 굳이 살펴보고 싶지 않거든요.
다음으로 스태킹에 대해 알아보겠습니다. 스태킹은 정말 멋진 기능입니다. 사실, 여기 특별한 테이블이 있는데, 그걸 가지고 놀아 보겠습니다. 스태킹은 말 그대로 스태킹입니다. 열을 입력받아서 쌓아 올리는 거죠. 테이블 메뉴에서 스태킹을 선택하면, 읽은 열 세 개를 함께 쌓을 수 있습니다.
여기서 '확인'을 클릭하면 표시됩니다. 이제 레이블, 읽기 1, 2, 3, 그리고 원래 열이나 원래 값에 있던 관련 데이터가 표시됩니다. 정말 멋지네요.
가로로 많은 데이터가 있고 세로로 배치해야 할 때 이 기능을 자주 사용합니다. Stack은 이 모든 기능을 제공하며, 표의 구성 방식과 관계없이 모든 작업을 처리합니다. 이 기능도 정말 유용하다고 생각합니다. 표 내에서 적절한 관계를 유지합니다. 하지만 이 데이터는 조금 특별해서, 제가 꽤 자주 사용하는 기능을 활용합니다. 여러 그룹으로 나뉜 데이터를 모두 특정 방식으로 쌓아야 하는 경우입니다.
이 경우, 405, 357, 680의 세 파장 데이터가 있고, 각 파장에 연결된 리드가 있습니다. 리드들을 단순히 스태킹하는 대신, 올바른 파장과의 연결을 유지해야 합니다. JMP는 스태킹을 통해 이를 수행할 수 있습니다. 스택 메뉴로 이동합니다.
이 여섯 개의 열을 모두 쌓아 올리면 JMP가 이 여섯 개의 열을 아주 깔끔하게 정리해 줄 겁니다. 미리보기에서 지금까지 작업한 내용을 확인할 수 있는데, JMP는 이 여섯 개의 열을 깔끔하게 정리해 주지 않았습니다. 방금 보여드린 것처럼 JMP는 모든 열을 두 개의 열로 쌓아 올렸는데, 이 데이터에는 이런 방식이 필요하지 않습니다.
여기 아래에 있는 다중 시리즈 스택 상자를 체크해 보겠습니다. 정말 멋지네요. JMP에서 변경한 내용 중 일부를 이미 보셨을 겁니다. JMP는 기본값인 두 개의 시리즈로 시작하도록 설정합니다. 여기서 두 개의 시리즈가 필요한 이유는 파장을 나타내는 열과 그 파장에 해당하는 데이터 값을 나타내는 열이 필요하기 때문입니다. 그래서 두 개의 시리즈를 만든 겁니다. 세 개의 시리즈가 있다면, 세 개의 시리즈를 통해 해당 정보를 얻을 수 있을 겁니다.
지금 이 다중 시리즈 스택에 대해 어느 정도 자신 있게 말씀드리자면, 열 번 중 아홉 번은 스택을 만들다가 버튼을 잘못 눌러서 데이터가 원하는 대로 나오지 않을 때가 있습니다. 여러 번 시도해 보고 익숙해지세요. 단순히 암기하는 것보다 더 중요한 것은, 데이터가 어떤 모양이어야 하는지 정확히 파악하는 것입니다. 그래야 제대로 작동하지 않을 때 바로바로 조정할 수 있습니다.
이러한 선택지 중 하나는 바로 여기 아래에 있는 "Contiguous" 버튼입니다. "Contiguous" 버튼은 JMP에 데이터 테이블이 아니라 이 창에서 열이 어떻게 구성되어 있는지 알려줍니다. 제가 이 데이터들을 살펴볼 때 종종 잊어버리는 부분이 바로 이 부분입니다. 파장1, 파장2, 파장3, 그리고 세 개의 리드가 있는데, 이 리드들은 서로 인접해 있고, 두 시리즈에 대해 서로 인접해 있습니다. 이는 인접한 데이터입니다.
여기 미리보기에서 보시다시피, JMP가 자동으로 좀 더 정상적으로 보이도록 수정했습니다. 만약 wavelength1, Read1, wavelength2, Read2, wavelength2, Read3, 이렇게 진행되었다면… 사실, 이 순서들을 제거하고 wavelength1, Read1, 2, 2, 3, 3 순서로 진행하겠습니다. 이제 연속된 상자를 체크했더니 데이터가 제대로 보이지 않아서 체크를 해제합니다. 이 창에서 데이터가 어떻게 구성되는지, 그리고 이 버튼을 사용하는지 여부는 서로 연결되어 원하는 데이터를 찾을 수 있도록 합니다.
확인을 클릭합니다. 이제 데이터가 꽤 좋아 보이는 것을 확인할 수 있습니다. 샘플 1처럼 9.83과 141을 무작위로 검사해 볼 수 있습니다. 괜찮아 보입니다. 다른 샘플들도 항상 무작위로 검사할 것입니다. 이 작업이 완료되면 이 데이터는 필요하지 않습니다. 이 파장의 이름을 바꾸고 이 열을 삭제할 것입니다. 이 Reed 또는 Read의 이름을 A로 바꾸고 마우스 오른쪽 버튼을 클릭하여 이 열을 삭제할 수 있습니다. 이제 누적된 데이터가 적절하게 정리되었습니다.
스택이 있으면 정말 편리하죠. 메뉴에서 몇 가지 유용한 기능을 알려드리자면, 원하시면 시작하기 전에 데이터와 레이블의 이름을 바꿀 수 있습니다. 여기에 있는 모든 열을 삭제하거나, 모두 유지하거나, 선택해서 사용할 수 있고, 원하는 대로 데이터를 정렬하기 위해 데이터와 레이블 열을 어디에 배치할지 알려줄 수도 있습니다.
이어서 분할에 대해 알아보겠습니다. 분할은 스택의 반대 개념입니다. 가장 강력하지만 익숙해지기가 가장 어려운 플랫폼 중 하나입니다. 바로 그 이유와 보고 싶은 내용을 주의 깊게 살펴보는 방법을 알려드리겠습니다. 간단한 것은 이 함수들이 무엇을 나타내는지입니다. 분할된 열 또는 분리하려는 열은 실제로 셀에 보관하려는 응답 데이터를 포함하는 열입니다. 이 경우에는 읽기를 사용하겠습니다.
분할 기준은 읽기 데이터를 개별적으로 분할하는 기준 열입니다. 이 경우에는 파장입니다. 미리보기에서 데이터를 확인할 수 있습니다. 테이블에 있는 데이터 양에 따라 모두 유지 또는 모두 삭제 중에서 선택할 수 있습니다. "확인"을 클릭하면 JMP가 꽤 잘 계산된 것을 볼 수 있습니다. 357은 0.83, 405는 9, 141입니다. JMP가 우리가 원하는 결과를 정확히 처리한 것 같습니다. JMP, 정말 잘했습니다.
매우 중요한 정보를 빼먹었다고 말씀드리겠습니다. 이 정보 때문에 분할이 쉬운 것처럼 보이지만, 조금 더 복잡한 데이터를 얻게 되면 사용자가 원하지 않는 데이터를 보게 되어 문제가 되고, 올바르게 분할하려고 하면 많은 좌절감을 겪게 됩니다.
요약에서 말씀드린 것처럼, 고유성, 즉 다양한 응답을 얻기 위해 데이터를 고유하게 만드는 요소를 이해하는 것에 대해 이야기합니다. 이 경우, 샘플은 당연히 고유 선택이 될 것입니다. 왜냐하면 여기 샘플들이 모두 샘플별로 그룹화되어 있기 때문입니다. JMP는 마법처럼, 아니 마법이라고는 할 수 없지만, 내부 알고리즘을 통해 제가 원하는 결과를 정확하게 이해했습니다. 아마도 데이터가 어떻게 구성되어 있는지에 따라 제가 원하는 모습을 제대로 파악했을 것입니다.
하지만 그렇지 않다고 가정해 봅시다. 여기에 난수 몇 개를 넣은 간단한 열을 삽입하고, 이 난수들을 기준으로 정렬해서 구성 방식을 완전히 분리해 보겠습니다. 이제 다시 분할 모드로 들어가서 '재호출'을 누르면, 이런 정보가 여기에 있는 것을 볼 수 있지만, JMP에서 자동으로 99.63과 같은 정보가 있고, 그 아래에 128과 같은 정보가 있는 것을 볼 수 있습니다.
분명히, 이 진행 방식과 꼭 일치하지 않는 부분이 있습니다. 바로 이 부분에서 좌절감이 생깁니다. 사람들은 때때로 그 이유를 이해하기 위해 많은 노력을 기울여야 합니다. 바로 이 부분에서 그룹화가 필요합니다. 분할 결과에 따라 고유한 특성을 만드는 데 필요한 모든 열을 기준으로 그룹화하세요.
이 경우, 표본별로 그룹화하면 JMP가 이 표의 측정값들이 본질적으로 연결되어 있기 때문에 표본별로 그룹화되어야 한다는 것을 명확하게 알 수 있기 때문에 세상의 모든 것이 다시 옳게 됩니다. 만약 큰 분류라면, 우리가 이전에 고유성을 위해 살펴본 이름, 나이, 성별이 될 것입니다.
데이터의 복잡성에 따라 달라지겠지만, 항상 그 수준의 고유성을 확보할 수 있다는 점을 염두에 두세요. 저는 분할에서 과다 그룹화는 불가능하다는 것을 발견했습니다. 관련된 열이 있다면, 그룹화와 중복될 수 있더라도, 자유롭게 추가하세요. 과다 그룹화하더라도 고유성을 유지하는 것이 부족 그룹화로 누락되는 것보다 낫기 때문입니다.
다양한 성공 수준을 나타내는 지표로 분할을 수행할 때 주의해야 할 점 중 하나는 행 개수를 확인하는 것입니다. 300개의 행으로 시작하고, 데이터가 비교적 균형 잡혀 있으며 각 샘플에 세 개의 파장이 있다고 가정해 보겠습니다. 분할을 수행하면 약 100개의 행이 생성됩니다. 행 개수가 이상하게 나온다면, JMP가 최선을 다했지만 원하는 결과를 얻는 데 필요한 정확한 구성을 찾지 못했기 때문일 수 있습니다.
뭔가를 제대로 그룹화하지 못했다는 뜻입니다. 이 부분에 주의를 기울이고, 데이터가 제대로 보이는지 파악하는 데 유리하게 활용해야 합니다. 그래야 1만 행의 데이터를 일일이 검사할 필요가 없습니다. 몇 개, 세 개 정도를 무작위로 검사하여 익숙해진 후 다음 단계로 넘어갈 수 있습니다. 이런 식으로 작업하다 보면 데이터 분할이 자연스럽게 익숙해지고 일상적인 JMP 작업에도 매우 효과적일 것입니다.
전치에 대해서는 시간 관계상 아주 간략하게 이야기해 보겠습니다. 제가 전치를 자주 사용하지 않기 때문이기도 하고요. 전치를 자주 사용하는 동료 몇 명을 만나 봤습니다. 전치는 이렇게 정리된 데이터를 그냥 뒤집어서 원래 상태로 되돌릴 수 있게 해 줍니다. 어느 정도 유용하긴 합니다. 저는 전치를 자주 사용하지는 않지만, 다행히도 제 데이터는 그렇게 삐딱하게 정리되어 있지 않습니다.
하지만 이 대화 상자를 보여드리고 싶은 이유는, 이 레이블과 이 레이블을 사용할 때 고유성과 그룹화가 다시 한번 중요해지기 때문입니다. 이 대화 상자는 특정 통화 문제를 변환할 때 JMP에 데이터를 어떻게 구성해야 하는지 알려주는 데 도움이 됩니다. 다시 한번 말하지만, 데이터가 어떻게 고유하게 구성되는지 이해하면 JMP 플랫폼을 훨씬 더 효과적으로 활용할 수 있습니다.
이제 조인(Join)으로 넘어가겠습니다. 조인(Join)은 정말 좋은 기능 중 하나이고, 매우 강력합니다. 이 기능들 중 일부를 살펴보고 예제를 살펴보겠습니다. 조인을 열면, "이것이 제가 시작할 테이블입니다."라는 문구로 시작합니다. "이것이 제가 조인할 테이블입니다." 여기서 조인할 테이블을 선택하면 조인이 진행됩니다. 몇 개의 열이 표시되고, 여기에 몇 가지 옵션이 있는데, 구체적으로는 조인을 어떻게 수행할지 정하는 것입니다.
실제로 수정된 빅 클래스로 돌아가겠습니다. 확장 빅 클래스인 또 다른 테이블이 있습니다. 기본적으로 이름, 나이, 성별이 훨씬 더 많지만, 여기에는 심박수와 BMI가 있습니다. 이 정보를 함께 연결하고 싶습니다. 원래 테이블로 가서 조인으로 이동하겠습니다. 여기 빅 클래스가 있습니다. 확장 빅 클래스와 연결하고 싶습니다. 기본적으로 열 일치를 통해 연결되는데, 제 생각에 조인의 99.9%는 열 일치를 통해 이루어집니다. 그런 다음 JMP에 일치시킬 항목을 지정합니다.
이는 고유성의 다양한 수준, 즉 결합하려는 고유성의 계층과 관련이 있습니다. 하지만 두 열 모두에서 이름을 선택하고 '일치', '연령'을 클릭할 수 있습니다. 두 열이 같은 내용을 표시할 필요는 없습니다. JMP에 일치해야 하는 이름을 알려주는 것입니다. 실제 이름과는 아무런 관련이 없습니다.
여기 미리보기에서 뭔가 이상하고 귀찮을 수 있는 부분이 있습니다. 이제 실제로 열이 하나 생성되는데, 2025 Discovery Mod Big 클래스라는 이름입니다. 다른 열에서도 이 현상이 반복되는 것을 볼 수 있습니다. 이제 모든 열 이름이 크고 굵어졌습니다. 조인 후 데이터를 다시 확인하는 데는 유용하지만, 수정하기는 번거로울 수 있습니다.
JMP에는 이런 기능을 제공하는 기능이 있습니다. 바로 '동명 열 병합'입니다. 동명 열을 병합할 때 '매치 플래그'의 체크를 해제하면, 동명 열들이 일관된 느낌으로 결합되는 것을 볼 수 있습니다. JMP는 대소문자 때문에 이름과 이름이 다르다는 것을 인식하고도 병합을 수행했지만, JMP는 두 열이 동일하다는 것을 인식하고 병합했습니다. '동명 열 병합'을 체크하면 '매치 플래그'도 활성화됩니다. 이를 통해 테이블 간에 일치 작업을 수행할 수 있습니다.
여기 아래쪽에서는 종종 같은 이름의 열을 병합하고 플래그를 일치시킵니다. 특히 첫 번째 조인에서 제가 항상 하는 또 다른 작업은 기본 테이블과 너비 테이블에서 일치하지 않는 항목을 포함하는 것입니다. 확인을 클릭하겠습니다. 제가 이 기능을 좋아하는 이유를 알려드리겠습니다. 데이터가 제대로 구성되었는지 다시 한번 확인하는 좋은 방법이기 때문입니다.
이 매치 플래그 열을 확장해 보겠습니다. 메인과 너비가 모두 표시되어 있습니다. 두 열 모두로 이동하고, 여기 아래로 내려가면, 이 열은 원래 표와 두 번째 표 모두에 있는 정보를 나타냅니다. 원래 키와 몸무게가 표시되어 있고, 심박수와 BMI도 표시됩니다.
중요한 항목이 있으면 여기에서 모두 선택하세요. 이는 첫 번째 표에는 있었지만 두 번째 표에는 일치하지 않았던 항목입니다. 여기서 키, 몸무게는 있지만 BMI에는 심박수가 없습니다.
너비는 정반대입니다. 두 번째 표에는 있었는데 첫 번째 표에는 없는 내용이 있었죠. 이렇게 데이터를 보는 게 좋은데, 누락된 내용이 누락될 것 같은지 다시 한번 확인할 수 있거든요.
이 경우, 112개의 이름이 있었습니다. 첫 번째 표에는 42개만 있습니다. 100% 일치할 수는 없습니다. 일치하지 않는 항목이 있기 때문에 너비를 조정하는 것은 전혀 문제가 없으며, 당연한 일입니다. 마찬가지로, 이러한 이름 중 일부는 추가 지표가 있는 확장 목록에 없을 수도 있습니다.
여기서는 적어도 일반적인 개념으로는 main과 width가 괜찮습니다. 그러면 두 값이 서로 잘 맞는 위치에 정렬되고, 예상 결과를 무작위로 확인할 수 있습니다. 실제로 데이터를 가지고 이런 작업을 할 때, 이 기능이 정말 유용하다고 생각하는 부분은, 예를 들어 실험을 진행하면서 특정 기계에서 무언가를 실행하고, 실행 시트 같은 것에 메모를 남기고 실행 ID 등을 연관시킬 때입니다.
만약 여러분이 함께 그 매칭을 한다면, 그것은 매우 구체적이고 다른 의미들을 의미합니다. 기계에서 나온 데이터는 있지만, 런 시트에는 해당 정보가 없거나, 런 시트에는 기계에서 나온 데이터가 없는 런에 대한 정보가 있는 경우입니다. 오류나 그와 비슷한 경우라면 그럴 수도 있지만, 런을 하기 위해 기계에 ID를 입력하는 과정에서 오류가 발생했을 수도 있습니다.
더 많은 데이터 세트를 조인하고 데이터가 일치하는 곳과 일치하지 않는 곳을 즉시 파악할 수 있는 기능은 빠르게 분석하고 식별할 수 있다는 점에서 절대적으로 획기적인 기능입니다.
여기서 행 개수를 다시 살펴보면 또 다른 지표가 있습니다. 42행인데, 모든 것이 완벽하게 일치했다면 42행만 있어야 합니다. 하지만 이 표에 있는 너비와 그렇지 않은 너비, 그리고 주요 행 때문에 훨씬 더 많은 행이 있습니다. 이 점을 활용하면 문제가 있는지, 아니면 더 자세히 살펴봐야 할 부분이 있는지 파악하는 데 도움이 될 수 있습니다.
마지막으로, 이 조인을 수행할 때 주의해야 할 점이 있습니다. 같은 이름의 열이 있지만 실제로는 나타내는 정보 측면에서 다른 경우입니다. 이 경우, 편의상 나이만 사용하고, 나이를 모두 89로 설정하겠습니다. 어떤 이유에서인지 이 테이블 89는 나이에 대한 무언가를 나타내며, 모두 동일하게 유지됩니다.
이 부분을 읽어보려고 하는데, 왜 리콜을 할 때 미리보기가 이전과 같은 방식으로 표시되지 않는지 모르겠네요. 저는 확인을 클릭하겠습니다. 여기에 보시면 어떤 경우에는 나이 값이 덮어씌워져 있는 것을 보실 수 있을 겁니다. 사실 거기에는 없었죠. 좋은 소식이네요. 이 부분이 새로 추가된 건지, 아니면 다른 부분에서만 수정된 건지 궁금합니다.
이전에도 본 적이 있는 문제인데, 상황에 따라 덮어쓰기가 발생합니다. JMP가 개선 중인 부분인데, 분명히 이 경우 중 일부에서 그렇습니다. 하지만 주의 깊게 살펴보지 않으시면 다시 한번 확인해 드리겠습니다.
문제가 어느 정도 해결된 것 같지만, 주의 깊게 살펴봐야 할 부분입니다. 다만 제 두 테이블은 어디로 갔는지 궁금합니다. 그건 나중에 따로 다루겠습니다. 가장 중요한 점은 다른 테이블에서 나이를 덮어쓸 수 있다는 것입니다. 머신 데이터에 정규 시간 스탬프가 있는 경우 이런 현상을 자주 보는데, 실행 시트 날짜는 실제로 실행한 날짜일 뿐이므로, 데이터 일부가 덮어쓰일 수 있습니다.
이건 정말 조심해야 할 부분인데, 여러 단계를 거치면서 이런 일이 발생하는 걸 원치 않을 테니까요. 결국 데이터에서 가끔씩 나타날 거라고 예상했는데, 덮어씌워져서 아예 나타나지 않거나, 이 경우처럼 개인 연령이 표시될 거라고 예상했는데 갑자기 모든 사람이 80대가 되는 경우가 발생합니다.
효율성과 워크플로우에 도움이 되지 않으며, 특히 문제가 발생한 위치를 파악하기 위해 일곱 단계를 거슬러 올라가야 하는 경우에는 더욱 그렇습니다. 이 점을 미리 알면 좀 더 효율적으로 작업할 수 있습니다. 이 경우 가장 쉬운 해결책은, 이것이 위험하다는 것을 알고 있다면, 중요 여부에 따라 열 이름을 업데이트하거나 완전히 삭제하는 것입니다.
왜 이런 일이 일어났는지 이제야 깨달았습니다. 방금 이 기능을 업데이트했기 때문입니다. 제가 리콜을 실행했을 때 나이와 일치했는데, 나이를 변경했기 때문입니다. 이제 이 부분을 제거할 겁니다. 이제 두 계정 모두에서 오버라이딩이 발생한 것을 확인할 수 있습니다. 결국 문제가 발생할 수 있는 부분입니다. 간단한 해결책은 이름을 변경하는 것입니다. 모두 다시 참여하고 리콜을 실행합니다. 이제 일부 계정에는 나이가 없지만 다른 계정에는 나이가 있습니다. 그러면 다른 계정에는 age_가 표시되어 덮어쓰이지 않았음을 알 수 있습니다.
그렇게 고치면 돼요. 여러 번, 심지어 실수로 저를 곤경에 빠뜨렸던 부분이에요. 하지만 이제는 더 이상 실수를 하지 않아요. 그저 더 빨리 찾아내서 고칠 수 있을 뿐이죠. 실수를 하더라도 자책하지 마세요. 익숙해지는 데 시간이 걸리고, 결국 실수를 멈추는 일은 거의 없을 거예요. 다만 실수가 생겼을 때 고치는 능력이 더 좋아질 뿐이죠.
다음은 업데이트입니다. 업데이트는 정말 대단한 도구입니다. 솔직히 말해서, 처음 나왔을 때 오랫동안 애증의 관계였는데, 업데이트가 아니라 제가 그랬습니다. 업데이트가 가정하는 내용 때문이었거든요. 주의를 기울이지 않으면, 오히려 해가 될 수 있습니다. 특히 이 덮어쓰기에 대해 이야기했던 것처럼요. 이 페이지를 다시 여기에 올리고, 실제로…
분명히 모든 작업을 할 때 이렇게 했는데, 자, 이제 다른 모든 연령대가 있는 곳으로 돌아가 보겠습니다. 업데이트는 실제로 조인이지만 테이블을 만들지는 않습니다. 업데이트로 이동하면 기본 설정은 동일합니다. 이제 확장된 Big 클래스에 조인하려고 합니다. 이름, 나이, 성별로 매칭을 진행하겠습니다.
게임의 이 단계에서는 미리보기에서도 이를 조금 확인할 수 있습니다. JMP는 몇 가지 가정을 합니다. 내부 연결만 수행하므로 두 테이블 모두에서 누락된 값을 포함하지 않습니다. 즉, 기본 테이블에 있는 값만 일치시킵니다.
둘째, 기본적으로 같은 이름의 열을 병합했습니다. 만약 이 부분에 대한 준비가 안 되어 있다면, 이 부분에서 문제가 발생할 수 있습니다. 특히 제가 update 작동 방식에 익숙해지던 초기에 이 문제를 겪었는데, 제 데이터에서 너무 오랫동안 이 문제를 발견하지 못해서 다시 돌아가서 수정해야 했습니다.
JMP는 처음부터 작업을 좀 더 쉽게 만들어 줄 몇 가지 추가 기능을 제공합니다. 데이터가 많거나 원하지 않는 데이터가 덮어씌워질까 봐 걱정된다면, 업데이트 테이블에서 어떤 열을 가져올지 제어할 수 있습니다. 예를 들어 '선택됨'으로 설정하면 심박수나 BMI 같은 데이터만 가져올 수 있고, 이러한 추가 열은 조인에 포함되지 않을 경우 덮어씌워질 위험이 없도록 아예 추가되지 않도록 해야 합니다.
여기 아래쪽에서는 기본 테이블에 열을 배치하고 있습니다. 아무것도 선택하지 않을 수도 있는데, 이 하드 스톱(hard stop) 기능은 덮어쓰기를 방지합니다. 또는 두 경우 모두 선택 항목을 허용하여 덮어쓰기를 제어할 수 있습니다. Update 함수 사용법을 익히면 정말 편리하지만, 몇 가지 단점이 있습니다. 예를 들어, 방금 이 함수를 실행했는데 이 테이블에 BMI가 추가되었습니다. 이제 기본 테이블이 변경되었습니다. 만약 이런 작업을 원하지 않는다면, 이 특정 사용 사례에서는 update 함수가 적합하지 않을 수 있습니다.
하지만 사람들이 JMP를 더 많이 사용하고 능숙해지면 테이블 수를 줄이고 싶어하는 마음이 흔해집니다. 특히 지루해져서 만든 모든 테이블을 추적하고, 그 테이블은 어디에서 왔는지 등을 기억하려고 할 때 더욱 그렇습니다.
테이블 수를 최소화하기 위해 할 수 있는 작은 노력들은 매우 유용합니다. 이 경우, 특히 테이블이 세 개나 네 개일 때 Update가 정말 효과적으로 작동합니다. 다른 테이블에는 사람에 대한 다른 지표가 있었습니다. 각 테이블에 개별적으로 조인을 해야 한다면, 조인을 쌓기 위해 세 개나 네 개의 새 테이블을 더 만들 것입니다. Update를 사용하면 모든 데이터를 하나의 테이블로 가져올 수 있습니다.
여기서는 다루지 않겠지만, 기회가 된다면 한번쯤 살펴보시면 좋을 만한 또 다른 기능은 가상 조인입니다. 이 기능은 실제로 테이블을 조인하지 않고도 여러 테이블을 조인할 수 있게 해줍니다. 정말 멋진 기능입니다. JMP 직원들이 그동안 여러 프레젠테이션을 진행했고, 이 기능에 대해 더 자세히 설명하는 웨비나도 찾아볼 수 있을 겁니다. 시간이 날 때 직접 사용해 보면 정말 재미있는 기능입니다. 특히 Update 기능은 기본 테이블에 조인하는 기능을 제공하는데, 정말 보기 좋습니다.
이제 훨씬 더 간단한 연결(concatenate)에 대해 알아보겠습니다. 연결은 기본적으로 테이블을 하나씩 쌓아 올리는 것입니다.
바로 그렇게 됩니다. 사실, 이 검색 모드를 사용하면 됩니다. 연결로 넘어가겠습니다. 이제 연결하려는 모든 테이블을 나열할 겁니다. 여기에 확장된 Big 클래스를 추가하면 테이블들이 서로 겹쳐서 표시됩니다. 테이블 수를 최소화하기 위해 첫 번째 테이블에 추가할 수도 있습니다.
원본 열을 만들 수도 있습니다. 특히 별도의 테이블을 만들 경우 원본 열을 만드는 것을 권장합니다. 이렇게 하면 데이터의 출처를 파악할 수 있기 때문입니다. "확인"을 클릭하면 데이터가 업데이트되어 서로 겹쳐서 표시되고, 어떤 행이 어떤 테이블에서 왔는지 정확히 파악할 수 있습니다. 이런 측면에서 매우 효과적입니다.
사람들이 연결(Concatenate)에서 실수를 하는 이유는 대개 데이터가 원하는 대로 보이지 않거나 잘못된 위치에 데이터가 있기 때문입니다. 이 경우에는 이 지표를 메트릭이라고 부르겠습니다. 아니면… 같은 내용을 다른 방식으로 표현하면 될지 궁금합니다.
연결 작업을 하면 두 개의 열이 있는 것을 보실 수 있습니다. 이는 두 열이 분명히 다른 예입니다. 하지만 JMP는 적어도 제가 지금까지 본 바로는 대소문자 구분이나 오타 등 데이터 구성에 문제를 일으킬 수 있는 요소들을 신경 씁니다. 예를 들어, 사용자가 직접 입력한 데이터에서 명명 규칙이나 오타가 잘못되어 데이터가 제자리에 없는 경우가 있습니다.
BMI, 체질량 지수가 한 번만 발생한 경우처럼 수정이 꽤 쉽습니다. 재밌는 팁인데, 빈 셀 중 하나를 클릭하고 마우스 오른쪽 버튼을 클릭한 후 '일치하는 셀'을 선택하면 모든 빈 셀이 선택됩니다.
이제 선택 영역을 반전할 수 있고, 여기에 원래 있어야 할 모든 항목이 선택됩니다. 이 항목들을 복사한 다음, 이 열의 머리글만 선택하면 선택된 상태로 유지되므로 붙여넣기만 하면 됩니다. 이제 오류가 해결되었습니다. 이 열을 삭제할 수 있습니다. 이렇게 하면 빠른 방법입니다.
열이 12개 이상인 경우, 속도가 느리고 번거로울 수 있습니다. 문제가 발생할 경우 가장 좋은 해결 방법은 열 이름을 수정하는 것입니다. 하지만 작업 내용과 프로세스 단계의 위치에 따라 여러 가지 방법이 있습니다. 이 작업을 수행할 때 가장 효과적인 방법은 없습니다.
하지만 제가 보기에 가장 큰 문제는 concatenate를 사용할 때 사람들이 실수를 많이 하는 부분입니다. 열이 너무 많아서 데이터가 필요한 위치에 없을 때 발생하죠. 거기서부터 문제가 발생합니다. 하지만 그 외에는 concatenate가 매우 잘 작동하고, 여러 테이블을 하나의 테이블로 아주 빠르게 정리할 수 있는 좋은 방법입니다.
이제 시간이 거의 다 되어가고 있습니다. 구체적인 예시는 생략하고 이 글에서 간단히 설명드리겠습니다. 제가 이 팁과 요령을 많이 사용해 본 적이 없어서 많은 팁과 요령을 개발하지 못했기 때문입니다. 하지만 충분히 사용해 본 결과, 이 팁들이 유용하고, 살펴보고 사용해 볼 만한 가치가 있다는 것을 알고 있습니다.
JMP 쿼리 빌더를 사용하면 기본적으로 눈앞에 있는 여러 데이터 테이블에서 SQL 쿼리를 작성할 수 있습니다. 컴퓨터 외부 데이터베이스에 저장된 데이터 테이블에도 JMP 쿼리 빌더를 사용하여 모든 데이터를 JMP로 가져올 수 있습니다. 사용 가능한 테이블과 이러한 데이터를 혼합하여 사용할 수 있다는 점이 정말 좋습니다.
누락된 데이터 패턴, 누락된 데이터 패턴에 대한 멋진 프레젠테이션을 많이 봤습니다. 하지만 저는 누락된 데이터 패턴 문제를 자주 겪지 않아서 실제로는 일상 업무에 사용하지 않았습니다.
또한, 누락된 데이터 패턴은 제가 완전히 다른 방식으로 데이터 마이닝을 해서 누락된 데이터 패턴이 어디에 있는지 알아내는 데 익숙해진 지 몇 년이 지난 후에야 등장했습니다. 다만 아직 제 무기고에 누락된 데이터 패턴을 추가하지 않았을 뿐입니다. 다른 사람들이 이 패턴을 사용하는 것을 보면 데이터를 보는 정말 재미있는 방법이기 때문에, 저는 이 패턴을 더 많이 활용해야 한다고 스스로에게 계속 말하고 있습니다.
데이터 테이블 비교. 재밌는 기능인데… 잠깐 보여드릴게요. 여러 테이블을 선택해서 비교할 수 있습니다. JMP가 테이블 이름을 꽤 잘 맞춰줍니다. 여기서는 테이블 이름이 일치하는 것을 확인할 수 있고, 수정할 수도 있습니다. "비교"를 클릭하면 테이블에서 모든 차이점이 어디에 있는지 보여줍니다.
여기서 보시다시피, 정확히 무엇을 보여주는지 잘 모르겠습니다. 이 부분은 좀 더 익숙해지려면 더 연습해야 할 부분입니다. 하지만 적어도 두 개의 표를 사용해서 모든 것이 같은지 아닌지 확인하는 재미있는 방법입니다. 종종 데이터에서 의도치 않게 뭔가를 변경했는지 확인하기 위해 확인하곤 합니다.
변경된 사항의 세부 사항을 자세히 살펴보면, 이러한 옵션들이 실제로 중요한 역할을 합니다. JMP는 좋은 플랫폼이지만, 저는 아직 JMP의 잠재력을 최대한 활용하지 못했기 때문에, 여러분 모두 직접 사용 사례를 통해 어떤 결과가 나오는지 확인해 보시기를 권장합니다. 하지만 JMP를 통해 제가 혼자서는 할 수 없는, 다른 방식으로 할 수 있는 일들을 할 수 있다는 것은 정말 멋진 일입니다.
마지막으로, 이 목록의 마지막 항목인 '익명화'를 선택하세요. 기본적으로 눈앞에 있는 표를 가져와서 '확인'을 클릭하면 익명화됩니다. 이제 아무도 이 모든 것이 무슨 뜻인지 알 수 없습니다. 다른 사람들이 이해하거나 소화할 수 있는 정보가 전혀 없는 데이터 표를 만드는 것이 바로 이 때문입니다.
테이블에 독점 정보가 있지만 JMP의 도움을 받아 문제를 해결하고 싶다면 테이블을 익명화한 다음 이 정보를 사용하여 문제를 재현한 다음 이를 다른 JMP 지원 담당자와 안전하게 공유할 수 있습니다. 그러면 회사의 독점 IP 규칙을 위반할 걱정을 할 필요가 없습니다. 이제 아무도 이 데이터의 출처와 관련 내용을 알 수 없기 때문입니다.
정말 재밌는 정보네요. JMP를 사용하면 이런 작업을 꽤 빠르고 쉽게 할 수 있다는 것도 알려줬어요. 이것저것 시도해 보는 것도 재밌을 것 같아요.
테이블 메뉴는 여기까지인 것 같습니다. JMP와 Discovery Series에 참여해 주신 모든 분들께 감사드립니다. 이 주제에 대해 이야기하는 건 정말 즐거운 일이니까요. 많은 분들이 JMP를 사용하면서 이 내용을 통해 많은 것을 얻을 수 있을 거라고 생각합니다. 정말 감사합니다. 오늘은 여기까지만 말씀드리겠습니다.