药品需要进行一系列检测,包括鉴别、含量测定和成分均匀性。虽然高效液相色谱法(HPLC)是常用的分析方法,但它耗时费力。因此,我公司已为多种产品注册了一种额外的拉曼光谱法。
作为这些方法许可的一部分,需要每年与参考方法进行比对。比对过程中,先用拉曼光谱法分析片剂或胶囊,然后再用高效液相色谱法(HPLC)分析相同的样品。两种测试结果的比对必须符合一系列验收标准。
此前,一名工作人员已完成结果分析,所有步骤和结果均记录在笔记本中。另一名工作人员在生成正式报告前会对分析结果进行核查。虽然之前曾讨论过计算自动化,但由于缺乏脚本编写经验,实施过程受到阻碍。
JMP17 中引入的 JMP Workflow Builder 功能使我们公司无需学习脚本编写即可实现分析自动化,从而节省时间并减少潜在错误。本次演示将展示生成工作流的步骤,并通过仪表板呈现结果。
大家好,我叫佐伊·贝特里奇,今天我将为大家介绍如何使用 JMP 工作流构建器。我们公司使用 JMP 工作流构建器是为了实现年度分析工作的自动化。
简单介绍一下我的背景。我在一家仿制药公司工作,我们生产各种片剂和胶囊,大约有150种不同的处方药。
对于不在制药公司工作的人来说,你们可能知道也可能不知道,我们生产一批药片后,显然需要进行一系列测试才能投放市场。我们必须进行一系列测试,以确认药片中的药物成分与宣传的一致,确保药片中药物含量正确,并且不含任何可能引起不良反应的杂质。
我们进行的主要测试之一是叫做原料药含量测定的测试,这项测试用于检查药物含量。我们发现,对于我们的大多数药物而言,其含量通常需要达到标示含量的95%至105%之间。
进行这项测试的传统方法之一是高效液相色谱法(HPLC),这是一种非常成熟的方法,被广泛应用于多个行业。它是一种湿化学技术,这意味着需要经过培训的分析人员来操作,而且显然,还需要一个配备相应设备、溶剂和其他所有必需品的实验室。
该方法的一个缺点是运行时间相当长,或者说,它可能需要很长时间才能完成。我们很多方法的运行时间都长达一整夜,我们需要很长时间才能得到结果。另一个缺点是,在测试样本时,该方法会破坏样本。如果我们得到的结果看起来不太对劲,就必须从同一批次中再取一个样本进行重新测试。显然,此时的样本已经与之前不同了。
现在,我们公司在一些授权产品中采用了一种特殊的检测方法,那就是透射拉曼光谱法。简单来说,这是一种基于激光的技术,我们用激光照射片剂或胶囊,然后获得末端的拉曼光谱。
拉曼光谱中会出现对应于药物的峰和对应于辅料的峰。通过采集不同药物和辅料含量的一系列校准光谱,我们可以建立一个模型,通过分析这些峰及其强度,以及它们与其他峰的对应关系,来计算胶囊或片剂中药物的含量。
这种方法的优点是操作极其简便。我们只需将药片或胶囊放入托盘(如图所示),然后将托盘放入仪器中。您只需在仪器中选择检测方法,按下按钮,仪器即可运行。几秒钟就能得到结果。我们最快的检测方法只需五秒钟即可扫描一片药片,而最慢的检测方法是扫描一粒胶囊,大约需要 40 秒。
该方法的另一个巨大优势是它的非破坏性。如果我们得到的结果看起来不太对劲,我们仍然有样本,所以我们可以再次运行完全相同的样本,并仔细检查结果。
然而,最大的缺点在于它需要多元建模才能实现。首先,你需要大量的校准光谱数据来构建模型。显然,你需要一位具备多元分析资质和经验的专家来创建和验证模型。
正如我之前提到的,我们的一些产品许可证中包含了拉曼光谱法。我们使用拉曼光谱法主要出于三个原因:一是用于鉴别测试,二是用于我之前提到的含量测定,三是用于检测含量均匀性。含量均匀性测试与含量测定类似,但操作步骤很简单,只需取10片或30片药片,检查其中药物含量是否一致即可。
当我们把这项技术添加到许可证中时,监管机构要求我们进行年度验证。具体来说,我们需要每年将拉曼光谱法与传统方法进行比较,目前所有情况下都是高效液相色谱法(HPLC),但也可能是滴定法或其他方法。我们需要至少每12个月进行一次这样的比较。这样做是为了确保这两种方法的结果没有出现偏差,并且拉曼光谱法仍然能够给出相应的结果。
今天我要谈谈一款产品以及我们如何为其构建工作流程。这是一款胶囊产品,有三种不同的浓度:100毫克混合浓度、300毫克混合浓度和400毫克混合浓度。
然后,我们每年都需要满足一系列既定标准。这实际上也是我们许可证的一部分。我们的做法是,采集20粒不同浓度的胶囊(总共60粒),并对每粒胶囊进行光谱分析。第一个标准是特异性。光谱必须通过我们的光谱鉴定检查。
为此,我们需要查看Q残差和霍特林积分。Q残差分析光谱,检查是否存在不应存在的峰。霍特林积分则分析光谱,检查所有峰的强度比例是否符合预期。
另一个评判标准是线性度。我们将这60个胶囊的新光谱数据添加到之前收集的所有光谱数据中,包括最初的验证数据以及每年重复实验的数据。我们主要检查高效液相色谱(HPLC)结果和拉曼光谱结果之间是否仍然存在良好的线性相关性。最后,我们考察准确度。我们检查拉曼光谱和HPLC结果之间的差异是否在允许的范围内。
我们还需要确保生成的拉曼光谱结果也必须在许可范围内。如果验证结果匹配,但实际使用的平板电脑超出许可范围,那就毫无意义。
传统流程是这样的:每年到了验证阶段,我们实验室都会安排人员采集60粒胶囊的光谱数据。由于这是一项非破坏性测试,他随后还会采集同一批胶囊的高效液相色谱(HPLC)分析结果。
这些数据经过审核和批准后,已送至我的办公室。之后,我进行了分析。我将表格合并,完成了所有 JMP 子集划分,并将所需内容整理成表格,并对照所有验收标准进行了检查。
现在,我们质检部门要求我记录在JMP软件中的每一步操作。我必须在笔记本上写下我如何合并数据、如何进行子集划分、得到了哪些结果等等。然后,我会把这份实验室工作交给质检团队的另一位分析人员,他们会检查并重复我做的所有步骤,确保我的操作正确有效,并且最终得到相同的结果。如果他们也得到了相同的结果,并且与我一致,我们会把所有结果整理成一份报告,提交给质检团队审批。
正如您所想,这是一个相当缓慢的过程,我们经常被要求完成一些工作,以便药品能够从生产线上放行。每年都是如此,重复性很高。我们想要的是更新流程。收集数据仍然是必要的,这一点不能改变。但我不想一遍又一遍地手动重复相同的步骤,而是希望找到一种方法,只需按一个按钮就能获取数据,然后生成所有我需要的结果。因为这个过程是自动化的,我们可以验证所有结果,这样就无需其他人进行复核,我们可以直接将其生成报告并发送给质量团队审批。
现在的问题是,虽然我可以查看脚本并大致了解其功能,但我没有任何脚本编写知识,无法自己编写脚本,公司里其他人也一样。这时,工作流构建器就派上用场了。
JMP 17 和 JMP Pro 17 中的工作流构建器简直太适合我们了。你看,这个功能直接来自网页。工作流构建器可以自动执行工作流程,这正是我们需要的。它还能共享工作流,我自己也能做到。它还能使用新数据重新运行一系列步骤,这样我每年都可以根据需要使用它。此外,它还能归档和记录分析结果。这正是我们想要的功能。
我们来打开工作流构建器。要打开工作流构建器,只需依次点击“文件”、“新建”,然后在底部就能看到这个工作流选项。或者,至少在 Windows 系统中,你也可以按下 Ctrl+Shift+K 组合键来打开它。
进入工作流程后,你会注意到有三个面板。工作流程步骤会显示在第一个面板中。步骤设置也在这里,包括脚本、每个步骤的名称以及你想要添加的任何注释。最底部是常见的 JMP 日志。
现在,您可以看到,所有这些步骤都显示为灰色。我的工作流程中没有任何步骤,但这里有一个很大的红色按钮。这基本上就是我们的录制按钮。当我按下这个按钮时,会出现一个小叉号。JMP 现在会开始录制我在 JMP 中执行的每一个步骤。我们来演示几个步骤。
首先,我们打开一些文件。首先,我打开我的基础表。这个表包含了之前所有验证过程中收集到的所有光谱数据。这里有1310个不同的光谱。如果我返回上一页……抱歉。好的。打开下一个文件。这是我的下一个数据集。我们发现,每年进行验证时,我们都会把编号加一。今年是第九份报告。我们打开这个数据集。
显然,我们首先需要做的就是将这两个数据集合并起来。如果我们只是简单地连接它们,将这个数据集添加到这个数据集中。我把它称为我的基础数据集。实际上,我需要的是公式,也就是我们在这里看到的这些。如果我能找到这个 REP09 数据集,那么现在我就完成了,我可以关闭这个数据集了。
如果我回到我的工作流程,你应该会看到它现在开始录制了。如果我分别点击每个步骤,你会看到这里有打开演示文稿的脚本,这里有打开数据集第九次重复的脚本,这里有将两个表连接在一起的脚本,以及我没有保存就关闭了这个 REP09。
我们继续。我们来看一些分析结果。正如我所说,我们首先要做的是频谱检查。为此,我们只需快速地用 X 对 Y 进行拟合,然后查看 Q 残差和霍特林系数。
我这里有我的图表。这是所有数据的图表。我只需要检查新光谱是否正常,所以我可以添加一个基于数据集的本地数据过滤器,然后只检查新光谱是否合格。为了方便我们的质量团队查看,我们按强度进行颜色编码。我们需要区分不同的强度。我们再添加一些坐标轴和参考线。
您可以看到,这就是我们Q残差的极限值。所有残差值都正好在极限值下方。如果我对霍特林残差做同样的处理,所有残差值也都在这个极限值下方。由此我们可以得出结论:本次重新分析的所有光谱都将通过我们的光谱检查。
我们的质量团队不仅喜欢数字,他们也喜欢原始数据。例如,我们可以做一些其他的事情,比如将数据制成表格,查看Q残差和霍特林残差的最大值。我们点击最大值并将其添加到表格中。按批次进行操作。我稍微更改一下小数位数。我创建了这个表格。这样,我们就得到了Q残差。同样,如果我只想查看今年的数据,我也可以添加一个本地数据筛选器。
好了,我们又找到问题所在了。我们先把这个关掉。关掉这个,回到我的工作流程。现在你会看到,这里还有“Y轴拟合X轴”的脚本。这里有各种颜色编码,还有我之前放进去的……我至少应该放进去的。限制条件。再次,数据制表。好了。抱歉,限制条件在这个里面。数据制表。
接下来,这里加入了步骤。你会看到……点击这些项目,旁边会出现这些箭头。点击这些箭头,它们就会移动。选择一个步骤,它会根据你的需要上下移动,从而调整工作流程。例如,如果我想在数据制表之前创建“Y轴拟合X轴”的步骤,我可以上下移动它。同样,如果我不想再执行任何步骤,我可以将其删除。
你还有一个“执行”按钮。点击它会执行我的整个工作流程,我们稍后会演示。还有一个“反向”按钮,你可以只执行某些步骤来向前或向后移动。
如果我继续下去,我其实只是再展示一些东西。比如,我想做一个汇总表,那就先做好,这样我就可以看了。我想取拉曼光谱和……的平均值。快速操作一下。我可以创建一个辅助表格。假设我想查看每个批次拉曼光谱和高效液相色谱(HPLC)结果的差异。我可以把这个表格叫做“残留值”。保留几位小数。添加一个简单的公式。我只需要把它转换成浓度百分比。
你应该能看到,我们这里有个公式。再说一遍,如果我们回到工作流构建器,所有这些步骤都在这里,包括添加这个数据表摘要。你可以在 JMP 中创建的步骤,以及我添加的新列和该列的公式,所有这些都已经写在脚本里了。
正如我刚才所说,这里有个开始/停止按钮。假设你正在构建工作流程,你想暂停一下,去做点别的事情,然后再回来继续,这很正常。但比如说,你暂停了工作流程,之后又想继续,却忘记按下录制键。别担心,这并非世界末日,你还有其他选择。回到我刚刚创建的汇总表。假设我想绘制这些残差的分布图。看看这些残差。
我已经准备好了,我的表格也准备好了。我可以随时保存脚本。这里有个选项可以将脚本保存到工作流程中。如果我点击这个选项并返回工作流程,你应该就能看到那个脚本了,即使我没有录制,我也成功地把它保存下来了。
这是在构建脚本。我不会全部完成,显然这需要一些时间。我现在要做的只是先把这些内容整理一下,暂时不保存。我先给你展示一下最终的脚本,用于验证。就是这样。这就是脚本。里面包含了所有我需要创建的数据操作、表格和公式,以及所有由此生成的报告。
您现在看到的只是几个选项。这行代码是灰色的,因为我禁用了这个步骤。这样做是为了演示方便,避免他们反复覆盖同一个表格并保存。通常情况下我会启用这个步骤。但如果我想重新启用,只需点击这里,选择“启用步骤”,即可。我现在只想暂时禁用它。
这里包含了所有步骤。如果我想做个备注,可以直接在这里写明它正在做什么。不过,我们先运行一下。点击“执行”按钮。这应该会执行我的工作流程。你会看到它完成了所有操作,并创建了所有表格数据,数据量相当大。
现在,我这里有几个小问题。你会注意到,尤其是在最初的几个步骤中,我们打开了基础表。这完全没问题。每年这个表的名称都一样。但是接下来我们打开了 REP09 数据集,这对于今年来说没问题。但明年,我们将使用 REP10,后年是 REP11、REP12,以此类推。
我们想要实现的功能是能够选择任何我们需要的文件。我们可以做到。回到我的幻灯片,这里有一种方法……我只需要稍微修改一下脚本,就能实现这个功能。我们要做的就是把文件名替换成“浏览 = 选择文件”选项,我会在下一张幻灯片中演示。另外需要注意的是,如果要选择的不是文件,而是一个文件夹,你还可以选择“选择目录”选项。例如,如果一个文件夹里有一组文件,而且文件夹名称每年都会更改,你可以选择不同的文件夹名称。
让我们更详细地看一下。左边是我的脚本目前的样子。这里是我们需要做的几个小改动。你会发现改动并不多,非常简单。首先,我们要打开 JMP 基表。目前我们打开的是这个特定的表,然后把这两个表连接起来,最后关闭这个表而不保存。
简单的改动是,我们希望在开头有这段代码时,执行“浏览 = 选择文件”的操作。然后,我们打开基础表。接着,我们打开浏览表。这实际上是将此处的代码行更改为“打开浏览”,这意味着我们可以选择表,然后我们所做的只是调用我们打开的表。我们只需将其保存为新的验证规则即可。
这意味着我可以进行下一步操作。我可以将基础表连接到新的验证表中。最后一步是关闭新的验证表而不保存。
说到这里,JMP 中还有一个非常实用的小技巧:如果你的工作流保存在与你正在查看的文件相同的目录下(就像我今天演示的情况一样),那么你就不需要完整的目录路径,只需使用表名即可。这对于避免链接失效非常有用。我不知道你们公司的情况是否和我一样,但我们公司有些人时不时会整理共享文件,移动文件位置,导致我的所有快捷方式都消失了。如果不需要指定完整的目录路径,即使再次发生这种情况,我的工作流仍然可以正常工作。
回到我的工作流构建器,我只需撤销所有这些操作,清理干净并关闭这个工作流。然后,如果我现在打开下一个工作流,这里就是我刚才提到的更改所在。我们看一下这里,我现在有了这个。我打开这个浏览 = 选择文件,然后将其另存为“新验证”。现在,当我连接它时,我连接了“新验证”,最后关闭“新验证”。
我们来运行一下这个工作流程。但愿这次它会提示我选择文件。我可以选择我的 REP099 数据集,然后它会继续执行后续步骤。我们的工作流程已经完成,这真是太棒了。现在,我遇到的唯一问题是,如果你快速看一下我的窗口,你会发现我生成了大量表格数据,看起来非常混乱。
我想要的是一种能够展示这些数据并使其更清晰易懂的方法。这就是仪表盘的用武之地。回到幻灯片。仪表盘,同样取自 JMP 网页,本质上是一种将所有报告可视化的方法。
再次强调,您无需任何脚本编写知识。这里有一个很棒的构建器和模板,我稍后会向您展示。您只需使用这个仪表板构建器即可。这是一种非常简单的方法。回到我的工作流程,创建仪表板的第一种方法是,您可以转到窗口菜单,然后选择“合并窗口”。
这个窗口会显示所有打开的窗口。假设这次我想添加一些表格数据,比如说变异性图表,假设我已经打开了一个表格。如果我点击“确定”,它应该会更新。抱歉,我弄丢了。我可能得赶紧再操作一次,因为我刚刚关掉了窗口。我找不到之前把它放在哪里了。好了。抱歉。因为它要调用两个表格,所以需要我进行分配。没问题。然后我们就能看到这个仪表盘了。
这里是我的表格,这里是我的变异性图,还有这些表格数据。再次强调,所有这些都是交互式的。如果我想筛选或更改某些内容,都可以做到。这很棒。如果你只有两三个不同的报告要放进去,这当然没问题,但我的情况是,我有很多不同的报告,所以仅仅使用组合窗口就太复杂了。我们先关闭这个窗口,然后自己创建一个仪表板。
如果你点击“文件”,选择“新建”,然后找到“仪表盘”选项,你会看到这个仪表盘模板。这里有一些现成的模板。比如,你可以使用四个报表模板,以及一个 2x2 的网格模板。如果你只有一个报表,但想添加筛选功能,也可以使用这个模板。不过,我这里想要一个空白模板,然后自己构建自定义仪表盘。
现在我们进入仪表盘构建器。你会看到侧边栏里有各种报告,包括我的表格数据和图表。底部还有一些其他选项,比如列切换和数据筛选器。如果你想添加数据表、图片或文本框,也可以在这里找到相应的选项。
我们该如何操作呢?让我们开始构建吧。首先,我要把我的光谱识别检查数据拖放到仪表盘里。现在,例如,如果我想检查线性度数据并输入它,我这里有一些选项。
如果我能把它放在下面,我们就把它添加到这个垂直列表中,这样它们就会堆叠在一起。我也可以把它添加到这里的幻灯片中,水平并排添加。或者,你还可以选择最后一个选项,即在 Tab 键后插入。我这里就打算这么做。这样我就有了一个用于光谱检查的 Tab 键。然后,如果我切换到下一个 Tab 键,就可以添加线性度检查了。
我们来看看效果如何。点击这个红色箭头,你会看到一些选项。你甚至可以在这里运行仪表盘,但预览模式非常实用。如果我运行预览模式,这里就是第一个标签页。同样,它非常友好且交互性强。点击它。我可以查看每个数据集,然后我在这里检查[听不清 00:25:15]之间的线性关系。你可以看到这种良好的线性关系。
我关闭了仪表盘。我们继续。正如我之前提到的,我们的质量团队喜欢同时拥有数字和图表。在这个标签页中,我想添加两种不同的内容。我可以添加一个容器。这样我就可以在这个框里添加其他内容。如果我再添加表格数据,它会再次提供水平放置的选项。同样,如果我返回预览模式,我会把它挂起来,然后稍微调整一下位置。希望您现在可以看到,我已经把表格数据和图表都放在这里了。
现在,你应该能看到,因为我之前已经设置好了,我为图表和表格数据分别添加了一个筛选器。但这有点麻烦,因为实际上我希望两者同时使用相同的筛选设置。我可以稍微简化一下吗?答案是肯定的。你可以把这些本地数据筛选器移出去。我们直接把它们删掉。如果我关闭这个仪表板,这时就可以用到数据筛选器了。我可以把它添加到水平列表中,然后返回预览模式。现在你可以看到,我可以快速地进行一些调整。表格和图表都显示出来了,但是没有启用任何筛选器。
如果我在这里添加一个筛选器,你会发现它会同时筛选这两个数据,这样使用起来就方便多了。需要注意的是,如果你有多个工作表,并且添加了筛选器,它会应用于该表格中所有对应的图表,即使它们位于不同的工作表中。如果你只在一个工作表中添加筛选器,然后切换到另一个图表,你会发现筛选后的数据已经生效。有时候,最好将本地数据筛选器绑定到特定的表格数据图表上。
同样,你可以在这里做一些小操作。即使是在预览模式下,你也可以修改一些细节。你可以进行 ID 检查、命名等等。现在我只想把它关掉。接下来我要打开我准备好的脚本,它应该包含了我需要的整个工作流程……哦,抱歉,是文件夹控制面板。好了。
这是我最终创建的仪表盘。这里有光谱检查,其中已经加入了滤波器。我们正在检查线性度,我可以在这里进行滤波,查看残差、准确度,并检查拉曼光谱是否在规格范围内。
需要注意的是,在使用工作流构建器时,即使您启用了录制按钮,也不会自动录制仪表板的创建过程。您需要手动添加。这没关系。您只需保存仪表板的脚本即可。依次点击“仪表板”,然后选择“将脚本保存到脚本窗口”(我已经创建好了,所以这里不再赘述)。在脚本窗口中,您可以复制所有内容,然后转到仪表板。在红色按钮下方,点击“添加自定义操作”,然后粘贴您的脚本,并根据需要命名脚本。
如果您想发表评论,需要注意一点:由于此内容来自仪表盘构建器,因此底部仍处于编辑模式。但显然,您希望工作流程能够运行。您只需将底部的“编辑”更改为“运行”即可。
现在我们的仪表盘已经导入进去了。这意味着我们不再需要这些报告了,因为它们都包含在仪表盘里了。我这就关闭这个窗口,剩下的就到此为止。关闭这个窗口。
如果我打开最终的演示工作流程,你会看到一个更清晰的界面。这里包含了所有我需要在 JMP 中执行的步骤。最后,这个仪表板的脚本就集成在这个按钮里。如果我播放这段脚本,它应该会提示我打开文件。我打开这个 REP09 数据集。然后执行各个步骤。这次,它只处理表格,但不会打开每个图表,而是让我正确地分配表格。
我已经……实在没法再折腾了。我的最终报告已经整理好了。现在,如果我想的话,回到 Spectral IDCheck,复制数据,我仍然可以,然后把它放到报告里,我仍然可以编辑、复制图表,之后我仍然可以这样做。
这是第四份报告。我们反过来运行一下。现在我运行的是第二年的报告。我使用的是第十份报告的数据集。它应该会再次执行所有相同的步骤。它会要求我分配表。你可以看到,从这里,我已经包含了上次运行的 REP09 数据,但现在它也添加了 REP10 数据。我需要的一切都已就绪,而且操作起来简单快捷得多。
最后,我们再快速总结一下。JMP 工作流构建器非常简单,它能让你轻松地编写所有步骤的脚本,而无需了解脚本语言。顶部是控制面板,可以开始和停止录制,这非常重要。我们可以执行或重置此工作流,或者(我今天没有更改设置)一次执行一个步骤,或者一次回滚一个步骤。
您可以调整步骤的顺序,也可以删除不需要的步骤。右键单击任何单个步骤,即可启用或保存步骤。或者,我没有演示,您也可以只运行一个步骤。在构建过程中,如果您只想检查某个步骤是否有效,可以再次运行该步骤。
在您的“步骤设置”窗口中,您可以看到您的姓名(您可以将其更改为您想要的任何名称)、添加任何注释,然后您需要的所有脚本都在那里,如果需要,还可以对其进行编辑。
接下来您会看到 JMP 仪表盘。在仪表盘构建器中,您可以找到所有报告,还可以添加列和数据筛选器。如果您想将数据表添加到仪表盘中,也可以这样做。需要注意的是,我之前没有提到,仪表盘中显示的将是顶部框中列出的表格,您可以通过下拉菜单选择所需的表格。
添加内容时,您可以水平添加,也可以垂直添加,还可以将其放在选项卡之后并创建选项卡框。然后,在您看到的红色三角形下方,就是您当前用来构建仪表盘的仪表盘模式,以及一个非常有用的预览模式。您可以运行仪表盘,更重要的是,就工作流程而言,您可以保存脚本并将其添加到工作流程中。以上就是全部内容,非常感谢。