JMP 是Pythonic! JMP 18 中增强的 Python 集成JMP 18 有一种与 Python 集成的新方法。 JMP 18 安装附带一个独立的 Python 环境,旨在与 JMP 一起使用。此外,JMP 现在还具有本机 Python 编辑器和特定于 JMP 的 Python 包。此 JMP Python 环境增强了与 JMP 的连接性和交互性,这意味着将 Python 与 JMP 结合使用从未如此简单。
在本系列博客文章中,我向您介绍 Python 与 JMP 集成的新功能。本文将介绍 JMP 中新的 Python 脚本编辑器。在接下来的文章中,我将介绍集成的其他新功能以及包管理。
JMP Python 脚本编辑器
在以前版本的 JMP 中,执行 Python 代码的唯一方法是连接到外部安装的 Python 环境,然后使用 JMP 脚本语言 (JSL) 包装器函数将 Python 代码提交到该环境。现在您可以直接在 JMP 中编辑并提交 Python 脚本!只需在 JMP 中打开 Python 脚本或从“文件”菜单(文件 > 新建 > Python 脚本)创建一个新脚本即可。

新的 Python 脚本编辑器具有语法突出显示功能,允许您以更自然的方式使用 Python 进行编码。单击“运行脚本”按钮将执行 Python 代码,并且在 Python 中记录的消息会在 JMP 日志中列出。
jmp和jmputils Python 包
与新的 JMP Python 环境一起出现的是两个新的“JMP 感知”Python 包:jmp 和 jmputils。
使用 jmp 包您可以:
- 使用 jmp.run_jsl('''jsl script''') 从 Python 运行 JSL。
- 打开、关闭和保存数据表。
- 获取有关 JMP 中打开的表的信息。
- 创建 JMP 数据表、添加/删除/修改 JMP 数据表列以及添加/删除 JMP 数据表行。
- 使用数据表上的从零开始的索引数组运算符,直接在内存中按列或单元格访问 JMP 数据表中的数据。此索引还支持列索引和行索引上的 Python 切片运算符。
- 使用 JMP 数据表和 JMP 数据表列作为 Python 迭代的序列。
使用 jmputils 包您可以:
- 使用 jmputils.create_jmp(dir_path) 在指定目录中创建命令行 JMP pip (jpip) 脚本。然后可以使用该脚本在 JMP Python 环境中安装软件包。请注意,对于某些 python 包,有时需要从命令行安装。
- 使用 jmputils.jpip( ) 函数在 JMP Python 环境中安装 python 软件包。
所有这些函数在帮助文档 [LINK] 中都有更详细的描述,JMP 脚本索引中还有一个新的 Python 类别,列出了所有这些包和函数。

