대규모 데이터 세트 조작(스크립팅)안녕하십니까,
대규모 GC-MS 데이터 세트(4,800만 행)를 조작하려고 하는데 데이터 조작의 중간 단계에서 막혔습니다.
여기에 첨부된 Num-Example.jmp 중간 테이블에서 스크립팅을 통해 새 테이블을 만들고 싶습니다(340,000개 행의 중간 테이블 14개 행의 하위 집합입니다. 행 = 조건 및 데이터) .
이 하위 집합의 경우 스크립팅을 통해 ID#으로 채워진 ":ID#" 열이 있는 2119개의 행(Num-Example.jmp의 Cumulative[A] 열의 14행에 해당)을 포함하는 새 테이블을 자동으로 생성해야 합니다. 처음 131개 행에서 "1", 다음 150개 행에서 ID# = "2" 등입니다.
ID# = "1" 및 131은 Num-Example.jmp의 행 1에 있는 정보에서 가져옵니다(ID#에 대한 열 "ID#" 및 새 테이블에 생성할 행 수에 대한 열 ":A").
ID# = "2" 및 150은 Num-Example.jmp의 2행에 있는 정보에서 가져옵니다.
마지막 행 = 14(ID# = 14)까지 계속됩니다.
도와주셔서 감사합니다.
임마누엘
Re: 대용량 데이터 세트 조작(스크립팅)데이터 세트의 크기가 주어지면 끝까지 데이터 테이블에 아무것도 넣지 않을 것입니다. 행렬로 가능한 한 많이 작업하십시오. 다음과 같이 작동할 수 있습니다.
Names Default to Here(1);
mainTbl = Current Data Table();
idCol = Column(mainTbl,"A");
idNumCol = Column(mainTbl,"ID#");
ids = idCol << Get Values;
idNums = idNumCol << Get Values;
firstVals = [1] |/ (Cumulative Sum(ids)+1)[1::(N Row(ids)-1)];
lastVals = Cumulative Sum(ids);
idMat = J(Sum(ids),1,0);
For Each({idVal,i},ids,
idMat[firstVals[i]::lastVals[i]] = Repeat(idNums[i],idVal)
);
Re: 대용량 데이터 세트 조작(스크립팅)이것은 데이터 테이블을 사용해야만 잘 작동하는 것 같습니다.
names default to here(1);
dt=current data table();
ca=column(dt,"A");
cid=column(dt,"id#");
rowranges=column(dt,"Cumulative [A]")<< get values;
rowranges=[0] |/ rowranges;
dtnew=new table();
cidnew=dtnew << new column("id#");
for(ii=1, ii<=n rows(dt), ii++,
dtnew << add rows(ca[ii], at end);
cidnew[rowranges[ii]::rowranges[ii+1] ]=cid[ii];
);Re: 대용량 데이터 세트 조작(스크립팅)나는 이 접근 방식에 주의할 것이다. 입력 테이블이 작지 않으면 정말 느릴 것입니다.1000행과 10,000행의 입력 테이블을 사용하여 두 가지 접근 방식을 간단히 살펴보았습니다. 속도의 차이는 각각 ~4X 및 ~12X입니다(1,000의 경우 0.6958초 대 0.1722초 및 10,000의 경우 6.64초 대 0.543초).
흥미로운 것은 테이블 행을 미리 할당한 다음 테이블에 직접 쓰는 것입니다. 그러면 차이가 많이 나지 않을까요?
Re: 대용량 데이터세트 조작(스크립팅)안녕하세요, Don과 Sam 모두에게 감사드립니다. 두 가지 솔루션이 작동하지만 Don이 말했듯이 대규모 데이터 세트에서 행렬 사용이 더 빠릅니다. 임마누엘