轻松从电子表格更新 JMP 数据表 - 第 1 部分在大数据时代,我们希望将所有数据存储在数据库、hadoop 服务器中,或者直接从流中访问数据。 然而,仍然有许多数据保存或写入电子表格中,由机器、工程师、实验室人员或其他类型的操作员手动或自动更新。 在 JMP 中,可以轻松地将任何类型的数据从电子表格导入到 JMP。 您甚至可以使用自动生成的“源”脚本轻松自动化此操作。 但是,如果再次运行此脚本,则会打开一个新数据表,并且不会更新当前数据表。
通常这并不完全是您想要的。 为什么? 您可能已经完成了一些数据清理或重新编码。 您可能还完成了一些保存到数据表中的分析,您还想进一步将其用于新数据。 我将在本文中向您展示一种使用电子表格中的新数据更新当前数据表的方法,保留当前拥有的行并仅添加电子表格中的新行。
我想介绍两种情况:
- 在本文中,我将介绍垂直结构化数据的简单情况。 这意味着您有一行包含列名称,其他行中包含数据。

- 在一个第二篇文章我将介绍水平结构化数据案例。 即第一行/第一列是参数名称,后面的列是数据。 第二行是单位,第三行是批次号。 然后是一个空行,之后对于另一个参数再次执行相同的操作。 这在电子表格中更容易阅读,但实际上不太容易分析。 我经常看到这类数据,尽管训练人们以垂直方式输入数据比尝试使用水平结构要好得多。

那么让我们看一下电子表格数据,它是天气数据,它对于演示这个概念来说很简单。 您可以在附件中的 JMP 数据表和 Excel 电子表格中找到第一种情况的脚本。
我们先从情况说起
我们已经导入了电子表格的早期版本(截至该时间点的 3 行数据)。 现在我们要更新数据表。 您会在数据表的左上角窗口中看到更新脚本。 该脚本将执行以下操作:
- 访问当前数据表名称以及该数据表中的行数
- 设置我们想要从中获取新数据的电子表格文件名和工作表名称
- 打开电子表格并将工作表数据读入帮助数据表。
- 我们依赖第一次导入数据时生成的源脚本。
- 但将“Data Starts on Row”条目从 (2) 更改为 (2+n_Rows),因此我们只获取尚未导入的数据
- 现在我们只需使用“附加到第一个表”选项来连接两个表。
cdt = Current Data Table();
excelFile = "WeatherData.xlsx";
name_worksheet = "WeatherData"; // or "Sheet1" for this Excel book example
n_Rows = N Rows();
dt_h1 = Open(
excelFile,
Worksheets( name_worksheet ),
Use for all sheets( 1 ),
Concatenate Worksheets( 1 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 + n_Rows ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 )
),
Invisible
);
cdt << Concatenate (dt_h1, Append to first table);
Close(dt_h1);
结论
看起来并不难。 好处是,您可以使用数据清理功能(例如重新编码),将其保存为公式列,然后新数据将自动处理。 或者您已经使用以前的数据创建了预测模型,将预测公式保存回数据表并查看新数据的预测(例如将其与新模型或实际预测数据进行比较)。 我相信您会发现很多用例,并希望这对您有用。
当然,您可以使用它并通过向数据添加分析来扩展它,例如更新控制图或其他趋势分析。 使用 Windows Scheduler,您可能需要更新您的报告并将其发送到我们的新产品JMP 直播,因此其他人(不一定是获得许可的 JMP 用户)可以通过 JMP 的交互性(如数据过滤器、列切换器等)在 Web 浏览器中访问报表。
接下来会发生什么
在我的下一篇文章中,我将讨论第二种情况,它略有不同,但难度并不大。
我很想知道您是否遇到此类问题,或者您的数据是如何构造的(在电子表格中)。 请留下您的评论。
一切顺利,
马丁
PS:对文件的两条评论:
- 在 WeatherData.jmp 中,您将找到一个用于使用附加的 Excel 文件更新数据表的脚本。 两个文件必须保存在同一文件夹中(这是为了简单起见,您可以使用 Pick File() 轻松更改硬编码的文件名,并提取名称。
- 第二个脚本是“删除最后两行”,它允许删除数据表中的行以从 Excel 工作表中再次更新,而无需手动删除这些行。 所以一切都是为了您的方便:)
使用来自 (的新数据更新您当前的 JMP 数据表垂直的结构化)电子表格,保留您在当前数据表中所做的更改。
- 第1部分回复:轻松从电子表格更新 JMP 数据表 - 第 1 部分嗨,霍吉,
如果您不对以前的数据进行任何更改,这将是一个选项。 例如,您可能已经对数据进行了一些质量检查,并更改或排除了数据,或者做出了额外的评论或其他任何内容。 一旦您更改了某些内容,这种附加数据的方式将消除您通常不需要的所有更改。
回复:轻松从电子表格更新 JMP 数据表 - 第 1 部分另一种方法:
1)通过加载新数据来源脚本
2)从主表中删除所有行
3)通过连接追加新数据
dt = Current Data Table();
dtnew = dt << Run Script( "Source" );
dt << Select All Rows << Delete Rows;
dt << Concatenate( dtnew, Append to first table );
Close( dtnew, NoSave );
回复:轻松从电子表格更新 JMP 数据表 - 第 1 部分你好,hogi,感谢您提供额外的选项,非常好。
你是对的:
“使用第二个表中的数据更新主表”将仅使用当前表中的列,并在列名匹配时更新列。 它不会添加第二个表中的任何其他列。
“合并同名列”还将与类似命名列中的数据合并/覆盖/填充空白点。 但它也会添加第二个表的其他列。
对于第一个,也可以使用“表”->“更新”功能,特别是如果您不想使用此操作创建新数据表,而是使用第二个数据更新现有数据表。
我不知道还有什么其他区别。
回复:轻松从电子表格更新 JMP 数据表 - 第 1 部分我只是想知道“使用第二个表中的数据更新主表“ 和 ”合并同名列“ - 他们在这里做的完全一样,对吧?

