JMP에서의 Python: 데이터프레임 열에서 데이터테이블 열로의 모범 사례 및 계산 속도 영향배경
* JMP19 스크립팅 환경에서 Python을 사용합니다.
* 기존 JMP 데이터 테이블(dt)에서 pandas로 데이터 프레임(df)을 생성합니다.
* df 입력을 받고 새로운 df 결과를 반환하는 실행 함수입니다. df_results라고 부르겠습니다.
* 결과를 JMP 데이터 테이블 열로 다시 전송합니다.
이 방법은 효과가 있지만, 제가 제대로 하고 있지 않다는 의심을 불러일으키는 두 가지 이유가 있습니다. 첫째, 로컬 로그 출력에 경고가 표시됩니다. 둘째, 처음에 매우 많은 행에 대해 이 작업을 실행했을 때 시간이 오래 걸립니다. 제 코드 타이머는 10만 행에 25초가 걸렸습니다. 다시 실행해 보니 두 번째 실행에는 3초가 걸렸습니다. 각 단계에 대한 자세한 정보를 제공하도록 타이머를 설정해서 코드 한 줄이 대부분의 시간을 차지하는지 확인할 수 있었습니다.
제가 의문을 제기하는 코드 한 줄은 이겁니다. 처음에 상수(혹은 null - 둘 다 시도)로 설정된 열을 처음 채웠을 때만 10만 개의 행을 채우는 데 25초가 걸렸습니다. 그 이후로는 매번 재실행할 때마다 거의 10배가 빨라졌습니다.
dt[열 이름] = df_results[열 이름]
이것은 내장된 로그의 경고 메시지입니다.
FutureWarning: Series.__getitem__에서 키를 위치로 처리하는 기능은 더 이상 지원되지 않습니다. 향후 버전에서는 정수 키가 항상 레이블로 처리됩니다(DataFrame 동작과 동일). 위치로 값에 액세스하려면 `ser.iloc[pos]`를 사용하세요.
또한, 두 개의 서로 다른 데이터프레임에서 총 4개의 열에 대해 이 작업을 수행했습니다. 모두 동일한 동작(및 경고)을 보였습니다. 첫 번째 실행은 느렸지만, 반복할 때마다 빨라졌습니다. 1, 2, 3, 4열 간의 차이는 무시할 수 있을 정도였습니다.
이건 130만 개의 행이 있는 큰 테이블의 일부에 불과합니다. 따라서 첫 번째 시도에서 더 빠른 속도를 얻는 방법을 알아내지 못하면 25초 x 4열은 250초 이상 x 4열이 됩니다.
감사해요
자동화 및 스크립팅Re: JMP에서의 Python: 데이터프레임 열에서 데이터테이블 열로의 모범 사례 및 계산 속도 영향JMP 18에서는 데이터 프레임에서 열별로 데이터 테이블을 구성해야 했습니다. JMP 19는 이식 가능한 데이터 프레임 프로토콜을 지원하므로 dt에서 df로 변환하는 코드 한 줄과 메모리에서 df에서 dt로 변환하는 코드 한 줄만 있으면 됩니다.
JMP에서 Python 스크립트를 처음 실행할 때 Python 자체를 초기화해야 한다는 점도 기억하세요. 패키지를 처음 가져올 때는 공유 라이브러리를 포함하거나 .py 파일의 바이트 코드 컴파일을 포함하여 Python을 로드해야 할 수도 있습니다.
경고는 pandas 패키지에서 발생합니다. 경고를 해결하려면 pandas 패키지에서 권장하는 ser.iloc[pos]를 실행해야 합니다. JMP 데이터 테이블 dt는 0부터 시작하는 열 인덱스 또는 열 이름으로 인덱싱할 수 있습니다. 인덱스를 사용하면 문자열 비교를 피할 수 있으므로 더 빠릅니다.
도움말 -> 스크립팅 인덱스 'Python' 카테고리, jmp.from_dataframe. 'JMP에서 Pandas로' 예제.
import jmp
import jmputils
try:
if not jmputils.is_installed('pandas'):
jmputils.jpip('install', 'pandas', echo=False)
except Exception as e:
print(f'Install failed with exception: {e}')
import pandas as pd
dt = jmp.open(jmp.SAMPLE_DATA + "Big Class.jmp")
pandas_df = (pd.api.interchange.from_dataframe(dt))
print(pandas_df)
...
# new dt_result data table from dataframe df_result
dt_result = jmp.from_dataframe( df_result )
# or continue to do the loop on columns if you need to update the original data table from the resulting dataframe.
Re: JMP에서의 Python: 데이터프레임 열에서 데이터테이블 열로의 모범 사례 및 계산 속도 영향Python에서 단일 JMP 열에 새로운 값을 채우는 가장 빠른 방법은 무엇입니까?
예를 들어 10만 개의 행이 있는 데이터 테이블의 경우?
Re: JMP에서의 Python: 데이터프레임 열에서 데이터테이블 열로의 모범 사례 및 계산 속도 영향폴, 고맙습니다. 오류를 피하기 위해 jmp.from_dataframe을 구현하여 데이터 테이블로 돌아가겠습니다.
제 질문의 다른 부분은 왜 그렇게 큰 속도 차이가 나는지에 대한 것이었고, 그 답을 얻으려면 느린 계산 응답을 안정적으로 생성할 수 있는지 확인해야 했습니다. 처음에는 그럴 수 없었습니다. JMP를 열고 Python을 로드한 후 처음 실행했을 때를 포함하여 모든 실행이 충분히 빨랐습니다. 그러다가 중요한 차이점이 하나 있다는 것을 깨달았습니다. 새 열을 수동으로 추가하고(아직 코드에 추가하지 않은 상태로) 코드를 실행하면 새 열의 업데이트 속도가 처음으로만 느려집니다.
테스트로 4개의 열을 업데이트했는데, 3개는 기존 열이고 4번째 열은 새로 생성한 열입니다. 1열의 10만 개 행을 업데이트하는 데 1초가 걸렸고, 2열을 업데이트하는 데 1초, 3열을 업데이트하는 데 1초, 그리고 4열을 업데이트하는 데 19초가 걸렸습니다.
다른 테이블과 '새로운' 네 번째 열을 하나 더 만들었습니다. 새 열이 있는 데이터 테이블을 저장하고 닫은 후 다시 열고 코드를 실행하면 새 네 번째 열이 약 1초 안에 업데이트됩니다. ##1, 2, 3번과 같은 속도입니다. 중요한 것은, 새 네 번째 열이 있는 데이터 테이블을 저장만 하고 닫았다가 다시 열지 않고 코드를 실행하면 네 번째 열이 업데이트되는 데 여전히 약 19초가 걸린다는 것입니다.
이는 속도가 JMP의 메모리 관리 특성과 관련이 있다는 것을 의미합니다.
이 문제가 해결될 수 있거나 반드시 해결해야 하는 문제인지는 잘 모르겠고, 어쩌면 'from_dataframe' 단계를 사용하지 않으면 여전히 문제가 될지도 모르겠습니다. 아주 이상한 동작인데, 재현할 수 있어서 다행입니다. 이제 더 나은 버전의 코드를 시도해 보고 문제가 지속되는지 확인해 보겠습니다.
Re: JMP에서의 Python: 데이터프레임 열에서 데이터테이블 열로의 모범 사례 및 계산 속도 영향제 동료 중 한 명이 JSL에 시작 데이터 업데이트와 종료 데이터 업데이트가 있다고 지적했습니다.
jmp.run_jsl( 'dt << Begin Data Update;' )
# your python code filling new column
...
jmp.run_jsl( 'dt << End Data Update;' )
아마도 Python에서 이 기능을 지원하고 싶을 것입니다. 많은 행을 채우거나 업데이트할 때 테이블의 UI 업데이트를 일시 중단하기 위해 with 블록을 사용하는 것이 좋을 것입니다.
Re: JMP에서의 Python: 데이터프레임 열에서 데이터테이블 열로의 모범 사례 및 계산 속도 영향jsl Begin Data Update로 래핑된 dt[index]를 사용하여 전체 열을 설정하는 것입니다.
jmp.run_jsl( 'dt << Begin Data Update;' )
dt[ index ] = list_like_object # numpy array, list, dataframe column,...
jmp.run_jsl( 'dt << End Data Update;' )
또는 데이터 표를 만들 때까지 보이지 않게 한 다음 표를 채운 후에 보이게 할 수도 있습니다.
import jmp
dt = jmp.DataTable('Powered By Python', 40, visibility='Invisible')
...
# fill table
...
jmp.globals['jdt'] = dt # set jdt in JSL to reference dt
jmp.run_jsl('::jdt << Show Window(1);')
선택적 가시성 매개변수는 JMP 19 이상일 수 있습니다. jmp.globals[ ]는 19 기능입니다.
Re: JMP에서의 Python: 데이터프레임 열에서 데이터테이블 열로의 모범 사례 및 계산 속도 영향jmp.run_jsl( 'dt << Begin Data Update;' ) 는 JSL에서 dt가 테이블의 JSL 변수라고 가정하고, Python 측에서도 마찬가지입니다. JSL에서 Python Send(dt); 를 호출할 때 발생하는 것과 같은 현상이지만, 테이블이 Python에서 생성된 경우에는 반드시 동일하지는 않습니다.
Re: JMP에서의 Python: 데이터프레임 열에서 데이터테이블 열로의 모범 사례 및 계산 속도 영향설명해주셔서 감사합니다.
그래서 코드는 다음과 같습니다.
dt[ index ] = list_like_object
파이썬 에서 열을 단계별로 채우는 건 어떤가요? 속도 문제가 발생하는 건가요?
와 비슷해 보인다
dt[ 0, columnname] = [values ...]
제이에스엘 에서는 한 단계로 열을 채우고 dt << 시작/종료 데이터 업데이트 로 래핑할 필요가 없습니다.
알아두면 좋습니다. 자세한 내용은 어디에서 확인할 수 있나요?
Re: JMP에서의 Python: 데이터프레임 열에서 데이터테이블 열로의 모범 사례 및 계산 속도 영향얼마나 많은 사용자가 그것이 얼마나 중요한지 알고 있는지 모르겠습니다.
dt << Begin Data Update;
좋은 코드를 작성하는 것이 목표입니다. 하지만 많은 사용자가 이 사실을 모른다는 걸 알고 있습니다.
@bswedlove 의 각 행에 대한 관련 소원:
각 행에 대해(데이터 업데이트=1, ...)
문제를 사라지게 하기 위해 해결책을 제도화하는 것은 좋은 생각입니다.
JSL과 Python에 적용됩니다.
Re: JMP에서의 Python: 데이터프레임 열에서 데이터테이블 열로의 모범 사례 및 계산 속도 영향JMP 데이터 테이블 dt는 0부터 시작하는 열 인덱스 또는 열 이름으로 인덱싱할 수 있습니다. 인덱스를 사용하면 문자열 비교를 피할 수 있으므로 더 빠릅니다.
인덱스를 사용하여 코드를 다시 작성하려고 하지만 데이터 프레임에 대한 이름에서 데이터 테이블 열 인덱스를 결정하는 동등한 구문을 찾을 수 없습니다.
dfColumnIndex = df.get_loc['데이터 프레임 열 이름']
dtColumnIndex = ???
Re: JMP에서의 Python: 데이터프레임 열에서 데이터테이블 열로의 모범 사례 및 계산 속도 영향@jthi , "존재하지 않는 문제를 해결하기 위해 코드를 추가하는 것"의 이름이 뭐였나요?
Re: JMP에서의 Python: 데이터프레임 열에서 데이터테이블 열로의 모범 사례 및 계산 속도 영향dt에서 df를 생성한 경우, 두 데이터 프레임의 인덱스가 같다고 가정합니다. 데이터 프레임에 열을 추가했거나, 두 데이터 프레임 중 하나가 다른 하나의 열의 원점이 아닌 경우 dt['col_name'] = 를 사용하는 것이 유일한 해결책일 수 있습니다. 인덱스를 사용하는 것보다 비용이 많이 들진 않지만, 문자열을 비교하는 것과 숫자형 인덱스를 직접 사용하는 것의 차이입니다.
Re: JMP에서의 Python: 데이터프레임 열에서 데이터테이블 열로의 모범 사례 및 계산 속도 영향이 모든 것은 Python의 프로토콜 버퍼(Protocol Buffers)라는 마법처럼 작동합니다. 프로토콜 버퍼에서는 데이터가 지원되는 메모리 블록 간에 매핑됩니다. Begin | End Data Update를 사용하여 대괄호를 사용하지 않아도 될 수도 있지만, 전체 열을 한 번에 매핑할 수 없는 경우 값 전체를 반복하는 방식으로 대체되므로 Data Update 문을 사용하여 대괄호를 사용하는 것이 안전망 역할을 합니다.
Re: JMP에서의 Python: 데이터프레임 열에서 데이터테이블 열로의 모범 사례 및 계산 속도 영향수많은 실험과 다양한 방법을 시도해 봤습니다. 어떤 것은 경고를 냈고, 어떤 것은 경고를 내지 않았습니다. 가장 간단한 방법은 df에서 dt를 생성한 다음 dt를 사용하여 데이터를 전송하는 것이었습니다. 이 방법은 오류가 발생하지 않았습니다.
하지만 속도 문제에 관해서는... 유일하게 차이를 만드는 것은 새로 생성된 열에 값을 쓰려고 했는지, 아니면 데이터 테이블이 열렸을 때(또는 생성되었을 때) 이미 존재했던 열에 값을 쓰려고 했는지뿐이었습니다. 새로 생성된 열은 매우 느리게 업데이트되었지만, 기존 열은 상당히 빠르게 업데이트되었습니다.
10만 행의 마지막 텍스트 결과입니다. 이 코드를 실행하기 전에 이미 4개의 매개변수가 존재하고 5개의 새 열이 추가되었습니다. 총 9개의 열이 업데이트되었습니다.
# 이 'xfers'는 모두 dt['colname'] = dt_results['colname'] 구문을 사용했습니다. DF를 사용하여 dt_results를 생성한 후에는 DataFrames가 사용되지 않았습니다.
Step df_results 생성 시간: 0.3434초
단계 매개변수 1 전송 시간: 0.1795초
단계 매개변수 2 전송 시간: 0.1758초
Step df_results 생성 시간: 0.0231초 # 이것은 다른 df 함수 반환 결과의 새로운 집합입니다.
단계 매개변수 3 전송 시간: 0.1838초
단계 매개변수 4 전송 시간: 0.1890초
# 여기의 코드는 다음과 같습니다. dt['NewCol1Test'] = df_results[stringnameofcolumn]
FutureWarning: Series.__getitem__에서 키를 위치로 처리하는 기능은 더 이상 지원되지 않습니다. 향후 버전에서는 정수 키가 항상 레이블로 처리됩니다(DataFrame 동작과 동일). 위치로 값에 액세스하려면 `ser.iloc[pos]`를 사용하세요.
df에서 dt로 이름 변경 시간: 15.8251초
# 여기의 코드는 다음과 같습니다: dt['NewCol2Test'] = df_results.iloc[:,dfColumnIndex]
FutureWarning: Series.__getitem__에서 키를 위치로 처리하는 기능은 더 이상 지원되지 않습니다. 향후 버전에서는 정수 키가 항상 레이블로 처리됩니다(DataFrame 동작과 동일). 위치로 값에 액세스하려면 `ser.iloc[pos]`를 사용하세요.
#iloc을 사용했을 때에도 왜 그 경고가 계속 발생하는지 모르겠습니다.
df에서 dt로의 iloc xfer 시간: 16.0874초
# 여기의 코드는 다음과 같습니다: dt['NewCol3Test'] = dt_results[dfColumnIndex]
dt 인덱스에서 dt 이름 전송 시간: 14.5659초
# 여기의 코드는 다음과 같습니다. dt[NewColumnIndex] = dt_results[dfColumnIndex]
dt 인덱스에서 dt 인덱스로의 전송 시간: 14.4699초
#코드는 다음과 같습니다.
jmp.run_jsl('dt << 데이터 업데이트 시작;')
dt['NewCol5Test'] = dt_results[dfColumnIndex]
jmp.run_jsl('dt << 데이터 업데이트 종료;')
#경고/오류 결과:
"이름이 확인되지 않음: 'dt'에 대한 액세스 또는 평가에서 dt가 발견되었습니다. dt/*###*/
1번째 줄에서
이름 미해결: 'dt'에 대한 액세스 또는 평가에서 dt가 발견되었습니다. dt/*###*/
1번째 줄에서
# 이 출력은 실제로 두 번째 '1번째 줄' 오류 메시지와 같은 줄에 있었습니다.
begin/end 업데이트 xfer 시간으로 래핑된 dt에서 dt로의 인덱스: 14.3627초
# 10만 행의 실행 시간에 대한 최종 요약.
총 실행 시간: 77.0904초
제목: JMP에서 Python을 사용한 데이터프레임 열을 데이터테이블 열로 변환하는 최적의 방법과 계산 속도에 미치는 영향이 코드를 두 번째로 실행하기 전에 데이터를 저장하세요(*) - 또는 시작/종료 데이터 업데이트를 활성화하세요!
import jmp
import numpy as np
dt = jmp.open(jmp.SAMPLE_DATA + "Wafer Stacked.jmp")
jmp.globals['jdt'] = dt
jmp.run_jsl('Graph Builder( Variables( Y( :defects ) ), Elements( Bar( Y, Label( "Label by Value" ) ) ))');
# jmp.run_jsl('jdt << Begin Data Update;')
dt[ 5 ] = [np.random.randint(1000)]*177875
# jmp.run_jsl('jdt << End Data Update;')
(*) 농담입니다. 데이터는 손실되지 않습니다. 커피 한 잔 마시면서 JMP가 완료될 때까지 기다리세요.
Re: JMP에서의 Python: 데이터프레임 열에서 데이터테이블 열로의 모범 사례 및 계산 속도 영향
@호기 님이 쓰셨습니다:
... 두 번째 (**)
(**) TS - 00251136
@Dahlia_Watkins는 속도 문제가 발생하려면 코드를 두 번 실행해야 하는 경우가 있다는 것을 알아챘습니다.
타이밍에 문제가 있는 것 같습니다.
아마도: 코드를 처음 실행할 때 Python이 행별 데이터 업데이트를 마칠 때까지 플롯이 생성되지 않습니다.
편집하다:
사실, 플롯은 Python 데이터 업데이트를 느리게 만드는 대화형 요소로 꼭 필요한 것은 아닙니다.
대화형 요소가 없는 추가 예는 아래 게시물에서 확인할 수 있습니다.
Re: JMP에서의 Python: 데이터프레임 열에서 데이터테이블 열로의 모범 사례 및 계산 속도 영향주의: Jmp가 예상치 못한 일을 하는 장소 에 대한 주제를 추가했습니다.
Re: JMP에서의 Python: 데이터프레임 열에서 데이터테이블 열로의 모범 사례 및 계산 속도 영향원래 문제: "새 열이 있는 경우 데이터 액세스가 느림"
다음은 설명적인 예입니다.
import jmp
dt = jmp.DataTable('dt_new', 50000)
col = dt.new_column("newCol")
# --------- cut here to make it slow - why? -------------
dt[ 0 ] = [1]*50000
2단계로 나누면 JMP에서 50,000개 항목을 업데이트하는 데 몇 초가 걸립니다.
당혹스러운:
두 블록을 한 번에 실행하면 JMP에는 문제가 없습니다.
Re: JMP에서의 Python: 데이터프레임 열에서 데이터테이블 열로의 모범 사례 및 계산 속도 영향@폴_넬슨 의 게시물에 언급된 해결 방법 외에도 다음과 같은 추가 해결 방법이 있다고 생각했습니다.
- JSL을 사용하여 열/데이터 테이블을 만듭니다.
- JSL을 사용하여 열을 더미 값으로 채웁니다.
- JSL을 사용하여 데이터 테이블을 저장하고 닫았다가 다시 엽니다.
그 중 많은 것이 첫눈에 보기에 좋아 보이지만 사실은 오해의 소지가 있습니다.
속도가 빠른 이유는 동일한 값이 열에 다시 쓰여지고 JMP가 "데이터 업데이트 알림"을 트리거하지 않기 때문입니다.
예를 들어
jmp.globals['jdt'] = dt
jmp.run_jsl('''
nc = n cols(jdt);
Column(jdt,nc) << set each value(1)
''');
nc = dt.ncols
data = [1]*50000
dt[ nc - 1 ] =data
파이썬을 통한 동일한 기적:
# 1st: slow
nc = dt.ncols
dt[ nc - 1 ] = range(50000)
# fast ! (same values!)
dt[ nc - 1 ] = range(50000)
# new values: slow again
dt[ nc - 1 ] = [5]*50000
Re: JMP에서의 Python: 데이터프레임 열에서 데이터테이블 열로의 모범 사례 및 계산 속도 영향JMP에서 데이터가 업데이트되었다고 판단되면 알림을 받도록 트리거를 설정할 수 있습니다.
import jmp
dt = jmp.open(jmp.SAMPLE_DATA + "Big Class.jmp")
jmp.run_jsl('''
New Column( "trigger",
Formula(
If( Row() == 1,
Try( Caption( Char( ::i=::i+1 ) ), ::i = 1 )
);
:age;i
)
)
''')
dt[ 1 ] = range(40)
dt[ 1 ] = range(40) # no data update !
dt[ 1 ] = [2]*40
# for loop without begin/end data update -> finished before JMP notices the data update
jmp.run_jsl('''
for each row(:age = row());
wait(5);
''')
# for loop without begin/end data update - and some delay to give JMP the time to notice:
jmp.run_jsl('''
for each row(:age = 2*row();wait(0))
''')
따라서 원래 값과 새 값이 동일할 때는 "데이터 업데이트"가 발생하지 않습니다.
무한 루프를 방지하기 위해 구현된 건가요? 좋습니다!
흥미로운,
import jmp
dt = jmp.open(jmp.SAMPLE_DATA + "Wafer Stacked.jmp")
jmp.run_jsl('''
delete symbols(::i)
New Column( "trigger",
Formula(
If( Row() == 1,
Try( Caption( Char( ::i=::i+1 ) ), ::i = 1 )
);
:Y_Die;i
)
)
''')
nr = dt.nrows
dt[ 4 ] = range(nr)
1분 이상 걸립니다. - 2까지 세어보세요.
Re: JMP에서의 Python: 데이터프레임 열에서 데이터테이블 열로의 모범 사례 및 계산 속도 영향
@폴_넬슨 wrote:
...
Most likely we will want to do support this from Python. Probably using a with block to suspend the UI updates of the table when filling / updating large number of rows.
좋은 생각이네요!
Python이 "with" 블록 내에서 오류를 발생시키더라도 대화형 기능을 다시 켜도록 주의하세요.
대안으로:
대화형 기능이 비활성화된 경우 표시기를 데이터 그리드에 추가해 주십시오.
데이터 업데이트를 끝내지 않고 데이터 업데이트를 시작합니다 .
표시기: 이 데이터 테이블에 대한 상호 작용이 비활성화되었습니다.
Re: JMP에서의 Python: 데이터프레임 열에서 데이터테이블 열로의 모범 사례 및 계산 속도 영향이전 게시물의 결과 - 압축:
import jmp
# open data table and wait for the "Interactivity Manager" to get active
jmp.run_jsl('''
dt = new table("test", add rows(100000), new column ("col"));
Python send(dt);
wait(0) // disable the delay to make it fast
'''
);
nr=dt.nrows
# Python data update: slow!
dt[ 0 ] = range(nr)
# --- run step by step: -----
# same values: fast
dt[ 0 ] = range(nr)
#new values: slow
dt[ 0 ] = [1]*nr
Python을 통해 JSL 열을 업데이트하는 것은 매우 느립니다.
예외:
- 데이터 테이블을 생성/열고 난 직후(어떤 종류의 "상호 작용 관리자"가 활성화되기 전)에 쓰기 액세스
- 전혀 업데이트가 없습니다(값이 변경되지 않음)
@폴_넬슨 의 게시물에 언급된 해결 방법은 다음과 같습니다.
- 개인 데이터 테이블
- JSL 시작/종료 데이터 업데이트() 로 묶인 Python 데이터 업데이트

