Importando datos a JmpHola,
Estoy desarrollando un análisis JMP para datos periódicos. Tengo una macro de Excel que genera un nuevo CSV cada semana en una carpeta en particular. Todavía soy un jugador muy básico con JMP, por lo que desperdicié el apoyo de la comunidad para ayudarme a crear un script para realizar esta actividad. Intenté buscar pero no encontré ninguna solución. El archivo CSV tiene 19 columnas con encabezado. Puedo eliminar la fila del encabezado del CSV si eso presenta un problema. ¿Alguien puede ayudarme con una solución de código para secuencias de comandos que me ayude a importar archivos automáticamente a la tabla de datos principal en JMP para poder ejecutar otras secuencias de comandos que solo puedan evaluar datos?
Re: Importar datos a JmpGracias por la respuestaxnelson. Esto es lo que hay en el archivo de registro de "Datos de tendencias en línea agregados". (Este es el archivo que se abre cuando ejecuto el script)
/*:
//:*/
// This script will concatenate cleaned online data files from APPLIKON controllers to a master table.
// Define function to open .xlsx files
DataUpdate = Function({filepath},
Open(
filepath,
Worksheets( "Data" ),
Use for all sheets( 0 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
)
);
//Define path to where .xlsx files are stored (location where this script is stored)
path = get default directory();
//Open Running Table (Online Trend Data Aggregated.jmp) - assuming in same directory as .xlsx files (could change path to wherever)
dt_running = Open(path||"Online Trend Data Aggregated.jmp");
//Get List of Files in Directory
files = Files In Directory(path);
//Remove any files from the list that are not .xlsx or do not contain "APPLIKON" in file name
for(i=N Items(files),i>=1,i--,
If(contains(files[i],".xlsx") == 0 | contains(files[i],"APPLIKON") == 0, Remove From(files,i));
);
//Get max(File Date) in running table to determine which files need to be appended
max_date = max(dt_running:File Date << Get Values);
//Extract Dates from File Names and determine if date is > max_date from running table
dates = {};
update_files = {};
for(i=1, i<=N Items(files),i++,
word_list = Words(files[i],"-"); //breaks out file name into words delimited by hyphens
temp_date = informat(trim(word_list[1]||"/"||word_list[2]||"/"||word_list[3]),"m/d/y"); //first 3 words are month, day, year - concatenat them separated by "/"
if(temp_date > max_date,
Insert Into(dates,temp_date);
Insert Into(update_files,files[i])
)
);
//Import selected files, add File Date column, and concatenate to running table
for(i=1,i<=N Items(update_files),i++,
dt_temp = DataUpdate(path||update_files[i]);
dt_temp << New Column("File Date", format("m/d/y"), Set Values(J(N Row(dt_temp),1,dates[i])));
dt_temp << Go To(:File Date) << Move Selected Column(To first);
dt_running << Concatenate( dt_temp, Append to First Table(1));
Close(dt_temp,nosave);
);
dt_running << Clear Column Selection;
/*:
Scriptable[]Re: Importar datos a JmpCuando simplemente ejecuta el archivo, sin utilizar el depurador, ¿qué declaraciones obtiene en el registro?Re: Importar datos a JmpHola,
¡Estoy buscando la misma solución que el cartel original!
Copié ese script y lo modifiqué para adaptarlo a mis necesidades (incluida una sugerencia anterior para copiar y pegar el script de importación desde JMP en lugar de lo que presenta la solución original).
...Pero no funciona por alguna razón.
El script abre el archivo JMP "Datos de tendencias en línea agregados" y luego se detiene y no hace nada. ¿Qué se supone que pasará después de eso?
El depurador recorre todo y el único mensaje que recibo está en la esquina superior derecha y dice "Ejecución del programa finalizada".
Cualquier idea es muy apreciada. Guión a continuación:
// This script will concatenate cleaned online data files from APPLIKON controllers to a master table.
// Define function to open .xlsx files
DataUpdate = Function({filepath},
Open(
filepath,
Worksheets( "Data" ),
Use for all sheets( 0 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
)
);
//Define path to where .xlsx files are stored (location where this script is stored on a network drive)
path = get default directory();
//Open Running Table (Online Trend Data Aggregated.jmp) - assuming in same directory as .xlsx files (could change path to wherever)
dt_running = Open(path||"Online Trend Data Aggregated.jmp");
//Get List of Files in Directory
files = Files In Directory(path);
//Remove any files from the list that are not .xlsx or do not contain "APPLIKON" in file name
for(i=N Items(files),i>=1,i--,
If(contains(files[i],".xlsx") == 0 | contains(files[i],"APPLIKON") == 0, Remove From(files,i));
);
//Get max(File Date) in running table to determine which files need to be appended
max_date = max(dt_running:File Date << Get Values);
//Extract Dates from File Names and determine if date is > max_date from running table
dates = {};
update_files = {};
for(i=1, i<=N Items(files),i++,
word_list = Words(files[i],"-"); //breaks out file name into words delimited by hyphens
temp_date = informat(trim(word_list[1]||"/"||word_list[2]||"/"||word_list[3]),"m/d/y"); //first 3 words are month, day, year - concatenat them separated by "/"
if(temp_date > max_date,
Insert Into(dates,temp_date);
Insert Into(update_files,files[i])
)
);
//Import selected files, add File Date column, and concatenate to running table
for(i=1,i<=N Items(update_files),i++,
dt_temp = DataUpdate(path||update_files[i]);
dt_temp << New Column("File Date", format("m/d/y"), Set Values(J(N Row(dt_temp),1,dates[i])));
dt_temp << Go To(:File Date) << Move Selected Column(To first);
dt_running << Concatenate( dt_temp, Append to First Table(1));
Close(dt_temp,nosave);
);
dt_running << Clear Column Selection;
Re: Importar datos a Jmp@cwillden
Esto funcionó de maravilla, realmente aprecio su apoyo. Esto fue capaz de manejar cientos de miles de filas que tengo en archivos CSV únicos en cuestión de segundos. ¡¡¡Gracias!!!Re: Importar datos a JmpA continuación se muestra un ejemplo de cómo podría hacerlo.Digamos que el archivo CSV tiene 2 columnas, X1 y X2.Creo 2 archivos csv de muestra ("29-3-18 - Mis datos.csv" y "5-4-18 - Mis datos.csv").También tengo una tabla jmp en ejecución que guardé en el mismo directorio que los archivos CSV.
La siguiente secuencia de comandos buscará todos los archivos en el directorio y filtrará los archivos que no sean CSV y los archivos sin "Mis datos" en el nombre del archivo.Luego toma la fecha más reciente de los archivos ya importados a la tabla en ejecución.Luego, recorre la lista de archivos que cumplen con los criterios anteriores y extrae las fechas del nombre del archivo.Si la fecha es mayor que la fecha máxima de la tabla en ejecución, coloca ese archivo en una lista de archivos para agregar a la tabla en ejecución.
Después de eso, recorre los archivos que determinamos que deben agregarse abriéndolos primero, luego agregando una columna Fecha de archivo y luego concatenando el archivo a la tabla en ejecución.
//Define function to open up your CSV files - will need to be modified for your own CSV file
MyCSVImporter = Function({filepath},
Open(
filepath,
columns(
New Column( "X1", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "X2", Numeric, "Continuous", Format( "Best", 12 ) )
),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Comma, CSV( 0 ) ),
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start( 1 ),
Data Starts( 2 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
)
);
//Define path to where csv files are stored
path = "$DOCUMENTS/temp/";
//Open Running Table (RunningTable.jmp) - assuming in same directory as CSV files (could change path to wherever)
dt_running = Open(path||"RunningTable.jmp");
//Get List of Files in Directory
files = Files In Directory(path);
//Remove any files from the list that are not .csv or do not contain "My Data" in file name
for(i=N Items(files),i>=1,i--,
If(contains(files[i],".csv") == 0 | contains(files[i],"My Data") == 0, Remove From(files,i));
);
//Get max(File Date) in running table to determine which files need to be appended
max_date = max(dt_running:File Date << Get Values);
//Extract Dates from File Names and determine if date is > max_date from running table
dates = {};
update_files = {};
for(i=1, i<=N Items(files),i++,
word_list = Words(files[i],"-"); //breaks out file name into words delimited by hyphens
temp_date = informat(trim(word_list[1]||"/"||word_list[2]||"/"||word_list[3]),"m/d/y"); //first 3 words are month, day, year - concatenat them separated by "/"<BR />
if(temp_date > max_date,
Insert Into(dates,temp_date);
Insert Into(update_files,files[i])
)
);
<BR />//Import selected files, add File Date column, and concatenate to running table
for(i=1,i<=N Items(update_files),i++,
dt_temp = MyCSVImporter(path||update_files[i]);
dt_temp << New Column("File Date", format("m/d/y"), Set Values(J(N Row(dt_temp),1,dates[i])));
dt_temp << Go To(:File Date) << Move Selected Column(To first);
dt_running << Concatenate( dt_temp, Append to First Table(1));
Close(dt_temp,nosave);
);
dt_running << Clear Column Selection;
En este ejemplo, RunningTable ya tiene los datos 3-29-18, por lo que solo agregará los datos 4-5-18.
Re: Importar datos a Jmp¡Gracias!
@uday_guntupalli Sí, los datos siempre estarán en el mismo formato, el mismo número de columnas y los mismos encabezados.
Ya importé datos a JMP una vez. La cuestión es conseguir que estos datos se actualicen automáticamente semanalmente a partir del nuevo archivo CSV que se generará. Cada semana, se generará un nuevo archivo CSV con el nombre de archivo " - Mis datos". Estoy buscando que JMP importe estos datos a mi archivo principal cada vez. ¿Cómo se puede escribir un comando para que JMP vaya automáticamente a un directorio de carpetas y seleccione el último archivo de la lista, importe esos datos y los modifique en la tabla en ejecución?
Re: Importar datos a JmpSólo un punto de aclaración sobre @uday_guntupalli respuesta:
Proporcionará una interfaz como esta. Es posible que desee elegir "Datos con vista previa" para saber lo que está importando y poder personalizarlo. Una vez que haya completado la importación, vaya a la tabla de datos importados.Mire en el Panel de tabla a la izquierda de la pantalla de la tabla de datos. Haga clic derecho en el triángulo verde frente al elemento "Fuente", le proporcionará una opción para "editar" donde podrá ver el script JMP generado.Luego podrás cortar y pegar ese guión en los inicios para el desarrollo de tu guión semanal.
Re: Importar datos a JmpHola @NilD ,
JMP generará el script por usted si puede importarlo manualmente la primera vez.La tabla resultante tendrá un script "Fuente" que muestra exactamente cómo importar los datos usando JSL.
Si JMP no importa el archivo .csv correctamente, haga lo siguiente.Haga Archivo > Abrir (o Ctrl + O) como de costumbre (cambiando los tipos de archivos en la ventana Abrir archivo de datos a "Archivos de texto" si es necesario), navegue hasta el archivo .csv y selecciónelo.Antes de abrir el .csv, debería ver algunos botones de opción que le ofrecen diferentes opciones para abrir el archivo.Uno es "Datos con vista previa".Seleccionar eso le dará la oportunidad de modificar la configuración de importación antes de llevar los datos a JMP.

Re: Importar datos a Jmp@NilD ,
¿Los archivos siempre estarán en el mismo formato? es decir, ¿los mismos nombres de columnas y el mismo tipo de datos dentro de ellas?
La forma más sencilla es hacer que JMP le proporcione el script para importar el archivo, de modo que pueda personalizar las selecciones y reutilizar el script.
Archivo ==> Abrir ==> Seleccione el archivo que desee
Proporcionará una interfaz como esta. Es posible que desee elegir "Datos con vista previa" para saber lo que está importando y poder personalizarlo. Una vez que haya terminado, haga clic en el triángulo verde, le proporcionará una opción para "editar" donde podrá ver el script JMP generado.
