輕鬆從電子表格更新 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 中實現此功能,請對願望清單項目進行投票。