Bearbeiten großer Datensätze (Scripting)Hallo,
Ich möchte einen großen GC-MS-Datensatz (48 Millionen Zeilen) bearbeiten und bleibe bei einem Zwischenschritt der Datenbearbeitung hängen.
Ich möchte durch Skripting eine neue Tabelle aus einer hier angehängten Zwischentabelle Num-Example.jmp erstellen (es handelt sich um eine Teilmenge von 14 Zeilen meiner Zwischentabelle mit 340.000 Zeilen = Bedingungen, die zur endgültigen Tabelle von 48 Millionen führen sollten Zeilen = Bedingung & Daten).
Für diese Teilmenge muss ich automatisch (durch Skripting) eine neue Tabelle erstellen, die 2119 Zeilen enthält (dies entspricht Zeile 14 der Spalte Cumulative[A] in Num-Example.jmp) mit einer Spalte „:ID#“, die mit ID# = gefüllt ist "1" in den ersten 131 Zeilen, dann ID# = "2" in den nächsten 150 Zeilen und so weiter.
ID# = "1" und 131 stammen aus den Informationen in Zeile 1 von Num-Example.jmp (Spalte "ID#" für die ID# und Spalte ":A" für die Anzahl der Zeilen, die in der neuen Tabelle erstellt werden sollen).
ID# = "2" und 150 stammen aus den Informationen in Zeile 2 von Num-Example.jmp.
und so weiter bis zur letzten Zeile = 14 (ID# = 14).
Danke für Ihre Hilfe.
Emmanuel
Betreff: Große Datensätze bearbeiten (Scripting)Angesichts der Größe der Datensätze würde ich bis zum Schluss vermeiden, etwas in eine Datentabelle einzufügen. Arbeiten Sie so viel wie möglich mit Matrizen. So etwas könnte funktionieren:
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)
);
Betreff: Große Datensätze bearbeiten (Scripting)Dies scheint nur mit einer Datentabelle gut zu funktionieren
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];
);Betreff: Große Datensätze bearbeiten (Scripting)Mit dieser Vorgehensweise wäre ich vorsichtig. Wenn die Eingabetabelle nicht klein ist, wird sie sehr langsam sein.Ich habe mir die beiden Ansätze mit Eingabetabellen mit 1000 und 10.000 Zeilen kurz angesehen. Der Geschwindigkeitsunterschied betrug ~4X bzw. ~12X (0,6958 Sek. vs. 0,1722 Sek. für 1.000 und 6,64 Sek. vs. 0,543 Sek. für 10.000)
Interessant wäre, die Tabellenzeilen vorzubelegen und dann direkt in die Tabelle zu schreiben. Würde es dann einen großen Unterschied geben?
Betreff: Große Datensätze bearbeiten (Scripting)Hallo, vielen Dank, Don und Sam. Die beiden Lösungen funktionieren, aber wie Don sagte, ist die Verwendung von Matrizen mit meinem großen Datensatz schneller. Emmanuel