<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />完美的数据集很少见。 如果手动输入,则更是如此!幸运的是,JMP提供了数据清洁工具来帮助清理我们的混乱情况。 下面的示例演示了一些(但绝对不是全部!)查找和修复两个常见的手动输入工具的方法。
首先,让我们设置一个可以使用的快速数据集。 您需要将下面的脚本复制到新的脚本窗口中,然后单击运行脚本图标。想象一下,这些数据是从10个设定位置沿着10个粉末涂层的钢筋手动输入的涂层厚度(mm)的磁性测量值。 由于工艺控制,厚度始终小于1。可能会有厚度为0的裸露的未镀膜斑点。
//设置矩阵和数据表以进行数据清洁
名称默认为此处( 1个) ;
//加载具有模拟数据收集错误的随机矩阵
垫子= [
0.35 830 0.71 0.91 0.74 。 0.71 0.92 0.96 0.28 ,
0.50 0.93 0.48 0.13 0.70 0.04 0.25 。 0.99 0.98 ,
0.26 0.19 750 0.22 0.97 0.35 0.30 0.25 0.64 。 ,
0.19 0.19 0.53 0.31 0.58 0.65 0.64 0.53 0.02 0.35 ,
640 0.27 0.48 0.63 0.70 0.26 0.83 0.78 0.12 0.30 ,
0.54 0.38 0.47 。 0.89 0.71 0.91 。 0.74 0.16 ,
0.38 0.09 0.18 0.87 0.38 0.45 0.97 0.13 0.08 0.03 ,
0.75 0.17 0.33 580 0.88 0.63 0.14 0.18 0.40 0.79 ,
0.59 0.48 0.19 0.71 0.70 0.01 。 0.52 0.01 0.41 ,
0.44 0.07 0.87 0.34 0.05 0.64 0.11 1.00 0.70 0.91
] ;
//根据随机矩阵制作数据表
dtNew =如表(垫子) ;
现在,让我们通过绘制和汇总数据来查找错误。 在此示例中,我专注于数据清理,但在现实生活中,我也对数据有了一些基本的了解。 请记住,在进行任何分析PDD之前(绘制数据虚拟对象)!!

分发平台是查看数据异常的好工具。 请注意,其中的条目比我们的数据集中的预期大1000倍。 我个人遇到检查员/操作员错过小数位甚至选择忽略所有小数位以更快的数据! 在进行更改之前,最好先与操作员确认此类错误。
Columns Viewer是快速简便的汇总工具。 下图显示了所有列的摘要表。 请注意,我们的数据中缺少10个值。 缺少应为零的值是一个非常常见的手动输入错误,甚至比我经验中错位或丢失的小数更常见。 对于我们的小表而言,这似乎微不足道,在这里我们可以轻松看到所有缺失值。 但是,请想象一下,如果我们的数据集包含成千上万甚至数百万行的数据,那么会遇到困难! 想到干草堆和针头。
摘要统计信息的使用方式与我们上面的分发平台相同。 请注意,col1-col4的最大值比预期的大100倍–与我们在分发中了解到的相同。

我们的探索性分析确定了数据中的两种错误。 缺少小数位和应为零的值。现在让我们修复它们!在像我们这样的小表中,在数据表中手动进行必要的更改非常容易。 我们将假定情况并非如此,需要更有效的方法。
JMP中的Recode Utility提供了一个菜单驱动的选项,用于更改数据表中的值。 必须选择列才能访问该实用程序。 我们的两个错误都可以通过重新编码来解决。


