| 扬声器 |
抄本 |
| 米娅·斯蒂芬斯 |
欢迎参加 JMP 探索峰会。我是 Mia Stephens,JMP 产品经理。今天,我们一起分享的是系统工程师 Jordan Hiller 的精彩演讲。今天,我们将探讨数据管理工作流程的自动化。 |
| |
这是摘要,仅供参考;我不会谈论它。 |
| |
我们将把这次演讲分为两部分。首先,我将讨论分析工作流程 |
| |
并讨论数据创建,也就是我们所说的数据管理。我们将了解如何识别数据中潜在的数据质量问题。 |
| |
然后我将把话题交给乔丹,乔丹将谈论可重复性的必要性。 |
| |
他将与我们分享数据管理的备忘单,并展示如何在 JMP 中管理您的数据。 |
| |
动作记录器和增强日志。 |
| |
那么让我们来讨论一下分析工作流程。 |
| |
一切都始于我们试图解决的一些业务问题。 |
| |
当然,我们需要编译数据,您可以从多个不同的来源编译数据,并将数据带入 JMP。 |
| |
最后,我们需要能够分享成果,与他人交流我们的发现。有时这可能是一个一次性的项目, |
| |
但我们经常会有一些需要重复的分析。所以这次演讲的核心问题是:你能轻松地重现你的结果吗? |
| |
其他人能复现你的结果吗?或者,如果你有新数据,或者更新了数据,你能否轻松地在这些新数据上重复你的分析,尤其是数据整理步骤?这就是我们本次演讲要讨论的内容。 |
| |
但数据管理到底是什么? |
| |
我们为什么需要担心它? |
| |
嗯,数据管理就是为了确保我们的数据能够推动分析发现。从根本上来说,我们需要能够解决我们试图解决的问题。 |
| |
它主要涉及数据组织、数据结构以及数据清理。 |
| |
如果你思考一下我们在数据方面可能遇到的问题,它们通常可以分为四类 |
| |
您的格式可能不正确,数据可能不完整,数据缺失,或者数据肮脏或混乱。 |
| |
为了帮助我们讨论这些问题,我们将借用STIPS的一些内容。如果您不熟悉STIPS,STIPS是我们的免费课程,名为“工业问题解决的统计思维”。 |
| |
这是一门基于七个独立模块的课程,第二个模块是探索性数据分析。 |
| |
由于探索性数据分析和数据管理的迭代和交互特性,该模型中的最后一课...在这个模块中称为分析的数据准备,因此我们在整个演讲中大量借鉴了这一课。 |
| |
让我们逐一分析一下这些问题。格式不正确。格式不正确是什么意思?嗯,这是指你的数据形式错误或分析格式错误。这可能适用于整个数据表。例如,你可能有 |
| |
所谓的...数据存储在单独的列中,但实际上您需要将数据存储在一列中。 |
| |
或者,您的数据可能位于单独的数据表中,您需要将数据表连接、更新或合并在一起。 |
| |
它可能与单个变量相关。例如,您的建模类型可能不正确。或者您的数据表中包含日期,因此您可能有一些日期列,但它们的格式可能不是天数,因此分析可能无法识别这些是日期数据。 |
| |
格式化也可以是美观的。例如,如果您正在处理一个大型数据表,其中可能包含许多列…… |
| |
您可能有名称...列名实际上无法识别,您可能想要更改。 |
| |
您可能有很多列,您可能希望将它们组合在一起以使其更易于管理。 |
| |
您的响应列可能位于数据表的最末端,您可能希望将其上移。因此,外观问题不一定会妨碍您的分析,但如果您可以解决其中一些问题,可以使您的分析更容易一些。 |
| |
数据不完整是指数据不足。这可能指的是缺少重要变量的数据。例如,你可能没有采集到对解决问题至关重要的变量的数据。也可能是缺少变量组合的数据。 |
| |
例如,您可能没有足够的信息来估计交互作用。 |
| |
或者你可能有一个感兴趣的目标变量是不平衡的,所以你可能在研究缺陷之类的东西。它可能只占你观测值的 5% |
| |
是缺陷,你可能没有足够的数据,因为你知道,你可能只有一小部分数据 |
| |
缺陷存在的位置。你可能没有足够的数据来了解缺陷的潜在原因。你的样本量也可能不够大,所以你根本没有足够的数据来做出准确的估计。 |
| |
缺失数据是指变量值缺失,这可以有几种不同的形式。 |
| |
如果您缺少数据并且数据缺失......缺失不是随机的,这可能会导致严重的问题,因此您可能会有偏差的估计。 |
| |
如果您完全随机地丢失数据,并且只丢失了几个观察结果,那么这可能不是问题,但是如果您丢失了大量数据,那么这可能会有问题。 |
| |
脏乱数据是指观测值或变量存在问题。所以你可能会得到错误的值,这些值根本就是错的。 |
| |
你可能会遇到不一致的情况。例如,当人们输入不同的内容时,可能会出现拼写错误或印刷错误。 |
| |
这些值可能不准确。例如,你的测量系统可能存在问题。可能存在错误,可能存在拼写错误,也可能数据已经过时。 |
| |
过时数据是指有关不再使用的设施或机器的数据。 |
| |
数据可能已经过时,所以你可能有两三年前的数据,但流程可能在这段时间内发生了变化, |
| |
这意味着那些历史数据可能与当前的流程无关。你的数据可能会被审查,或者被截断。 |
| |
您可能会有冗余列,这些列包含基本相同的信息。或者您可能会有重复的观察结果。 |
| |
因此,肮脏或混乱的数据可以呈现多种不同的形式。 |
| |
那么如何识别潜在问题? |
| |
嗯,一个好的起点是探索你的数据。事实上,识别问题会引导你进行数据探索,然后进行分析。当你开始探索数据时,你就会开始识别那些可能导致分析问题的东西。 |
| |
因此,一个很好的起点是扫描数据表以查找明显的问题。 |
| |
因此,我们将在本次演讲的剩余部分使用一个名为“组件”的示例,这是 STIPS 课程中的一个例子 |
| |
一家公司生产小型零部件,但存在产量问题。我们收集了369个批次的数据,并捕获了15个特征,我们希望利用这些数据来了解产量低的潜在根本原因。 |
| |
所以,如果我们开始查看数据表本身,就能找到一些线索,了解我们可能遇到的数据质量问题。这是一个很好的起点(JMP 15 新增了此功能)。 |
| |
这是标题图。我喜欢标题图。它们的作用是,如果你有一个连续变量,它会显示一个直方图,这样你就可以看到分布的中心位置、形状和分布范围。 |
| |
它们还会显示数值的范围。如果你有分类数据,它会显示一个条形图,其中包含最常见条形的值。让我们来看看其中一些。我先从批次号开始。批次号显示的是直方图,而且形状实际上是均匀的。 |
| |
批号可能是一个标识符,因此我马上就能发现这些数据可能编码不正确。 |
| |
我可以看到这个分布高度偏斜,我还可以看到最低值是 -6,这让我对废品率出现负值的可行性产生疑问。 |
| |
流程是另一个例子。我基本上有两个条形图,它实际上显示的是只有两个值的直方图。 |
| |
当我查看这些柱状图、标题图时,我可以查看柱状图面板, |
| |
很容易看出,例如,批号、零件号和工艺都被编码为连续型。当你将数据导入JMP时,如果JMP看到数字,它会自动将这些列编码为数值连续型。所以这些都是我们可能想要改变的地方。 |
| |
我们也可以查看数据本身。例如,当我查看湿度时(查看数据时,上下文非常重要),我们会将湿度视为连续数据。 |
| |
但我这里有几个字段是 N/A。 |
| |
如果你有字母数字数据,或者数字列中有文本数据,当你把数据导入JMP时,该列会被编码为名义值。所以我们一眼就看出这个问题需要解决。 |
| |
我还可以查看其他列。例如,供应商列,我发现缺少一些值。当你把数据导入 JMP 时,如果 |
| |
分类数据的空单元格,我们知道缺失值。我发现有些条目的输入方式不一致……数据输入方式不一致。 |
| |
因此,我得到了一些有关我的数据可能存在问题的重要线索。 |
| |
注意所有的点。温度是一个连续变量,我看到的点表示缺失值。所以温度对我的分析来说非常重要,这可能会带来问题。 |
| |
一个自然的延伸就是开始探索数据,一次一个变量。当我第一次开始查看数据时,我最喜欢的工具之一是列查看器。列查看器会为我们提供所选变量的数字摘要。 |
| |
如果有缺失值,就会出现“N 缺失”列。这里我可以看到,369 个温度值中缺失了 265 个。所以,如果我们认为温度在分析中很重要的话,这是一个严重的缺口。 |
| |
我还能查看是否有一些奇怪的值。例如,当我查看报废数量和报废率的最小值和最大值时,我得到的是负值。如果这不可行,那么数据或数据收集系统可能存在问题。 |
| |
变量编码错误也很容易被发现。例如,设施号和批号本来应该编码为名义值,但却报告了平均值和标准差。 |
| |
思考这个问题的一个好方法是,如果物理上不可能有平均批号或(零件号是另一个变量)或零件号,那么这些应该更改为名义变量,而不是连续变量。 |
| |
当我第一次熟悉我的数据时,我接下来要去的地方是分布。 |
| |
如果您有连续数据,分布可以让您了解数据的形状、中心和分布,但您也可以查看是否有一些不寻常的值。 |
| |
对于分类数据,你还可以查看有多少个级别。例如,客户数量。如果客户数量是一个重要变量或潜在重要变量, |
| |
我的客户编号有很多级别或值。在准备数据时,我可能想将它们合并到四五个存储桶中,并为那些数据不多的客户另设一个类别。 |
| |
湿度。我们发现列中包含 N/A 存在问题。我们看到的是条形图,而不是直方图。 |
| |
我们可以轻松地在供应商数据中找到我们想要查看的内容。例如,Cox Inc 和 Cox, Anderson 的拼写有三种不同方式,Hersh 的拼写也有三种不同方式。 |
| |
对于速度,请注意,我们有一个从 60 到 140 的堆积分布,但在最底部,我们看到有一个或两个值 |
| |
这非常接近于零,这可能是...这可能是数据输入错误,但这绝对是我们想要调查的事情。 |
| |
对此的扩展是开始一次查看两个变量的数据。例如,使用图形生成器或散点图。 |
| |
当你一次查看两个变量时,你可以看到模式,并且可以更容易地看到跨越多个变量的不寻常模式。 |
| |
比如,如果我查看废品率和报废数量,就会发现有一些区间。你的数据表中可能有一些数据可以解释这种模式。 |
| |
在这种情况下,条带归因于不同的批次大小,因此这个紫色条带代表批次大小为 5,000。 |
| |
与小批量相比,大批量生产出现废品的可能性更大。这或许有些道理,但我也发现一些不合理的地方。这两个值都低于负值。 |
| |
因此,当我从二维角度查看数据时,很容易看到这些。 |
| |
我可以使用列切换器和数据过滤器为图表添加额外的维度。 |
| |
这也引导我进行潜在分析,所以我可能有兴趣了解哪些 x 可能很重要,可能与废品率有关。 |
| |
同时,还要关注数据质量问题或潜在问题。因此,对于废品率而言,压力和废品率之间似乎呈正相关关系。 |
| |
看起来关系不大。废品率与温度的关系相当平缓,所以这里没什么特别的。 |
| |
但请注意速度。它们之间存在负相关关系,但在顶部我看到了这两个值;一个值是我在直方图上看到的,但第二个值似乎很突出。 |
| |
所以,60 左右这个值可能只是一个异常值,但它也可能是一个有效点。我可能会质疑这里接近 0 的这个点是否有效。 |
| |
我们已经查看了数据表。我们一次查看了一个变量的数据。我们一次查看了两个变量的数据,所有这些都与数据探索相吻合,并引导我们进行分析。 |
| |
我们可能会使用更高级的工具(例如,探索异常值、探索缺失值),但这超出了本课程或本次演讲的范围。 |
| |
当你开始分析数据时,你可能会发现其他问题。例如,如果你有很多类别的分类变量 |
| |
当你尝试在回归模型中拟合交互作用时,JMP 会发出警告,提示你无法真正做到这一点。所以,当你开始分析数据时,整个过程是迭代的,你会在整个过程中发现潜在的问题。 |
| |
关键在于,你需要记录在查看数据时遇到的问题。其中一些问题可以 |
| |
数据会随着实验的进行而不断修正,所以你可以隐藏和排除一些值,可以重塑数据,也可以在实验过程中重新清理数据。但你可能决定需要收集新的数据。你可能需要进行实验设计 (DOE),这样你对数据本身更有信心。 |
| |
如果你知道你将要重复这个分析或者其他人想要重复这个分析, |
| |
那么你需要确保记录下你正在采取的步骤,这样才能获得可重复性。其他人可以重现你的结果,或者你可以稍后重复你的分析。现在我要把时间交给乔丹,乔丹会 |
| |
谈论可重复的数据管理。 |
| 乔丹·希勒 |
好的,谢谢你,米娅。 |
| |
大家好,我是Jordan Hiller,JMP的系统工程师。我们来深入探讨一下可重复性。 |
| |
用于您的数据管理。 |
| |
Mia 很好地介绍了这个想法,但让我们再详细讲一下。这里的想法是,我们希望能够轻松地重新执行 |
| |
我们用于准备分析数据的所有整理步骤,我认为这样做有三个主要好处。首先是效率。如果你必须……如果你的数据发生变化,你需要在未来对新数据重复这些整理步骤, |
| |
使用一键脚本运行一次比一遍遍地重复所有点击操作效率高得多。准确性是第二个好处。点击操作很容易出错,而将其编写成脚本可以确保准确重现。 |
| |
最后是文档,这一点可能被低估了。如果你有一个脚本,它会记录你执行的步骤。 |
| |
拿走了。这是一条面包屑路径,你可以稍后重新查看,当你不可避免地需要重新审视这个项目时,你会回想起,我做了什么来准备这些数据? |
| |
有这个脚本很有帮助。所以今天我们将进行一个案例研究。我将向你们展示如何生成一个可复现的数据管理脚本。 |
| |
只需点击即可。JMP 16 中新增了支持技术,即增强日志以及增强日志中的操作记录。 |
| |
所以我们要做的是,像往常一样通过点击操作进行数据管理。这样做的时候, |
| |
我们需要的脚本,计算机代码(称为 JSL 代码,JSL 代表 JMP 脚本语言)将自动为我们捕获 |
| |
在新的增强日志中。当我们完成点击式策展后,只需获取代码并保存即可。我们可能需要进行一些调整和修改,使其更加强大,但这部分是可选的。 |
| |
好的,这是一份你可以使用的速查表。这是一些最常见的数据清理活动 |
| |
以及如何在 JMP 16 中执行这些操作,以便留下痕迹,以及如何将 JSL 脚本保留在增强日志中。它涵盖了诸如行操作、列操作等内容。 |
| |
修改数据表的方法、我们所有的数据清理操作以及如何通过点击来完成。 |
| |
因此,它并不是您可能需要进行数据清理的所有内容的详尽列表,也不是增强日志中捕获的所有内容的详尽列表,但是,但这是您触手可及的最重要的内容。 |
| |
好的,让我们使用 Mia 介绍的 Components 文件进入我们的案例研究,并使用增强日志在 JMP 16 中制作我们的数据管理脚本。 |
| |
现在我们使用的是 JMP 16。需要注意的是,这是 JMP 16 早期采用者计划的最后一个版本,所以这只是预发布版本。不过,我相信它与 JMP 16 的实际发布版本会非常非常相似。 |
| |
因此,为了获取日志, |
| |
我在这里向你展示一下。如果你习惯了 JMP 旧版本的日志,这个界面看起来会有所不同。它分为两个面板, |
| |
好的,顶部是消息面板,底部是代码面板。我们会在这里花些时间。我会向你展示它是什么样子,但先快速预览一下,如果我要执行一些快速操作,比如导入文件,或者删除此列,会是什么样子。 |
| |
您可以看到我执行的两个步骤(数据导入和删除列),它们列在此消息面板中 |
| |
我们需要的可复现数据管理脚本的 JSL 代码就在这个底部面板里。好的, |
| |
这确实非常令人兴奋,只需指向并单击即可获得此代码并在需要时获取它,这是 JMP 16 的一大优势。 |
| |
在 JMP 16 中,这个新的增强日志视图默认启用。如果您想返回旧版本的日志,即简单的文本日志,您可以在 JMP 首选项部分进行操作。这里有一个新的 |
| |
日志部分,您可以根据需要切换回旧的日志文本视图。安装 JMP 16 时,默认使用增强型日志,稍后我们将在案例研究中讨论其他一些功能。 |
| |
好吧,我要离开了 |
| |
现在,从红色三角形开始查看日志。清除日志,然后开始我们的案例研究。让我们导入 Mia 之前分享的组件数据。我们将从这个 csv 文件开始。 |
| |
所以 |
| |
我要进行最简单的导入,只需将其拖入即可。哦,我之前……我已经打开了一个版本。抱歉,让我先关闭旧版本 |
| |
并再次清除日志。 |
| |
好的,简单导入 |
| |
将其拖到 JMP 窗口中。现在我们有了包含 369 个批次的组件 A 文件,让我们继续进行数据清理活动。我将打开 |
| |
标题图表。首先我们可以看到,“设施”列只有一个条目,一个值,即“FabTech”,所以没有任何变化,也没有什么特别之处。我只需右键单击即可删除该列。 |
| |
再次,我们在增强日志中捕获了这一点。 |
| |
好的,还有什么?假设表格末尾的废品率这一列对我们非常重要,我希望看到表格中更靠前的位置。我要把它移到第四位。 |
| |
在列面板中将其拖到客户编号的正后方。就完成了。 |
| |
Mia 提到,这个湿度列在导入时显示不正确,主要是因为 N/A |
| |
字母字符导致它以字符变量的形式出现。所以让我们解决这个问题。我们将右键单击此处,进入列信息 |
| |
并将数据类型从字符型改为数值型,将建模类型从名义型改为连续型。点击“确定”。我们点击这里的日志,你会看到,我们现在已经捕获了四个步骤,我们将继续。 |
| |
好的,下一步是什么?我们有几个变量需要从连续型改为名义型。它们是批号、零件号和工艺。选中这三个变量后,我将右键单击,将其从连续型改为名义型。 |
| |
这些都已得到纠正。 |
| |
再次,我们可以在日志中看到这三个步骤记录在这里。 |
| |
好的,还有什么?还有一点需要注意,就是“压力”这一列。我的工程师喜欢把这一列的名称改为“PSI”,所以我们只需选中这一列并输入“PSI”即可更改。然后按 Tab 键跳转到其他位置。这也会被记录到日志中。 |
| |
供应商。Mia 告诉我们,有一些拼写不一致的地方。这里可能值太多了。我们需要更正字符值。当某一列中出现不正确、不一致的字符值时,可以考虑使用重新编码工具。 |
| |
重新编码工具是解决这个问题非常有效的方法。右键单击供应商,我们就可以进行重新编码。 |
| |
让我们对这些值进行适当的分组。我将从一些红色三角形选项开始。让我们将所有值转换为标题大小写, |
| |
我们还要修剪一下空格,这样不一致的间距就纠正了。这已经纠正了几个问题。我们手动纠正其他所有问题。我要把 Anderson 和 Cox 组合在一起。我要把 Cox 和 Anderson 组合在一起。 |
| |
将赫尔希斯分组。特鲁特纳和沃利已经用单一类别做了正确的分类。我最后要修正的是,对于那些被列为空白或缺失的内容,我会给它们一个明确的 |
| |
此处缺少标签。 |
| |
好的,当我们点击“重新编码”时, |
| |
我们已将这些修复放入名为“供应商 2”的新列中。 |
| |
这只是对 1、2、3、4、5、6 类别进行了更正和折叠。 |
| |
好的。 |
| |
好的,我们来算一下。我们将用批次大小和报废数量来计算良率。 |
| |
是的。是的,我知道这有点多余。我们已经有了废品率,良率就是1减去废品率,但为了便于讨论,我们将执行 |
| |
计算。我希望收益率列紧跟在“报废数量”之后,所以我要高亮显示“报废数量”,然后进入“列”菜单,选择“新建列”。 |
| |
我们将这个东西称为收益。 |
| |
我们将在选定的列之后、在废弃的数字之后插入新的列,并为其提供一个公式来计算收益率。 |
| |
我们需要的是合格产品的数量。也就是批次大小减去报废产品数量。 |
| |
这就是好单位的数量,我们将用这个数字除以 |
| |
批量大小。 |
| |
良品单位数除以批量大小,这就是我们的产量计算。 |
| |
然后单击“确定”。 |
| |
这是我们的新产品 |
| |
良率列。我们可以看到它是1减去废品率。这样就很好了,现在我们先忽略一些良率大于100%的情况。 |
| |
好的,我们快完成了。只需再做一些修改。我注意到我们有两个流程,目前它们被标记为流程 1 和流程 2。 |
| |
这不太具描述性,也没什么帮助。我们给它们加上更具描述性的标签。流程1,我们称之为生产流程;流程2,我们称之为实验流程。所以我们用值标签来做这件事,而不是重新编码。我会讲到列信息 |
| |
我们将为“一”和“二”分配值标签。 |
| |
此列中的一个将代表生产。 |
| |
添加那个。 |
| |
二代表实验性的。 |
| |
添加那个。 |
| |
点击“确定”。很好。标题图表中显示的是“一”和“二”,但数据表中显示的是“生产”和“实验”。 |
| |
好了,在我们保存脚本之前还有最后一步。为了便于讨论,假设我只对数据感兴趣……我只想在真空关闭的情况下进行分析。 |
| |
好的,我要对数据进行子集化,创建一个新的数据表,只包含真空吸尘器关闭的行。我可以通过右键单击真空吸尘器关闭的单元格来实现。 |
| |
并选择匹配的单元格。 |
| |
这样就选中了 313 行,其中的清空功能已关闭。现在我们转到表子集, |
| |
创建一个新的数据表,我们将其命名为 vac_off。 |
| |
单击“确定”。 |
| |
好的,这就是我们的新数据表,其中有 313 行仅显示真空关闭时的数据。 |
| |
好了,就这样了。我们已经完成了所有数据整理工作,现在让我们回过头来重新查看日志,进一步了解一下我们掌握的信息。 |
| |
好的,所有这些步骤,还有一些我本来不打算做的步骤,都已记录在日志中。 |
| |
看这里,我们有...每一行都是我们执行的步骤之一。 |
| |
还有一些无关的东西,比如我曾经清除过行选择。其实我并不需要这么做……我不需要把它写进我的脚本里。 |
| |
清除选定的行,所以我们来移除它。我只需右键单击它并清除该项目即可将其移除。很好。 |
| |
好的,上面是消息,下面是 JSL 代码。我想提醒大家注意一下起源和结果。这真是太巧妙了。 |
| |
每当我们执行一个步骤,每当我们通过点击执行一个操作时,你知道,我们执行该操作的对象是某个东西,而该东西又会产生相应的结果。这就是起源和结果。例如,当我们删除设施列时…… |
| |
好吧,也许这个例子不太好……我们选择改变湿度列的信息。起源,也就是我们做这件事的地方 |
| |
是组件 A 表,我们在这里看到它作为数据表列出。当我将鼠标悬停在它上面时,它会显示“将组件 A 置于最前面”,点击它,就能看到组件 A 表。非常好。 |
| |
结果是我们对湿度列做了一些修改。我们改变了湿度。我们将其数据类型改为数字,并将建模类型改为连续。请看下面。 |
| |
所以我可以点击这里,转到湿度列,它会突出显示,并帮我们选择。JMP 会帮我们选择湿度列。 |
| |
所有结果均为绿色,除了最后一个结果为蓝色。这是为了帮助我们跟踪在不同数据表上的活动。所有这些活动都是在组件 A 数据表上进行的 |
| |
上一次活动,我们对组件 A 数据表进行了子集分析,结果生成了一个名为 vac_off 的新数据表。vac_off 是蓝色的。没错,我们可以用这些颜色来帮助你追踪数据。 |
| |
好的,我想在这里向你们展示的最后一个功能是……那是 |
| |
如果你有一系列很长的步骤,而你只需要找到其中一个,这个筛选框就能帮你找到。比如说,我想找到子集。它就在那里。我们找到了子集数据表,我可以直接找到我需要的代码。 |
| |
好的,这就是我们需要的一切。我们的数据管理步骤已经记录下来了。要制作一个可复现的数据管理脚本,我们只需点击红色三角形,然后将脚本保存到新的脚本窗口即可。 |
| |
导入步骤、删除列步骤、移动废品率步骤。所有这些步骤都包含在脚本中。 |
| |
我们有语法着色功能来帮助我们阅读脚本。我们还有各种有用的注释,可以准确地告诉我们每个步骤的具体内容。 |
| |
好的,这就是全部内容。这就是我们需要的全部内容,我要保存它。我会把它保存到我的桌面,命名为“导入并清理”……我们就叫它“导入并整理组件”吧。 |
| |
好的,这就是我们可重复的数据管理脚本。如果我回到 JMP 主窗口,关闭除新脚本之外的所有内容, |
| |
如果我需要重复执行这些数据整理步骤,我们可以这样做。我只需打开脚本文件,点击“运行脚本”按钮即可运行它。打开数据,进行所有清理,进行子集化,然后创建包含 313 行的新数据文件。 |
| |
现在让我们想象一下,我们需要在新数据上重播此操作。 |
| |
我有另一个版本的组件文件,名为组件 B。它里面多了 50 行,所以它有 419 行,而不是 369 行。想象一下,我们又运行了 50 个批次,数据量更大了。 |
| |
它被称为组件 B,我想在组件 B 上运行这个脚本。但你会注意到,在整个脚本中,它多次调用组件 A。所以我们只需搜索并替换组件 A,然后将其更改为组件 B。好了,开始吧。编辑。 |
| |
搜索。 |
| |
我们将找到组件 A,将其替换为组件 B。全部替换。已替换 15 个。 |
| |
您可以在这里和这里看到它。 |
| |
现在我们只需重新运行脚本,它就出现在新版本的数据上。您可以看到它增加了行数,实际上它之前是错的。之前是 313 行,现在是 358 行。 |
| |
好的,这是一个可针对新数据运行的可重复数据管理脚本。 |
| |
好的,再次奉上那张小抄。它会放在我们演讲保存的资料里,方便大家查阅。它能告诉你如何通过点击操作完成数据管理,并留下一个可重复、可复制的数据管理脚本。 |
| |
我们编写的脚本根本不需要我们编写任何代码,但我将给你一些提示,四个你可以使用的提示 |
| |
稍微增强一下脚本。第一个技巧是在脚本开头插入这行代码。这对所有脚本来说都是一件好事。只需将默认的行名插入到这里即可。 |
| |
这是为了防止你的脚本与其他脚本交互。这被称为命名空间冲突,你无需真正理解它的作用,只需照做即可。这样做是件好事,也是良好的编程习惯。 |
| |
第二个技巧是确保 JSL 表达式之间有分号。 |
| |
增强型日志会自动帮你完成这些工作。它会在每个步骤之间添加所需的分号。但是,如果你自己做了任何修改,你需要确保这些分号的位置正确。所以,给聪明人一点建议。 |
| |
添加评论。 |
| |
注释是一种在程序中留下注释的方式,而且不会弄乱程序,对吧。它是一种 |
| |
在程序中留下一些 JSL 解释器无法解释的内容。增强日志会给你留下一些注释……增强日志中的操作记录会给你留下一些注释,但如果你愿意,你可以修改或添加它们。以下是关于注释的要点。 |
| |
典型的格式是两个斜杠,斜杠后面的所有内容都是注释。所以你可以在行首或行尾添加注释。解释器会运行这个 X = 9 的 JSL 表达式,但会忽略斜杠后面的所有内容。 |
| |
如果您有较长的注释,也可以使用这种格式:以 /* 开头,以 */ 结尾。这样就构成了一条注释。注释不仅可以用来给自己留个笔记,还可以用来调试 JSL 脚本。 |
| |
如果您想删除一行代码并使其不运行,只需在其前面加上这两个斜杠即可;如果您想对一大段代码执行此操作,可以使用这种格式。很高兴了解如何使用注释。 |
| |
我留给你们的最后一点建议是泛化数据表引用。你们还记得我们是如何通过搜索和替换来让那个脚本在新的文件名“Components B”上运行的吗? |
| |
我们不得不在数据表中、在脚本中更改 15 个实例。如果我们只需要一次更改,而不是 15 次,那不是很好吗?这样您就可以让您的脚本更加健壮。 |
| |
通过泛化数据表引用。我们不使用名称,而是使用 JSL 变量来保存这些表名。这就是我要说的。我会给你举个例子。 |
| |
左边是增强日志中动作记录生成的一些代码。 |
| |
我们打开“大类”数据表。我们对年龄列进行操作,将其更改为连续建模类型,然后创建一个新的计算列。 |
| |
在打开时,我们使用它来对年龄列进行更改,我们在这里使用它。 |
| |
非常简单,您需要做的就是使其更加健壮和通用。 |
| |
您需要进行三项更改。 |
| |
这里的第一个变化,我们正在指定一个名称。我选择了 BC;你可以选择任何你想要的。你会经常看到 DT。 |
| |
因此,在脚本的其余部分中,我们将使用 BC 来引用该大类数据表。因此,当我们想要更改年龄时 |
| |
age 表示 BC 数据表和该数据表中的年龄列。 |
| |
在这里,我们向“大类”数据表发送一条消息,这就是双箭头语法的含义。所以我们只是将其概括化,以便使用新名称来发送该消息。 |
| |
到数据表。现在,如果我们需要在一个名为“Big Class”以外的新数据表上运行此脚本,我们只需进行以下更改。我们只需更改脚本中的一个位置。无需进行搜索和替换。 |
| |
好的,在学习了这四个技巧之后,如果你准备好将你的策展脚本提升到一个新的水平,那么接下来的步骤如下。你可以添加一个文件选择器。这不需要太多的编程 |
| |
对其进行更改,以便当有人运行该脚本时,他们可以直接导航到他们想要运行的文件,而不必手动编辑脚本。 |
| |
这真是个好主意。如果您想将脚本分发给组织中的其他用户,可以将其打包到 JMP 插件中,这样用户只需从 JMP 内部菜单中选择即可运行该脚本。 |
| |
真的非常方便。最后,如果您需要按计划运行此管理脚本来更新存储在网络上某个位置的主 JMP 数据表,您可以使用 Windows 中的任务计划程序或 Mac OS 中的自动执行程序来按计划执行此操作。 |
| |
总而言之,Mia 讨论了如何通过探索数据和迭代来识别问题,从而进行数据管理。 |
| |
如果您自动执行这些步骤,您将获得可重复性的好处,即效率、准确性和记录您的工作。 |
| |
要在 JMP 16 中执行此操作,您只需像往常一样指向并单击,增强日志中发生的操作记录就会捕获您的数据管理步骤。 |
| |
最后,您可以从增强日志中导出并修改该 JSL 代码,以创建可复现的数据管理脚本。我们的演讲到此结束。非常感谢您的时间和关注。 |