Résumé de plusieurs fichiers CSVComment diriger JMP vers un dossier de mon ordinateur contenant environ 400 fichiers CSV, comme une base de données, créer un groupe de colonnes, puis un tableau de synthèse avec une ligne par fichier? Je peux le faire individuellement, mais cela prend une éternité et j'espérais pouvoir développer un script à automatiser.
Re: Résumé de plusieurs fichiers CSVVous avez raison ..... merci d'avoir attrapé l'erreur
J'ai modifié mon entrée d'origine pour corriger les erreurs que vous avez trouvées
Re: Résumé de plusieurs fichiers CSVJe pense que vous vouliez ajouter les tableaux récapitulatifs à la place des tableaux de données?
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: Résumé de plusieurs fichiers CSVVoici mon point de vue sur le script qui est nécessaire. Il est assez simple et résume toutes les colonnes numériques, et apporte le nom de la feuille Excel en tant que nouvelle colonne.
Ci-dessous est édité sur la base des problèmes trouvés dans la réponse suivante
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: Résumé de plusieurs fichiers CSVVoici une variation de la réponse de Vince. Cela autorise différents noms de colonne dans chaque fichier.
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: Résumé de plusieurs fichiers CSVRésumé comment?
Re: Résumé de plusieurs fichiers CSVVoici à quoi ressemblent les données dans un fichier CSV. Le nom du fichier est également l'identifiant du patient. Comment puis-je le faire résumer par en-tête de colonne et créer un tableau des données résumées avec l'identificateur de fichier dans une colonne? Vous pouvez voir à quoi ressemble le nom du fichier en bas de la capture d'écran.
Je pourrais convertir tous les fichiers CSV en fichiers JMP? Juste pas sûr que ça aiderait.
Est-ce que quelqu'un sait si le complément Outils de la table de données fonctionnerait dans ce cas?
Re: Résumé de plusieurs fichiers CSVpouvez-vous donner une capture d'écran de deux fausses tables et de ce que vous voulez que le résultat final ressemble? Je ne peux pas comprendre ce que vous demandez.
Re: Résumé de plusieurs fichiers CSVDésolé pour le retard. Était en service et devait prendre soin des patients. Maintenant, revenons à cela.
Non, ils n'ont pas toujours la même colonne (A, B, C, etc.) mais ils ont le même nom.
Brian
Re: Résumé de plusieurs fichiers CSV(Ignorez cette réponse; Vince a une bien meilleure approche.)
Une variante de la réponse de Vince, si vous voulez des statistiques par fichier. J'imagine aussi que les colonnes sont cohérentes ...
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
);
mes fichiers ressemblaient à ça
x, y, z
1,2,3
4,5,6
J'ai utilisé le script de table à partir d'un fichier que j'ai créé manuellement pour obtenir le script de synthèse. Il pourrait y avoir un meilleur moyen de copier les variables; dans JMP 13, vous pouvez utiliser les idées ici d'assigner une ligne entière dans une déclaration.
Re: Résumé de plusieurs fichiers CSVDonc, je fais quelques hypothèses à ce sujet. Je pourrais être parti.
Tous les fichiers CSV ont les mêmes colonnes.
vous voulez créer un résumé agrégé (moyenne, par exemple) de chaque colonne pour chaque fichier.
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>