Python JSL 函数
与以前版本的 JMP 一样,您可以使用 Python Execute( )、Python Submit( ) 和 Python Submit File( ) 函数从 JSL 运行 Python。您还可以使用 Python Send( ) 和 Python Get( ) 函数在 JMP 和 Python 之间传输数据。
Python JSL 函数的更改包括:
- Python Connect() 仍然支持在 JMP 中创建本地 Python 的可编写脚本的对象。
- Python Send(data_table) 现在在 Python 中创建一个 jmp.Datatable 对象,该对象是对可从 Python 内存中访问的 JMP 数据表的实时引用。以前,通过将表作为 CSV 文件导出到磁盘并让 pandas 读取 CSV 文件,将 data_table 的副本创建为 pandas.DataFrame,这对于大型数据表来说可能非常慢,并且可能会因二进制文件而导致数据降级->文本->二进制转换。
- Python Get(对象名称):
- 如果 object_name 是引用 Python 中打开的 JMP 数据表的变量名称,则它将返回对 Python 变量名称引用的 JMP 数据表的 JSL 可编写脚本的对象引用。
- 如果 object_name 是 Python pandas 数据框,它会将 pandas 数据框写入 CSV 文件,然后将该文件作为新的 JMP 数据表打开。不过,考虑到从 Python 创建和连接内存中 JMP 数据表的新功能,不建议使用这种方法。
不再需要的已弃用的 JSL Python 函数:
- Python 获取图形( )
- Python 控制( )
- Python 初始化()
- Python 已连接 ( )
- Python 术语 ( )
新的 JSL Python 函数包括:
- Python Install Packages( ) 允许您在 JMP Python 环境中安装 python 软件包。
- Python Create JPIP( ) 创建一个包装 JMP jpip 的命令行脚本,可用于从操作系统中的命令行安装 python 软件包。该脚本是写给通过目录选择器对话框选择的导演的。
自动化和脚本编写回复:JMP 是 Pythonic!JMP 18 中增强了 Python 集成工作流生成器是否有计划接受 Python 作为 JSL 代码的替代品?
回复:JMP 是 Pythonic!JMP 18 中增强了 Python 集成在本帖中提供两个“JMP 感知 Python 包”的文档链接将会很有帮助。
谢谢!
埃里克
回复:JMP 是 Pythonic!JMP 18 中增强了 Python 集成哦,我看到文章中有一个指向此类文档的链接的占位符,只需将其替换为实际链接即可。
回复:JMP 是 Pythonic!JMP 18 中增强了 Python 集成如果我不能使用自己的 Python 解释器,有没有解决方案可以给代码一个计划任务,定期执行该 Python 代码来处理数据并自动生成图表。
回复:JMP 是 Pythonic!JMP 18 中增强了 Python 集成不。
这太麻烦了。对于一些用户来说,它只是工作正常,但太多客户在让它工作时遇到了麻烦。同样重要的是,在 JMP 中运行的 Python 脚本无法保证它能在其他用户的机器上正常运行。如果有任何自定义 Python 安装位置,很可能不会运行。作为用户,请将 JMP 提供的 Python 视为您自己的 JMP 特定的 Python 虚拟环境。
我们付出了巨大努力,确保 JMP Python 与您系统上的其他 Python 安装隔离。没有什么可以阻止您使用现有管道,您可以将包安装到 JMP 环境中。您可能能够将该工作流程引入 JMP。无论如何,JMP 18 的附加功能应该可以让您更轻松地在 JMP 和外部 Python 管道之间导入/导出数据(如果需要)。
我们相信,在 JMP 首次启动时,无需配置即可使用经过测试和验证的 Python 安装,这将带来更好的客户体验。了解 Python 版本和位置让我们可以专注于提供特性和功能,而不是因为客户 Python 安装不可预测而努力解决问题。稳定性和嵌入式 Python 使我们能够提供更深入的集成。从 Python 在内存中创建、修改和访问 JMP 数据表的新功能就是这样一项功能。
我确实认识到这确实会导致从 JMP 14 到 17 的过渡。JMP 18 是功能的根本转变。一些初始设计决策经不起时间的考验。我试图尽量减少任何不兼容性,但有些更改是必要的。在需要更改的地方,我们在 18 中进行了更改,以确保 JMP 18 为未来的发展奠定了稳定的基础。
回复:JMP 是 Pythonic!JMP 18 中增强了 Python 集成不,近期不会。但这将是一个很好的新功能请求。
可以做的事情有很多。挑战在于,首先要关注那些能给每个人带来最大利益的事情。目前的主要重点是基础问题,尤其是 Python 和 JSL 之间的数据访问和互操作性。
要使数据表访问能够从 Python 充分发挥作用,还有很多工作要做,例如设置表达式列、行状态列、列格式等...确保 JSL 和 Python 之间的数据编组包含尽可能多的 JMP 数据类型。
正如任何大规模整改一样,也会出现一些错误和小疏忽。这些问题也需要解决。虽然使用 Python 代码的 JMP 插件可以正常工作,但插件构建器尚不了解 Python 文件,因此您必须手动打包 JMP 插件文件 (zip 存档)。此外,虽然项目中的 Python 文件可以正常运行,但它尚不知道如何查找项目文件中还包含的其他文件,例如数据表、其他数据文件或其他 Python 脚本。如果您遇到其他应该可以正常工作的限制,请将其报告给技术支持。新的酷炫功能可以提高 JMP 的工作能力,请作为功能请求提交。
回复:JMP 是 Pythonic!JMP 18 中增强了 Python 集成你好@Paul_Nelson ,
我提交了在工作流构建器中提供 Python 支持的愿望。
双赢:
- JSL 和 Python 代码的无缝对接
- 对于已经使用 Workflow Builder 的用户来说,这是一个很好的增强。
工作流生成器 + Python
回复:JMP 是 Pythonic!JMP 18 中增强了 Python 集成我是 JMP 新手,这可能是一个菜鸟问题。我仍在浏览博客。如何才能了解有关在 JMP 中使用 Python 脚本的更多信息?我可以编写 Python 代码吗?有没有博客可以参考?谢谢
回复:JMP 是 Pythonic!JMP 18 中增强了 Python 集成你好@zetaVagabond1 ,
以下是我最喜欢的一些学习如何在 JMP 中使用 Python 脚本的资源:
JMP 18 中的 Python 集成入门
使用 JMP 提升你的 Python 水平
学术网络研讨会:JMP 与 Python 的集成
@Paul_Nelson也在JMPer 电缆博客上发表了几篇博文。
回复:JMP 是 Pythonic!JMP 18 中增强了 Python 集成请查看脚本索引,其中有功能文档和示例。使用 JSL 工作时,有许多函数,例如 value = Python Get( py_var ); Python Send( jsl_var); Python Submit( "python code");
从 Python 方面来看,脚本索引中有一个完整的“Python”顶级类别,其中详细介绍了跳转导入包和工具类包的用法。在跳转包中,您将使用 Python 接口访问 JMP 功能,包括从 Python 创建、读取和写入数据表,以及从 Python 脚本运行 JSL 的功能。jmp.run_jsl(' JSL code ') 。jmputils包含 jmputils.jpip( ) 函数,它是 Python pip() 的包装器,可确保安装的包最终进入隔离的私有环境,以实现 JMP 的 Python 集成。
回复:JMP 很 Pythonic!JMP 18 增强了 Python 集成简单说明一下,JMP v18 中我最喜欢的功能之一就是 Python 集成。我们有自己的 Python 包来执行数据转换和其他功能,而 JMP 可以轻松导入这些函数,让我能够从现有数据创建新的列数据,并将其直接推送回 JMP。就在前几天,我需要对 JMP 数据表中的一些数据进行特定的坐标转换,使用 JMP 的 Python 功能,我只需几分钟就能创建新的列。
向 Paul 等人致敬,他们在 Python 兼容性方面迈出了如此清晰/令人印象深刻的第一步!