主持人: @martindemel和@jthi
您可能还想观看Paul Nelson 在 West Coast Scripter's Club 上关于JMP 18 中 Python 集成的会议录音
对我的例子的一些评论
我所做的HDBSCAN 演示确实需要 JMP Pro,因为使用了 JMP 的多元嵌入平台。
橙色部分代表 JMP,蓝色部分代表 Python

我主要是从 JMP 中的 Python 集成开始,所以我的 Python 代码肯定不是最干净的,但对于一个简单的示例来说,它应该是好的。
我使用 Python Send() 将变量发送到 Python 端
Python Send(dt);<BR />Python Send(cluster_cols);<BR />Python Send(clustersize);<BR />Python Send(samples);<BR />Python Send(epsilon);
然后使用 Python Submit() 运行下面的代码
import hdbscan
import jmp
import numpy as np
import pandas as pd
df = pd.DataFrame()
for colname in cluster_cols:
df[colname] = np.array(dt[colname])
clusterer = hdbscan.HDBSCAN(min_cluster_size=int(clustersize), min_samples=int(samples), cluster_selection_epsilon=epsilon)
cluster_labels = clusterer.fit_predict(df)
df['Clusters'] = cluster_labels
col = dt.new_column("CLUSTERS", jmp.DataType.Numeric, jmp.ModelingType.Nominal)
dt[col.name] = list(df.iloc[:,2])
new_col = col.name
del df
该示例首先运行降维(tsne 或 umap),hdbscan 创建两列,显示图形,设置表格脚本以重新创建绘图,对列进行分组,并将 HDBSCAN 参数设置为 CLUSTERS 注意列属性

由于 Python Get Graphics() 已被弃用,您必须找出其他方法将图像从 Python 传输到 JMP。JMP的示例展示了如何通过首先保存图像然后使用 JMP 的 Open() 将图像加载到 JMP 来实现这一点。我确实演示了如何使用 python 模块 io 和 base64 将图像加载到 JMP
Names Default To Here(1);
Python Submit("\[
import base64
import io
import matplotlib.pyplot as plt
plt.clf()
plt.plot([1, 2, 3, 4])
plt.ylabel('some numbers')
plt.draw()
my_iobytes = io.BytesIO()
plt.savefig(my_iobytes, format='png', bbox_inches='tight')
my_iobytes.seek(0)
base64data = base64.b64encode(my_iobytes.read()).decode()
]\");
img = Open(Char To Blob(Python Get(base64data), "base64"), "png");
nw = New Window("test", img);
最后,我想指出,有很多方法可以执行 pandas 数据框和 JMP 数据表之间的转换。例如,您可以使用 .csv 文件进行“直接”转换,使用 list(df.iloc[:,2]) 或 df[col].values.tolist()。所有这些都有示例,但我还没有熟悉不同的方法,因此无法就您应该使用哪种方法提出建议。