Bio.phenotype.phen_micro 模組

用於處理表型微陣列數據的類別。

有關單個板子的更多資訊,請參閱此處: http://www.biolog.com/

類別
  • PlateRecord - 物件,包含板子上每個孔的時間序列數據,以及元數據(如果有的話)。

  • WellRecord - 物件,包含單個孔的時間序列數據

  • JsonWriter - 以 JSON 格式寫入 PlateRecord 物件的寫入器。

函式
  • JsonIterator - 增量式 PM JSON 解析器,這是一個迭代器,返回 PlateRecord 物件。

  • CsvIterator - 增量式 PM CSV 解析器,這是一個迭代器,返回 PlateRecord 物件。

  • _toOPM - 由 JsonWriter 內部使用,將 PlateRecord 物件轉換為準備以 JSON 格式序列化的字典。

class Bio.phenotype.phen_micro.PlateRecord(plateid, wells=None)

基礎: object

用於儲存表型微陣列板數據的 PlateRecord 物件。

PlateRecord 儲存特定表型微陣列板的所有孔,以及元數據(如果有的話)。單個孔可以透過呼叫其 ID 作為索引或在 PlateRecord 上迭代來存取

>>> from Bio import phenotype
>>> plate = phenotype.read("phenotype/Plate.json", "pm-json")
>>> well = plate['A05']
>>> for well in plate:
...    print(well.id)
...
A01
...

板的行和列可以使用類似 NumPy 和其他矩陣的索引系統來查詢

>>> print(plate[1])
Plate ID: PM01
Well: 12
Rows: 1
Columns: 12
PlateRecord('WellRecord['B01'], WellRecord['B02'], WellRecord['B03'], ..., WellRecord['B12']')
>>> print(plate[:,1])
Plate ID: PM01
Well: 8
Rows: 8
Columns: 1
PlateRecord('WellRecord['A02'], WellRecord['B02'], WellRecord['C02'], ..., WellRecord['H02']')

可以使用此索引系統存取單個 WellRecord 物件

>>> print(plate[1,2])
Plate ID: PM01
Well ID: B03
Time points: 384
Minum signal 0.00 at time 11.00
Maximum signal 76.25 at time 18.00
WellRecord('(0.0, 11.0), (0.25, 11.0), (0.5, 11.0), (0.75, 11.0), (1.0, 11.0), ..., (95.75, 11.0)')

可以使用「in」關鍵字檢查特定孔的存在: >>> 'A01' in plate True

可以取得板上屬於「行」(由孔 ID 的第一個字符識別)的所有孔

>>> for well in plate.get_row('H'):
...     print(well.id)
...
H01
H02
H03
...

可以取得板上屬於「列」(由孔的數字識別)的所有孔

>>> for well in plate.get_column(12):
...     print(well.id)
...
A12
B12
C12
...

可以比較兩個 PlateRecord 物件:如果它們的所有孔都相等,則認為兩個板相等

>>> plate2 = phenotype.read("phenotype/Plate.json", "pm-json")
>>> plate == plate2
True

兩個 PlateRecord 物件可以彼此相加或相減:每個孔的訊號將被加總或相減。左操作數的 ID 將被保留

>>> plate3 = plate + plate2
>>> print(plate3.id)
PM01

許多表型微陣列板都有一個「負控制」孔,可以從所有孔中減去

>>> subplate = plate.subtract_control()
__init__(plateid, wells=None)

初始化類別。

__getitem__(index)

存取板的一部分。

根據索引,您可以取得一個 WellRecord 物件(表示板的單個孔),或另一個板(表示原始板的部分或全部)。

plate[wid] 給出一個 WellRecord(如果 wid 是 WellRecord ID) plate[r,c] 給出一個 WellRecord plate[r] 給出一行作為 PlateRecord plate[r,:] 給出一行作為 PlateRecord plate[:,c] 給出一列作為 PlateRecord

plate[:] 和 plate[:,:] 給出板的副本

其他任何東西都會給出原始板的子集,例如 plate[0:2] 或 plate[0:2,:] 僅使用第 0 行和第 1 行 plate[:,1:3] 僅使用第 1 列和第 2 列 plate[0:2,1:3] 僅使用第 0 行和第 1 行,以及第 1 列和第 2 列

>>> from Bio import phenotype
>>> plate = phenotype.read("phenotype/Plate.json", "pm-json")

