在上一篇文章( 第一部分)中,我們介紹了 JMP 內建的 Python 整合功能,該功能可讓您在 JMP 中編寫 Python 程式碼。這帶來了優勢,可以互補彼此的功能,例如「使用 Python 擴展分析方法的範圍,並使用 JMP 探索和視覺化結果」。
這次,我們將探討 JMP 的專有語言 JSL(JMP 腳本語言)與 Python 之間的關係。
JMP 的 Python 整合可讓您從 Python 程式碼呼叫 JSL,反之亦然。換句話說,您可以用 Python 或 JSL 編寫相同的流程。
P0.png
在本節中,我們將以上一節中的範例 1(從世界銀行取得資料)為例,對這兩種寫作方法進行對比,並闡述每種方法的特點以及如何適當地使用它們。
從 Python 環境(使用基於 Python 的方法編寫)執行 JSL 腳本
在前一個範例中,我們展示如何使用 Python 程式碼從世界銀行提取經濟指標,並將其儲存為 JMP 資料表。分析人員隨後可以透過從 JMP 選單中選擇氣泡圖和其他選項來視覺化和分析提取的數據。
在這種情況下,您可能會想知道是否有可能不僅編寫資料提取程式碼,而且還會編寫 JMP 分析報告的建立程式碼。
我將以先前創建氣泡圖報告的範例來說明這一點。
下圖顯示了氣泡圖報告(輸出),其中“軌跡線”>“全部”和“標籤”選項已透過左上角的紅色三角形按鈕選取。此選項會顯示每個氣泡的國家名稱,並在逐年趨勢動畫顯示時,以線條顯示氣泡的移動軌跡。
如果選擇此報表的 [儲存腳本] > [前往腳本視窗],則會開啟 JSL 腳本窗口,您可以在其中查看為此報表編寫列規範和選項的腳本。
P1.png
這段腳本(JSL)可以與 Python 程式碼一起編寫在 Python 腳本編輯器中,直接執行。下圖展示了先前提到的 Python 腳本(Example1-1_WorldBank.py)以及新增了 JSL 執行程式碼後的版本(Example1-2_WorldBank.py)。
jmpパッケージの run_jsl() の中にJSLを記述すると、Python環境の中でJSLスクリプトを実行することができます。
當您使用三個單引號來執行 `run_jsl (''' ... ''')` 時,您在它們之間寫入的所有內容(包括換行符號)都將被視為字串。。
P2.png
上圖中紅色部分是執行新增的JSL程式碼。讓我簡單解釋一下JSL部分。
最初の Current Data Table() は、現在アクティブになっているデータテーブルを返すコマンドです。この例では、直前に世界銀行の経済指標をJMPのデータテーブルとして取り込んでいるので、そのテーブルを dtという変数に格納しています。また、Set Name() で、データテーブル名を「World Bank Data」に変更しています。
dt = Current Data Table();
dt << Set Name( "World Bank Data" );
後續指令會變更資料表的顯示格式(Format)。這只是 JSL 語法的一個範例,後續處理即使沒有此命令也能正常運作。
最後一部分是氣泡圖繪製部分。在這裡,我們需要指定要分配給當前 `dt` 變數(之前已指定)的列,例如 X 軸、Y 軸、氣泡大小等,以及在繪製氣泡圖時要使用的選項。先前使用 [儲存腳本] > [前往腳本視窗] 儲存的 JSL 程式碼可以直接使用,但以下是一個簡化版本,僅包含必要的命令。</CODE></FONT></P>
<PRE><CODE class=" language-jsl">dt << Bubble Plot(
X( :GDP_per_capita ),
Y( :Life_expectancy ),
Sizes( :Population ),
Time( :Year ),
Coloring( :Country ),
ID( :Country ),
Label( "All" ),
Trail Lines( "All" ),
);
運行此程式碼將允許您一次載入世界銀行的資料並顯示氣泡圖報告。
在 JSL 環境中與 Python 互動的功能(從 JSL 開始編寫程式碼)
到目前為止,我們已經證明可以從 Python 環境執行 JSL,但反過來,也可以從 JSL 環境執行 Python 程式碼。
以下是與之前相同的程式碼(Example1-2_WorldBank.py),已重寫為 JSL 程式碼(Example1-2_WorldBank.jsl)。
JSLの Python Submit() 関数を使うと、引数として渡した文字列の中に書かれたPythonコードを実行できます。今回は、先ほどのPythonスクリプトのうちPythonのコード部分を、Python Submit() の中に入れただけです。
你傳遞給Python 的 Submit() 函數的字串是「\[ 和將文字用 `]\"` 括起來,裡面的任何內容都可以被視為文字。
P3.png
如果選擇 [編輯] > [執行腳本] 來執行此 JSL 腳本,您將獲得與 Python 腳本相同的輸出。
我該採用哪一種方法:編寫以 Python (.py) 開頭的程式碼,還是寫以 JSL (.jsl) 開頭的程式碼?
選擇取決於處理的主要重點是哪種方法。
如果主要分析涉及 Python 庫,請使用 .py 檔案。如果需要建立對話方塊來選擇列或建立複雜的 JMP 報表,請使用 .jsl 檔案。
有些情況下,編寫以 Python (.py) 開頭的程式碼會比較合適。
- 此分析將主要利用 Python 函式庫,例如 scikit-learn。
- 本文面向熟悉Python程式碼的人員。
什麼時候最好使用 JSL (.jsl) 開頭的程式碼?
- JMP 的運作將是整個流程的核心。
- 分析完成後,自動顯示和自訂 JMP 報告。
- 新增列選擇和參數輸入對話框,使其成為功能更全面的工具。
綜上所述
本文探討了JMP的Python整合功能中Python與JSL的關係。要點如下:
- Python環境からは、jmpパッケージの
<EM>run_jsl()</EM> を使ってJSLを実行できる(Pythonを起点とした書き方)
- JSL環境からは、
Python Submit() を使ってPythonコードを実行できる(JSLを起点とした書き方)
- 無論從哪個開始,你都可以獲得幾乎相同的結果;選擇取決於主要處理是在 Python 端完成還是在 JMP 端完成。
在下一部分( 第 3 部分)中,我們將展示如何透過使用 JSL 新增列選擇和參數輸入對話框,將這些固定的腳本轉換為任何人都可以重複使用的多功能工具。
作者:Naohiro Masukawa(JMP 日本)
Naohiro Masukawa - JMP 使用者社區