부동 소수점 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 병합은 "가장 가까운"을 올바르게 처리합니다.
<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 기능이 없습니다(스크립트로 작성할 수 있으며, 커뮤니티나 애드인에 해당 스크립트가 있습니다). 또한 해당 기능을 요청하는 위시리스트 항목도 하나 이상 있습니다.
Re: 부동 소수점 EFT 값의 Update() 관련 문제네, JMP에는 해당 기능이 없어서 Python을 사용했는데, 코드와 아주 잘 통합되어 잘 작동합니다. 참고용으로 표를 첨부합니다.
아니요, 208.0955556과 209를 합치려는 것이 아닙니다 . 209는 기록된 값이고 float은 machine에서 가져온 것입니다. 그래서 파이썬에서 mergeasof를 사용하여 가장 가까운 값을 구하는 것입니다.
Re: 부동 소수점 EFT 값의 Update() 관련 문제JMP에 이 기능이 없다는 데에 어떤 문제가 있습니까? 아니면 그냥 "알려드리는" 말씀입니까?
Re: 부동 소수점 EFT 값의 Update() 관련 문제'merged_batch' 개별 테이블에서 그래프를 그리면 잘 작동하지만 `timeSeriesTable`에서 업데이트한 후에는 그래프가 모든 데이터 포인트를 그리지 않고 일부 행도 누락됩니다.
Re: 부동 소수점 EFT 값의 Update() 관련 문제"111.966666666667 - 누락됨"

플롯을 생성하는 데 필요한 테이블이 모두 있나요? 메타데이터가 merged_batch와 동일하다고 가정해야 하나요?

저는 join이 잘 작동한다고 생각하지만, 부동 소수점으로 정확한 join을 수행하면 정확하지 않은 결과가 나올 수 있으므로 그다지 신뢰할 수는 없습니다( 부동 소수점 수학 ).
JMP가 숫자에 대해 생각하는 바를 보다 정확하게 보려면 숫자에 더 많은 소수점을 지정해 보세요.

Re: 부동 소수점 EFT 값의 Update() 관련 문제Join도 제게 잘 작동하고, 두 열 모두 원시 데이터에서 필터링을 하므로 타임스탬프가 비슷하지만 JMP의 업데이트 동작은 별로 마음에 들지 않습니다.
Join을 사용하지 않는 이유는 '테이블 이름' 'n'의 후속 열 이름 '열 이름'을 생성하게 되기 때문입니다. 여기서 '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() 문제제공된 데이터로 업데이트를 사용해도 아무런 변화가 없지만, join은 같은 이름의 열을 병합하고(두 번째 테이블의 데이터로 기본 테이블을 업데이트함) 기능을 제공한다는 것을 보여주기 위해 Join을 사용했습니다.
반올림이 한 가지 방법일 것 같습니다. 아니면 이미 pandas를 사용하고 있으니 최종 표를 만들 때 pandas를 사용할 수 있을까요? 그리고, JMP에서 의도한 대로 << Set Each Value를 사용하지 않는 것이 좋습니다.
Re: 부동 소수점 EFT 값의 Update() 관련 문제이 기능은 현재 보류 중입니다. @jthi 의 희망을 지지하고 투표해 주세요.
정확한 일치 항목이 없는 열에 대한 퍼지 조인/ASOF 병합/조인을 추가합니다.
Re: 부동 소수점 EFT 값의 Update() 관련 문제AddIn: 가장 가까운 행 조인 - 연속 열과 가장 가까운 값을 사용하여 테이블 조인 / @jthi