本示範概述了 JMP 18 對 Python 支援的新的重大更新,它提供了與 Python 更緊密的整合以及顯著更好的以 Python 為中心的使用者體驗。在 JMP 18 中,您將能夠:
這些暴露給 Python 的 JMP 功能將隨著時間的推移而擴展,但目前的重點是關鍵功能和記憶體資料支援。在此示範中,您將親身了解這些變更及其背後的原因,並見證為 JMP 使用者提供的新功能。討論了透過使用外部 Python 套件的可擴展性和資料導入功能,並演示了使用外部套件透過 Python 介面存取 GPU。
你好,我是保羅尼爾森。我來這裡是為了談論 JMP、Python 和我們的下一步。在去年的一次演示之後,我們決定改進我們的遊戲。 JMP、Python 還有改進的空間,這就是我在這裡要討論的內容。
客戶面臨的最大挑戰是 JMP 14 到 17 以及如何讓 Python 支援發揮作用。如果有效的話。效果很好。但事實往往並非如此。眾多的 Python 發行版和不同的環境使我們的測試變得困難。
有時可以使 Anaconda 在 Windows 上運行,有時可以使 Python 虛擬環境運行。環境,因為每個人都有不同的Python,腳本甚至不能依賴使用者環境中通用的Python版本。
在 JSON 編輯器中編輯 Python 程式碼既困難又令人不快。代碼塊由空格分隔的語言。當您必須將其作為字串貼到 JSL 中時,這會變得很有挑戰性。 Python 舊版 JMP 中的錯誤報告不足,導致偵錯 Python 腳本變得困難。
最後,資料表和矩陣傳輸是透過檔案系統完成的,並且使用資料表時它是作為 CSV 檔案完成的,如果您實際上擁有大數據,則速度很慢。大類工作得很好,但更大的數據很慢。
我們的願景是確保 Python 整合正常運作。無需配置。為此,我們隱藏了 Python 版本 3.115 和 JMP 18.0,並將其作為 JMP 的一部分安裝。這是一個通用環境,所有使用者都將擁有相同版本的 Python 和相同版本的 JMP。
我們更進一步,確保 JSL 和 Python 之間的資料流動是記憶體中傳輸和對記憶體的零複製存取。我們為 Python 程式設計師打造了一個有吸引力且高效的環境。我們現在還有一個 Python 腳本編輯器,其中有程式碼著色和語法突出顯示。
您可以直接從腳本編輯器和Python環境中執行純Python腳本,您可以直接存取JMP資料、日誌,您可以呼叫JSL並從Python存取資料。我們大大增強了向 JMP 日誌和嵌入日誌的錯誤報告。
因為現在它是一個通用環境,我們可以對其進行測試和驗證。我們的環境和你應該看到的一樣。我們在腳本索引中新增了一個完整的 Python 類別來匹配...以解釋並顯示導入 JMP 套件和其他幾個實用程式套件現在可用的內容的範例。
另一方面,這使我們能夠透過 Python 龐大的套件庫擴展 JMP 功能。我們並不試圖製作一對一的替代 JSL。相反,我們試圖在 JMP 中為 Python 程式設計提供一個熟悉且高效的環境。
這是現代化、改造和徹底改革。 JMP 的 Python 整合的一些原始設計決策存在限制。我們已盡一切努力盡量減少因變化而造成的破壞,同時為未來提供強大而穩定的基礎。
人們普遍認為,這種破壞僅限於向 JMP 的過渡。關鍵是我們現在僅支援隨 JMP 提供的 Python 版本。將其視為私有 JMP 虛擬環境。
腳本中發生的另一件事是我們改變了 Python 發送資料表的工作方式。它現在創建一個 JMP 該資料表物件。這是對 JMP 資料表的即時存取。記憶體中的副本,可以編輯和修改現有的表。它不再是副本。
JMP 14 到 17 透過檔案系統中的暫存 CSV 檔案複製資料來建立 pandas DataFrame 物件。對於大數據。匯出到 CSV 會爆炸,變得非常大且緩慢。您還存在潛在的精確度損失問題,因為您要從二進位格式轉換為文字格式,然後從文字格式返回二進位格式。
如果您確實需要相同的功能,我們在範例文件中為 pandas Python 提供了一個 DT,它提供了兩個 pandas 函數。這與過去內部的工作方式一樣。它會建立一個臨時 CSV 檔案並告訴 pandas 要匯入該 CSV 檔案。
還有一個 JMP to pandas 範例,展示如何從 JMP 資料表物件在記憶體中建立 pandas DataFrame,該物件一次使用 JMP 列中的一列在 pandas 中建立一列。
Python Send Matrix 是另一種用於透過檔案系統進行寫入的矩陣。它會寫入一個雙精度文件,以便 NumPy 讀取該文件。現在,這是透過內部記憶體發生的,而且它是對矩陣的即時引用而不是副本。
JSL Python API 的大部分保持不變。涉及的變更主要是刪除用於配置原始 Python 支援以選擇 Python 版本的棄用參數和函數。
唯一刪除的 API 是 Python 獲取圖形函數,該函數從 Matplotlib 檢索圖像,在我們的腳本索引中,我們有一個範例,它準確地展示瞭如何僅使用 JSL 和 Python 程式碼執行 JMP 在內部執行的相同操作。已經展示了。讓我們來看看。讓我們退出演示吧。
這裡我們有JMP。我想展示的一件事是,您將在工具列和檔案新選單中看到 Python 圖標,我們有 JSON 腳本,但我們現在有新的 Python 腳本。我們將開啟 Python 腳本編輯器。
我們可以使用顯示嵌入的日誌。我們有一個 JMP 導入套件。導入 JMP。我們已盡力確保已放置 Python 文件字串,以便您可以運行 JMP Python 幫助。我們可以運行該腳本。您將看到我們已在此頂級 JMP 導入套件中記錄了物件和函數。
有很多常數。所有大多數特殊目錄都被代表。所以我們可以做。現在我用 Python 來做。 JMP 開啟。 JMP,好吧,我今天不能打字,JMP。樣本數據。加。大老闆。就像在 JSL 中一樣,我們可以選擇程式碼行並在腳本中運行它。而且我們有大班。
現在,這不是副本。我們可以得到那個對象。我們可以將 TT 等於 JMP 打開,這樣我們就有了參考。但我們也可以讓 TT 等於 JMP.current。這將為我們提供當前數據表的引用。
好吧,我們可以做一些事情,例如列印 TT。這告訴我們這是一個大班。它有 5 x 40 列。但即便如此。你可以做更多的樂趣。 TT。姓名。我們可以使用 Python 切片運算子。我告訴它在名稱列中為我們提供從零開始的所有其他名稱。
我們在 Python 中建立索引就像 Python 應該從零開始索引一樣。我們的資料表索引是逐列的。由於我們是列主要格式,如果我們列印。所有其他。名字,我們叫凱蒂。簡.莉莉。詹姆斯、芭芭拉、蘇珊、喬和大衛。
這是即時訪問,因此我們可以執行諸如...之類的操作,並且可以執行 TT 之類的操作,並且可以使用名稱或列索引。我們列印該列。這給了我們選擇。這是你的……我選了一個,對吧,路易斯。對不起。零零。是凱蒂.由於數據表是即時的。你可以做凱蒂
等著。小寫。混合情況。現在我們在嵌入式日誌中看到輸出。你會注意到的。我們已經在數據表中更改了它。這使您能夠修改資料表、以 Python 方式存取資料表,並且能夠從 Python 建立資料表。我們已經付出了努力。
我們現在有了腳本索引。我將展示…這裡,就像我說的,獲取圖形已被棄用。它實際上不再是 JMP 中的有效函數,但腳本索引中的範例向您展示瞭如何從先前的功能轉變為我們在 JMP 內部實際執行的操作,以保存圖形並打開圖像並創建新的帶有影像的視窗。
以 Python 為中心的環境的一個很好的新功能是 Python 類別,它本身就是一個類別。 JMP 匯入包具有資料表物件。每個範例都有我們可以建立新列、新增行和儲存表格的範例。其上的屬性,例如取得表名。所有的。
這將建立一個由 Python 支援的新資料表。我們還有 JMP 實用程式。您可以在其中,或者我們可以使用它來運行 pip JMP,因為它創建了自己的隔離環境。當我們安裝軟體包時,它們需要進入JMPs隔離環境
希望 JMP 中的套件不會與其他東西或其他 Python 安裝發生衝突。我們把它隔離了。因此,在這種情況下,如果您必須…我們將建立一個腳本,該腳本將包裝 Python pip 腳本以允許您安裝,或者您實際上可以從 gem 中的 JMP utils 類別運行它。
在這裡,我們將顯示 list pip 命令列表,這將消失。呼叫 pip 並傳回我已在 Python 環境中安裝的套件清單。這裡的另一個例子是你可以實際安裝軟體包。這將直接從 JMP 內部運行。
有一些注意事項,這就是 create jpip 存在的原因。如果像 NumPy 一樣將套件載入到記憶體中,因為它有一個共享庫。 Windows 並且可能會阻止您更新該軟體包。有一些包需要編譯。這些可能必須從命令列完成。
其中一些可能可以工作,但那些可能需要從命令列運行。這就是您想要建立 jpip 包裝器腳本的原因。當它運行時,它會彈出並為您提供一個在其中寫入檔案的目錄,然後選擇資料夾,它會寫出一個可從命令列運行的 jpip 包裝器腳本。
當你運行它時,你想在安裝後使用減號用戶標誌。從這裡呼叫時,我們會自動為您執行此操作。還有一個 JSL 函數也可以運行安裝。 Python 安裝套件就更簡單了。您只需執行 JSL 腳本,它就會在背景呼叫 pip,正確設定將套件放入 JMP 隔離環境所需的所有環境變數。
我們走吧。然後我們可以繼續向您展示更多演示。這是簡單的基本內容。但我們也…整個過程的一部分是讓 JMP 對 Python 更加友好,並且更容易透過額外的 Python 套件來擴展 JMP 功能。
人們希望的我們經常提供的支援之一是能夠匯入鑲木地板檔案。該演示從我的驅動器中取出一張桌子。一張是我從網路下載的。正確的。然後列印出 parquet 檔案的形狀,並根據 parquet 檔案中的資料逐列建立 JMP 資料表。我們將清除日誌。其實看我做的。
我沒有運行腳本。我一定強調了一些事情。我們開始吧。這是一個鑲木地板文件。我們在 PQ 進口時製作了 Pyrow 鑲木地板。 Parquet 檔案屬性。這是一千行。形狀為 13 列 x 1000 行。架構向王子顯示列名稱中的架構。
在最底部,我們可以展示其他事情之一,即我們還沒有完成我們想要在 Python 方面改進的事情,但在我們實現這一目標之前,您可以從 Python 運行 JSL。
儘管 Python 程式碼尚不支援設定、顯示寬度,甚至更改列類型等操作。您可以建立新列,但無法從 Python 變更其類型。這些是我們想要實現的目標,但現在您有一個解決方法,可以從 Python 中執行 JSL 腳本,就像您可以從 JSL 中執行 Python 一樣。
現在,有了這個增強的環境,您可以在兩者之間來回呼叫。 Python可以運行JSL腳本。 Python 中的哪個呼叫隨後可以在 JSL 環境中運行,因此您可以嵌套呼叫來實現原本不可能實現的功能。這會將資料類型的 parquet 檔案傳遞給 JMP 本機無法處理的情況。但我們已經透過導入 Python 套件來支援這一點來做到這一點。
另一件對我來說很珍貴的事。我不太擅長統計學,但我擅長圖形和其他數學。這裡使用開放式運算語言或 OpenCL。我們已經導入了 OpenCL 套件。建立曼德布羅分形。我們先來跟大家展示CPU。用CPU來做。這實際上需要大約 16 秒的時間來運行。
這很痛苦,而且您會注意到 JMP 本身很慢。沒有回應,因為此時 Python 擁有控制權。如果您將正在運行的單元格置於緊密循環的深處等待,您將能夠重新獲得控制權。這是使用 CPU 來產生這個分形。
現在讓我們對其進行更改,以便改為運行 GPU,然後運行腳本。繁榮。生成圖像、保存並將其打開到腳本中只需幾分之一秒的時間,然後看看我們說什麼。使用 GPU 花了 16 秒,而…但只要我們回溯得夠遠。當我在這裡演示在 CPU 上執行此操作時,實際上花了 32 秒。
如果您想將 GPU 與 JMP 結合使用,現在可以透過 Python 來實現這一點。我們已經嘗試了 PyOpenCL 和 PyCuda,所以如果您有 Nvidia 卡,並且您正在使用 Cuda。您可以引入 PyCuda 或更通用的 OpenCL。進一步增強 JMP 的運算能力,同時不會閒置桌面的功能。
我們也可以透過 Python 連接到 SaaS。 SaaS 有一個 SaaS y。包,我們已經將其安裝到......這是其中一些工作是我的一位同事整理的東西。讓我們清除日誌。我們實際上看到了我所擁有的內容並且可以運行腳本。
它正在以應有的方式收集這些內容。開始了。這個實際上使用 JSL 來嘗試並確保已經安裝了運行腳本可能需要的所有 Python 包,並且您可以進行設定。您在日誌中看到的部分內容表明這些已經滿足。以下是執行連接到 SaaS 的腳本傳回的所有結果。使用 SaaS Py 包,我們將回顧日誌。
該腳本會回顯到日誌中。就像我在這裡說的。我們有連接到 SaaS 並運行產品的連接資訊。我們的物流。然後返回輸出值並結束 SaaS 會話。
我們聽說 TensorFlow 可能是人們感興趣的東西。錯了,我再次安裝了 TensorFlow,並且它是從 JSL 運行的,但我們可以輕鬆地從 Python 運行此程式碼。
它運行張量流創建這個總和。我相信您會想出比我演示的更複雜的用法。 Py 摘要是另一種。是,螢幕。這是我創建的一個範例,用於展示其中一些內容,包括運行 JSL,它允許我使用 JMP 選擇目錄、JSL 選擇目錄來選擇目錄,並在 python 腳本中使用它。這都是純Python腳本。它允許我選擇一個目錄。
建立目錄中每個檔案的校驗和。將其放入 SQLite 資料庫中,然後從資料庫建立 JMP 資料表。它為您提供了一些資料庫程式設計知識,提供了一些從 Python 建立 JMP 資料表並從 Python 運行 JSL 的 JMP 知識。
目錄可供選擇。我在這裡獲得了大量數據,因此我們只需選擇 parquet 資料夾或選擇資料夾中的簡報。現在我們有一個校驗和表格。他們創建了......它檢查目錄中的每個文件,給我他們的路徑名和文件內容的 MD5 校驗和。建立了資料庫。從 Python 建立 JMP 資料表,並使用 JSL 設定列寬。
同樣,這是我們尚未實現的內容,但已列在列表中值得關注。但您可以透過...執行操作,如果您願意,也可以透過 Python 執行 JSL 操作。
有些人可能想要我們 R。在 Linux WSL 環境的 Windows 系統中執行我們的服務更加容易。
我這裡有一個 R 服務惡魔。並使用保留的客戶端。我只做了一點點,在伺服器上建立一個 R 向量,對結果求和,然後執行此腳本。我們已經連接到我們的伺服器。我們得到向量,並將所有元素相加得到 6。我們的 py2.我們也有一些例子。如果您想要一些非常簡單的可以從命令列運行的東西,這裡有一個關於如何使用某些進程從命令列 shell 和運行 R 的範例。
最後是喬恩·索爾對他有幫助的統計數據。建立一個使用 HDB 掃描 Python 套件的範例。 Matplotlib 需要注意的一件事。 Windows 上的 Matplotlib 沒有圖形後端,因此如果您想查看任何輸出,我們發現 PyQt5 效果最佳。
作為後端和。在 Mac 上,如果您使用 Matplotlib,我們將強制它成為 AGG,即非圖形後端(如果您尚未安裝)。 PyQt5 或 PySide 之一。因為Mac上的Matplotlib會自動走cocoa後端,並且有一個bug,當你關閉Mac上Matplotlib的最後一個視窗時,會導致JMP退出。
為了防止我們強制執行的情況,如果我們在您的系統上找到 Matplotlib,並且有後端,我們將載入 Matplotlib 並強制它使用 Qt 後端。否則,我們確保它是一個非圖形後端。我們已經把它做成了後端。我的機器上有 PyQt5。在此範例中,我們在 HDB 掃描上執行一些聚類。
現在讓我們顯示嵌入的日誌。我們將運行該腳本。我們得到的是,Matplotlib 資料表中產生了一個圖形。在這裡您可以看到我們開啟了 JMP,並取得了 DT 參考。這些是我有的樣品。相信。
我要把演示帶回來。我們近期的優先事項。不斷完善和改進。提高 JMP 和 Python 之間的資料互通性。目前,列修改編輯的限制是您可以建立任何類型的列,但只能修改和取得數字和字元列、表達式列或狀態列的值。連結表的建立都是以後要做的。
雖然Python腳本編輯器支援程式碼著色、語法突出顯示,但它還不支援自動縮排。我們也會對此進行研究。
現代化的目標是使 JMP Python 整合開箱即用。您應該能夠在無需任何配置的情況下使用 JMP 和 Python 高效工作。也就是說,如果它不起作用,那就非常具有挑戰性。為什麼不減少 Python 程式設計師在 JMP 中提高工作效率的時間並製作 JMP?提高JMP能力。由於可以使用外部 Python 套件輕鬆擴展 JMP,因此成為分析中心。
提高我們載入其他人花時間編寫的不同資料格式的能力,例如我們也測試過的 parquet 格式。那裡有很多格式,比任何一個開發團隊有時間在內部編寫的格式都要多,但是通過這種方式,您可以引入Python 包,並且可以將其從該數據中製作為JMP 數據表並擁有這種能力JMP 內。
珍惜你的時間。希望您喜歡我們所做的事情,並對回饋非常感興趣。謝謝。