정기적으로 저는 JMP 사용자로부터 완전히 새로운 데이터 테이블을 생성하는 것보다 데이터 테이블을 새 데이터로 업데이트하고 싶다는 말을 듣습니다. 여기에는 여러 가지 이유가 있을 수 있습니다. 이미 일부 데이터 정리 또는 코딩을 수행했거나, 작업 및 이전 분석을 데이터 테이블에 저장하고 싶거나, 단순히 기존 데이터 테이블에 새 데이터를 추가해야 할 수 있습니다.
~ 안에 1 부 이 2개 기사 시리즈 중 첫 번째 시나리오인 스프레드시트의 수직 구조 데이터에 대해 이야기했습니다. 이것은 너무 복잡하지 않습니다. 새 데이터를 가져와 원래 데이터에 연결합니다(이미 가져온 행을 고려).
오늘 저는 조금 더 복잡한 두 번째 시나리오에 대해 이야기하고 싶습니다. 실험실 등에서 오는 고객 데이터를 볼 때 이런 경우를 꽤 자주 봅니다. 수평 구조 데이터 테이블:

즉, 첫 번째 행/첫 번째 열은 매개변수 이름이고 다음 열은 데이터입니다. 두 번째 행에는 단위가 있고 세 번째 행에는 배치 번호가 있습니다. 그런 다음 빈 행이 있고 그 후에 다른 매개변수에 대해 동일한 작업이 다시 수행됩니다. 이것은 스프레드시트에서 읽기는 쉽지만 결과적으로는 분석하기 쉽지 않습니다. 나는 종종 이러한 종류의 데이터를 봅니다. 하지만 사람들이 수평 구조로 작업하는 것보다 수직 방식으로 데이터를 입력하도록 훈련시키는 것이 훨씬 낫습니다.
JMP에서 이와 같은 테이블을 어떻게 가져오고 업데이트할 수 있습니까? 그 데이터가 뭐가 그렇게 어려운가요?
우리는 도전을 이해해야 합니다.
- 첫째, 데이터가 행으로 정렬되지만 더 어려운 점은 유사한 정보를 표시하는 여러 행이 있다는 것입니다. 매개변수(P1, P2, P3), 각 매개변수에 대해 반복되는 단위 및 동일한 Batch 번호
- 둘째, 무엇이 무엇에 속하는지 더 쉽게 해석할 수 있도록 데이터를 나눌 수 있는 빈 행이 있습니다.
데이터 분석의 경우 이러한 종류의 구조는 기계가 좋아할 만한 것이 아닙니다. 어떤 데이터가 어디에 있는지 구체적으로 알려주고 적절한 분석을 수행해야 합니다. 오른쪽에 새 데이터가 추가되면 분석의 데이터 범위를 적절하게 조정해야 합니다.
이러한 문제로 인해 원하는 위치에 도달하기 전에 데이터를 처리해야 합니다.
업데이트할 템플릿 테이블을 생성해 보겠습니다.
1. 스프레드시트에서 현재 데이터에 있는 그대로 액세스합니다.

2. 이것은 실제로 우리가 원하는 테이블이 아니므로 "help"로 이름을 바꾸고 데이터를 전치하기 위한 준비로 빈 행을 제거해야 합니다. 코딩에서 이것은 다음과 같이 보일 수 있습니다.
dt_h1 << Set Name( name_worksheet || "help" );
// Remove rows with only missing values (break lines between measurements)
n = Loc( Column( 1 ) << Get Values, "" );
dt_h1 << Select Rows( n );
dt_h1 << Delete Rows;
- 참고: 삭제할 빈 행을 찾기 위해 매우 유용한 LOC 명령을 사용했습니다.
3. 첫 번째 열에는 최종 데이터에 포함하려는 실제 열 이름이 있습니다. 나중에 사용할 수 있도록 저장하려고 합니다. 그런 다음 테이블을 바꾸고 최종 테이블 이름을 제공할 수 있습니다(워크시트로 – 스프레드시트에서 해당 워크시트를 자동으로 찾기 위해 테이블 이름을 참조할 것임).
// Get names used for column names after transposing the data table
NewNames = dt_h1:Column 1 << Get Values;
// Transpose Column
dt_final = Data Table( name_worksheet || "help" ) << Transpose(
columns( 1 :: N Cols( dt_h1 ) ),
Label column name( "ColName" ),
Output Table( name_worksheet )
);

4. 이제 데이터 테이블을 일부 변경해야 합니다.
- 첫 번째 열 제거
- 첫 번째 행 제거
- 열 이름 변경
- 마지막으로 올바른 데이터 및 모델링 유형을 설정하고(첫 번째 행이 모두 문자로 설정되었기 때문에) 파일을 저장합니다.
- 이 예에서는 스프레드시트에 열을 추가하지 않고 업데이트 스크립트를 테스트할 수 있도록 마지막 두 행도 제거합니다.
- 참고: 시스템의 현지화 설정과 Office 언어에 따라 데이터 및 모델링 유형을 변경하기 전에 JMP의 기본 설정 또는 소수점/쉼표를 먼저(예: 코드 변경 포함) 처리해야 할 수 있습니다.
최종 테이블은 다음과 같아야 합니다.

이제 업데이트 스크립트를 처리하겠습니다.
필요한 대부분의 작업은 이미 완료되었으며 스크립트에 자동으로 저장됩니다.
- 가져오기 소스 스크립트
- 조옮김 소스 스크립트
- 스크립트 예제와 함께 위에서 언급한 일부 조작
이 템플릿 테이블에 스크립트로 넣을 최종 업데이트 스크립트를 살펴보겠습니다.
1. 현재 데이터 테이블의 이름으로 워크시트 가져오기
// Read in Sheet2 of the Excel workbook
excelFile = "TransposedExcelWorksheet.xlsx";
// Get the name of the data table and number of existing rows
cdt = Current Data Table();
cdtName = cdt << get name();
n_Rows = N Rows();
// Import the data invisible
dt_h1 = Open(
excelFile,
Worksheets( cdtName ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 0 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 1 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
),Invisible
);
2. 위에서 설명한 대로 템플릿 테이블을 수정하고 데이터 테이블을 바꾸고 정리합니다.
dt_h1 << Set Name( cdtName || "help" );
// Remove rows with only missing values (break lines between measurements)
n = Loc( Column( 1 ) << Get Values, "" );
dt_h1 << Select Rows( n );
dt_h1 << Delete Rows;
// Get names used for column names after transposing the data table
NewNames = dt_h1:Column 1 << Get Values;
// Transpose Column
dt_final = Data Table( cdtName || "help" ) << Transpose(
columns( 1 :: N Cols( dt_h1 ) ),
Label column name( "ColName" ),
Output Table( cdtName )
);
// Clean up data table - delete first row of column names and first column (labels)
dt_final << Select Rows( 1 );
dt_final << Delete Rows();
Column( dt_final, "ColName" ) << Set Selected;
dt_final << Delete Columns();
// Set the Column Names appropriately based on deleted first row in this table
For( i = 1, i <= N Cols( dt_final ), i++,
col = Column( i );
col << Set Name( NewNames[i] );
);
3. 이미 가져온 행을 제거하고 연결을 사용하여 원본 데이터 테이블에 나머지를 추가합니다.
// remove rows already imported
dt_final << Select Rows( 1 :: n_Rows );
dt_final << Delete Rows();
// Append new data to original data table
cdt << Concatenate( dt_final, Append to first table );
// Close help data table
Close( dt_final );
Close( dt_h1 );<BR />
// this last bracket is to close the whole script!
);
- 참고: JMP는 기존 열 속성으로 인해 데이터를 처리하는 방법을 이미 알고 있으므로 데이터 및 모델링 유형을 관리할 필요가 없습니다.
이 스크립트를 템플릿 데이터 테이블에 추가하면 버튼 하나만 누르면 스프레드시트의 수평 구조 데이터에서 새 데이터를 가져올 수 있습니다.
결론
여기에는 꽤 많은 단계가 포함되어 있으며 일부는 수행하기 쉽고 일부는 더 고급입니다. 좋은 점은 JMP에서 이 작업을 수행할 수 있다는 것입니다. 그러나 항상 다음 사항을 기억하십시오.
데이터 준비는 데이터에서 인사이트를 추출하는 데 가장 많은 시간이 필요한 작업입니다!
데이터로 작업하려면 데이터 분석에 적합한 구조를 사용하십시오.
그것은 대부분의 경우 각 열이 하나의 매개변수를 나타내는 수직적 접근 방식입니다. 그러나 행 기반 접근 방식도 수행할 수 있지만 올바른 접근 방식을 사용하십시오.
분석을 용이하게 하는 두 가지 예를 제공하려면 다음을 수행하십시오.


- 참고: 매개변수 이름에 새 열을 추가하면 가져온 데이터를 재정렬해야 하는 부담이 사라집니다. 그리고 분석 플랫폼에서 오버레이 또는 그룹별로 사용할 수 있는 그룹화 변수가 있습니다. 이렇게 하면 각 열에 대해 동일한 분석을 실행하지 않고 한 번에 수행합니다.
물론 이를 사용하고 컨트롤 차트 또는 기타 추세 분석을 업데이트하는 것과 같이 데이터에 분석을 추가하여 확장할 수 있습니다. Windows 스케줄러를 사용하여 보고서를 업데이트하고 새 제품으로 보낼 수 있습니다. JMP 라이브 , 다른 사람(라이센스가 있는 JMP 사용자일 필요는 없음)이 데이터 필터, 열 전환기 등과 같은 JMP의 상호 작용을 통해 웹 브라우저에서 보고서에 액세스할 수 있습니다.
유사한 작업을 수행하기 위한 사용 사례 및/또는 접근 방식을 자유롭게 추가하십시오. 살펴보게 되어 기쁩니다.
모두 제일 좋다,
남자 이름
추신: 파일에 대한 세 가지 의견:
- Sheet2.jmp에서 첨부된 Excel 파일로 데이터 테이블을 업데이트하기 위한 스크립트를 찾을 수 있습니다. 두 파일 모두 동일한 폴더에 저장해야 합니다(단순화를 위한 것입니다. 예를 들어 Pick File()을 사용하여 하드 코딩된 파일 이름을 쉽게 변경하고 이름을 추출할 수도 있습니다.
- 두 번째 스크립트는 행을 수동으로 삭제할 필요 없이 Excel 시트에서 다시 업데이트하기 위해 데이터 테이블의 행을 제거할 수 있는 "마지막 두 행 제거"입니다. 그래서 당신의 편의를 위해
- ScriptUpdateHorizontal.jsl은 업데이트 스크립트로 초기 소스 테이블을 생성하고 데이터 테이블에 추가된 마지막 2개 행 스크립트를 제거합니다. 이 스크립트는 또한 블로그의 첫 번째 부분을 참조하므로 따라갈 수 있습니다.