Problemas con Update() en valores EFT de punto flotanteI am merging sample-level metadata with time-series raw measurements using Python’s merge_asof and then updating the time-series table in JMP using Update(). Both tables contain columns for time (EFT) and batch ID.
El problema:
La combinación de Python maneja el valor "más cercano" correctamente:
<CODE class="whitespace-pre! language-python">
merged_batch = pd.merge_asof(
metadata_batch.sort_values('EFT_val'),
timeseries_batch.sort_values('EFT_val'),
left_on='EFT_val',
right_on='EFT_val',
direction='nearest'
)
JMP Update() falla con valores cercanos:
<CODE class="whitespace-pre! language-jsl">
timeSeriesTable << Update(
With( merged_batch ),
Match Columns(
:EFT_val = :EFT_val,
:Batch_ID = :Batch_ID
)
);
-
Los metadatos tienen menos filas que la tabla de series de tiempo.
-
Incluso los valores que parecen idénticos en la interfaz de usuario fallan debido a diferencias de precisión de punto flotante.
Cuando trazo el gráfico en la tabla individual 'merged_batch' funciona bien, pero después de la actualización en 'timeSeriesTable', el gráfico no traza todos los puntos de datos y también se pierden algunas filas.
Como esto:
0 - presente
87.9669444444445 - presente
111.966666666667 - desaparecido
135.966111111111 - desaparecido
183.965555555556 - presente
205.965277777778 - presente
Automatización y scriptingAnálisis y modelado de datos básicosCombinación y limpieza de datosExploración y visualización de datosRe: Problemas con Update() en valores EFT de punto flotante¿Puedes proporcionar tablas de ejemplo? ¿Intentas unir 208.0955556 con 209 en JMP?
JMP no tiene la función "join closer" de forma nativa (se puede crear un script y existen scripts en la comunidad o complementos de la comunidad). También hay al menos un elemento de la lista de deseos que la solicita.
Re: Problemas con Update() en valores EFT de punto flotanteSí, como JMP no tiene esa capacidad, usé Python, que funciona y se integró muy bien con el código. Adjunto las tablas como referencia.
y no, no estoy tratando de unir 208.0955556 con 209. 209 es un valor registrado y el flotante es de la máquina, es por eso que estoy usando mergeasof en Python para los valores más cercanos.
Re: Problemas con Update() en valores EFT de punto flotante¿Hay algún problema o esto es simplemente un "aviso" de que JMP no tiene esta capacidad?
Re: Problemas con Update() en valores EFT de punto flotanteEsto: cuando trazo el gráfico en la tabla individual 'merged_batch' funciona bien, pero después de la actualización en 'timeSeriesTable', el gráfico no traza todos los puntos de datos y también se pierden algunas filas.
Re: Problemas con Update() en valores EFT de punto flotante"111.966666666667 - desaparecido"

¿Tenemos todas las tablas necesarias para crear el gráfico? ¿Debemos asumir que los metadatos son los mismos que los de merged_batch?

Para mí, la unión funciona, pero realmente no confiaría en ella, ya que realizar una unión exacta con puntos flotantes puede dar resultados que no espera, ya que tienden a no ser exactamente precisos ( matemáticas de punto flotante ).
Puedes intentar darle a tus números más decimales para ver con mayor precisión lo que JMP piensa que son.

Re: Problemas con Update() en valores EFT de punto flotanteUnirse también funciona para mí, y aunque ambas columnas tienen marcas de tiempo similares, ya que estoy filtrando desde los datos sin procesar, no estoy muy seguro acerca del comportamiento de actualización de JMP.
La razón por la que no uso Join es que terminará creando nombres de columnas subsiguientes 'nombre de columna' de 'nombre de tabla' 'n', donde 'n' es el número de tabla subsiguiente de múltiples ejecuciones y me enfrenté a ese obstáculo y pasé a Actualizar tabla.
¿Entonces, cuál es la mejor manera de utilizar un decimal fijo? ¿1e-8, 1e-12?
dt = Current Data Table();
col = Column( dt, "EFT" );
// Replace each value with a rounded version (e.g., 8 decimals)
col << Set Each Value( Round( :EFT, 1e-14 ) );
Re: Problemas con Update() en valores EFT de punto flotanteUtilicé Join para demostrar que usar Update con los datos proporcionados no hace nada, pero Join ofrece fusionar columnas con el mismo nombre (y actualizar la tabla principal con datos de la segunda tabla).
Creo que redondear podría ser una opción. ¿O podrías usar pandas para crear la tabla final, como ya lo usas antes? Además, te advierto que quizás no quieras usar "<< Establecer cada valor" de esa forma, ya que no estoy seguro de si JMP ya lo ha modificado para que funcione como se esperaba.
Re: Problemas con Update() en valores EFT de punto flotanteEsta función está pendiente por un tiempo: por favor apoya el deseo de @jthi y vota:
Agregar unión difusa / fusión asof / unión por columnas que no tienen coincidencias exactas
Re: Problemas con Update() en valores EFT de punto flotanteComplemento: Unir filas más cercanas: unir tablas mediante columnas continuas y valores más cercanos / @jthi