Zusammenfassung mehrerer CSV-DateienWie leite ich JMP auf einen Dateiordner auf meinem Desktop, der etwa 400 CSV-Dateien (z. B. eine Datenbank) enthält, eine Reihe von Spalten und eine Übersichtstabelle mit einer Zeile pro Datei erstellen? Ich kann das individuell machen, aber es dauert ewig und ich hoffte, ich könnte ein Skript entwickeln, um es zu automatisieren.
Betreff: Zusammenfassung mehrerer CSV-DateienSie haben Recht ... Danke für den Fehler
Ich habe meinen ursprünglichen Eintrag geändert, um die gefundenen Fehler zu korrigieren
Betreff: Zusammenfassung mehrerer CSV-DateienIch denke, Sie wollten die Zusammenfassungstabellen anstelle der Datentabellen anhängen?
Names Default To Here( 1 );
dir = Pick Directory();
files = Files In Directory( dir );
dt = New Table( "concat", New Column( "File", character ) );
For( i = 1, i <= N Items( files ), i++,
If( Ends With( files[i], "csv" ), //just a check to make sure it's a csv
// Open the file
dt1 = Open( dir || files[i] );
//Get all of the numeric columns from the just opened file
thecolumns = dt1 << get column names( numeric );
// Create an output table of one row that contains the summary
// As many stats as desired can be added to the below to get all of the
// ones that are needed
dt1 << Summary( Mean( Eval( thecolumns ) ), Freq( "None" ), Weight( "None" ), output table name("tmpdt"));
// Add the summary table to the summary table
dt << concatenate( Data Table("tmpdt"), append to first table );
// Since what is wanted is the ID, not the file name, and the ID is
// the Sheeet name in the Excel spreadsheet, one has to get that value
// the the name of the data table, since that is where JMP 13 places the
// sheet name
dt:File[N Rows( dt ) ] = dt1 << Get Name;
// Close the no longer needed raw data table
Close( dt1, no save );
)
);Betreff: Zusammenfassung mehrerer CSV-DateienHier ist meine Ansicht über das Skript, das benötigt wird. Es ist ziemlich einfach und fasst alle numerischen Spalten zusammen und bringt den Namen der Excel-Tabelle als neue Spalte mit
Nachfolgend werden die in der nächsten Antwort gefundenen Probleme bearbeitet
Names Default To Here( 1 );
dir = Pick Directory();
files = Files In Directory( dir );
dt = New Table( "concat", New Column( "File", character ) );
For( i = 1, i <= N Items( files ), i++,
If( Ends With( files[i], "csv" ), //just a check to make sure it's a csv
// Open the file
dt1 = Open( dir || files[i], private );
//Get all of the numeric columns from the just opened file
thecolumns = dt1 << get column names( numeric );
// Create an output table of one row that contains the summary
// As many stats as desired can be added to the below to get all of the
// ones that are needed
dt2 = dt1 << Summary( Mean( Eval( thecolumns ) ), Freq( "None" ), Weight( "None" ) );
// Add the summary table to the summary table
dt << concatenate( dt2, append to first table );
// Since what is wanted is the ID, not the file name, and the ID is
// the Sheeet name in the Excel spreadsheet, one has to get that value
// the the name of the data table, since that is where JMP 13 places the
// sheet name
dt:File[N Rows( dt ) ] = dt1 << Get Name;
// Close the no longer needed raw data table
Close( dt1, no save );Close( dt2, no save );
)
);
Betreff: Zusammenfassung mehrerer CSV-DateienHier ist eine Variation von Vince's Antwort; Dies ermöglicht unterschiedliche Spaltennamen in jeder Datei.
Names Default to here(1);
dir = pick directory();
files = files in directory(dir);
//table to hold summary data
dts = New Table("Summary", New Column("filename", character));
for(i=1, i<=nitems(files), i++, //for each filename
if(endswith(files[i], "csv"), //if file is a csv
//open the file
dt1 = open( dir||files[i], private );
//add a row to the summary table
dts << Add Rows(1);
//save the filename to the data table
Column( dts, "filename" )[i] = files[i];
//get list of columns
cols = dt1 << Get Column Names();
//for each column
for ( c=1, c <= N Items(cols), c++,
//add mean column to summary table if it isn't already there
if ( Contains( dts << Get Column Names(); , Parse( Char( cols[c] ) || "_mean" ) ) < 1,
dts << New Column( Char( cols[c] ) || "_mean" );
);
//find the mean and write it to summary table
Column( dts, Char( cols[c] ) || "_mean" )[i] = ColMean( Column( dt1, cols[c] ) );
//add max column to summary table if it isn't already there
if ( Contains( dts << Get Column Names(); , Parse( Char( cols[c] ) || "_max" ) ) < 1,
dts << New Column( Char( cols[c] ) || "_max" );
);
//find the max and write it to summary table
Column( dts, Char( cols[c] ) || "_max" )[i] = ColMax( Column( dt1, cols[c] ) );
); //end loop each column
//close file
close(dt1, no save);
); //end check for csv
); //end loop for each fileBetreff: Zusammenfassung mehrerer CSV-DateienZusammengefasst wie?
Betreff: Zusammenfassung mehrerer CSV-DateienSo sehen die Daten in einer CSV-Datei aus. Der Dateiname ist auch die Patientenkennung. Wie kann ich es nach Spaltenüberschriften zusammenfassen und eine Tabelle der zusammengefassten Daten mit der Dateikennung in einer Spalte erstellen? Wie der Dateiname aussieht, sehen Sie unten auf dem Screenshot.
Ich könnte alle CSVs in JMP-Dateien konvertieren? Nur nicht sicher, ob es helfen würde.
Weiß jemand, ob das Add-In für Datentabellen-Tools für diesen Fall funktionieren würde?
Betreff: Zusammenfassung mehrerer CSV-DateienKönnen Sie einen Screenshot von zwei falschen Tischen geben und wie das Endergebnis aussehen soll? Ich kann nicht herausfinden, was Sie fragen.
Betreff: Zusammenfassung mehrerer CSV-DateienEntschuldigung für die Verspätung. War im Service und musste sich um die Patienten kümmern. Kommen wir jetzt zurück.
Nein, sie haben nicht immer dieselbe Spalte (A, B, C usw.), aber sie haben denselben Namen.
Brian
Betreff: Zusammenfassung mehrerer CSV-Dateien(Ignoriere diese Antwort; Vince hat einen viel besseren Ansatz.)
Eine Variante der Antwort von Vince, wenn Sie Statistiken pro Datei wünschen. Ich kann mir auch vorstellen, dass die Spalten konsistent sind ...
path = "$desktop/csvFiles/";
files = Files In Directory( path );
answers = New Table( "Summary",
New Column( "N Rows", Numeric, "Continuous", Format( "Fixed Dec", 12, 0 ), Set Values( [] ) ),
New Column( "Mean(x)", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [] ) ),
New Column( "Mean(y)", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [] ) ),
New Column( "Mean(z)", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [] ) ),
New Column( "sourceFile", character )
);
For( iFile = 1, iFile <= N Items( files ), iFile += 1,
file = path || files[iFile];
dt = Open( file, "text" );
dt2 = dt << Summary( Mean( :x ), Mean( :y ), Mean( :z ), Freq( "None" ), Weight( "None" ) );
answers << addrows( 1 );
answers:sourceFile = file || " " || Format( Creation Date( file ), "m/d/y h:m:s" );
answers:N Rows = dt2:N Rows[1];
answers:name( "Mean(x)" ) = dt2:name( "Mean(x)" )[1];
answers:name( "Mean(y)" ) = dt2:name( "Mean(y)" )[1];
answers:name( "Mean(z)" ) = dt2:name( "Mean(z)" )[1];
Close( dt, nosave ); // linked table closes too
);
Meine Dateien sahen so aus
x, y, z
1,2,3
4,5,6
Ich habe das Tabellenskript aus einer von mir erstellten Datei verwendet, um das Zusammenfassungsskript zu erhalten. Es gibt möglicherweise eine bessere Möglichkeit, die Variablen zu kopieren. In JMP 13 können Sie die Ideen verwenden Hier eine ganze Zeile in einer Anweisung zuordnen.
Betreff: Zusammenfassung mehrerer CSV-DateienDeshalb mache ich einige Annahmen darüber. Ich könnte weg sein
Alle CSV-Dateien haben die gleichen Spalten.
Sie möchten für jede Datei eine zusammenfassende Zusammenfassung (z. B. Mittelwert) für jede Spalte erstellen.
Names Default to here(1);
dir = pick directory();
files = files in directory(dir);
dt = New Table("concat", New Column("File", character));
for(i=1, i<=nitems(files), i++,
if(endswith(files[i], "csv"), //just a check to make sure it's a csv
//break();
dt1 = open(dir||files[i], private);
dt1 << New Column("File", character, set each value(files[i]));
dt<<CONCATENATE></CONCATENATE>