Problèmes avec la fonction Update() sur les valeurs EFT à virgule flottanteI 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.
Le problème :
La fusion en Python gère correctement la fonction «nearest» :
<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'
)
La fonction JMP Update() échoue pour les valeurs proches :
<CODE class="whitespace-pre! language-jsl">
timeSeriesTable << Update(
With( merged_batch ),
Match Columns(
:EFT_val = :EFT_val,
:Batch_ID = :Batch_ID
)
);
-
Les métadonnées comportent moins de lignes que le tableau de séries chronologiques.
-
Même des valeurs qui semblent identiques dans l'interface utilisateur peuvent échouer en raison de différences de précision des nombres à virgule flottante.
Lorsque je trace le graphique dans la table individuelle 'merged_batch', cela fonctionne correctement, mais après la mise à jour dans `timeSeriesTable`, le graphique n'affiche pas tous les points de données et certaines lignes sont également manquantes.
Comme ça:
0 - présent
87,9669444444445 - présent
111,966666666667 - manquant
135,966111111111 - manquant
183,965555555556 - présent
205,965277777778 - présent
Automatisation et scriptageAnalyse et modélisation de données de baseFusion et nettoyage des donnéesExploration et visualisation des donnéesRe : Problèmes avec la fonction Update() sur les valeurs EFT à virgule flottantePouvez-vous fournir des exemples de tables ? Essayez-vous de joindre 208.0955556 avec 209 dans JMP ?
JMP ne propose pas nativement la fonction « Rejoindre le plus proche » (il est possible de la créer par script, et des scripts existent dans la communauté ou sous forme d'extensions). Une demande similaire figure également dans la liste de souhaits.
Re : Problèmes avec Update() sur les valeurs EFT à virgule flottanteOui, comme JMP ne possède pas cette fonctionnalité, j'ai utilisé Python, qui fonctionne et s'intègre parfaitement au code. Je joins les tableaux pour référence.
Et non, je n'essaie pas de joindre 208.0955556 avec 209. 209 est une valeur enregistrée et le nombre flottant provient de la machine, c'est pourquoi j'utilise la fonction mergeasof en Python pour obtenir les valeurs les plus proches.
Re : Problèmes avec Update() sur les valeurs EFT à virgule flottanteY a-t-il un problème ou est-ce simplement un avertissement indiquant que JMP ne possède pas cette fonctionnalité ?
Re : Problèmes avec la fonction Update() sur les valeurs EFT à virgule flottanteLorsque je trace le graphique dans la table individuelle 'merged_batch', cela fonctionne correctement, mais après la mise à jour dans `timeSeriesTable`, le graphique n'affiche pas tous les points de données et certaines lignes sont également manquantes.
Re : Problèmes avec Update() sur les valeurs EFT à virgule flottante"111.966666666667 - manquant"

Disposons-nous de toutes les tables nécessaires à la création du graphique ? Devons-nous supposer que les métadonnées sont identiques à celles de merged_batch ?

Pour moi, la jointure fonctionne, mais je ne lui ferais pas vraiment confiance car effectuer une jointure exacte avec des nombres à virgule flottante pourrait donner des résultats inattendus, car ils ont tendance à ne pas être parfaitement précis ( calculs à virgule flottante ).
Vous pouvez essayer d'ajouter des décimales à vos nombres pour voir plus précisément ce que JMP en pense.

Re : Problèmes avec la fonction Update() sur les valeurs EFT à virgule flottanteLa jointure fonctionne également pour moi, et bien que ces deux colonnes aient des horodatages similaires car je filtre à partir des données brutes elles-mêmes, je suis assez inquiet du comportement de mise à jour de JMP.
La raison pour laquelle je n'utilise pas Join est qu'il finira par créer des noms de colonnes suivants 'nom de colonne' de 'nom de table' 'n', où 'n' est le numéro de table suivant à partir de plusieurs exécutions et j'ai rencontré cet obstacle et suis passé à Update Table.
Il serait donc préférable d'utiliser un nombre décimal fixe ? 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 : Problèmes avec Update() sur les valeurs EFT à virgule flottanteJ'ai utilisé la fonction Join à titre de démonstration, car l'utilisation de Update avec les données fournies ne donne aucun résultat, tandis que Join permet de fusionner les colonnes portant le même nom (et de mettre à jour la table principale avec les données de la deuxième table).
Je pense qu'arrondir pourrait être une solution. Ou bien, pourriez-vous utiliser pandas pour créer le tableau final, puisque vous l'utilisez déjà ? Attention : il est déconseillé d'utiliser `<< Set Each Value` de cette manière, car je ne sais pas si JMP a modifié ce comportement.
Re : Problèmes avec Update() sur les valeurs EFT à virgule flottanteCette fonctionnalité est en attente depuis un certain temps - veuillez soutenir la demande de @jthi et voter :
Ajouter une jointure floue / une fusion ASO / une jointure par colonnes ne présentant pas de correspondance exacte
Re : Problèmes avec Update() sur les valeurs EFT à virgule flottanteModule complémentaire : Jointure par valeurs les plus proches - Fusionnez des tables en utilisant des colonnes continues et les valeurs les plus proches / @jthi