JMP Live는 끊임없이 증가하는 데이터 세트를 분석하고 시각화하는 강력한 플랫폼으로, 특히 연결된 데이터웨어하우스의 테이블을 새로 고칠 수 있는 기능을 갖추고 있습니다. 그러나 신제품 개발 과정에서 이러한 파이프라인이 불완전한 경우가 많으며, 여러 사용자 또는 사이트에서 데이터를 수집하는 것은 물류적인 문제로 이어집니다.
안녕하세요 여러분. 제 프레젠테이션에 오신 것을 환영합니다. 저는 티모시 웨트스톤이고, 공동 발표자 세이지 달링과 함께합니다. 저희는 IDEXX 연구소에서 근무하고 있으며, 이 프레젠테이션은 JMP Live를 데이터 웨어하우스로 활용하는 방법에 대한 것입니다.
지난 한 해 동안 JMP Live를 꽤 많이 사용해 왔습니다. 데이터 수집 소스에서 웨어하우스, 그리고 JMP Live로 이어지는 견고한 파이프라인을 구축해 놓으면, 기존에 있는 다양한 데이터웨어하우스에 자동으로 새로 고침되는 테이블을 설정할 수 있다는 점이 정말 훌륭하다고 생각합니다. 이러한 사용 사례에 정말 유용합니다.
JMP Live를 더 많이 사용하면서 JMP Live에서 수행할 수 있기를 바라는 몇 가지 잠재적 사용 사례를 발견했지만, 이를 쉽게 수행할 수 있는 기능이 본질적으로 없습니다. 이는 주로 클라우드 서비스나 대규모 데이터웨어하우스에 들어가지 않는 데이터 소스나 데이터 생성 소스가 있는 경우입니다. 기본적으로 파일을 가져오고 데이터를 가져오며 기본적으로 로컬에서만 사용할 수 있습니다. 특히 이러한 경우, 표시하려는 내용에 대해 동일한 최종 데이터 세트에 속하는 데이터를 계속 가져오지만 시간이 지남에 따라 일시적으로 발생하는 경우입니다. 이를 진행하면서 많은 종단적 유형의 연구를 생각해 왔습니다.
수동 파일이 있습니다. 이 파일들을 모두 같은 곳에서 추적하고 싶습니다. JMP Live가 보통 이런 용도로 적합하지만, 테이블을 수동으로 다운로드하고 연결한 다음 다시 업로드하는 것보다 더 자동화된 방식으로 데이터를 가져올 수 있는 방법이 필요합니다.
JMP 직원들과 이야기를 나누던 중, 여기 코드 몇 개를 받았습니다. 이 코드는 저희가 진행한 작업에서 정말 핵심적인 부분이었습니다. 스크립트를 사용하여 JMP Live에서 테이블을 다운로드하고 여는 방법입니다. 이 코드를 받은 후, 저희는 이 코드를 어떻게 활용할지에 대한 많은 아이디어를 얻었습니다. 이는 사실상 HTTP 요청과 같습니다. 다른 웹사이트에서 데이터를 가져오는 데 사용되기도 했던 방식이지만, 이 기능을 작동시키는 진짜 핵심은 JMP Live 테이블의 URL을 어떻게 조합하고 구성하는지에 달려 있습니다. 이 부분은 잠시 후에 자세히 살펴보겠습니다. 세이지, 잠시만 시간을 내주시죠.
Timothy가 방금 설명한 파일 다운로드 관련 JMP 예제를 얻었고, 제 사용 사례는 바로 실행해 볼 준비가 되었습니다. 그래서 JMP Live에서 테이블을 자체 폴더로 가져와 로컬로 연결한 다음 특정 위치로 다시 푸시하는 방식을 구축하기로 했습니다. 이를 위해서는 JMP Live에 연결하고 JMP Live에서 정보를 가져올 수 있도록 몇 가지 사항을 구현해야 합니다. 여기서 제 코드를 사용하여 초기화 시 사용하는 연관 배열을 만들었습니다.
이는 추가 기능에서 이 정보를 가져오는 코드의 예입니다. 제 스크립트도 비슷한 기능을 합니다. 이 스크립트는 사용자가 JMP Live에서 액세스할 수 있는 항목을 확인하고, 액세스 권한이 있는 폴더 위치를 가져온 다음, 폴더 내부에 있는 폴더를 계속 찾아 JMP에서 하위 폴더라고 부르는 항목을 해당 폴더 위치에 추가합니다.
이 경우, 이 코드를 사용하여 동적으로 연관 배열을 생성합니다. 이렇게 하면 업로드를 위해 접근 권한이 있는 폴더를 확인할 때, 스크립트 시작 부분에서 이 코드가 해당 정보를 찾게 됩니다. 이렇게 하면 접근 권한이 있는 모든 항목을 볼 수 있으므로, 어떤 폴더에서든 파일을 가져와 연결한 다음 원하는 위치에 배치할 수 있습니다.
이건 아주 작은 부분일 뿐입니다. 이 연관 배열은 이런 방식으로 만들어집니다. 결국 이 추가 기능을 사용하면 제가 만든 것에서 기본적으로 세 가지 옵션을 얻을 수 있습니다.
첫 번째 옵션은 연결할 JMP Live 폴더를 선택할 수 있어야 한다는 것입니다. 연관 배열을 시작할 때, 접근 권한이 있는 모든 폴더를 가져오는데, 이렇게 하면 접근 권한이 있는 모든 폴더 목록이 표시됩니다. 이렇게 하면 연결할 폴더를 선택한 후, 같은 연관 배열 목록에서 저장할 폴더를 선택할 수 있습니다. 다음으로 업데이트할 테이블을 선택할 수 있습니다.
여기에 입력되는 정보를 기반으로, 연결 대상 Live 폴더에 있는 모든 파일이 연결된 후 이 폴더(저장 폴더)에 저장되고, 해당 폴더 안에 선택된 테이블로 저장됩니다. 이 모든 파일은 이전 화면에서 보여드린 연관 배열에 매핑되는데, 이 배열은 사용자 고유의 JMP Live 연결을 기반으로 JMP Live에서 해당 정보를 가져오는 코드입니다.
이 모든 작업을 수행하기 위해, 이는 작업의 핵심적인 부분일 뿐입니다. 연관 배열은 접근 가능한 정보를 가져오지만, 사용자는 정보를 끌어왔다가 다시 올릴 수 있어야 합니다. JMP Live의 정말 좋은 기능 중 하나는 HTTP 요청을 기반으로 실제로 URL을 생성하여 가져올 수 있다는 것입니다. 이는 해당 URL을 생성하는 데 사용되는 예시이며, 기본적으로 해당 파일을 로컬로 다운로드합니다.
예를 들어, JMP Live에 사용되는 기본 URL이 있습니다. 여기 HTTPS JMP Live 회사명의 예가 있습니다. 저희의 경우 IDEXX입니다. 이를 사용하여 JMP Live에 연결할 수 있습니다. 그 후, 정체된 위치들이 있습니다. API 패키지처럼 JMP Live와 관련된 URL의 정체된 부분입니다.
그러면 Live ID가 있다는 것을 알 수 있습니다. 조금 전에 말씀드린 연관 배열에서 가져오는 것 중 하나는 폴더와 데이터 테이블을 연결하는 Live ID입니다. 이렇게 하면 이 URL은 연관 배열을 구축하면서 동적으로 생성될 수 있습니다. 그러면 또 다른 정적 요소인 data와 JMP Live 데이터 테이블 이름이 있는데, 이 URL에서 이 테이블 이름을 가져오면 ".JMPLive/contents"라는 콘텐츠가 다운로드됩니다.
다시 말하지만, 마법의 일부일 뿐입니다. 다음으로 해야 할 일은 JMP Live 테이블을 바꾸는 것입니다. 모든 파일을 폴더에 모아 로컬 JMP 인스턴스에 연결한 후에는 해당 파일을 어딘가에 넣어야 합니다. 다음은 JMP Live 테이블을 바꾸는 데 사용하는 코드의 예입니다.
새로운 연결을 생성한 후, 선택한 정보(업로드하려는 테이블)가 있는 연관 배열을 기반으로 새로운 JMP Live 콘텐츠가 전달되고, 이 콘텐츠는 JMP Live로 다시 푸시되어 데이터를 업데이트합니다. 이렇게 하면 폴더의 연결된 테이블을 기반으로 동적으로 업데이트할 수 있습니다.
내 사용 사례는 무엇이었을까요? 우리가 이것저것 시도해 보면서 로컬에서 사용하면 멋질 것 같다는 생각이 들었기 때문입니다. 우리가 이것을 사용할 수 있었던 것 중 하나는 실제로 안정성 추세였습니다. 이 경우, 내가 작성한 코드와 그 기능에 대한 예가 있습니다. 처음부터 이 코드가 수행하는 작업의 시작 창이 있는데, 몇 장의 슬라이드에서 보여드린 세 가지 입력을 보여줍니다. 폴더를 선택해야 한다는 것입니다. 다음 단계는 데이터를 가져올 폴더를 선택하는 것입니다. 이 경우 안정성 원시 데이터가 있습니다. 기술자가 더 많은 데이터를 실행할 때마다 이 원시 데이터 폴더 위치의 특정 위치에 저장됩니다. 이것이 연결할 시작 폴더로 선택되는 것입니다.
그런 다음, 해당 파일에 계속 연결하려고 하므로 추세 데이터에 추가해야 합니다. 다음으로는 저장할 JMP Live 폴더를 선택합니다. 이 경우, 안정성 추세가 됩니다.
그런 다음 안정성 추세 데이터 테이블에는 하나만 있으므로 다음 선택은 안정성 추세 데이터 테이블입니다. 하지만 이것이 제가 시작한 테이블입니다. 이름은 원하는 대로 지정할 수 있습니다. 연관 배열은 해당 위치에서 테이블을 가져옵니다. 이 경우에는 테이블을 먼저 만들었습니다. 지금까지 사용해 온 것은 테이블이 JMP Live에 이미 있어야 한다는 것입니다. 하지만 앞으로 이 기능이 유용할 것입니다. 말하기는 어렵지만, 앞으로의 기능입니다. 이 기능은 동적으로 추가되어 실제로 새 데이터 테이블을 만들어 연결하여 위치에 저장할 수 있는 좋은 기능이 될 것입니다. 데이터가 변경될 수 있기 때문입니다.
JMP Live 쪽에서는 어떻게 보일까요? JMP Live 쪽에서 보이는 것은 시작 폴더입니다. 다른 사람들이 업로드한 제 개별 시점들을 볼 수 있습니다. 이 경우에는 저입니다. 기술자도 여기에 정보를 입력할 수 있는 권한이 있다면 이 위치에서 업로드할 수 있습니다. 이 테이블들이 연결될 것입니다. 아래에서 볼 수 있듯이, 원시 데이터와는 별도의 폴더인 안정성 추세 폴더에 예시가 있는데, 여기서 제가 데이터를 수정하는 데 사용하는 데이터 테이블을 볼 수 있습니다.
실제로 이 작업이 백엔드에서 실행되면 어떻게 보일까요? 연결이 진행되는 모습을 볼 수 있다면 마법 같은 일이 벌어질 겁니다. 이 코드를 실행하면 JMP Live에서 데이터 테이블 업데이트가 완료되었다고 표시되는 것을 실제로 확인할 수 있습니다. 실시간으로 업데이트하기 때문입니다. 왼쪽의 경우, 시작 데이터 테이블에는 타임포인트 0과 1만 있습니다. 이전 테이블에서 보셨듯이 3번까지 올라간 타임포인트도 있었습니다. 이제 코드를 실행하면 이 테이블에 세 번째 타임포인트가 연결된 것을 확인할 수 있습니다.
이 작업을 마치고 이 데이터를 계속 사용하면서 저는 티모시와 협업하여 "이 코드가 있는데, 이 강연에서 하시는 작업을 고려하면 유용할 수도 있겠네요."라고 말했습니다. 그러자 티모시는 코드를 받아 최대 11단계까지 올렸습니다.
Sage, 고맙습니다. 저는 Sage가 한 많은 작업을 수행했고, JMP Live에 있는 여러 파일을 가져와서 새 테이블로 연결하고 JMP Live에 다시 넣을 수 있는 기능이 정말 좋다는 생각이 들었습니다. 제 사용 사례에서는 로컬에만 있는 데이터가 있는데, 이를 가져와서 JMP Live에 넣고 이미 있는 여러 데이터와 연결할 수 있는 좋은 방법이 필요했습니다. 이것은 다른 사람들과 공유하고 다른 사람들과 협업하고 싶었는데, 반드시 같은 위치에 있지는 않아도 같은 데이터 세트에 독립적으로 데이터를 추가할 수 있는 것이었습니다. 사람들이 많은 수동 조작을 하는 것은 정말 원하지 않았습니다.
"도구가 있어서 특정 테이블에 바로 연결할 수 있다면 어떨까?"라는 생각이 들었습니다. 뿐만 아니라, 어떤 데이터든 ETL(데이터 전처리)을 실행할 수 있는 기능도 원했습니다. 새 열을 추가하거나 요약 테이블을 만들어 업로드하고 싶을 때, JMP 워크플로 스크립트를 만들어 특정 테이블과 프로젝트에 연결하고 다른 사람들과 공유할 수 있는 기능이 정말 필요했습니다. 그러면 모두가 같은 작업을 하고 같은 테이블을 업데이트한 후 실시간으로 결과를 볼 수 있을 테니까요.
도구 창의 시작 부분만 보여드립니다. 몇 초 후에 실시간 안내를 진행하겠습니다. 먼저 코드를 좀 더 살펴보겠습니다. 스크립트 측면에서는 Sage가 했던 방식 외에도, 이 모든 것을 하나로 묶어 패키징하는 방식을 사용합니다. 이 기능을 사용할 때 저는 연관 배열을 많이 사용합니다. 프로젝트별 정보와 특수 스크립트를 이렇게 저장하고 보관합니다.
이전 창에서 보셨을지도 모르지만, 스크립트 편집 창이 있습니다. 이 기능을 구현하는 비결은 바로 Eval Parse 함수를 사용하는 것인데, 저는 이 함수를 비어 있는 함수 안에 래핑합니다. 이렇게 하면 사용자가 스크립트를 이 창에 붙여넣기만 하면 됩니다. 실행하면 테이블 구문 분석 후 JMP Live에 있는 테이블과 연결하기 위한 모든 작업이 완벽하게 작동합니다. 이 프레젠테이션은 잠시 중단하고 몇 가지 간단한 예를 보여드리겠습니다.
먼저, 여기에 JMP Live 공간이 있고, 여기에는 실행 중인 도구가 있습니다. 도구를 처음 열었을 때의 모습입니다. 여기 맨 위 창에는 설정 섹션이 있습니다. 이 설정들은 저장할 수 있으며, 애드인을 실행할 때마다 여기에 있는 모든 설정이 자동으로 입력됩니다. JMP Live 연결 이름, JMP Live의 기본 URL, 그리고 도구에 테이블 목록을 미리 채울지 여부입니다. 테이블 목록은 여기 아래 섹션에 있습니다.
이렇게 하면 어떤 테이블을 추적하고 스크립트를 연결할지 결정할 수 있습니다. Sage에서 새 테이블을 추가하는 기능을 실제로 구현했는데, 잠시 후에 자세히 설명하겠습니다. 협업에 중요한 기능 중 하나는 프로젝트 목록을 로드하는 기능입니다. 프로젝트 목록을 다른 사람들과 공유하면, 다른 사람들도 프로젝트 목록을 로드할 수 있습니다.
그냥 계속 진행해서 미리 만든 프로젝트 목록을 로드하면 이 프로젝트 목록이 있고 두 개의 테이블이 있습니다.Not my Cat 테이블과 Weekly Weather Data 테이블이 있습니다.스크립트 부분에서 이 테이블의 크기가 약간 다르다는 것을 알 수 있습니다.Not my Cat 테이블에는 기본 스크립팅이 있는데, 실행하면 사용자에게 열 파일을 선택하라는 메시지를 표시하고, 열린 후 해당 파일을 반환합니다.이 경우 가장 중요한 것은 이 파일이 반환되면 여기에 나열된 테이블에 연결될 파일이라는 것입니다.
이 다른 예에서는 파일이 열려 있을 뿐만 아니라 다른 두 열의 평균을 계산하는 열도 추가하고 있습니다. 이 예제를 실행하면, 여기에 있는 주간 날씨 데이터 표를 찾을 수 있습니다. 이미 꽤 큰 표입니다. 124개 행으로 구성되어 있고 여러 주에 걸쳐 있습니다. 1주차부터 10주차까지인 것 같습니다. 표를 스크롤해서 살펴볼 수 있습니다.
이 도구를 실행하면 테이블을 선택하라는 메시지가 표시됩니다. 마침 여기에 여러 개의 테이블이 있는 폴더가 있는데, 새 테이블을 선택하고 "열기" 버튼을 클릭합니다. 잠시 기다리면 테이블이 나타났다가 사라지는 것을 볼 수 있습니다. 그런 다음 JMP Live에서 데이터가 업데이트된 것을 확인할 수 있습니다. 테이블을 다시 로드하면 현재 행 수는 393개입니다.
조금 뒤로 돌아가서, 여기에 다른 테이블을 추가하고 싶다면, JMP Live에서 볼 수 있듯이 Class Measurements라는 두 번째 테이블이 있고, 이와 함께 보고서가 있습니다.보고서를 클릭하겠습니다.여기 이 보고서에서 일부 측정을 추적하고 있고, 여러 사람에 대한 세 가지 타임포인트를 살펴보고 있습니다.아직 목록에 없지만 추가할 수 있습니다.Sage가 JMP Live나 여러분이 액세스할 수 있는 것을 검색하기 위해 개발한 동일한 스크립트를 사용하면 매우 유사한 창 팝업이 나타납니다.여기로 가서 예제 폴더를 찾은 다음 Class Measurement 테이블을 선택하여 이 프로젝트 목록에 추가할 수 있습니다.
이것을 프로젝트 목록에 추가하면 다른 항목 간에 전환할 수 있고, 창에 아주 기본적인 스크립트가 미리 채워져 있어서 간단히 이것을 실행하고 연결할 파일을 선택할 수 있습니다.지금 당장 그렇게 해보겠습니다.이 테이블에서 타임포인트 3으로 이동하고, 우연히 타임포인트 4에 대한 파일이 있습니다.열기 버튼을 클릭하면 파일이 팝업으로 나타났다가 사라지고, JMP Live에서 이 보고서가 다시 생성되고 타임포인트 4가 추가된 것을 볼 수 있습니다.이 테이블에 액세스할 수 있는 사람은 누구나 이 도구를 사용하여 이 프로젝트에 대한 데이터로 JMP Live 테이블을 업데이트할 수 있습니다.JMP Live에서 액세스 권한을 부여해야 합니다.
뒤로 돌아갈 수 있습니다. 네, 클래스 측정 테이블도 해당 보고서에 연결되어 업데이트되었고, 타임포인트 4 데이터가 있는 것을 확인할 수 있습니다. 다섯 번째 타임포인트 데이터가 있습니다. 이 테이블도 다시 실행하여 추가해 보겠습니다. 다시 한번, 꼬리가 나타났다 사라지고 업데이트된 버전의 테이블이 준비됩니다. "RELOAD"를 누르면 추가 데이터가 테이블에 추가된 것을 확인할 수 있습니다. 다시 뒤로 돌아가서 차트도 업데이트된 것을 확인할 수 있습니다.
특정 프로젝트에서 협업하고, 사람들이 좀 더 표준적인 워크플로를 사용하고 스크립트를 공유할 수 있도록 하는 측면에서 저희에게 매우 흥미로운 부분입니다. 특히 워크플로 빌더를 배우고 워크플로 자동화 방법을 배우는 사람들에게 더욱 그렇습니다. 이러한 도구를 제공하면 여러 사이트가 함께 작업하는 프로젝트에서 종종 발생하는 문제를 방지할 수 있어 매우 유용합니다.