¿Ayuda para transformar una tabla y convertir una marca de tiempo?así que tengo una tabla de datos de un sensor que no estoy muy seguro de cómo formatear correctamente. Es un sensor de luz que emite lecturas de voltaje.
La primera columna de la tabla es la longitud de onda medida y luego hay más de 100 columnas para cada instancia de tiempo en la que mide datos.
¿Cómo haría para transformar o girar esto correctamente? ¿Sería solo una transposición de tabla la actividad correcta?
A continuación, ¿consejos sobre cómo convertir una marca de tiempo sin procesar en una serie de tiempo utilizable? Sale con este aspecto.
DD-MM-AAAA:MM:SS.###Z
¿Qué puedo hacer para convertir esto en un valor de serie temporal utilizable para trazar como un eje x? Se reduce a la milésima de segundo, incrementos de 0,1 s.
Bonificación, ¿cómo hacer esto para encontrar el mínimo y el máximo y normalizar el tiempo para que sea 0-->max?
...
14-07-2020T22:47:31.400Z
14-07-2020T22:47:31.500Z
14-07-2020T22:47:31.600Z
14-07-2020T22:47:31.700Z
14-07-2020T22:47:31.800Z
14-07-2020T22:47:31.900Z
...
Fusión y limpieza de datosRe: ¿Ayuda para transformar una tabla y convertir una marca de tiempo?gracias jeff Su aporte en esa ecuación final es excelente y elimina la preocupación de una carrera que cruza la medianoche.
Re: ¿Ayuda para transformar una tabla y convertir una marca de tiempo?
@aliegner1 escribió:
Pregunta sobre las marcas de tiempo: ¿cómo convertiría esto en una duración de tiempo sin procesar? Veo que existe la fórmula "Diferencia de fecha", pero parece que necesita dos columnas. ¿Cómo hago de esto una serie de tiempo que comienza en 0.000s --> tiempo máximo?
Antes de ir más lejos, creo que debemos aclarar esta pregunta aquí.@txnelson interpretó eso como si quisiera deshacerse de la parte de la fecha del valor de fecha y hora. No creo que eso sea lo que quieres.
Ahora tienes una columna de valores de fecha y hora . Esa columna se puede usar como una serie de tiempo, simplemente no comenzará en 0.
Si, en cambio, prefiere una columna que cuente la diferencia de tiempo entre filas consecutivas de la tabla de datos, eso es fácil de hacer con una simple resta y subíndice de fila .

Tengo un par de cosas que señalar aquí:
- En la primera fila, el valor se establece en 0.
- No necesito usar la función Diferencia de fecha () porque estoy interesado en los valores en segundos. Entonces, la resta simple funciona.
- Porque aritmética de punto flotante la diferencia en estos valores no es precisamente de décimas de segundo. He formateado esta columna para que se muestre en décimas de segundo, es decir, Dec fijo con 1 lugar decimal.
- Finalmente, pero quizás más complicado es que su pregunta original decía que tenía múltiples longitudes de onda. ¿Desea reiniciar esta secuencia de tiempo en 0 para cada longitud de onda? Si es así, eso no es un problema. Solo tomará un par de cambios en la fórmula.

- Ahora la fórmula comprueba la fila 1 o para que el valor lamda sea diferente del lambda anterior (usando el Función de retraso () ) para establecer la secuencia en 0.
- También usa Lag() para obtener el valor de la secuencia en la fila anterior y agrega la diferencia en los valores de tiempo entre la fila actual y la anterior.
Espero que esto ayude a aclarar y proporcionar una buena dirección.
Re: ¿Ayuda para transformar una tabla y convertir una marca de tiempo?Dadas las preguntas que está haciendo, mi primera respuesta es que necesita leer un poco.Debe revisar los documentos Descubrir JMP y Usar JMP.Ambos están disponibles en la Biblioteca de documentación de JMP en el menú desplegable Ayuda.
Con respecto al problema de desbordamiento de días... lo que deberá hacer es verificar si la diferencia de fecha () es mayor que 0 días y, de lo contrario, calcular el tiempo según sea necesario.
Lamda no tiene que cambiarse a un personaje.Pero se puede hacer fácilmente cambiando el tipo de datos.O simplemente puede cambiar el Tipo de modelado a Ordinal o Nominal.
:Lamda << Data Type(character);
// or
:Lamda<<MODELING type=""></MODELING>
Re: ¿Ayuda para transformar una tabla y convertir una marca de tiempo?Impresionante Jim!
unas preguntas a ver que opinas:
- ¿Cómo protegerse contra una corrida que pasa de la medianoche al día siguiente? usar Time of Day para obtener un tiempo absoluto o normalizarlo para que comience en cero se vería afectado por una ejecución que abarca 2 días.
- ¿Pensamientos sobre convertir la columna Lambda en una columna de caracteres? Es esencialmente una etiqueta, por lo que no debería ser numérico, ¿verdad? Está midiendo en varias longitudes de onda para luego trazar datos en función del tiempo.
- ¿Cómo podría incrustar el archivo original en la tabla de datos recién creada? Cambié el dt inicial = --> a un cuadro de diálogo para abrir un archivo.

Re: ¿Ayuda para transformar una tabla y convertir una marca de tiempo?Aquí hay una pequeña secuencia de comandos que debería darle una buena "ventaja" para obtener sus datos en un formato analítico. Toma su tabla de datos de muestra y crea:

names default to here(1);
dt=current data table();
// Get the column names from the data table
colNames = dt << get column names;
// Remove Lamda from the list
remove from(colNames,1,1);
// Stack the data
dtStack = dt << Stack(
columns(
colNames
),
Source Label Column( "Label" ),
Stacked Data Column( "Data" ),
Output Table( "Stacked" )
);
// Create a new JMP DateTime column
dtStack << New Column( "Timestamp",
Numeric,
"Continuous",
Format( "d/m/y h:m:s", 26, 3 ),
Input Format( "d/m/y h:m:s", 0 ),
Formula( Informat( Word( 1, :Label, "Z" ), "d/m/y h:m:s" ) )
);
// Remove formula to convert column to static values
dtStack:Timestamp << delete formula;
// Create the Time variable
dtstack << New Column( "Time",
Numeric,
"Continuous",
Format( "hr:m:s", 17, 3 ),
Input Format( "hr:m:s", 0 ),
Formula( Time Of Day( :Timestamp ) )
);
// Get rid of no longer needed "Label" column
dtStack << delete columns( "Label" );
Re: ¿Ayuda para transformar una tabla y convertir una marca de tiempo?Consulte el subconjunto adjunto (preapilado).
Obtengo la hora del día, pero luego necesito protegerme contra las condiciones cuando se produce una ejecución durante la medianoche y cambia el día. Lo estoy poniendo a cero haciendo [hora del día () - col mínimo (hora del día ())
Re: ¿Ayuda para transformar una tabla y convertir una marca de tiempo?Para convertir una columna de marca de tiempo (fecha/hora de JMP) en solo un valor de tiempo, utilice la función Hora del día(). Devuelve efectivamente el número de segundos desde la medianoche anterior hasta la hora de la medición.
Con respecto al apilamiento cuando los nombres de las columnas cambian de un día a otro ... es muy sencillo obtener una lista de las columnas en la tabla de datos y luego aplicar esa lista a las declaraciones de Stack Platform. El mensaje a pasar a la tabla de datos para recuperar los nombres de las columnas es dt << obtener nombres de columnas().
¿Sería posible adjuntar una tabla de datos de muestra o una hoja de cálculo de sus datos? Es bastante difícil ver los detalles de los datos de entrada, lo que puede resultar en la transmisión de direcciones falsas.Re: ¿Ayuda para transformar una tabla y convertir una marca de tiempo?Gracias Jim y Jeff, ¡funcionan muy bien! Estoy leyendo en word() ahora mismo.
Pregunta sobre las marcas de tiempo: ¿cómo convertiría esto en una duración de tiempo sin procesar? Veo que existe la fórmula "Diferencia de fecha", pero parece que necesita dos columnas. ¿Cómo hago de esto una serie de tiempo que comienza en 0.000s --> tiempo máximo?
Pregunta sobre la secuencia de comandos del comando de pila: mirando la secuencia de comandos, tiene una fila única para cada columna ... ¿cómo hacer que esto sea dinámico para la próxima vez que extraiga este archivo de datos?
Data Table( "Sheet1" ) << Stack(
columns(
:Name( "14-07-2020T22:47:31.400Z" ),
:Name( "14-07-2020T22:47:31.500Z" ),
:Name( "14-07-2020T22:47:31.600Z" ),
....for every column...
),
Source Label Column( "TimeStamp" ),
Stacked Data Column( "data" ),
Output Table( "sensor table" )
)
Re: ¿Ayuda para transformar una tabla y convertir una marca de tiempo?jeff,
Supongo que mi edad se nota... me ganaste en la respuesta otra vez.
Re: ¿Ayuda para transformar una tabla y convertir una marca de tiempo?Con respecto a sus datos, le sugiero que busque Apilar las columnas.Ese formulario le dará más herramientas JMP para el análisis.
Con respecto a su problema con la marca de tiempo... aquí hay un script de ejemplo que toma una columna de entrada llamada "TS" y la convierte en una columna de fecha/hora JMP.
Names default to here(1);
dt = New Table( "Example",
Add Rows( 6 ),
New Column( "TS",
Character,
"Nominal",
Set Values(
{"14-07-2020T22:47:31.400Z", "14-07-2020T22:47:31.500Z",
"14-07-2020T22:47:31.600Z", "14-07-2020T22:47:31.700Z",
"14-07-2020T22:47:31.800Z", "14-07-2020T22:47:31.900Z"}
)
)
);
dt << New Column( "Column 2",
Numeric,
"Continuous",
Format( "d/m/y h:m:s", 26, 3 ),
Input Format( "d/m/y h:m:s", 0 ),
Formula( Informat( Word( 1, :TS, "Z" ), "d/m/y h:m:s" ) )
);Re: ¿Ayuda para transformar una tabla y convertir una marca de tiempo?Creo que todo lo que necesitas es Tablas->Apilar poniendo sus columnas de tiempo en el rol Columnas de pila.
Debería terminar con dos columnas, longitud de onda y tiempo.
En cuanto a convertir su marca de tiempo en una columna de fecha y hora JMP, Palabra() y Información() son mis ir a aquí:

Otras lecturas:
Si aprende solo una función del Editor de fórmulas, Word() es la única
Uso de fechas, horas, fechas y duraciones en JMP