Resumen de múltiples archivos CSV¿Cómo dirijo JMP a una carpeta de archivos en mi escritorio que tenga aproximadamente 400 archivos CSV como una base de datos, creo un grupo de columnas y creo una tabla de resumen con 1 fila por archivo? Puedo hacer esto individualmente, pero me lleva una eternidad y esperaba poder desarrollar un script para automatizar.
Re: Resumen de múltiples archivos CSVEstás en lo correcto ... Gracias por atrapar el error.
Modifiqué mi entrada original para corregir los errores que encontraste.
Re: Resumen de múltiples archivos CSVCreo que pretendías adjuntar las tablas de resumen en lugar de las tablas de datos?
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 );
)
);Re: Resumen de múltiples archivos CSVAquí está mi opinión sobre el guión que se necesita. Es bastante simple y obtiene todas las columnas numéricas resumidas, y trae el nombre de la hoja de Excel como una nueva columna
A continuación se edita en función de los problemas encontrados en la siguiente respuesta
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 );
)
);
Re: Resumen de múltiples archivos CSVAquí hay una variación de la respuesta de Vince; Esto permite diferentes nombres de columna en cada archivo.
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 fileRe: Resumen de múltiples archivos CSVResumido ¿cómo?
Re: Resumen de múltiples archivos CSVAquí es cómo se ven los datos dentro de un archivo CSV. El nombre del archivo también es el identificador del paciente. ¿Cómo puedo obtener un resumen por encabezado de columna y crear una tabla de los datos resumidos con el identificador de archivo en una columna? Puede ver cómo se ve el nombre del archivo en la parte inferior de la captura de pantalla.
¿Podría convertir todos los CSV a archivos JMP? Simplemente no estoy seguro de que ayudaría.
¿Alguien sabe si el complemento Herramientas de la tabla de datos funcionaría en este caso?
Re: Resumen de múltiples archivos CSV¿Puedes dar una captura de pantalla de dos tablas falsas y cómo quieres que se vea el resultado final? No puedo entender lo que estás preguntando.
Re: Resumen de múltiples archivos CSVPerdón por el retraso. Estaba en servicio y teniendo que atender a los pacientes. Ahora volviendo a esto.
No, no siempre tienen la misma columna (A, B, C, etc.) pero sí tienen el mismo nombre.
Brian
Re: Resumen de múltiples archivos CSV(Ignora esta respuesta; Vince tiene un enfoque mucho mejor).
Una variación en la respuesta de Vince, si quieres estadísticas por archivo. También me imagino que las columnas son consistentes ...
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
);
mis archivos se veian asi
x, y, z
1,2,3
4,5,6
Usé el script de tabla de un archivo que hice a mano para obtener el script de resumen. Puede haber una mejor manera de copiar las variables; en JMP 13 podías usar las ideas aquí para asignar una fila entera en una declaración.
Re: Resumen de múltiples archivos CSVAsí que estoy haciendo algunas suposiciones sobre esto. Yo podria estar fuera
Todos los archivos csv tienen las mismas columnas.
desea crear un resumen agregado (media, por ejemplo) de cada columna para cada archivo.
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>