JMP Live 是一個強大的平台,用於分析和視覺化不斷增長的資料集,尤其擅長從互聯資料倉儲中刷新表格。然而,在新產品開發過程中,這些流程往往不完善,跨多個使用者或站點收集資料會成為一項後勤挑戰。
大家好!歡迎觀看我的演講。我叫 Timothy Whetstone,和我的共同演講者 Sage Darling 一起。我們都在 IDEXX 實驗室工作,本次演講的主題是如何使用 JMP Live 作為資料倉儲。
過去一年,我們一直在頻繁使用 JMP Live。我們認為,只要我們擁有從資料收集來源到倉庫再到 JMP Live 的強大流程,就能為現有的各種資料倉儲設定自動刷新表,這真的很棒。對於這個用例來說,它真的很棒。
隨著使用次數的增加,我們發現了一些希望 JMP Live 能夠實現的潛在用例,但它本身的功能不足以輕鬆實現這些用例。這種情況主要發生在某些資料來源或資料產生來源不會進入任何雲端服務或大型資料倉儲的情況下,您基本上只是取得檔案和數據,而這些資料基本上只能在本地存取。尤其是在您擁有這些資源的情況下,您會不斷獲取到實際上屬於同一最終數據集的數據,而這些數據只是暫時存在於本地。在進行這項工作時,我們正在考慮進行許多縱向研究。
我們有一些手動文件。我們希望它們基本上都集中在一個地方進行追蹤。 JMP Live 通常是一個不錯的選擇,但我們需要一種更自動化的方式來實現這些文件,而不是不斷地手動下載、連接,然後重新上傳表格。
在與 JMP 員工溝通時,他們給了我一些程式碼。這段程式碼對於我們目前的工作至關重要。它示範如何使用腳本從 JMP Live 下載並開啟表格。拿到這段程式碼後,我們才對如何利用它產生了很多想法。這基本上就是一個 HTTP 請求。它已經存在,可以用來從其他網站獲取數據,但讓它發揮作用的真正關鍵在於如何組合和建立 JMP Live 表格的 URL,我們稍後會詳細討論。 Sage,我先把時間交給你。
我找到了 Timothy 剛剛描述的 JMP 檔案下載範例,我的用例也準備好了,可以直接運行。我決定先建立一種方法,從 JMP Live 的各自資料夾中取得表格,然後在本地連接它們,最後將它們推送回特定位置。為了做到這一點,你需要解決一些問題,例如如何連接到 JMP Live 以及如何從 JMP Live 獲取資訊。為此,我用我的程式碼建立了一個關聯數組,用於初始化。
這是我們在插件中找到的用於提取這些資訊的程式碼範例。我的腳本也做了類似的事情。它會查看使用者在 JMP Live 中擁有的存取權限,並提取其有權存取的資料夾位置,然後我們將繼續查找資料夾內的資料夾,以便繼續將 JMP 所稱的子資料夾新增至該資料夾位置。
在這種情況下,我們用這段程式碼動態建立了關聯數組。這樣,當我查看您有權訪問的資料夾並進行上傳時,這段程式碼最終會在腳本開始時查找這些資訊。這樣,您就可以看到您有權訪問的所有內容,從而可以從任何資料夾中提取文件進行連接,然後將它們放在您喜歡的任何位置。
這只是一小部分。關聯數組就是按照這種方式建構的。最終,透過這個插件,你可以根據我建立的內容,獲得三個基本選項。
第一個選項是您必須能夠選擇一個 JMP Live 資料夾進行連接。在啟動關聯數組時,我會提取您有權訪問的所有資料夾,並為您提供所有可存取資料夾的清單。這樣,您可以選擇要連接的資料夾,然後選擇一個要儲存的資料夾,該資料夾來自同一個關聯數組清單。接下來,您可以選擇要更新的表格。
根據此處輸入的信息,最終會將 Live 資料夾中所有需要連接的文件連接起來,然後保存到此資料夾(即「儲存到資料夾」),並將其儲存為該資料夾內的選定表。所有這些都對應到我剛才在上一畫面中展示的關聯數組,該程式碼會根據您獨有的 JMP Live 連接從 JMP Live 中提取資訊。
為了完成所有這些工作,這只是核心工作的一部分。關聯數組會提取您有權訪問的內容,但您必須能夠提取訊息,然後再將其放回。 JMP Live 的一個非常棒的功能是,它提供了一個 URL,您可以根據 HTTP 請求建立 URL 來提取資料。這是我們用來創建該 URL 的範例,它實際上是將這些文件下載到本機。
舉個例子,我們最終會使用一個用於 JMP Live 的基本 URL。這裡有一個 HTTPS JMP Live 公司名稱的範例。在我們的例子中,它是 IDEXX。我們可以使用它連結到我們的 JMP Live。然後,從那裡開始,有一些位置需要處理,這些位置是停滯的。就像 API 套件一樣,這是與 JMP Live 相關的 URL 的停滯部分。
然後我們知道我們有一個 Live ID。我剛才提到過,從關聯數組中提取的內容之一是連結到資料夾和資料表的 Live ID。這樣,在建立 URL 時,可以根據關聯數組動態建立 URL。然後,您將得到另一個靜態部分,即數據,後面是 JMP Live 數據表名稱,您可以從這個 URL 中提取數據,然後下載內容,也就是「.JMPLive/contents」。
再次強調,這只是魔法的一部分。接下來要做的就是替換 JMP Live 表。將所有檔案放在資料夾中,並在本機 JMP 實例中將它們連接起來後,您需要將其放置在某個位置。這是我們用來替換 JMP Live 表的程式碼範例。
具體做法是,我們會建立一個新的連接,然後基於該關聯數組(其中包含您選擇要上傳到的表的資訊),將其作為新的 JMP Live 內容交付,然後再將其推送回 JMP Live 以更新資料。這樣,您就可以根據資料夾中的連接表進行動態更新。
我的用例是什麼?因為這是我們在測試的時候發現的,覺得用在本地資料裡會很酷。我們能夠用它做的事情之一就是穩定性趨勢分析。在這個例子中,這裡有一個我編寫的程式碼及其功能的範例。您可以從一開始看到,這是程式碼的起始窗口,它顯示了我之前幾張幻燈片中展示過的三個輸入。也就是說,您必須選擇資料夾。然後,下一步是選擇要從中提取資料的資料夾。在這個例子中,我有穩定性原始數據。每當我的技術人員運行更多資料時,資料就會被放到這個原始資料資料夾的特定位置。這就是我選擇的用於連接資料的起始資料夾。
接下來,我知道我需要將其添加到我的趨勢數據中,因為我想繼續連接到該文件。這是我的下一個選擇,我選擇了一個 JMP Live 資料夾來保存。在這種情況下,它就成了我的穩定性趨勢。
然後,因為我的穩定性趨勢資料表只有一個,所以我的下一個選擇是穩定性趨勢資料表。不過,這是我開始創建的表。您可以隨意命名它。關聯數組會將其拖曳到該位置。在本例中,我先建立了表格。到目前為止,我一直使用的是 JMP Live 中已經存在的表格,但這在未來會是一個很棒的功能……這很難說,未來的功能。如果您能繼續新增為動態部分,那就太好了,因為資料可能會發生變化,所以您可以建立並連接新的資料表,並將它們儲存到不同的位置。
從 JMP Live 端看,這是什麼樣的?在 JMP Live 端,您看到的是起始資料夾。您可以看到其他人上傳的我的獨立時間點。在本例中,上傳的是我的時間點。如果技術人員有權限上傳訊息,他們也可以從這個位置上傳。這些是將被串聯起來的表格。您可以在下面看到,我的資料夾中有一個穩定性趨勢範例,它與我的原始資料資料夾是分開的,您可以看到我正在修改資料的資料表。
一旦真正發生這種情況,後端會是什麼樣子?當你能夠看到連接過程時,奇蹟就發生了。當你實際運行這段程式碼時,你實際上可以看到 JMP Live 顯示資料表已完成更新,因為它的作用是即時更新。在左邊的範例中,你可以看到我的起始資料表只有時間點 0 和 1。正如你在上一個表格中看到的,還有一些時間點上升到了 3。現在,運行程式碼後,你可以看到現在有第三個時間點連接到了這些表。
完成這項工作並繼續使用這些數據後,我與 Timothy 合作,說:「嘿,我有這個代碼。考慮到你在這次演講中所做的事情,你可能會發現它很有用。」 就在那時,Timothy 拿起代碼,把它調到了 11。
謝謝你,Sage。我當時接手了 Sage 的很多工作,然後就覺得,能夠把 JMP Live 上的一堆文件合併成一個新表,再放回 JMP Live 真是太棒了。在我的用例中,我有一些實際上只存在於本地的數據,我需要一種好的方法,既能把這些數據提取出來,然後導入 JMP Live,又能把它們與一堆已經存在的數據合併。我希望能夠與其他人共享這些信息,並與其他人協作,不必在同一地點,這樣我們就可以各自獨立地將數據添加到同一個數據集。我真的不希望人們進行大量的手動操作。
我想,如果我有一個工具,基本上可以用它連接到特定的表,那會怎麼樣?不僅如此,我還希望能夠運行任何資料 ETL。如果我想添加新列,如果我想建立匯總表並上傳,我真的很想找到一種方法,可以建立一個 JMP 工作流程腳本,然後將其附加到特定的表和特定的項目,然後能夠與其他人共享,這樣我們就可以運行相同的程序,更新相同的表,並即時查看結果。
這只是工具視窗的啟動部分。幾秒鐘後我們將進行現場演示。我先簡單介紹一下程式碼。此外,就腳本而言,Sage 所做的就是將所有內容打包在一起。使用 Sage 時,我還使用了大量關聯數組。這就是我儲存和保存大量項目特定資訊和特殊腳本的方式。
您可能在上一個視窗中看到過,我們有一個腳本編輯視窗。讓它運作的秘訣其實就是使用 Eval Parse 函數,我把它封裝在一個空函數中。這樣,使用者就可以直接將腳本貼到這個視窗中。然後,當他們運行它時,一切都會完美地運行,可以解析表格,然後將它們連接起來,並將它們與 JMP Live 上的內容連接起來。我們暫時停止演示,只展示一些簡單的例子。
首先,這裡有一個 JMP Live 空間,然後這裡是我正在運行的工具。這是工具首次打開時的樣子。在最頂部的窗格中,我們有一個設定部分。您可以保存這些設置,然後每次運行插件時,您在此處的所有設置都會被填充。它包括您的 JMP Live 連接的名稱、JMP Live 的基本 URL,以及您是否希望將表格清單預先填入工具中。表格列表就在下面的部分。
我們就是這樣決定哪些表是我想要追蹤的,並與腳本關聯起來的。在這個例子中,我實際上借鑒了 Sage 的一些功能,例如能夠添加新表,我們稍後會講解。這裡對於協作很重要的一點是能夠載入項目清單。如果你與其他人共享項目列表,他們就可以載入這些列表。
如果我繼續,加載一個我預先創建的項目列表,我們會看到這個項目列表,它包含兩個表。一個是「不是我的貓」表,另一個是「每週天氣資料」。您會注意到,在腳本部分,它們的大小略有不同。 「不是我的貓」表,我這裡只是編寫了一個基本腳本,運行時,它會提示用戶選擇要打開的文件,然後在打開後返回該文件。那麼,就其含義而言,最好的情況是,一旦返回該文件,該文件將與此處列出的表格連接起來。
在另一個例子中,我不僅打開了文件,還添加了一列,用於計算其他兩列的平均值。運行這個範例,我可以繼續,找到我這裡的「每週天氣資料」表。這個表已經很大了。有 124 行,跨越了不同的周。我想這是第 1 週到第 10 週的數據。我可以滾動瀏覽這個表。
當我運行這個工具時,它會提示我選擇一個表。我這裡剛好有一個資料夾,裡面有很多這樣的表,我可以選中這個新表,點擊「開啟」按鈕,然後等一會兒,你會看到一些表彈出來,然後又消失了,然後你會在我的 JMP Live 中註意到這些資料已經更新了,我可以重新載入表格,現在資料有 393 行了。
稍微回顧一下,如果我想在這裡添加另一個表格,你會注意到在 JMP Live 中,我這裡有一個名為“類別測量”的表格,並且我有一個與之配套的報告。我要點擊該報告。我可以在報告中看到我正在追蹤一些測量數據,它涵蓋了一組不同人員的三個時間點。我的清單中還沒有這個數據,但我可以添加它。使用 Sage 開發的相同腳本在 JMP Live 或您有權訪問的資源中進行搜索,我們會在這裡彈出一個非常相似的視窗。我可以進入這裡,找到我的範例資料夾,然後選擇我的“類別測量”表並將其添加到此項目清單中。
當我將其添加到項目列表時,您會看到我仍然可以在其他項目之間切換,並且它還會在視窗中預先填充一個非常基本的腳本,讓我只需運行該腳本並選擇要連接的文件。我現在就去做。我看到我轉到此表中的時間點 3,而我恰好擁有時間點 4 的檔案。當我點擊「開啟」按鈕時,該檔案會彈出,然後消失,我們可以在 JMP Live 中看到此報告正在重新生成,並且時間點 4 已添加到其中。任何有權存取此表的人都可以使用此工具,使用他們擁有的此專案資料來更新這些 JMP Live 表,只要我在 JMP Live 中授予他們存取權限。
我們可以回溯一下。我們可以看到,「班級測量」表也更新了,因為它與該報告關聯,我們可以看到時間點 4 的數據。我還有第五個時間點的數據。我也可以再運行這個程序,把這些數據也加到其中。再次出現一個尾部,然後消失,然後這個表的更新版本就準備好了。我可以點擊“重新加載”,然後可以看到額外的資料已添加到表中。我可以再回溯一下,然後可以看到我的圖表也更新了。
就某些專案的合作而言,這對我們來說非常令人興奮,它讓人們擁有更標準化的工作流程,能夠共享腳本,尤其是對於那些仍在學習工作流程建立器以及如何自動化某些流程的人來說。為他們提供一些這樣的工具真的很好,可以真正避免我們有時遇到的一些多站點專案遇到的某些問題。