JMP 的最新版本在 JMP 18 中引入的 Python 整合支援的基礎上,重點關注工作流程的一個基本部分:資料存取。透過擴展資料表操作和 Python-JSL 互通性,資料存取變得簡單便捷。
喜歡影片?按此觀看。
數據表操作
jmp.from_dataframe() 函數提供了一種將外部資料框轉換為 JMP 資料表的有效方法。資料框協定提供了在記憶體中轉換資料框的機制。所有支援資料框交換協定的資料框物件都可以在記憶體中轉換資料框。值得注意的例子包括 pandas、polars 和 ibis。
下面的範例展示了將 pandas 資料框轉換為 JMP 資料表。

同樣,將 JMP 資料表轉換為其他支援的資料框庫類型也同樣容易。例如,從 JMP 轉換為 Pandas:

在 JMP 18 中,jmp.DataTable 僅完全支援數字列和字元列。現在,Python 支援所有 JMP 列資料類型。新增了對表達式和行狀態的支援。
jmp.DataTable 物件新增了 row_states 屬性,允許透過 Python 設定表格的行狀態。它簡化了將行狀態集複製到列或從列設定表行狀態的功能。

現在可以使用 col.format 和字串或元組存取表的列格式,具體取決於用例。 JMP 19 可以正確地在 JMP 的日期時間表示和 Python 的日期時間表示之間進行編組:資料表中的 JMP 日期,以及來自 Python 程式碼的 Python 日期時間物件。

類似地,Python Get()/Python Send() 現在支援在 Python 和 JSL 之間無縫傳輸日期時間值。
除了能夠格式化列之外,Columns 還可以使用帶有 jmp.Expressions 的 col.formula 添加公式。

JMP 19 也允許將 jmp.Images 設定為表達式列值。
可以使用 Python 類別下的腳本索引找到其他未反白的資料表操作。
Python-JSL 互通性
許多工作流程仍然需要 JSL 支援才能在 JMP 中執行特定任務。為了增強跨語言工作流程,我們新增了從 Python 新增、讀取和修改 JSL 變數的支援。目前,此功能僅透過 Global 和 Here 命名空間支援。以下範例展示了 Python 如何從 Python 設定 JSL 變數“e”,然後使用 JSL 設定 here::pi 變數並列印從 Python 設定的全域變數 ::e 變量,最後從 Python 列印從 JSL 設定的 here::pi 變數。

R 集成
JMP 19 引入了透過 Python 使用 rpy2 對 R 的初始支援。 JMP 提供了一個新模組傑姆佩克斯來支援擴充。 R 是 jmpex 目前支援的唯一擴充。此支援包含一個類似 JSL R API 的 Python API。 jmpex 套件是 JMP 和 rpy2 之間的介面層,而 rpy2 又依賴 R。使用者必須已在系統中安裝 R 版本,並且必須將 R_HOME 環境變數設定為 R 的位置。這些必須在安裝 jmpex 之前或由於 jmpex 套件要求而首次呼叫 R Init() 之前存在。
透過在內部利用 jmpex 套件,JMP 19 恢復了對 R 的 JSL 支援。
下面的範例說明了 jmpex 提供的 R 的新 Python API。

一般變更
JMP 18 中的 Python 3.11 已遷移至 JMP 19 中的 Python 3.13,這將為 JMP 19 的整個生命週期提供安全性更新。 JMP 19 也提供了透過 jmp.reset() 重置共享 Python 環境的便捷方法。 jmputils 也得到了改進:
- jmputils.__version__
- jmputils.is_installed('包')
- jmputils.packages()
- jmputils.package_version('包')
為了更好地支援腳本化安裝包,jmputils.jpip() 現在會傳回 Python subprocess.CompletedProcess 物件。有關 CompletedProcess 物件的信息,請參閱 Python 文件。
棄用
- Python 初始化()
- Python Term()
- Python 控制()已刪除。
- Python 取得圖形() 已刪除。
- R 項()
- R 取得圖形()已棄用,沒有任何效果。
- R 控制(回顯(布林值))參數異步(),和中斷( )
下一步是什麼?
JMP 18 致力於建立一個全新的基礎,以支援 JMP 內部原生的 Python 工作流程。這個基礎首先解決了 JMP 與 Python 整合中最棘手的問題。
JMP 19 在此基礎上繼續發展,專注於改進功能,並提供了重要的附加資料表支援。我們希望提供與 JSL 相同的 Python 資料表處理功能。現在 Python 支援所有列型別。列格式和行狀態可透過 Python 腳本存取和修改。
完成列類型支援後,可攜式資料框協定 (PDF) 的支援也得以實現。 PDF(包括 Pandas 和 jmp.DataTable 物件)之間的輕鬆轉換已恢復,從而保留了記憶體中的工作,而無需借助檔案系統中的 CSV 副本。
此外,我們專注於提升了生產力,優化了物件的行為,使其行為符合 Python 程式設計師的預期。最後,新版本解決了 JMP 18 中遺漏的一些問題,以及發布前開發時間不足的問題。
Python 整合的未來前景光明。在 JMP 內部,我們正在基於自身的 Python 功能進行建置:恢復 SAS 連線、復原 JSL R 支援、為 R 提供新的 Python API,以及基於 Python 整合建置的資料連接器。
展望未來總是充滿推測,但我們正在研究一些可能納入未來版本的內容:
- 繼續改進腳本編輯器支援。
- JMP 支援 Python 虛擬環境。
- 對包裹處理支援的其他改進包括:
- 連接到公司或內部儲存庫的配置選項。
- 網站管理員建立經過驗證和鎖定的網站包的簡化方法。
- 支援從 Python 提出對話框和窗口,允許從 Python 建立圖形和報告。
我們非常感謝您的建議,因為我們希望專注於最能改善您的工作流程的領域。
部落格由@Paul_Nelson共同撰寫。
這太棒了,JMP 和 Python 簡直是天作之合,我們在 JMP v18 中已經廣泛使用了它。從使用者的角度來看,它的實現非常簡潔,我幾乎可以立即上手。 JMP v19 的更新看起來非常棒,尤其是行狀態、公式和日期/時間處理。
一些評論/建議:
- 暫停。在 JMP(v18+)中執行 Python 腳本時,如果腳本包含類似「while True: pass」的無限循環,則整個 JMP 會話將無回應,必須強制退出。如果 JMP 提供一種無需終止整個應用程式即可中斷或暫停正在運行的 Python 腳本的方法(例如停止按鈕或逾時機制),那將非常有幫助。
- 嵌入。如果 JMP 允許將 Python 腳本嵌入到資料表中,那將會很有幫助(除非這已經可以實現?)。
- 取得用戶輸入。如果 Python 可以請求 JMP 發出模態對話方塊來取得使用者輸入,那將會很有幫助。
顯然,基於 Python 的列公式也會令人難以置信,但我認為這是一個艱鉅的任務。
向您和您的團隊致敬,幹得好! !
關於
1. 停止。目前已經有一些中止進程的功能。這取決於在熱循環中放置一個jmp.run_jsl('Wait(0);') 。透過定期將控制權交還給 JMP,常規的 ESC 機制可以取消腳本。
2. 我們認為,除了將 JSL 與 Python 呼叫包裝在一起的 JSL 之外,目前還不可能實現。
3. 在我們看來,您可以透過 jmp.run_jsl() 呼叫 JSL 對話方塊程式碼。 JMP 18 範例之一,對目錄進行 md5 雜湊處理並建立 SQLite 資料表,正是這樣做的,它從 Python 腳本中呼叫 jsl 來產生目錄選擇器對話框,以將目錄路徑提供給 Python 腳本。