인사말,
일부 데이터 준비 작업을 수행하기 위해 실행 가능한 솔루션을 추상화할 수 없기 때문에 다단계 프로세스를 스크립팅하는 데 도움이 필요합니다.
여러 탭을 포함하는 여러 스프레드 시트로 제공되는 시계열 데이터가 있으며 각 탭에는 데이터를 컨텍스트화하는 메타 데이터가 포함된 열 이름이 있는 데이터가 있습니다.
아래 예에서 "설명자"가 있는 열(열 1,3 및 5)은 실제로 "날짜"로 이름이 지정되어야 하지만 대신 분석에 필요한 설명자가 포함되어야 합니다.또한 The Unit 열(2,4 및 6)은 실제로 이름이 데이터여야 하지만 측정 단위를 포함해야 합니다.
| 큰: 작은: 젖은 | mg | 나쁜: 좋은: 못생긴 | Hz | 항구: 우현: 속도 | mL |
| 2021년 12월 15일 | 0 | 2021년 12월 15일 | 4 | 2021년 12월 15일 | 8 |
| 2021년 12월 16일 | 1 | 2021년 12월 16일 | 5 | 2021년 12월 16일 | 9 |
| 2021년 12월 17일 | 2 | 2021년 12월 17일 | 6 | 2021년 12월 17일 | 10 |
| 2021년 12월 18일 | 삼 | 2021년 12월 18일 | 7 | 2021년 12월 18일 | 11 |
이상적으로 완성된 데이터 테이블은 다음과 같은 구조를 가질 것입니다.
| 날짜 | 설명자 유형1 | 설명자 유형2 | 설명자 유형3 | 단위 | 데이터 |
| 2021년 12월 15일 | 큰 | 작은 | 젖은 | mg | 0 |
| 2021년 12월 16일 | 큰 | 작은 | 젖은 | mg | 1 |
| 2021년 12월 17일 | 큰 | 작은 | 젖은 | mg | 2 |
| 2021년 12월 18일 | 큰 | 작은 | 젖은 | mg | 삼 |
| 2021년 12월 15일 | 나쁜 | 좋은 | 못생긴 | Hz | 4 |
| 2021년 12월 16일 | 나쁜 | 좋은 | 못생긴 | Hz | 5 |
| 2021년 12월 17일 | 나쁜 | 좋은 | 못생긴 | Hz | 6 |
| 2021년 12월 18일 | 나쁜 | 좋은 | 못생긴 | Hz | 7 |
| 2021년 12월 15일 | 포트 | 우현 | 속도 | mL | 8 |
| 2021년 12월 16일 | 포트 | 우현 | 속도 | mL | 9 |
열 머리글을 별도의 테이블로 가져오고 중첩 for 루프로 다시 조인하려는 시도는 성공적인 것으로 입증되지 않았습니다.다음은 포함된 예제 데이터에 대한 열 이름 데이터를 가져와 준비하는 코드입니다.
Names Default to Here(1);
//Get MainDT column Names
colNames = Data Table("Data") << Get Column Names;
//Create Empty Table
dtCols = New Table("DTCols");
//Put in Columns into the table
dtCols << New Column( "Columns", Character, Values(colNames));
//Label every other row for splitting
dtCols << New Column( "Data", formula( sequence(1,2,1)));
//Remove formula from Data column
dtCols:Data << Delete Formula;
<BR />//New column from which to split from
dtCols << New Column( "Type", formula(
If(
contains(:Columns, "Desc"), "Meta",
"Unit_Raw"
);
);
);
//Deleting formula for handling
dtCols:Type << Delete formula;
//Splitting the row based on the labelling
splitdtCols = dtCols << Split(
Split By( :Type ),
Split( :Columns ),
Sort by Column Property,
Output Table( "SplitDTCols" )
);
//Text to Columns by ":"
splitdtCols << text to columns(delimiter(":"), columns(:Meta));중첩된 for 루프(전체 설명을 원래 테이블에 다시 넣으려고만 함)는 상대적으로 느릴 뿐만 아니라(1백만 개 이상의 항목을 반복하는 데 필요함) 누락된 데이터만 열에 씁니다.
//Meta column back into Data
For(i = 1, i <= N Items(colNames), i++,
For(j = 1, j <= N Rows(splitdtCols), j++,
//show(splitdtCols:Meta[j]);
If( eval(char(colNames[i])) == eval(char(splitdtCols:Meta[j])),
Data Table("Data") << New Column("Descriptor", set Values(eval(char(splitdtCols:Meta[j]))))
)
)
);열 이름 데이터를 별도의 테이블로 가져오는 접근 방식을 기꺼이 포기합니다.제가 놓치고 있는 더 간단한 접근 방식이 있는 것 같습니다.
대화식으로 이것은 다음과 같이 하기 쉽습니다. 다중 시리즈 스택 .
Tables->Stack을 사용하고 모든 열을 추가하십시오. 스택 열 목록. 그런 다음 확인란을 클릭하십시오. 다중 시리즈 스택 . 세트 시리즈 수 2로 변경하고 확인하지 않음 연속 .

다음과 같은 테이블을 얻을 수 있습니다.

이름 바꾸기 데이터 열 날짜 그리고 라벨 2 열 단위 .

그런 다음 Cols->Utilities->를 사용할 수 있습니다. Cols에게 문자 보내기... 구분 기호로 콜론(":")을 사용하여 레이블 열을 세 개의 열로 분할합니다.

당신은 이것을 얻을 것이다:

이것을 스크립팅해야 하는 경우 자동화해야 하거나 이 작업을 많이 수행해야 하므로 소스 스크립트에서 스택에 대한 스크립트를 가져올 수 있습니다.
stacked_dt = Data Table( "445470" ) << Stack(
columns(
:"Big:Small:Wet"n, :mg, :"Bad:Good:Ugly"n, :Hz, :"Port:Starboard:Speed"n,
:mL
),
Source Label Column( "Label" ),
Stacked Data Column( "Data" ),
Number of Series( 2 )
);
다음을 사용해야 합니다. <<이름 설정 열 이름을 변경하라는 메시지가 표시됩니다.
stacked_dt:"Data" << Set Name( "Date" );
stacked_dt:"Label 2" << Set Name( "Units" );
마지막으로 Text to Columns도 스크립팅 가능합니다.
stacked_dt << Text To Columns(
delimiter( ":" ),
columns( :Label )
);
이것이 바로 내가 기대했던 것입니다.간단하고 내가 간과 한 것.나는 이것을 꽤 빨리 구현할 수 있었다.