欢迎大家!我叫 Nathan Clark,在 IDEXX 实验室工作。我使用 JMP 已经 22 年了,这次我将就“表格”菜单做个演讲。我发现“表格”菜单是 JMP 最棒的功能之一,它赋予了你强大的操控、调整和处理数据的能力,从而可以促进许多其他附加分析。如果你能熟练掌握“表格”菜单,那么你将比那些不得不使用一些老式方法(例如复制粘贴来移动数据)的人员水平高出好几个档次。
今天我想和大家聊聊我如何使用“表格”菜单,以及这些年来大家在使用过程中遇到的一些小陷阱,以及一些使用技巧和窍门。好了,我们开始吧。我们将打开大家最喜欢的大类,并附上我做的一些修改。首先,我们将从“表格”菜单顶部的“摘要”开始。
正如您所料,摘要用于统计汇总。打开它后,您会在这里看到许多选项。如果您选择一个响应变量,例如身高,您可以计算平均值和标准差。对于表格菜单上的所有内容,都会弹出预览。这真是太棒了。在这里添加预览功能真是太棒了,因为这样您就可以快速浏览表格中的内容。
现在,您会看到我有一个汇总数据。它有 42 行,包含一个平均值和一个身高。这里没有考虑其他任何数据。它代表所有数据的总平均值和总标准差。如果我想将其拆分出来,只需将其拖到分组部分即可。现在我有了男性和女性的平均值和身高。
这就是摘要的主要目的。点击“确定”后,会显示摘要,然后您可以继续在此处添加热点列中的统计数据。如果您发现自己忘记了某些内容,并且想添加体重平均值,可以点击“确定”,系统会自动添加。
这真的很酷。我经常用这个。我会在这里做个标记,把这些东西锁定。这意味着我无法编辑。如果我尝试输入另一个数字,我会在这里收到通知,所以我用它来获取我的摘要和统计信息,但我更多地用它来做一些稍微不同的事情。我们要关闭它了。我要重新打开它,并指出其他一些事情。
您刚才看到我提到了锁定这些列。如果您取消选中此框,这些列将不会被锁定,但也不会链接到数据,这将方便我们稍后看到的一些内容。
讲完本节内容后,我还要指出“表格”菜单中经常出现的两个框。保持对话框打开。即使我点击“确定”,这个框也会保持打开状态。这样,你就可以快速地尝试各种不同的想法。然后,如果你将脚本保存到源表中,那么你创建的表不仅会包含脚本及其创建方式,而且相同的脚本还会存储在该表的原始表的这个区域中。我认为这是上一个版本中出现的一个非常棒的功能。
现在,我更深入地了解我使用汇总功能的原因,它能深入理解数据,并将其细分为不同的人口统计数据。例如,如果我在这里只查看性别,并将其放入分组中,我不会对统计数据进行任何处理。我仍然会得到一个表格。该表格将包含细分数据和行数。如果我点击“确定”,就会看到一个表格。由于它是链接的,当我点击这些内容时,它会选中我感兴趣的所有内容。
这是一个很好的方法,可以让你开始探索你的数据,以便将数据划分为子集(我们稍后会讨论),同时还能理解数据的其他方面。我们会回到这里,更深入地探讨这个问题。如果我按姓名搜索,你会看到性别以及与之相关的姓名都被拆分了。正如你所注意到的,这 N 行中的一些实际上是一行。
我将在这里总结一下这一点,但对于我们接下来要讨论的许多其他平台来说,这一点也非常重要,尤其是在数据出现问题需要排除故障时。这就是“唯一性”的概念。
对于任何你处理的表,你都应该能够识别哪些列在不同的排列组合中可以达到不同的唯一性级别。如果我把这两项都去掉,我们就从这一点开始讨论。如果我们使用名称,我们认为它通常是一个相当独特的标识符,那么我们可以在这里按名称分组。
我们看到,如果我们滚动浏览,就会发现大多数都是一。下面,我们看到罗伯特和帕特,他们都有两行关联。姓名本身不足以在这个数据集中保持唯一性,所以我们需要添加更多列。也许如果我们加上性别,就能找到这种感觉。
我们仍然有 N 行数据,等于 1,我们获得了唯一性。但在这里,仍然有两个 Robert,一个男性,有两行与他关联。这意味着我们还需要添加另一列才能达到所需的唯一性级别。我会添加 age。现在我们可以看到,我们的数据已经完全具有唯一性,一列数据贯穿始终。
预览是查看这一点的绝佳方式。如果您有更多数据,预览中可以很好地显示,您可以随时点击“确定”或使用“保持对话框”继续查看。处理数据时,了解哪些数据是唯一的非常重要,有时如果数据本身就不唯一,则需要添加列来使其唯一,因为这在我们尝试其他一些方法时会发挥作用。
说到这,我们将直接进入“子集”平台。它的作用是让我们能够按照提示对数据进行子集处理。您可以处理所有行,包括选定的行。您可以按行进行筛选。这样,您还可以将其链接到原始数据表,不过我在这里会做一些我认为更快、更容易的事情。JMP 还会根据表格中的实际情况为您提供帮助。与往常一样,预览功能也会为您提供帮助。
如果我在这里,我实际上可以点击“M”,右键单击选择“匹配单元格”。我所有的“M”都被选中了。然后,如果我进入“表格和子集”,我可以看到它自动……假设我想处理选定的行。我可以处理所有列,也可以处理选定的列(现在,“性别”是选定的列),或者我将其保留为所有列。
复制和隐藏公式是为了保持简洁。只有真正需要计算公式时,才会计算。点击“确定”后,您将获得一个子集。此子集与数据无关。您可以在此处点击。这是独立的表格。
如果您确实想要一个链接子集,是的,您可以转到此处的“子集”。我们将进行调用,单击它,然后单击“确定”。现在它已链接到数据。但是,这比我真正想做的要多点击几次。我通常右键单击,选择“匹配单元格”,然后找到我想要的选择。通过这种方式,有很多方法。您会看到下面显示我们选择了 23 行。如果我右键单击此处,我可以转到“数据视图”。您会立即获得一个链接子集。
这不提供仅显示选定列的选项。此数据视图始终会显示所有列,但我经常使用它。如果我遇到这种情况,比如我在这里选定了一个数据集,顶部一行,底部一行,并且我想并排查看它们,数据视图就会显示它们,这样我就可以立即查看并识别正在发生的事情。
我很喜欢这个功能,经常用。不过,大家需要注意的是,当你使用数据视图时,由于它与数据集关联,如果我在这个数据视图中做出更改,更改也会反映出来。你看,我这里高亮显示了Tim。如果我把“M”改成小写字母“M”,更改就会反映在表格本身中。如果你正在使用这些功能,请务必注意,因为如果你把它当作一个独立的子集,你实际上可能会更改主数据。
你可以利用这一点。如果我需要把表格外所有混合出现的 M 都改成小写 M,我只需把第一个 M 改成小写 M,然后右键点击,填充到表格末尾,现在它们就全都变成小写 M 了。这在修复大量数据或以不同方式扩充数据方面非常有用。在使用数据和处理数据时,这一点需要注意。当你处理数据并进行各种操作时,这是一个非常棒的功能。
排序功能名副其实。它功能强大却又简单易用,是一个非常棒的平台。您可以进行排序。比如,我们在这里按名称排序,您会看到它立即默认按升序排列。如果您点击它,您可以强制按降序排列。您可以在这里添加其他内容,它会自动排序,您也可以按升序或降序排列,因此您可以根据需要对任意数量的列执行此操作。点击“确定”后,JMP 将创建一个新列。
我发现这真的很有用,尤其是在处理大数据集时,我想我知道该如何排序。如果外观很重要,它看起来会符合我的预期。我也不想弄乱数据,然后费力地回到原来的表。这给了我一个完全独立的表。
很多时候,我会这样做,我会看着这张表,然后问自己:“这是我想要看到的吗?这是我的最终结局吗?”然后我会关闭它。如果这是我想要的,我会直接回到排序菜单。我会重新调用,然后替换这张表。通过这样做,我现在已经对主表进行了排序,这有助于将我的表数量保持在最低限度。
有这个选项真是太好了。我经常这样做来制作表格。然后我会返回并替换表格,以确保我对主表的操作符合我的要求,尤其是当我有大量数据和列的时候,我不想让数据看起来杂乱无章,难以浏览。
接下来,我们要学习堆叠。堆叠是一个非常酷的功能。我这里有一个特殊的表格,我们先来试试。堆叠,顾名思义,它的本质就是堆叠。它会把列堆叠起来。如果我进入表格,然后切换到堆叠,我就可以把这三个列堆叠在一起。
我们只需在此处单击“确定”即可进行展示。现在它显示“我是”标签,读取 1、2 和 3,然后显示其原始列或原始值中的关联数据,这很棒。
当我有大量水平数据需要垂直排列时,我经常会用到这个功能。Stack 可以完成所有这些工作,而且无论表格如何组织,它都能做到,我认为这真的很好。它能维护表格内的正确关系。不过,这些数据有点特殊,它利用了我经常使用的一个功能。当你有不同分组的数据,需要堆叠但又要以特定方式组织时,就会用到它。
在本例中,我有 3 个波长的数据:405、357 和 680,并且每个波长都有一个与之关联的读取。我不仅需要堆叠读取,还需要维护它们与正确波长的关联。JMP 的堆叠功能可以做到这一点。我们进入堆叠菜单。
我们要把这六列数据全部堆叠起来,然后 JMP 会把它们很好地组织在一起。你可以在预览中看到我们目前所做的工作,JMP 并没有很好地将它们组织在一起。他们按照我刚才展示的方式操作。它把所有数据都堆叠在两列中,而这并不是我们处理这些数据所需要的。
我们接下来要勾选下面这个框,即多序列堆叠。这太棒了。您已经看到了 JMP 所做的一些更改,并将其显示出来。它默认以两个序列的形式显示。这就是我们想要的,因为我们需要一列代表波长,然后一列代表与这些波长相关的数据值。这就是两个序列的由来。如果我们有三组三个序列,那么就需要三个序列来获取这些信息。
我现在有点儿自信地谈论这个多序列堆栈,但十有八九,我做堆栈的时候,点错了按钮,数据看起来就不是我想要的。多尝试一下,慢慢习惯。比记住怎么做更重要的是,要清楚你的数据应该是什么样的,这样你就可以多尝试,确保在出现问题时可以进行调整。
其中一个选项通常位于此处的“连续”按钮。“连续”按钮告诉 JMP 列在此窗口中(不是在数据表中,而是在此窗口中)的组织方式。这是我在浏览这些数据时经常会忘记的一点。因为我们有波长 1、波长 2、波长 3,然后是 3 个读数,它们彼此相邻,对于两个序列来说,它们彼此相邻。这就是连续数据。
您可以在预览中看到,JMP 自动将其修复,使其看起来更正常一些。如果它的顺序是波长 1、读数 1、波长 2、读数 2、波长 2、读数 3,像这样……实际上,我会删除这些顺序,然后是波长 1、读数 1,然后是 2、2、3、3。现在您可以看到,选中连续的复选框后,数据看起来不太好,所以我想取消选中该复选框。这些数据在此窗口中的组织方式以及是否使用此按钮相互关联,以便获取所需的数据。
点击“确定”。现在您可以看到这些数据看起来相当不错。您可以像我们之前对样本1那样进行抽样检查,我们有9.83和141。看起来不错。您还需要抽样检查其他几个数据。完成这些之后,我们不一定需要它。我们将重命名这个波长,并删除此列。我们可以将其重命名为Reed或Read,并在列首加A,然后右键单击即可删除此列。现在,您的堆叠数据已经正确组织。
有了堆栈,这真是太棒了。我想指出菜单中的几点,如果你愿意的话,你可以利用它们来发挥你的优势。你可以在开始之前重命名这里的数据和标签。你可以选择删除这里的所有列,或者保留所有列,或者进行选择,此外,它还会告诉你在浏览时要把数据和标签列放在哪里,以使数据看起来像你想要的那样。
接下来,我们将讨论拆分。拆分与堆叠相反。它是最强大但也最难上手的平台之一。我们将在这里向您展示原因,以及如何关注您可能想要看到的内容。简单来说,这些列代表什么。拆分列或您想要拆分出的列,实际上包含您想要保留在单元格中的响应数据。在本例中,我们将执行读取操作。
“拆分依据”是指读取结果被拆分的列,在本例中是波长。它让我们在预览中看到数据。这里有选项,保留全部或删除全部,具体取决于表中的数据量。点击“确定”,我们可以看到 JMP 的表现相当不错,357 的值为 0.83,405 的值为 9,141 的值为 141。看起来 JMP 完全满足了我们的要求。JMP 做得真棒。
我想说的是,这忘记了一个非常重要的信息,这使得拆分看起来很容易,但是一旦你获得稍微复杂的数据,它就会成为一个问题,因为用户将开始看到他们不想看到的数据,并且他们会在尝试正确拆分时感到非常沮丧。
这又回到了我在总结中提到的,关于独特性,理解是什么让你的数据如此独特,从而得到不同的响应。现在,在这种情况下,样本显然是一个独特的选择,因为这些都按样本分组。JMP 神奇地,我不会说神奇地,JMP 用其内部算法正确地理解了我想要的结果,基于它的组织方式。
但假设情况并非如此。我只需在这里插入一个包含一些随机数的快速列,并根据这些随机数进行排序,以完全打乱它们的组织方式。现在,如果我再次进入拆分,点击调用,我可以看到这些内容在这里,但我可以自动看到宽 JMP 包含这些信息,例如 99.63,但它看起来像是 128,它在这里。
显然,有些事情与目前的进展并不一致。这就是令人沮丧的地方。有时人们需要做很多工作才能理解其中的原因。这就是分组功能发挥作用的地方。根据拆分后要查看的内容,对所有必要的列进行分组,以创建唯一性。
在这种情况下,如果我按样本分组,突然间一切都恢复正常了,因为 JMP 现在可以明确地知道这个表中的这些读数需要按样本分组,因为它们本质上是相互关联的。如果它是一个大类,那么它应该是姓名、年龄和性别,就像我们之前为了唯一性而查找的那样。
您的数据会因其复杂程度而有所不同,但务必记住要达到那种程度的唯一性。我还没发现在拆分时可以进行过度分组。如果您知道涉及的列,即使它可能与您的分组过于冗余,也可以随意添加它,因为过度分组并保持唯一性比分组不足而导致缺失数据要好。
在进行拆分时,要注意行数,以此作为衡量不同成功程度的指标。如果我从 300 行开始,数据相对均衡,每个样本有三个波长,那么当我进行拆分时,应该会得到大约 100 行。如果您发现行数很奇怪,可能是因为 JMP 已经尽了最大努力,但还是没有找到创建所需内容所需的精确组织方式。
这表明你可能没有成功地对某些数据进行分组。你需要注意这一点,并利用这一点来判断你的数据是否正确,这样你就不必抽查10,000行数据了。你可以抽查两三行数据,直到感觉满意为止,然后再继续下一步。如果你能做到这些,拆分就会成为你的第二天性,并在你的日常JMP工作中发挥出巨大的作用。
转置,为了节省时间,我只会简单聊聊,部分原因是我不太常用。我遇到过一些同事经常用它。转置的基本功能是,你可以把原本组织有序的数据,直接翻转过来。这在某种程度上还是有用的。我不太常用。我觉得在某些情况下,我很幸运,我的数据总体上组织得还不错。
但我想向你们展示这个对话框,因为这里唯一性和分组功能与这个标签和这个依据有关。这很有帮助,这样当你尝试转置特定的调用问题时,就可以告诉 JMP 你需要如何组织数据。同样,了解数据的独特组织方式可以让你在该平台上拥有更大的优势。
接下来介绍 Join。Join 是另一个非常棒的功能,而且功能极其强大。我们将讨论其中的一些部分,然后给出示例。打开 Join 后,它首先会显示:这是我要开始的表。这是我要连接的表。我在这里选择要连接的表,然后它会从这里开始。我们会看到一些列,这里还有一些选项,具体来说,就是我想要如何进行连接。
我们实际上要回到我们现有的修改过的大类。我还有另一个表,它是一个扩展大类。基本上,我有更多的姓名、年龄、性别,但这里有心率和BMI。我想把这些信息连接起来。我要回到我原来的表,然后进行连接。这是我的大类。我想把它和我的扩展大类连接起来。默认情况下,它通过匹配列进行连接,我认为99.9%的连接都是通过匹配列完成的。然后你告诉JMP你想要匹配什么。
这又回到了不同层级的唯一性,或者说您希望通过唯一性中的哪一层进行连接的问题。但您可以在两列中选中名称,然后点击“匹配,年龄”。它们不必显示相同的内容。您是在告诉 JMP 需要匹配的名称是什么。这与它们的物理名称无关。
在预览中,你会注意到它做了一些有点奇怪且可能令人讨厌的事情。这里,它实际上现在会给你一个列。它是 2025 discovery mod big class 的名称。你会在其他列中反复看到这个列名。现在,所有列名都变得又大又长。这在连接完成后仔细检查数据很有用,但修复起来可能很麻烦。
JMP 有专门针对此问题的功能,叫做“合并同名列”。合并同名列时,我取消勾选“匹配标记”,你会看到它会将同名列合并成一致的形式。即使名称和名称在技术上因大小写而不同,JMP 也能做到这一点,但 JMP 会将它们合并在一起,因为它识别出它们是相同的。勾选“合并同名列”时,“匹配标记”也会启用。这让你可以在数据处理过程中在表之间进行匹配。
在下面,所以我经常会合并同名列和匹配标记。我还经常会做一件事,尤其是在第一次连接时,我会把主表和宽度表中不匹配的数据也包括进去。我会点击“确定”,我会告诉你为什么我喜欢这样做,因为这是一种很好的方法,可以反复检查以确保我的数据组织得当。
你会看到这个匹配标志列,我们在这里展开它,它同时显示了主表和宽度。如果我们同时查看这两个表,并向下滚动到此处,它代表了原始表和第二个表中都存在的一条信息。你可以看到,我们有原始的身高和体重,但我们也有心率和BMI。
如果您有主要信息,请在此处全部选中。这些信息存在于第一个表中,但在第二个表中没有匹配项。您可以看到,它包含身高、体重,但 BMI 中没有心率。
宽度正好相反。它出现在第二个表中,但第一个表中缺少一些内容。我喜欢用这种方式查看数据,因为它可以让我仔细检查,确保缺少的内容正是我预期会缺少的。
在这个例子中,我有 112 个名字。但第一个表中只有 42 个。我不可能做到 100% 匹配。由于这里有些东西没有匹配,所以设置一些宽度是完全可以接受的,而且完全合理。同样,其中一些名字可能不在我们附加指标的扩展列表中。
至少在总体概念上,这里的主坐标和宽度是没问题的。然后,将两者对齐,这样你就可以抽查一下预期结果了。当你在实际生活中更多地使用数据时,我觉得这非常有用,比如你正在进行一项实验,在一台机器上运行某个程序,然后你还有一个运行表或其他东西,用来记录相关的内容,比如运行 ID 之类的。
如果你们同时进行匹配,这意味着非常具体和不同的事情。例如,你有从机器上获取的数据,但你的运行表上没有相应的信息;或者你的运行表上有某次运行的信息,但你没有从机器上获取数据。在出现错误或类似情况时,这可能是合理的,但也可能代表你在机器上输入ID时出现了抄录错误,或者其他类似情况。
能够对更大的数据集进行这些连接,并能够立即看到数据匹配和不匹配的地方,这对于快速分解和识别来说绝对是一个游戏规则的改变。
再次强调,这里查看行数也是另一个指标,42 行,如果一切都完美匹配,我应该只有 42 行。但我实际的行数要多得多,部分原因是我了解这个表里是否存在宽度,然后是主表。利用这一点也有助于你识别是否存在问题,或者哪些地方需要进一步深入研究。
最后,需要注意的是,在进行此连接时,可能会出现同名列,但实际上它所代表的信息有所不同的情况。如果我深入研究这个问题,为了方便起见,我们只处理年龄,并将年龄设置为 89。无论出于何种原因,表 89 代表的是年龄信息,所以所有信息都是一样的。
如果您仔细阅读并仔细阅读此连接,我不明白为什么在执行调用时,预览功能会有所不同。不过我会点击“确定”。您会看到,在某些情况下,年龄信息被覆盖了。实际上,它并没有被覆盖。这是一件好事。我想知道这是新问题,还是仅在其他情况下已修复。
这是我以前见过的情况,我会根据情况进行覆盖。JMP 一直在改进这一点,在一些情况下尤其明显。但如果你不注意这一点,我们会再次进行仔细检查。
这似乎解决了一些问题,但还是需要注意,虽然我不知道我的两个数据都去哪儿了。这是一个次要问题,我会在旁边处理。最需要注意的是,年龄可能会被那里的另一个表覆盖。当机器数据带有完整时间戳时,我经常会看到这种情况,但就像运行表日期实际上只是运行日期一样,你的一些数据可能会被覆盖。
这是你必须非常小心的事情,因为在后续的很多步骤中,你都不希望看到这种情况发生。最终的结果是,你可能希望在数据中看到某些信息,但现在却什么也没有了,因为它们被覆盖了;或者在这种情况下,你希望看到个人年龄,但现在突然间每个人都变成了八十多岁的老人。
这不利于效率和工作流程,尤其是当你需要回溯七步才能找出问题所在时。提前知道这一点会让你更有把握。在这种情况下,最简单的解决方法是,如果你知道这是一个风险,只需更新列名或完全删除,具体取决于它是否重要。
我现在意识到为什么会发生这种情况,是因为我刚刚更新了这一项。这是因为当我执行召回操作时,它仍然按年龄匹配,而我修改了年龄。我们实际上要删除它。现在您可以看到,部分覆盖操作发生在您的两个表中。这就是最终导致问题的原因。简单的解决方法是更改名称。我们都回到加入和召回操作。现在您会看到其中一些缺少年龄,但其他一些有。然后,其他的会有 age_ ,以表明年龄没有被覆盖。
这就是解决办法。这件事曾经让我措手不及,很多时候都是无意中犯的。现在我不再犯同样的错误了。我只是能更快地发现并纠正它。如果你犯了同样的错误,不要责怪自己。习惯需要时间,而且到最后,你很少会停止犯错。你只是在错误发生时,能更好地纠正它们而已。
接下来是更新。更新是一款非凡的工具。说实话,它刚出现的时候,我对它又爱又恨,而且是我对它又爱又恨,因为它与更新所做的假设有关。如果你不注意这些假设,它们可能会让你吃亏。具体来说,就像我们之前讨论的覆盖问题一样。我要把这个页面放回这里,然后我们真的要……
显然,我在做所有事情时都这样做了,但就是这样。回到我们拥有所有其他年龄段的地方。更新实际上是一个连接,但它不会创建表。我们转到更新,同样的基本设置。现在我们要与扩展的大类进行连接。我们将按姓名、年龄和性别进行匹配。
在这个阶段,你也可以从预览中稍微看出这一点,JMP 做了一些假设。它只进行内联,这意味着它不包含任何来自两个表的缺失值。它只匹配主表中的内容。
其次,它默认会合并同名列。如果你还没准备好,这可能会给你带来麻烦。这正是我早期适应更新工作方式时遇到的问题,我尴尬地在数据中花了很长时间才找到它,然后我不得不回头修复它。
了解了这一点后,JMP 会提供一些额外的功能,让操作更加轻松。如果您有大量数据,或者担心某些数据可能会被覆盖,您可以控制更新表中哪些列被添加。如果我选择只添加,例如心率或 BMI,并确保这些额外的列不会被添加,以免它们不属于连接操作的一部分,从而避免潜在的覆盖风险。
同样,在这里,我们正在将列添加到主表中。我可以不选择任何列,并且硬停止按钮会阻止覆盖操作。或者,您也可以在这两种情况下都允许选择,以控制覆盖操作。当您学习如何使用更新功能时,它确实是一件很棒的事情,但它也有一些注意事项。例如,现在我刚刚运行了这个命令,它将BMI添加到了这个表中。现在我的主表已被更改。如果这不是您想要执行的操作,那么更新可能不是您在这个特定用例中想要的。
然而,随着人们习惯于使用更多的 JMP 并且越来越熟练,希望拥有更少的表格而不是更多的表格通常是很常见的,特别是当它变得疲倦并且试图跟踪你制作的所有表格,表格来自哪里等等。
你能通过一些小技巧来减少表数量,这非常值得赞赏。在这种情况下,Update 在这方面做得非常好,尤其是在我有三四个表的情况下。我还有一个表包含其他人员指标。如果我必须分别与这些表进行连接,我会再创建三四个全新的表来堆叠该连接。Update 让我能够将所有内容合并到一张表中。
我们这里就不展开讲了,但如果有机会,最好研究一下虚拟连接,它允许你连接多个表,而无需实际连接它们。这真的很酷。JMP 的员工等等已经做过很多演示,应该也有一些网络研讨会可以进一步解释这一点。如果你有时间,可以尝试一下这个功能,这真的很有趣。但是 Update 会把这个连接添加到你的主表中,效果看起来真的很棒。
现在我们要讲一个更简单的方法:连接。简单来说,连接就是把表格一个接一个地叠在一起。
它就是这么做的。实际上,我可以直接使用这个发现模块。我们接下来要进行连接。现在我们基本上只需列出所有想要连接在一起的表即可。如果我想在这里添加扩展的大类,它会将它们叠加在一起。如果我想尽量减少表数量,我可以将其附加到第一个表中。
您还可以创建一个源列。我建议这样做,尤其是在您要创建一个单独的表的情况下,因为这样您可以控制数据的来源。如果您点击“确定”,它只会更新您的数据,将它们放在彼此的顶部,这样我就可以准确地看到哪些行来自哪个表,在这方面它的效果非常好。
人们在使用 Concatenate 时遇到的问题通常是数据看起来不太像他们想要的,或者数据放在了错误的位置。在这种情况下,我会称之为“指标”,或者实际上……我想知道它是否能用不同的方式表达同样的意思。
当我进行连接时,你会看到这里有两列。这是一个明显不同的示例。然而,JMP 确实在意,至少从我以往的经验来看,他们会在意大小写或拼写错误之类的问题,这些问题可能会扰乱数据的组织方式。也可能是这种情况,仅仅是命名约定不同或拼写错误,人们可能会手动输入一些内容,导致你的数据不在它应该在的位置。
对于BMI(身体质量指数)这种只出现过一次的情况,修复起来相当简单。这里有一个有趣的小技巧:如果你点击其中一个空单元格,然后右键点击并选择“匹配单元格”,所有空单元格都会被选中。
现在我可以反转选择,这样所有我想放在这里的、它们应该放在哪里的内容都会被选中。我可以复制这些内容,然后如果我只选择此列的标题,它们就会保持选中状态,我可以直接粘贴它们,这样错误就解决了。我可以删除此列。这是最快捷的方法。
如果这种情况发生在十几列上,速度会更慢,而且更麻烦。如果这种情况真的发生了,最好的解决方法是修改列名。不过,根据你正在做的事情以及你处于流程步骤的哪个阶段,有很多方法可以解决这个问题。当你想解决这个问题时,并没有真正意义上的最佳方法。
但这是我发现人们在进行连接操作时遇到的最大问题,因为他们有很多列,而现在数据却没有按要求放到合适的位置。从此以后,问题就出现了。但除此之外,连接操作效果非常好,而且它是一种将多个表快速整理成一个表的好方法。
现在我们快要结束了。我将在这里简要地讨论一下这些技巧,而不会提供太多具体的例子,部分原因是我并没有大量使用它们来积累大量的技巧和窍门。但我已经用过足够多的技巧了,知道它们很有用,值得研究和尝试。
JMP 查询生成器基本上允许您从现有的多个数据表构建 SQL 查询。您还可以将 JMP 查询生成器与实际存储在计算机外部数据库中的数据表一起使用,并将所有数据导入 JMP。您可以将 JMP 查询生成器与现有表混合使用,这真的很棒。
缺失数据模式,我看过很多关于缺失数据模式的精彩演示。我实际上并没有在日常工作中使用缺失数据模式,部分原因是我很幸运,没有遇到太多缺失数据的问题。
此外,在我已经习惯用一种完全不同的方式挖掘数据,找到我的缺失数据模式可能存在的位置之后,缺失数据模式才出现在我身上。我只是还没有把缺失数据模式添加到我的工具库中。我一直告诉自己,我需要多尝试一下,因为当你看到其他人使用它时,你会发现这是一种非常有趣的数据查看方式。
比较数据表。这个功能很有趣……我会快速演示一下。它允许你选择几个表进行比较。JMP 会尝试匹配它们的名称。在这里你可以看到它已经完成了,你可以修复它。但是,如果你直接点击“比较”,它会遍历并显示表中所有差异的位置。
就像我在这里看到的,我不确定它到底在显示什么。我需要多玩几次才能熟悉它。但这确实是一个有趣的方法,即使没有别的办法,也可以拿两张表来检查一下是否所有数据都一样。很多时候,我会检查一下自己是否无意更改了数据。
当你深入了解这些变化的细节时,你会发现很多选项才是真正发挥作用的地方。我鼓励大家尝试一下,看看在自己的用例中效果如何,因为它是一个很好的平台,而且我还没有充分发挥它的全部功能。但 JMP 确实能让我们做一些很酷的事情,而这些事情是我自己无法用其他方式做到的。
最后,匿名化,这是列表中的最后一项。基本上,它会获取你面前的表格,当你点击“确定”时,它就会将其匿名化。现在没人知道这意味着什么。这就是创建不包含任何其他人能够理解或消化的信息的数据表的意义所在。
如果您在表格中拥有专有信息,但希望 JMP 帮助您解决遇到的问题,您可以匿名化您的表格,然后使用此信息重新创建您的问题,并能够安全地与其他 JMP 支持人员共享此信息,而不必担心违反您公司可能存在的任何专有 IP 规则,因为现在没有人知道这些数据来自哪里以及发生了什么。
这真是个有趣的信息;JMP 也能让这个过程变得非常快速和简单。不妨也试试看。这真是一个有趣的方法。
我想这差不多就是表格菜单的结尾了。我要感谢JMP以及所有参与探索系列的朋友们,感谢你们给予我这次机会,因为这是一个非常有趣的话题。我相信很多人在JMP的旅程中都会从中获得价值。非常感谢大家。今天的内容就到这里。