我叫本·理查森。今天,我很高興能介紹 UPSIDE Foods 公司在 JSL 中進行的一些工作,這些工作旨在實現人造肉生物過程數據分析的自動化。首先,我想特別感謝 Megan 和 Julia 的傑出貢獻,尤其是我所代表的 UPSIDE Foods 公司。右側展示的是我們的部分產品。
首先,我將簡單介紹一下我們將要討論的內容。首先,我會做一些背景介紹,以防有些人不熟悉什麼是「培養肉」以及什麼是「細胞培養基」。這正是我所在的部門,這對我們來說非常重要,因為它能幫助我們了解為什麼 JMP 是一個如此強大的工具。
我還將介紹我們的 JSL 腳本如何加速 UPSIDE Foods 的生物製程開發。然後我將進行腳本演示,展示我們開發的該工具的一些功能,例如即時存取關鍵儀器資料、一些資料視覺化工具以及趨勢分析,甚至還有一些很酷的附加功能,例如使用 Tabulate 等函數的操作員的工具。
最後一部分,我將介紹如何在 JMP 中自動執行一些進階計算的入門指南。為此,我將重點放在一個案例研究。在生物加工過程中,自身葡萄糖消耗是一個非常重要的參數。眾所周知,它也是一個很難計算的參數。
我將討論我們為了分解這種高階計算所做的四項工作。第一項是標準化樣本命名。這是我們方法中非常關鍵和基礎的部分。此外,我們如何使用開放資料庫連接實際存取數據,如何自動清理、排序和組織數據,以及最後,我們如何使用一些關鍵函數實際建立公式列。
讓我們深入了解一下背景。什麼是培養肉?什麼是 UPSIDE Foods? UPSIDE Foods 是第一家在培養肉類領域成立的公司,成立於 2015 年。自那以後,它一直是該領域的領導者,並於 2022 年獲得了美國農業部 (USDA) 和美國食品藥物管理局 (FDA) 的監管批准。
我們的做法是提取動物細胞。這不是植物肉,而是動物肉,然後我們分離細胞。這是無屠宰的。你不需要殺死動物就能做到這一點。然後,我們在細胞培養基中從這些分離物中培育細胞系。再說一次,這就是我一直住的地方。
細胞和細胞培養基在生物反應器中混合。這和釀造啤酒非常相似,用酵母來培養細胞。我們將在生物反應器中培養這些動物細胞,然後將其製成供人類食用的產品。真正令人興奮的是,生物加工可以提高肉類生產效率,降低消費者成本,並減少對環境的負面影響。這是我真正感到興奮的事情。它不僅能減少土地和水資源的使用,甚至溫室氣體的排放,還能減少對動物的虐待。
為什麼細胞培養基如此重要?接下來要討論的領域是細胞食物,也是我們想要討論的。你可以在角落看到一些溶液。那些是一些有趣的顏色,實際上主要來自維生素,它們創造了這些顏色。細胞培養基非常重要,因為它為細胞提供體外生長所需的營養物質和周圍環境。
細胞培養基其實沒什麼特別的。它只是一些我們餵雞或牛,甚至自己吃的常見食物成分的小塊,像是胺基酸、糖、維生素和礦物質。為了加速低成本培養基的開發,尤其是為了實現商品規模定價,UPSIDE Foods 已將我們的細胞培養基生產垂直整合。這意味著我們從零開始,使用食品級成分開發了專有的內部培養基配方。
如果您熟悉細胞培養基或生物工藝,從頭開始設計培養基配方絕非易事。這正是 JMP 統計軟體的用武之地。舉個例子來說明這有多難,如果我們對一個包含 50 種培養基成分的實驗設計進行析因分析,這實際上是一個保守估計。很多培養基的成分可能超過 100 種。如果我們分別取低、中、高濃度,設計空間是 3 的 50 次方,即 7.17 乘以 10 的 23 次方。這比一摩爾還大,即 6.02 乘以 10 的 23 次方,幾乎是無限的。我們無法測試所有這些條件。
這正是實驗設計的意義。 DOE 是一種應用統計學方法,它能讓你更有效地探索設計空間,尤其是針對一次一個因素或 OFAT 方法。以下是 JMP 提供的一些範例。如果我們觀察三個不同的變量,並將它們視覺化到三維空間中,我們得到了變數一、變數二和變數三。
傳統的方法是一次只優化一個因素,我們會先優化變數一,找到最佳條件,然後優化變數二,找到最佳條件,最後優化變數三。最終我們會找到一個局部最大值。如果實際的最佳條件就在某個地方,而我們錯過了怎麼辦?首先,我們會花費更多的時間和精力,但可能還是找不到最佳條件。
JMP 之所以如此強大,並且對我們的方法如此重要,是因為 JMP 擁有業界領先的 DOE 軟體。它堪稱細胞培養基開發和生物製程開發的黃金標準。 JMP 已被 UPSIDE Foods 的各個生物製程開發流程團隊廣泛採用。對於某些腳本的編寫和檢視來說,JMP 是一個自然而然的工具。
讓我們來談談這個腳本是如何加速 UPSIDE Foods 的生物製程開發的。我這裡有一個示意圖,將生物製程開發流程的各個部分分開,從細胞系開發等上游活動一直到製造科學和技術以及實際生產。我一直在談論培養基開發。我們生活在這裡,但工藝開發也有很多重疊之處。
我想指出的是,貫穿整個開發流程的動態回饋循環,對於推動科學創新和突破至關重要。基本上,你可能會獲得一個更好的細胞系,並順利進入培養基開發階段。這使我們能夠在一些限制性營養物質方面取得突破,而這之間的迭代循環,才是真正令人興奮的科學突破發生的地方。
我剛才談到了實驗設計(DOE)如何讓我們更有效地探索設計空間。你可能覺得我們的實驗規模越來越小了。實際上,因為我們嘗試從頭開始設計介質,所以我們的實驗規模仍然很大。即使我們更有效地測試了設計空間,我們仍然需要研究這個荒謬的設計空間。
為了真正從零開始建構這些介質,我們擁有大量的樣本,有時還需要進行實驗,超過100種條件。您可以看到我的同事Dasha在那裡列印標籤的照片。這只是一個例證,說明了我們在這裡處理的樣本數量,以及這實際上如何在團隊之間造成了瓶頸。
為了進一步說明這一點,我列舉了公司每年進行的一些細胞計數數據,這些數據相當驚人。 UPSIDE Foods 的培養基團隊每年進行超過 4 萬次細胞計數。當然,隨著流程的推進,這種情況肯定會改變。隨著規模越來越大,容器和自由度也會越來越小。您可以看到,我們下面的 PD 部門實際上每年仍然運行約 7,000 或 8,000 個樣本。
我們正在努力處理大量數據,並且以閃電般的速度努力獲取這些數據。我們開發了這個 JSL 腳本,以減少常規生物過程資料處理的平均時間,更快地傳播訊息,將訊息傳遞到其他團隊手中,並加速回饋循環。我們真正做到的是將常規資料處理時間從大約一周縮短到大約兩天,這大約是之前的三倍,這非常令人興奮。
現在我將進行一些腳本演示,以展示這個工具的一些功能。這是腳本。它相當大,隨著時間的推移,它肯定也變大了。這裡面有很多程式碼。在這次簡短的演講中,我沒有時間講解這一切。我要做的是示範一些功能。如果我運行這個腳本,首先會出現一個小警告窗口,提示你將關閉一些可能已經打開的其他窗口。我同意這一點。
我這裡舉個例子,可能是5109,這是我們的一個實驗。這是真實數據。腳本的作用是運行我們開放的資料庫連接,並將資料導入JMP。這加快了流程,而且我們可以定期進行。我們可以根據需要進行操作。實驗進行時,資料會定期上傳到資料庫,我們可以即時提取並查看圖表。您可以看到不同的儀器正在填充數據。它正在為我們產生一些數據表。然後它會詢問我是否要添加條件鍵。
條件鍵是我一會兒要講解並打開的東西。我們要做的是選擇“是”,這樣我就可以展示一些功能。它還會詢問我是否要添加與儀器無關的其他數據。這是您可能想要新增的額外元數據,這裡的範例是pack_cell_volume。這實際上是指任何未由儀器運行並自動上傳到資料庫的資料。我們再次選擇“是”,這樣我就可以展示一些功能。然後,腳本將為我們建立一個數據表。我們已經建構好了一張漂亮的數據表。
在開始之前,我先打開一個規範化腳本。這是我寫的一個小腳本,用來規範化資料。它會把所有數字從零縮放到一,這樣我就可以自由地討論它,無需擔心知識產權問題。我接下來要做的就是把這個腳本拿出來,和我的資料表一起運行,看看會發生什麼。
那裡的處理時間剛剛縮放。現在,我們的最大值是 1,其他一切都與此相關。我不需要展示這裡可能隱藏的所有重要數據。我只需向您展示一些功能即可。
回到條件代碼。我先來解釋一下它的運作原理。基本上,我們有數值條件,202、203、204。然後,我們實際更改的所有變數都透過這個條件鍵與這些條件關聯。我們將把所有這些資訊放在這裡,因為我們需要一個標準化的樣本命名系統。稍後我會詳細介紹。這只是說明我們如何將資訊與此關聯起來。
我們有一個很棒的大數據表。您可以看到,這裡有 1,206 個樣本測量數據。我們包含了所有參數、所有計算數據、最大乳酸值、特定乳酸生成值、倍增時間以及其他一些有趣的數據。我們把所有資料都集中到了一個好地方。接下來我想重點介紹的是一些我們儲存在左上角的腳本。
例如,我們有這個圖表產生器。這個圖表產生器很棒,因為它自動包含一個列切換器,可以把我們所有的參數和條件都繪製成圖表。我們可以快速地看到,哦,202 隨著時間的推移而下降。這不太好。 209。因為我們添加了那個條件鍵,所以我們基本上可以說,好吧,我不想看 201 和 202。我想看的是條件。
假設這些是一些不同的情況。 JMP 和圖形產生器的另一個優點是,我可以快速地說,好吧,我想看看變數 1 的表現。我們可以把變數 1 放在這裡,然後看看,哦,好吧,所有的控制都不太好。我們這裡有一些不同的策略可能有效。同樣,我們可以把變數 2 拖到這裡,以一種非常用戶友好的方式與資料互動。了解發生了什麼事。
我們可以觀察乳酸。我們可以觀察一下倍增時間之類的數據。為了加快速度,我們可以做的就是快速地與數據交互,感受數據,並準備好向公司內部其他人展示。假設我還想了解變數2。我可以做的就是把它放在疊加層上,就能得到一個大概的資料。倍增時間在增加。這很合理。策略1,就是保持較低的倍增時間。這正是我們想要的。這就是圖形產生器的部分,非常令人興奮。
我們還有很多其他功能。在進入下一部分之前,我會快速展示其中幾個。其中之一是循環分析。基本上,我點擊它,它會讀出我們擁有的所有不同批次、段落編號,並建立一個複選框。
我們要做的是選擇所有這些,因為 n - 1 和 n - 2 是按比例放大的。我其實不想把它們納入這次分析中。我只需要選擇我想要的,然後點擊“確定”。它會彈出一些二元擬合曲線,然後我們就能得到這些趨勢。你可以看到,它實際上會量化這裡發生的事情,並為我們獲取數據,查看這些趨勢分析,並將它們直接添加到我們的表格中,所有這些都是透過腳本自動完成的。我們不需要手動操作。這加快了我們獲取數據的速度。
您可以看到這是趨勢分析。現在我們有了一張圖表,顯示斜率是多少?這些曲線隨時間的變化情況如何?同樣,我們可以直接取出變數並查看。我們實際上會在這裡為它添加顏色。您可以再次看到,與數據互動和分析數據的方法非常簡單。
我要展示的最後一個功能是一些操作員的工具。例如,如果我們想要接收並執行一些操作,比如說,一個回饋或廣告,而操作員突然想知道,今天我應該做些什麼來維護這些反應器?我們可以做的就是說,好吧,我們花一天時間。
例如,我們可能想在 2019 年 8 月 24 日執行此操作。這是一個日期。我要做的是實際運行此腳本。我們會說 24/08,那是什麼?也許是 2019 年。我們會說,也許我們正在操作一個小型反應器。我們的工作體積可能為 225 毫升,也許假設我們供給 2%。我們只需點擊“確定”,它就會為我們建立一個表格,告訴我們每個反應器需要供應多少,以及它們是否需要特定的回流。
在這種情況下,基本上所有物質都需要麩醯胺酸和葡萄糖,但你可以想像一下,如果當天所有物質的濃度都低於廣告回覆的閾值,你可能會得到一些「拒絕」。你可以快速了解需要採取哪些措施來幹預這些反應爐。這就是腳本的概要。我將結束其中一些內容,然後回到演示。
讓我們稍微了解一下如何做到這一點,特別是如果您是初學者,如果您剛開始使用 JMP。我們該怎麼做呢?讓我們從案例研究開始,這個眾所周知的計算難題,即自我特定的消耗。我將介紹四個步驟:開發標準化的樣本命名系統,建立與數據的連接,自動組織、清理和排序數據,最後,我們將建立一個公式列來計算這個參數。
讓我們開始吧。首先,為了闡述我們討論的論點或任務,我們需要做一些基本的學習。我先來做個小講座,講一下什麼是細胞特異性消耗,以及為什麼它這麼難計算。你可以把細胞特異性消耗想像成細胞的馬力。每個細胞都需要消耗一定量的營養物質,我們可以把它想像成每天,也就是單位時間內的能量。
因此,我們的消耗量 Q 等於 Delta C 除以 Delta iVCD。您可以看到,這是活細胞密度。這基本上就是細胞計數。這是我們在生物加工過程中非常重要的工作。同樣,我們可以測量溶液中營養物質的含量。這些是典型的曲線,可能是補料分批生物製程的一個很好的例子。我們要做的是觀察兩個時間點,一個是我們感興趣的時間點,另一個是前一個時間點,以便定義這個參數。
它們之間有一段時間間隔。你可以用這裡的溫差 (Delta T) 來體現。為什麼曲線下面積很重要?我說的是 iVCD 而不是 VCD。我指的是活細胞密度圖,但我們真正感興趣的是它的積分。積分之所以重要,是因為在這個培養週期(可能持續四天)開始時存活的細胞,其消耗的食物量大約是此時分裂的子細胞的四倍,而子細胞在被收穫之前只存在了一天。
我們能做的就是近似計算。我們可以用一些經驗數學和梯形法則來計算。這是分母中的部分。我們還需要改變濃度,但這比表面上看起來更複雜。
由於我們想要計算細胞消耗引起的濃度變化,因此需要減去攝取的量。我們通常不測量這個值,因為我們知道添加了什麼。我們通常沒有一個測量數據點來顯示它是如何上升和下降的,但為了確保消耗率的準確性,我們需要將其考慮在內。
它們吃的量是固定的,但第二天我們重新測量時,它們消耗的不僅僅是這裡的增量,還有這裡的增量量。這意味著我們必須減去這個額外的點。最終得到的是一個複雜的公式,其中有許多參數彼此之間有條件地相關。這就是問題的關鍵所在,也是導致某些計算難以自動化的原因。
無論如何,我還是要談談我們是如何做到的。首先是開發標準化的樣本命名。這實際上是我們這裡採用的自動化策略的基礎。我將使用一個範例字串,並分解其中的一些部分。每個部分都是一個重要的處理工具,可以幫助我們實現自動化,並幫助我們處理數據,例如自動清理、排序和計算。
例如,我們有一個群組ID。我們有日期代碼、實驗編號,以及一些底線來分隔各個部分,使其更具視覺吸引力。我們這裡有一個批次或週期、一個重複句柄以及一個條件或反應器程式碼。這一長串可能看起來有點嚇人,但它們通常是連續的數字。
尤其如果你覺得這會讓一些操作員感到沮喪,通常他們每天只需輸入一次,然後你就可以在很多分析儀器上使用自動計數功能,只需點擊列表並填充即可。一旦你真正嘗試自動化和自動計算這些參數,它就能帶來真正的回報。
我建議採用這種方法,先確定你的團隊使用什麼工具來操作和顯示數據,然後整合並整理所需的最少部分。你真的希望這個過程盡可能簡單。有些東西是你剛好需要的,而且與這個或那個實驗無關,或者與你真正需要操作這些數據的東西無關。
您以後可以隨時新增其他功能。例如,我們這裡有一些可選功能,例如儀器誤差替換,您可以將其附加在末尾。例如,您可以進行有意的重新取樣,就像我之前提到的那個回饋一樣。如果我們確實想測量它並檢查它是否符合我們的預期,也可以這樣做。您還可以內建其他一些花哨的功能,但您需要為預設分析制定一個非常嚴格的命名方案,以便獲得認可並讓每個人都開始使用。
第二步是什麼?你需要存取這些數據。我們的做法是使用開放的資料庫連線。我們這裡就有一個 JMP 軟體,我們會嘗試將資料匯入其中。我們與數據和 IT 團隊合作設定了儀器,以便它們在運行後立即匯出 CSV 檔案。然後,這些數據會被上傳到我們的資料庫。你可以看到,細胞計數和化學分析資料都會上傳到這個資料庫。
ODBC 是連線。它負責將資料庫連接到 JMP 程式。它是一個應用程式介面 (API),使用 SQL 或結構化查詢語言。您在演示中看到,您也可以直接將元資料新增至應用程式或 JMP 中,或者也可以透過資料庫提供元資料。這兩種方式都可以。
你實際上是怎麼做到的? JMP 中其實有一個 SQL 查詢功能。你可以手動瀏覽,這裡有一個漂亮的使用者介面,你可以在其中選擇這些查詢。一旦你設定好了開放的資料庫連接,你就可以建立查詢,並且可以將它與一個非常酷的功能結合起來,這個功能叫做“工作流程產生器”,我想介紹一下,它會追蹤你正在執行的所有步驟,並為此建立 JSL 程式碼。
現在,當你編寫一些更高級的腳本時,你可能需要修改這個腳手架。它的作用是展示語法範例,並加快編碼速度,尤其是對於初學者,對於那些沒有接受過傳統電腦科學訓練的人來說。這是一個非常強大的工具,我希望確保大家能夠意識到這一點。
這段程式碼展示了實際程式碼的樣子。我們建立了一個連結。在本例中,我們將使用該使用者介面新增一個 ELN。這些是我們之後需要添加的一些額外功能。它為您提供了一個開始工作、測試和迭代的起點。
好的,第三步。我們需要清理和整理資料。這是一個重要的步驟,因為很多時候,人們在計算具體的血糖攝取量時,會把數據匯入到Excel表格中。他們手動移動、整理、刪除數據,並引用不同的儲存格。自動清理和合併資料對於確保我們獲得準確的結果至關重要。
我要討論的前兩個方面是「連接和排序」操作。在使用者介面中,這些操作位於「表格」標籤下,同樣可以與「工作流程建構器」結合使用。這是一個連接函數的範例,我們將化學分析物和細胞計數資料合併在一起。接下來,我們需要根據參數對它們進行排序,以便所有資料都井然有序,並符合函數的預期順序。
最後,我們可以進行各種清理。這需要更多精力,但使用邏輯表達式可以相當輕鬆地完成。我這裡使用的範例基本上是從儀器錯誤中刪除重複行。這就是我之前提到的 Underscore R 參數。
我們在這裡所做的是仔細檢查並標記哪些是重複的,哪些不是。然後,我們基本上會提取、隱藏和排除所有非最新樣本。同樣,這些腳本內建了大量的清理功能,讓您的資料真正接近準備就緒,為黃金時段做好準備。
好了,讓我們進入最後一部分。我們實際上如何建立一個包含關鍵函數的列來計算這個參數?我們已經得到了一個瘋狂的公式。它相當殘酷。第一步是使用類似 if 和 is missing 之類的函數,讓計算依賴可用的參數。
在這個範例視窗中,我們可以說,對於其中一些,我們確實添加了葡萄糖。這就是我們之前討論的進料參數。對於其中一些,我們沒有。我們需要一個方法來建立一個方程,如果這個值存在,就計算它,包括它。如果不存在,就不計算。這就是我們使用 if 和 is missing 函數來實現的。
我們還有一個問題。現在,我們需要的計算值出現在不同的行中。列式格式雖然在資料管理上有其優勢,但引用同一行以外的內容卻更加困難。公式的建構方式比較是參考同一行的內容。我們可以利用一個非常強大的函數,也就是我在這裡要提到的滯後函數。
當您的資料經過適當的排序和組織後,即使不在同一行,也能實現非常準確的資料引用。這裡有我們的 T 值 C,以及 T 值減 1 的 C,我們可以使用滯後函數來引用。程式碼如下所示。我們將產生一個新列。我們將創建一個公式。我們將使用 if 語句來檢查它們是否基本上相同。我們不會比較兩個不同的批次。我們只在同一個批次中使用這個唯一的 ID 句柄。我們將檢查廣告是否正在發生,然後執行計算。 iVCD,即另一個資料區塊,位於另一列,但其工作原理非常相似。
我現在要做的是切換回 JMP 並演示實際操作。好了。現在我有了另一個標準化資料集。您可以看到,這裡有一些樣本,有各自的唯一 ID,有一些葡萄糖值,還有一些廣告回饋。其中一些正在發生。在某些情況下,它們是不同的值,而且它們的間隔並不均勻。我們需要一個足夠聰明的軟體來計算這些值,並且每次都能正確執行。
我們要做的是運行我在底部展示的腳本。我們將運行這個腳本來建立一個新列,用於計算特定的葡萄糖消耗量,然後我們只需移動選定的列,這樣我們就可以直接看到它,而不必滾動螢幕。我將在這裡截取並運行這段腳本的片段。
我必須運行整個程序,而不僅僅是突出顯示的部分。運行後,我們可以看到這裡彈出了一個新列,並且正在獲取計算結果。它按照我們想要的方式對計算進行拆分,並且我們得到了按我們想要的方式縮放的精確值。
如果我們看一下我們的公式,就會發現它建構了一個公式。它通過條件邏輯,最終得到我們想要的計算結果。我們可以在這裡預覽數據,查看各個部分,了解它們如何疊加,並進行故障排除。這就是我們實現先進、精確的自動化計算的方式。
好的。演講到此結束。我只想在這裡快速結束一下,謝謝大家的支持。 UPSIDE Foods 全體員工都參與了這項活動,尤其是 Megan 和 Julia。以下是我在舉辦「頂級廚師」比賽時的一些隊友、整個公司、我們的生產設施以及我們的一些產品。
特別感謝我們的IT和資料團隊,他們為我完成了一些關於開放資料庫連線的繁重工作,並幫助我排除系統故障。也要感謝我的經理Cameron,他最初向我介紹了JMP,並向我展示了這款工具的強大功能。謝謝大家,我的演講就此結束。