您可以使用其 ID 來存取板的一個孔。

>>> w = plate['A01']

您可以使用整數索引來存取板的一行作為 PlateRecord

>>> first_row = plate[0]
>>> print(first_row)
Plate ID: PM01
Well: 12
Rows: 1
Columns: 12
PlateRecord('WellRecord['A01'], WellRecord['A02'], WellRecord['A03'], ..., WellRecord['A12']')
>>> last_row = plate[-1]
>>> print(last_row)
Plate ID: PM01
Well: 12
Rows: 1
Columns: 12
PlateRecord('WellRecord['H01'], WellRecord['H02'], WellRecord['H03'], ..., WellRecord['H12']')

您也可以使用 python 的切片符號來表示僅包含板某些行的子板

>>> sub_plate = plate[2:5]
>>> print(sub_plate)
Plate ID: PM01
Well: 36
Rows: 3
Columns: 12
PlateRecord('WellRecord['C01'], WellRecord['C02'], WellRecord['C03'], ..., WellRecord['E12']')

這包括對步長的支援,即 plate[start:end:step],可用於選擇每隔一行

>>> sub_plate = plate[::2]

您也可以使用兩個索引來指定行和列。使用簡單的整數會給您單個孔。例如

>>> w = plate[3, 4]
>>> print(w.id)
D05

若要取得單個列,請使用此語法

>>> sub_plate = plate[:, 4]
>>> print(sub_plate)
Plate ID: PM01
Well: 8
Rows: 8
Columns: 1
PlateRecord('WellRecord['A05'], WellRecord['B05'], WellRecord['C05'], ..., WellRecord['H05']')

或者,若要取得部分列,

>>> sub_plate = plate[1:3, 4]
>>> print(sub_plate)
Plate ID: PM01
Well: 2
Rows: 2
Columns: 1
PlateRecord(WellRecord['B05'], WellRecord['C05'])

但是,通常您會取得一個子板,

>>> print(plate[1:5, 3:6])
Plate ID: PM01
Well: 12
Rows: 4
Columns: 3
PlateRecord('WellRecord['B04'], WellRecord['B05'], WellRecord['B06'], ..., WellRecord['E06']')

任何使用過 NumPy 陣列或矩陣物件的人都應該熟悉這一切。

__setitem__(key, value)
__delitem__(key)
__iter__()
__contains__(wellid)
__len__()

傳回此板中的孔數。

__eq__(other)

傳回 self==value。

__add__(plate)

新增另一個 PlateRecord 物件。

兩個板中的孔必須相同

將傳回新的 PlateRecord 物件,其 ID 與左操作數相同。

__sub__(plate)

減去另一個 PlateRecord 物件。

兩個板中的孔必須相同

將傳回新的 PlateRecord 物件,其 ID 與左操作數相同。

get_row(row)

取得指定行的所有孔。

行使用字母識別(例如「A」)

get_column(column)

取得指定列的所有孔。

列使用數字識別(例如「6」)

subtract_control(control='A01', wells=None)

從其他板孔減去「控制」孔。

預設情況下,控制項會從所有孔中減去,除非提供了孔 ID 清單

控制孔應屬於板。會傳回新的 PlateRecord 物件

__repr__()

傳回板的(截斷)表示形式,以進行偵錯。

__str__()

傳回記錄的易讀摘要(字串)。

python 內建函數 str 透過呼叫物件的 __str__ 方法來運作。例如

>>> from Bio import phenotype
>>> record = next(phenotype.parse("phenotype/Plates.csv", "pm-csv"))
>>> print(record)
Plate ID: PM01
Well: 96
Rows: 8
Columns: 12
PlateRecord('WellRecord['A01'], WellRecord['A02'], WellRecord['A03'], ..., WellRecord['H12']')

請注意,長的孔列表會顯示為截斷。

__hash__ = None
class Bio.phenotype.phen_micro.WellRecord(wellid, plate=None, signals=None)

基礎: object

WellRecord 儲存表型微陣列孔的所有時間序列訊號。

可以透過迭代 WellRecord 或使用列表索引或切片來存取單個時間點和訊號。