现在想象一下我们的数据集有10000行和100列。 突然之间,重新编码并不那么吸引人。 对我们来说幸运的是,可以使用JSL(JMP脚本语言)快速有效地解决我们的问题!
首先,让我们找到并修复所有缺少小数点的数据。 可以想象,通过循环自动执行手动查找和修复例程。 如您所见,这确实可以完成工作。
为使此练习简单明了,请关闭数据表和脚本窗口。 将下面的脚本粘贴到新的脚本窗口中并运行该脚本。
名称默认为此处( 1个) ;
//加载具有模拟数据收集错误的随机矩阵
垫子= [
0.35 830 0.71 0.91 0.74 。 0.71 0.92 0.96 0.28 ,
0.50 0.93 0.48 0.13 0.70 0.04 0.25 。 0.99 0.98 ,
0.26 0.19 750 0.22 0.97 0.35 0.30 0.25 0.64 。 ,
0.19 0.19 0.53 0.31 0.58 0.65 0.64 0.53 0.02 0.35 ,
640 0.27 0.48 0.63 0.70 0.26 0.83 0.78 0.12 0.30 ,
0.54 0.38 0.47 。 0.89 0.71 0.91 。 0.74 0.16 ,
0.38 0.09 0.18 0.87 0.38 0.45 0.97 0.13 0.08 0.03 ,
0.75 0.17 0.33 580 0.88 0.63 0.14 0.18 0.40 0.79 ,
0.59 0.48 0.19 0.71 0.70 0.01 。 0.52 0.01 0.41 ,
0.44 0.07 0.87 0.34 0.05 0.64 0.11 1.00 0.70 0.91
] ;
//根据随机矩阵制作数据表
dtNew =如表(垫子) ;
myCols = N Cols ( dtNew ) ;
对于( q = 1个, q <= myCols , q ++,
关口=柱( q ) ;
对于每一行(关口[] =
如果(
关口[] > 100 ,关口[] / 1000 ,关口[]
) ;
如果(
不见了(关口[]) == 1个,关口[] = 0 ,关口[]
) ;
) ;
) ;
小数位丢失和零丢失现在已修复!此方法合法但冗长,并且对于较大的数据集可能很慢。我认为逻辑索引是一种更好的方法。 在JSL中,逻辑索引是使用Loc()函数完成的。 显示起来比说起来容易一些。
关闭表和脚本窗口(如果需要,请保存)。将以下脚本粘贴到新的脚本窗口。 单击运行脚本。
名称默认为此处( 1个) ;
//加载具有模拟数据收集错误的随机矩阵
垫子= [
0.35 830 0.71 0.91 0.74 。 0.71 0.92 0.96 0.28 ,
0.50 0.93 0.48 0.13 0.70 0.04 0.25 。 0.99 0.98 ,
0.26 0.19 750 0.22 0.97 0.35 0.30 0.25 0.64 。 ,
0.19 0.19 0.53 0.31 0.58 0.65 0.64 0.53 0.02 0.35 ,
640 0.27 0.48 0.63 0.70 0.26 0.83 0.78 0.12 0.30 ,
0.54 0.38 0.47 。 0.89 0.71 0.91 。 0.74 0.16 ,
0.38 0.09 0.18 0.87 0.38 0.45 0.97 0.13 0.08 0.03 ,
0.75 0.17 0.33 580 0.88 0.63 0.14 0.18 0.40 0.79 ,
0.59 0.48 0.19 0.71 0.70 0.01 。 0.52 0.01 0.41 ,
0.44 0.07 0.87 0.34 0.05 0.64 0.11 1.00 0.70 0.91
] ;
//查找错误的位置并替换为正确的值
垫子[位置(垫子> 100 )] =垫子[位置(垫子> 100 )] :/ 1000 ;
垫子[位置(不见了(垫子))] = 0 ;
dtNew =如表(垫子) ;
看看结果! 我们使用2行代码和无循环修复了缺失的十进制和缺失的零! 请注意,为避免循环,我生成了具有正确值的新数据表。如果要保留现有表,则需要循环以将值分配给数据表中的每一列。我会让大家自己尝试一下。

就是这样Loc(rndMat> 100)是rndMat中的索引矩阵,其中值大于100。rndMat [位置(垫子> 100 )] =垫子[位置(垫子> 100 )] :/ 1000将这些索引处的值替换为当前值除以1000。替换缺失的值更简单,因为我们只是将缺失的值替换为零。
有关Loc()函数的更多信息,请参见脚本指南的第7章。 脚本指南可在Help_Books下找到。逻辑索引不仅具有清除数据的作用,而且如果您还不熟悉它,则值得研究。
希望本练习可以帮助您释放JMP的更多功能。
请享用!