在上一篇文章( 第一部分)中,我们介绍了 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 用户社区