>>> from Bio import phenotype
>>> plate = phenotype.read("phenotype/Plate.json", "pm-json")
>>> well = plate['A05']
>>> for time, signal in well:
...    print("Time: %f, Signal: %f" % (time, signal)) 
...
Time: 0.000000, Signal: 14.000000
Time: 0.250000, Signal: 13.000000
Time: 0.500000, Signal: 15.000000
Time: 0.750000, Signal: 15.000000
...
>>> well[1]
16.0
>>> well[1:5]
[16.0, 20.0, 18.0, 15.0]
>>> well[1:5:0.5]
[16.0, 19.0, 20.0, 18.0, 18.0, 18.0, 15.0, 18.0]

如果輸入檔案中不存在某個時間點,但該時間點介於最小和最大時間點之間,則會返回內插的訊號,否則會返回 nan 值。

>>> well[1.3]
19.0
>>> well[1250]
nan

可以比較兩個 WellRecord 物件:如果它們的輸入時間/訊號對完全相同,則這兩個記錄被視為相等。

>>> well2 = plate['H12']
>>> well == well2
False

兩個 WellRecord 物件可以相加或相減:會返回一個新的 WellRecord 物件,其 ID 與左運算元相同。

>>> well1 = plate['A05']
>>> well2 = well + well1
>>> print(well2.id)
A05

如果安裝了 SciPy,則可以將 sigmoid 函數擬合到 PM 曲線,以便提取一些參數;有三個 sigmoid 函數可用:* gompertz * logistic * richards。這些函數在 Zwietering 等人,1990 年的論文中描述 (PMID: 16348228)。

例如

well.fit()
print(well.slope, well.model)
(61.853516785566917, 'logistic')

如果未指定 sigmoid 函數,則會使用第一個成功擬合的函數。使用者也可以指定特定的函數。

若要指定 gompertz

well.fit('gompertz')
print(well.slope, well.model)
(127.94630059171354, 'gompertz')

如果無法擬合任何函數,則除了 max、min、average_height 和 area 之外,其他參數都會保留為 None。

__init__(wellid, plate=None, signals=None)

初始化類別。

__setitem__(time, signal)

在特定時間點指派訊號。

__getitem__(time)

返回訊號的子集或單個訊號。

__iter__()
__eq__(other)

傳回 self==value。

__add__(well)

加入另一個 WellRecord 物件。

返回一個新的 WellRecord 物件,其 ID 與左運算元相同

__sub__(well)

減去另一個 WellRecord 物件。

返回一個新的 WellRecord 物件,其 ID 與左運算元相同

__len__()

返回取樣的時間點數量。

__repr__()

返回用於除錯的訊號(截斷)表示。

__str__()

傳回記錄的易讀摘要(字串)。

Python 內建函數 str 通過呼叫物件的 __str__ 方法來運作。例如

>>> from Bio import phenotype
>>> plate = phenotype.read("phenotype/Plate.json", "pm-json")
>>> record = plate['A05']
>>> print(record)
Plate ID: PM01
Well ID: A05
Time points: 384
Minum signal 0.25 at time 13.00
Maximum signal 19.50 at time 23.00
WellRecord('(0.0, 14.0), (0.25, 13.0), (0.5, 15.0), (0.75, 15.0), (1.0, 16.0), ..., (95.75, 16.0)')

請注意,長時間跨度會顯示為截斷。

get_raw()

取得時間/訊號對的列表。

get_times()

取得記錄的時間點列表。

get_signals()

取得記錄的訊號列表(依收集時間排序)。

fit(function=('gompertz', 'logistic', 'richards'))

將 sigmoid 函數擬合到此孔,並提取曲線參數。

如果 function 為 None 或空元組/列表,則不進行擬合。僅計算物件的 .min.max.average_height

預設情況下,將按以下順序使用以下擬合函數
  • gompertz

  • logistic

  • richards

第一個成功擬合訊號的函數將用於提取曲線參數,並更新 .area.model。如果無法擬合任何函數,則會引發例外。

function 引數應為包含這三個函數名稱字串的元組或列表。

沒有回傳值。

__hash__ = None
Bio.phenotype.phen_micro.JsonIterator(handle)

將 PM json 記錄作為 PlateRecord 物件迭代。

引數
  • handle - 輸入檔案

Bio.phenotype.phen_micro.CsvIterator(handle)

將 PM csv 記錄作為 PlateRecord 物件迭代。

引數
  • handle - 輸入檔案

class Bio.phenotype.phen_micro.JsonWriter(plates)

基礎: object

用於寫入 PM Json 格式檔案的類別。

__init__(plates)

初始化類別。

write(handle)

將此實例的板寫入檔案控制代碼。