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 - 輸入檔案