<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的更多功能。
請享用!