Brian Corcoran - SAS软件开发总监
JMP 提供了多种方式将各种数据格式导入产品。此外,它还提供了大量的导出方式。第一个原因显而易见。多年来,人们开发了许多用于收集和格式化数据的工具。在大多数情况下,这些工具无法将数据转换为 JMP 数据表格式。导出功能的目的是为了与广大用户共享结果,而其中许多人可能没有安装 JMP。
本文旨在简要介绍 JMP 13 的一些导入、查询和导出功能。虽然桌面截图使用的是 Windows 版本,但本文讨论的所有功能在 Mac 版 JMP 中也同样可用。我将采用叙述的形式,以便更清晰地展示完整的端到端工作流程。我选择了一个近期发生的真实案例。
我有两个儿子,一个即将大学毕业,另一个读大一。大儿子在大二的时候转了专业。那段时间,我们经常讨论他未来的职业选择。你对什么感兴趣?你觉得你能为社会做出哪些贡献?你想要一份办公室工作还是更需要体力的工作?你想去旅行吗?诸如此类的问题不胜枚举。
小儿子已经有了学习计划,但他不太确定这是否是正确的选择。这次,我想多了解一些信息来帮助他做决定。各种工作的就业前景如何?这或许能帮助他确认目前的选择,或者考虑其他方向。我和他聊过,他说他不介意读个硕士学位,但可能不想读博士。他可能想从事技术领域的工作,但也对其他领域持开放态度。他喜欢改进流程的想法,也喜欢在工作中四处走动。最后,他希望找到一份薪水较高的工作。好的。
原来美国劳工统计局有工具可以帮助我们做到这一点。bls.gov网站包含大量关于就业增长和薪资、所需教育水平,甚至还有职位描述的数据,让访问者了解该领域的具体内容。这些数据可供公众下载,对我来说,这是一个很好的探索起点。
在浏览美国劳工统计局 (BLS) 网站时,“就业预测”和“职业就业数据库”部分似乎最相关。 [1]该网站提供了一个数据查看器,但我希望将其导入 JMP。幸运的是,网站上有一个按钮可以下载 Excel XLSX 格式的原始数据。太好了!我下载了文件,大小为 500K,大小适中。工作簿中有 12 个表格,但其中 1.7 表格(包含 2014 年的就业空缺数据以及到 2024 年的预测)似乎是最合适的。我使用 JMP 的“文件”->“打开”功能打开工作簿,Excel 向导会使用默认设置。我在“工作表”下选择“1.7 表格”来更改导入设置:
使用默认设置预览工作表
这里有很多表头信息。我反复调整 JMP 的列标题和数据起始位置的微调按钮,最终找到了一个看起来更合理的设置:两行表头,表头从第 2 行开始,数据从第 5 行开始。
调整设置后的工作表预览
我点击“导入”按钮,1000多行数据就导入进来了。美国劳工统计局(BLS)提供了更详细的数据集,但这个汇总数据集似乎满足我的需求。唯一不足的是,我的JMP表格似乎存在问题,列被转换成了字符格式。这是怎么回事?

左对齐文本表示字符格式
如果我向下浏览数据,可以看到表格末尾有四行脚注。

默认情况下,JMP 会扫描前 100 行数据来确定数据类型。这样可以实现高效且响应迅速的预览。但是,实际导入时,所有行都会被扫描,并且列会被转换为字符型以防止数据丢失。我当然可以直接更改列类型,但我也可以返回并使用其他方式进行导入。在“预览窗格刷新”面板中,有一个“显示所有行”的复选框。选中此复选框后,预览窗格中不仅会显示表格中的所有行,而且还会使用所有行来确定列类型。

显示所有行
现在,我可以跳转到表格末尾,指定数据在脚注上方结束。我需要点击向导中的“下一步”按钮,进入第二页选项。在数据预览中,我点击想要包含的最后一行,然后在向导的第二个窗格中,点击“数据结束于第几行”旁边的绿色加号按钮。向导会自动填充正确的行号,然后我可以再次点击“导入”按钮,使数据格式正确。
现在我已经把数据完整地导入到 JMP 中,其中包含一千多个职业需要搜索。前两列的名称又长又难懂,所以我按照美国劳工统计局 (BLS) 的较长名称,将它们缩短为“矩阵标题”和“矩阵代码”。现在,我想缩小搜索范围。表格中有一个名为“职业类型”的列,但它似乎并不像“职业类型”这个概念。对于这一列,每一行都只显示“摘要”和“项目”。原来,“摘要”指的是该行包含特定类型的所有工作,例如所有工程师。“项目”则可能指的是机械工程师。因此,我首先想做的就是删除所有摘要行。我可以使用类似“SELECT WHERE”的语句,然后对表格进行子集筛选以删除摘要行。但是,我还想应用其他筛选条件。查询构建器 (Query Builder) 非常适合这项工作。
如果您还不熟悉 JMP Query Builder,它是一款功能强大的查询工具,提供图形用户界面 (GUI),用于在 JMP 数据表上创建 SQL 查询。JMP 还提供了界面类似的工具,用于通过 ODBC 查询数据库,以及通过 JMP to SAS 连接器查询 SAS 表。不过,您无需了解 SQL 即可使用 Query Builder。您可以通过用户界面创建查询并保存以供重复使用,而无需查看底层 SQL 代码。
JMP 表的查询构建器可以从“表”菜单调用。首先出现的表选择对话框允许您指定要用于查询的表。在本例中,我只想筛选数据,因此我将选择已导入的表作为主表,然后继续。

