浮動小数点 EFT 値の Update() に関する問題I 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.
問題:
Pythonのmergeは「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'
)
JMP Update() は近い値では失敗します:
<CODE class="whitespace-pre! language-jsl">
timeSeriesTable << Update(
With( merged_batch ),
Match Columns(
:EFT_val = :EFT_val,
:Batch_ID = :Batch_ID
)
);
-
メタデータの行数は時系列テーブルよりも少なくなります。
-
UI では同一に見える値であっても、浮動小数点の精度の違いにより失敗します。
'merged_batch' の個々のテーブルにグラフをプロットすると正常に動作しますが、 `timeSeriesTable ` の更新後、グラフにすべてのデータ ポイントがプロットされず、一部の行も欠落します。
このような:
0 - 現在
87.9669444444445 - 現在
111.966666666667 - 欠落
135.966111111111 - 欠落
183.965555555556 - 現在
205.965277777778 - 現在
自動化とスクリプト基本的なデータ分析とモデリングデータのブレンドとクリーンアップデータの探索と可視化Re: 浮動小数点 EFT 値の Update() に関する問題サンプルテーブルを提供していただけますか? JMPで208.0955556と209を結合しようとしているのですか?
JMPにはネイティブでJoin Nearest機能がありません(スクリプトで実行できますし、コミュニティやアドインにもスクリプトがあります)。また、この機能をリクエストするウィッシュリスト項目が少なくとも1つあります。
Re: 浮動小数点EFT値のUpdate()に関する問題はい、JMPにはその機能がないので、Pythonを使用しました。Pythonは正常に動作し、コードと非常にうまく統合されています。参考までに表を添付します。
いいえ、208.0955556 を 209 と結合しようとしているわけではありません。209 は記録された値であり、float はマシンからのものです。そのため、最も近い値を得るために Python で mergeasof を使用しています。
Re: 浮動小数点 EFT 値の Update() に関する問題何か問題があるのでしょうか、それともこれは JMP にこの機能がないことを単に知らせるだけなのでしょうか?
Re: 浮動小数点EFT値のUpdate()に関する問題これは、「merged_batch」の個々のテーブルにグラフをプロットすると正常に機能しますが、「timeSeriesTable」の更新後、グラフにすべてのデータ ポイントがプロットされず、一部の行も欠落します。
Re: 浮動小数点 EFT 値の Update() に関する問題「111.966666666667 - 欠落」

プロットを作成するために必要なテーブルはすべて揃っていますか?メタデータはmerged_batchと同じであると想定してよいでしょうか?

私の場合、結合は機能しますが、浮動小数点数で正確な結合を実行すると、正確ではない傾向があるため予期しない結果が生じる可能性があるため、実際には信頼できません (浮動小数点演算)。
JMPがどう認識しているかをより正確に確認するために、数値に小数点以下の桁数を増やしてみるのも良いでしょう。

Re: 浮動小数点EFT値のUpdate()に関する問題Join は私の場合も機能し、生データ自体からフィルタリングしているため、これらの列は両方とも同様のタイムスタンプを持っていますが、JMP の更新動作についてはまったく望んでいません。
Join を使用しない理由は、'Table name' 'n' の後続の列名 'column name' ('n' は複数回実行からの後続のテーブル番号) が作成され、その問題に直面したため、Update Table に移行したためです。
では、固定小数を使用する方が良いでしょうか? 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: 浮動小数点 EFT 値の Update() に関する問題提供されたデータで Update を使用しても何も行われないことをデモするために Join を使用しましたが、join では同じ名前の列のマージ (および 2 番目のテーブルのデータによるメイン テーブルの更新) が提供されます。
丸めは一つの選択肢かもしれません。あるいは、既に使っているように、最終的なテーブルを作成するのにpandasを使うことは可能でしょうか? また、念のためお知らせしますが、JMPが意図した動作に変更したかどうかは不明なので、そのように「<< 各値を設定する」を使うのは避けた方が良いかもしれません。
Re: 浮動小数点 EFT 値の Update() に関する問題この機能は現在保留中です - @jthiの願いに賛同し、投票してください:
完全一致のない列にあいまい結合/asof結合/結合を追加する
Re: 浮動小数点 EFT 値の Update() に関する問題アドイン: 最も近い行を結合 - 連続した列と最も近い値を使用してテーブルを結合します/ @jthi