Bio.phenotype:分析表型數據
本章概述 Biopython 中包含的 Bio.phenotype
套件的功能。此套件的範圍是分析表型數據,也就是解析和分析細胞培養物的生長測量。目前,該套件的重點是分析由表型微陣列技術產生的高通量表型實驗,但未來的發展可能會包括其他平台和格式。
表型微陣列
表型微陣列是一種測量細菌和真核細胞在大約 2000 種化學物質上的代謝的技術,這些化學物質分布在 20 個 96 孔盤中。該技術測量 NADH 還原四唑染料的能力,細胞產生的 NADH 用作細胞代謝的替代指標;這種染料還原產生的顏色變化通常每 15 分鐘測量一次。當細胞在維持細胞代謝的培養基中生長時,記錄的表型數據類似於 S 形生長曲線,可以從中檢索出一系列生長參數。
解析表型微陣列數據
Bio.phenotype
套件可以解析兩種不同格式的表型微陣列數據:機器專有軟體產生的 CSV(逗號分隔值)檔案和分析軟體(如opm 或 DuctApe)產生的 JSON 檔案。解析器會根據使用的讀取或解析方法,返回一個或多個 PlateRecord 物件的產生器。您可以使用 Biopython 原始碼提供的 Plates.csv 檔案測試解析函數。
>>> from Bio import phenotype
>>> for record in phenotype.parse("Plates.csv", "pm-csv"):
... print("%s %i" % (record.id, len(record)))
...
PM01 96
PM01 96
PM09 96
PM09 96
解析器返回一系列 PlateRecord 物件,每個物件都包含一系列 WellRecord 物件(保存每個孔的實驗數據),這些物件以 8 行和 12 列排列;每行由 A 到 H 的大寫字母表示,而列由 01 到 12 的兩位數字表示。有多種方法可以從 PlateRecord 物件存取 WellRecord 物件。
- 孔識別符
如果您知道孔識別符(行 + 列識別符),您可以直接存取所需的孔。
>>> record["A02"] WellRecord('(0.0, 12.0), (0.25, 18.0), (0.5, 27.0), (0.75, 35.0), (1.0, 37.0), ..., (71.75, 143.0)')
- 孔盤座標
可以使用行和列號(從 0 開始的索引)檢索相同的孔。
>>> from Bio import phenotype >>> record = list(phenotype.parse("Plates.csv", "pm-csv"))[-1] >>> print(record[0, 1].id) A02
- 行或列座標
可以使用 PlateRecord 物件上的 python 清單切片語法,批量檢索盤中彼此相鄰的一系列 WellRecord 物件;行和列都使用從 0 開始的索引編號。
>>> print(record[0]) Plate ID: PM09 Well: 12 Rows: 1 Columns: 12 PlateRecord('WellRecord['A01'], WellRecord['A02'], WellRecord['A03'], ..., WellRecord['A12']') >>> print(record[:, 0]) Plate ID: PM09 Well: 8 Rows: 8 Columns: 1 PlateRecord('WellRecord['A01'], WellRecord['B01'], WellRecord['C01'], ..., WellRecord['H01']') >>> print(record[:3, :3]) Plate ID: PM09 Well: 9 Rows: 3 Columns: 3 PlateRecord('WellRecord['A01'], WellRecord['A02'], WellRecord['A03'], ..., WellRecord['C03']')
操作表型微陣列數據
存取原始數據
從 PM 檔案中提取的原始數據包含每個孔的一系列元組,其中包含時間(以小時為單位)和比色測量值(以任意單位表示)。通常儀器每十五分鐘收集一次數據,但這可能因實驗而異。可以透過迭代 WellRecord 物件來存取原始數據;在下面的範例中,僅顯示前十個時間點。
>>> from Bio import phenotype
>>> record = list(phenotype.parse("Plates.csv", "pm-csv"))[-1]
>>> well = record["A02"]
>>> for time, signal in well:
... print(time, signal)
...
(0.0, 12.0)
(0.25, 18.0)
(0.5, 27.0)
(0.75, 35.0)
(1.0, 37.0)
(1.25, 41.0)
(1.5, 44.0)
(1.75, 44.0)
(2.0, 44.0)
(2.25, 44.0)
[...]
這種方法雖然提供了一種存取原始數據的方法,但無法直接比較不同的 WellRecord 物件,因為它們可能在不同的時間點進行測量。
存取內插數據
為了更容易比較不同的實驗,並且通常允許更直觀地處理表型數據,該模組允許定義 WellRecord 物件中時間點的自訂切片。未直接測量時間點的比色數據是透過對可用數據進行線性內插而得出的,否則會返回 NaN。此方法僅在實際數據可用的時間間隔內有效。可以使用與清單索引相同的語法定義時間間隔;因此,預設時間間隔為一小時。
>>> well[:10]
[12.0, 37.0, 44.0, 44.0, 44.0, 44.0, 44.0, 44.0, 44.0, 44.0]
>>> well[9.55]
44.0
可以使用不同的時間間隔,例如五分鐘
>>> for value in well[63 : 64 : 5 / 60]:
... print(f"{value:0.2f}")
...
110.00
111.00
112.00
113.00
113.33
113.67
114.00
114.33
114.67
115.00
115.00
115.00
>>> for value in well[63.33:73.33]:
... print(f"{value:0.2f}")
...
113.32
117.00
120.32
128.00
129.64
132.96
136.96
140.00
142.00
nan
對照孔扣除
許多表型微陣列盤包含一個對照孔(通常是 A01),也就是培養基不應支持任何生長的孔;可以從其他孔中減去此孔產生的低信號。PlateRecord 物件有一個專用的函數可以執行此操作,它會返回另一個包含校正數據的 PlateRecord 物件。
>>> corrected = record.subtract_control(control="A01")
>>> record["A01"][63]
336.0
>>> corrected["A01"][63]
0.0
參數提取
觀察到代謝活動的孔會顯示比色數據的 S 形行為。為了更容易比較不同的實驗,可以將 S 形曲線擬合到數據上,以便提取一系列摘要參數並用於比較。可以從曲線中提取的參數是
最小 (min) 和最大 (max) 信號;
平均高度 (average_height);
曲線下面積 (area);
曲線平穩點 (plateau);
指數代謝活動期間的曲線斜率 (slope);
曲線滯後時間 (lag)。
所有參數(min、max 和 average_height 除外)都需要安裝 scipy 函式庫。
擬合函數使用三個 S 形函數
- Gompertz
\(Ae^{-e^{(\frac{\mu_{m}e}{A}(\lambda - t) + 1)}} + y0\)
- Logistic
\(\frac{A}{1+e^{(\frac{4\mu_{m}}{A}(\lambda - t) + 2)}} + y_{0}\)
- Richards
\(A(1 + ve^{1 + v} + e^{\frac{\mu_{m}}{A}(1 + v)(1 + \frac{1}{v})(\lambda - t)})^{-\frac{1}{v}} + y0\)
其中
對應於 plateau
對應於 slope
對應於 lag
這些函數來源於此出版物。預設情況下,擬合方法首先嘗試擬合 Gompertz 函數:如果失敗,則嘗試擬合 Logistic 函數,然後嘗試擬合 Richards 函數。使用者還可以指定要應用的三個函數之一。
>>> from Bio import phenotype
>>> record = list(phenotype.parse("Plates.csv", "pm-csv"))[-1]
>>> well = record["A02"]
>>> well.fit()
>>> print("Function fitted: %s" % well.model)
Function fitted: gompertz
>>> for param in ["area", "average_height", "lag", "max", "min", "plateau", "slope"]:
... print("%s\t%.2f" % (param, getattr(well, param)))
...
area 4414.38
average_height 61.58
lag 48.60
max 143.00
min 12.00
plateau 120.02
slope 4.99
寫入表型微陣列數據
PlateRecord 物件可以以 JSON 檔案的形式寫入檔案,這種格式與其他軟體套件(如 opm 或 DuctApe)相容。
>>> phenotype.write(record, "out.json", "pm-json")
1