查询构建器表选择
选择“构建查询”将打开我的主查询构建对话框。前两列包含美国劳工统计局 (BLS) 的职业名称和代码,名称仍然有些晦涩难懂,分别是“矩阵标题”和“矩阵代码” 。我并不关心代码,所以忽略它。我对职业列的名称仍然不满意,因此在将该列添加到查询后,我将单击“JMP 名称”以打开一个编辑框,将查询结果的标题更改为“职位名称” 。

更改查询后列名
我还会添加“职业类型”列,因为我想排除汇总项。我还会添加“2014-2024 年就业变化 - 数量”列,因为我更关注实际新增就业岗位的数量。“增长百分比”列看起来很有意思,但可能会产生误导。增长最快的职业之一是风力涡轮机维修人员。然而,这个职业的就业人数只是从五千人增长到一万人,相对于许多其他领域来说仍然很小。因此,我选择使用新增就业岗位的数量,而不是增长百分比。
我还会添加“年薪中位数” ,因为这是我儿子列出的标准之一,以及“入职所需的典型教育水平” 。最后,我还会添加或许是所有列中最重要的一列: 2014-2024 年因增长和人员更替而产生的职位空缺。事实证明,许多职业的增长速度相对较慢,但由于需要填补大量退休人员的空缺,因此入门级求职者拥有巨大的机会。机械工程就是一个例子。在过去十年中,该职业的就业岗位增长适中,为 14,600 个(5%)。然而,如果将人员更替也考虑在内,该职业新增的职位总数为 102,500 个,而该职业的总职位数为 277,500 个!这是一个典型的比例。统计学家在同一时期需要替换 50% 的职位。以下是进行任何筛选之前的查询构建器列选择:

筛选前查询
我想添加一列来反映工作岗位更替和增长的百分比。我可以点击“可用列”旁边的红色三角形菜单,然后选择“添加计算列”。我可以选择“职位空缺…”作为分子, “2014 年就业人数”作为除数,然后点击“确定”。
添加计算列
该列已创建,名为计算器1 。我可以使用上下文菜单将其名称更改为“按总计计算的作业数” ,然后将其添加到“包含列”中。在那里,我可以将“格式”字段更改为“百分比”。由于变量名称较长,您可能需要展开“包含列”窗格才能看到所有字段。现在,我想我可以开始使用一些筛选条件来缩小搜索范围了。
首先,我可以将“职业类型”拖到“筛选器”面板。在那里,我可以点击“行项目”,只包含非汇总类型的行。现在,我要筛选“年薪中位数”,只包含年薪高于 75,000 美元的职位。当我将“年薪”拖到“职业类型”筛选器下方时,默认情况下会执行“与”运算。这正是我想要的。如果需要“或”运算,则需要点击“或”按钮。我还输入了“典型教育要求”,并进行了扩展选择,包括“学士学位”、“硕士学位”以及短横线(表示未编码)。最后,我注意到剩余的职位中有很多是管理类职位。入门级员工不太可能获得管理职位,因此我想排除这些职位。我可以使用“包含”筛选器,将其切换为“不包含”来实现这一点。为此,我将“矩阵标题”变量拖到筛选器上。然后,点击红色三角形下拉菜单,选择“筛选类型->包含”。 “职称”旁边会出现一个下拉列表,选择“不包含”,然后填写“经理”。现在,我可以对“主管”执行相同的操作,排除首席执行官(顺便一提,过去十年首席执行官人数下降了3%)。筛选完成后,列表如下所示:
已完成筛选
现在我可以点击“运行查询”按钮,获取包含所需数据的表格。我们已经将一千多行数据精简到了五十八行。我们可以保存查询语句,以便稍后重新打开进行修改。用于生成该表格的查询语句也作为表格脚本保存在数据表中。您可以编辑该脚本来查看其运行逻辑,运行它来重新生成数据,甚至可以修改查询语句(但请务必谨慎操作)。

数据表中的源脚本
现在我有了数据,接下来我要在图表中用“职位”作为标签。我启动图表生成器,将 X 轴设置为“年薪中位数” ,Y 轴设置为“职位空缺”。为了包含更多信息,我将颜色设置为“典型教育水平要求”,并将标记大小设置为百分比,以显示新增职位占总劳动力的比例。方法是将“大量就业岗位”拖到“大小”放置区。浏览图表时,我注意到软件职位占据了相当显眼的位置。我将应用程序和系统软件职位标记为菱形标记。我可以把这个图表发给我的大儿子,他主修计算机科学,让他相信自己做出了正确的选择。最后,在对标题进行一些调整后,图表最终看起来是这样的:

JMP中的图形构建器输出
我决定将这份输出结果以交互式 HTML 报告的形式发送给我的大儿子。这样,他就可以一边工作,一边轻松地将鼠标悬停在数据点上,探索数据,或者更准确地说,是在电脑上玩游戏的时候。交互式 HTML 会将分析数据直接包含在 HTML 报告中,因此如果您处理的是敏感数据,请务必注意这一点。我可以轻松地使用“文件”->“另存为”(Mac 系统上为“文件”->“导出”)创建报告,然后在“保存类型”下拉菜单中选择“带数据的交互式 HTML”。我可以将这份独立的报告邮寄给我的儿子,他可以在网页浏览器中打开它,并将鼠标悬停在数据点上查看:
Chrome 浏览器中的交互式 HTML 报表
我的小儿子是最初的目标受众,他经常使用iPad。我想让他先看一下这些数据,然后再让他自己深入探索。iPad上的Graph Builder可以打开JMP数据表,如果表格中包含Graph Builder脚本,它会自动在Graph Builder中打开。我可以先对数据表进行一些分析,然后再让儿子自己探索数据。我想在这个图表中更突出职位空缺的数量。我以“招聘信息……”为Y轴,以“职称”为X轴,薪资范围用颜色表示。但是,图表看起来有点杂乱无章。

初次尝试
我可以重新打开图表构建器控制面板,只需单击“树状图”按钮,就能得到我更喜欢的图表。最棒的是,只需将鼠标悬停在方格上即可轻松获取更多信息:
图表构建器树状图
在发送数据表之前,我需要将图表构建器脚本嵌入其中。具体操作方法是:点击图表构建器轮廓节点旁边的红色三角形下拉菜单,然后选择“保存脚本”->“到数据表”。系统会提示我为脚本命名,我将其命名为“职位空缺”,然后点击“确定”。这样,树状图脚本就会嵌入到表格中。
现在我可以将数据表放在 Dropbox、iCloud 或 Google Drive 等云存储文件夹中。iPad 版 JMP Graph Builder 可以识别这些存储文件夹,我可以快速将表格下载到 iPad 上。最初,屏幕上只会显示一个大的 JMP 图标,用于选择表格。
表格选择窗格
点击此按钮后,图形生成器应用程序将打开表格,查找表格中嵌入的第一个图形生成器脚本,并显示该分析。
图表自动打开
现在我儿子有了数据和我初步的分析,他可以自己动手研究这些数据和图表了。例如,他可以点击“筛选”按钮,选择任意一列进行探索。一个例子是筛选“入职所需典型学历”,看看哪些职位需要学士学位,哪些职位需要硕士学位:

按所需学位筛选
Graph Builder 应用的另一个非常棒的功能是,你可以尝试桌面版 Graph Builder 中提供的大部分图表。所以,如果我儿子想查看不同的可视化效果,甚至想拖动不同的列来从不同的角度查看数据,他都可以做到。列名旁边有“抓取点”,表示你可以拖动它们,而且当你拖动变量时,熟悉的 Graph Builder 放置区域也会高亮显示。此外,还可以自定义标记、背景颜色和坐标轴。他可能会把输出结果改成这样:

使用 iPad 应用创建新图表
我的这份工作就完成了。我已经给每个儿子发了一份互动报告供他们参考。对于还在探索阶段的儿子,他可以自己创建报告,希望他能从中获得一些关于自己选择的启发。
还有很多其他方法可以将数据导入 JMP,包括连接到 SAS、导入文本数据、从其他来源获取的 SPSS 数据、Triple-S 调查数据等等。请查看“文件”>“打开”对话框,了解所有选项。此外,您生成的报告可以以交互方式与他人共享,即使接收者没有安装 JMP 也可以。
[1]美国劳工统计局。 《就业预测》。美国劳工统计局,无日期。2017年8月18日。https
/www.bls.gov/emp/ep_data_occupational_data.htm