经过一段时间的摆弄后,我发现使用带有附加列的第二个表时存在差异:
——”使用第二个表中的数据更新主表”更新主表(由合并同名列),没有额外的列
——”合并同名列“ 是否相同的,但此外,它还添加第二个表中的新列。
还有更多差异吗?
回复:轻松从电子表格更新 JMP 数据表 - 第 1 部分或者,可以使用加入平台...
首先加载两个表:
Open( "$DOWNLOADS/WeatherData.jmp" );
Open( "$DOWNLOADS/WeatherData.xlsx", Worksheets( "Backup_NewData" ), );
那么最简单的方法就是“按行号”加入它们:
Data Table( "WeatherData" ) << Join(
With( Data Table( "Backup_NewData" ) ),
Merge Same Name Columns,
By Row Number
);
或者,日期列可用于识别独立于行号的各个条目。
这允许通过更健壮的方式来连接表匹配列:
(注:由于1分钟的时间偏移,10月15日和16日将出现两次)
Data Table( "WeatherData" ) << Join(
With( Data Table( "Backup_NewData" ) ),
Merge Same Name Columns,
By Matching Columns( :Date = :Date ),
Drop multiples( 0, 0 ),
Include Nonmatches( 1, 1 )
)
回复:轻松从电子表格更新 JMP 数据表 - 第一部分@martindemel ,你上面提到:
对于第一个,也可以使用表->更新功能,特别是如果您不想通过此操作创建新的数据表,而是使用第二个数据表来更新现有数据表。
这正是我想要做的,但是“更新”没有从新表添加行的选项,它只能更新现有数据。“连接”也没有不创建新数据表的选项。这非常令人沮丧,因为我正在将此数据表与虚拟连接一起使用,而虚拟连接链接与新数据表断开了。
我在 JMP 愿望清单中找到了这个功能: 表连接:更新主表的选项。如果您希望在 JMP 中实现此功能,请为该愿望清单点赞。