빠른 Python 데이터 접근 - JSL 지원만 있으면 가능 ; )
아마도 이 문제는 다음 ".x" 릴리스에서 해결될 만큼 심각한 것 같습니다...
Re: JMP에서의 Python: 데이터프레임 열에서 데이터테이블 열로의 모범 사례 및 계산 속도 영향두 번째 경우에는 visibility='Private'인 비공개 테이블이어야 합니다. 'Invisible' 테이블은 숨겨져 있음에도 불구하고 GUI를 유지하고 있으며, 셀을 편집할 때마다 데이터 테이블의 GUI가 업데이트되어 여전히 지연이 발생합니다.
Re: JMP에서의 Python: 데이터프레임 열에서 데이터테이블 열로의 모범 사례 및 계산 속도 영향네, 중요한 문제입니다. 저희는 실제로 해결책을 모색하고 있습니다. Python의 성능을 사용자가 Python에서 실행하고 싶어하면서도 백도어 마법 같은 방법을 사용하지 않고도 성능을 얻을 수 있도록 만들고 싶습니다.
JMP 18이나 JMP 19 EA 테스트에서 이 문제가 발견되지 않은 것이 놀랍습니다. jmp.DataTable 객체의 핵심은 JSL 데이터 테이블입니다. Python 객체는 기본 JMP DataTable에 대한 참조일 뿐이며, JMP Data Table의 내부 메서드를 호출하고 있습니다. 바로 이 때문에 run_jsl('dt << Begin Data Update')가 중요한 것입니다. jmp.run_jsl(''' code '''')를 사용한 이유는 아직 구현하지 않은 작업을 위해 Python에서 JSL을 호출하거나, 이 경우처럼 열 업데이트 성능에 대한 간과된 부분을 바로잡기 위한 것이었습니다.
Re: JMP에서의 Python: 데이터프레임 열에서 데이터테이블 열로의 모범 사례 및 계산 속도 영향문제가 해결되어서 기쁘네요.
왜 이전에는 감지되지 않았나요?
많은 사용자가 JMP로 데이터를 전송하기 전에 데이터 가져오기/데이터 큐레이션에 Python을 사용하는 것 같습니다. Python을 통해 데이터를 직접 건드리지 않는 것이죠. Python의 get(dt)[JSL] 또는 from_dataframe()[Python]을 사용하면 문제가 발생하지 않습니다.
주의: JMP 18에서 Python 통합 시작하기와 같은 열 단위 전송 방식입니다.
여기서는 데이터 테이블 크기에 따라 달라집니다. 테이블 크기가 충분히 작으면 "Interactivity Manager"가 활성화되기 전에 새 열이 추가됩니다.
우리 측에서 문제를 감지했을 때, 우리는 JMP19EA에 접근했고 from_dataframe()을 통해 테이블 생성 속도를 높일 수 있다는 사실을 알게 되어 기뻤습니다. 또한 훨씬 더 간단한 코드라는 이점도 있었습니다.
반면에: 이 문제는 JMPyFacade: Bridging JMP and Python for Seamless Engaging Analysis 에서처럼 Python을 사용하여 기존 JMP 데이터 테이블의 개별 열을 업데이트할 때 발생 합니다 . JSL 전문가로서 @jthi는 필요한 Private-Table-merge 데이터 기능을 추가했습니다. 별 생각 없이 해결한 셈이죠. 
Re: JMP에서의 Python: 데이터프레임 열에서 데이터테이블 열로의 모범 사례 및 계산 속도 영향오늘의 스크립터스 클럽에서 공유된 정보:
속도 문제
dt[ index ] = list_like_object
JMP 19.0.3에서 수정될 예정입니다 
제목: JMP에서 Python을 사용한 데이터프레임 열을 데이터테이블 열로 변환하는 최적의 방법과 계산 속도에 미치는 영향지금 바로 이용 가능:
