Bio.phenotype.phen_micro 模块

用于处理表型微阵列数据的类。

有关单板的更多信息,请访问:http://www.biolog.com/

  • PlateRecord - 包含板中每个孔的时间过程数据的对象,以及元数据(如果有)。

  • WellRecord - 包含单个孔的时间过程数据的对象

  • JsonWriter - PlateRecord 对象的 JSON 格式写入器。

函数
  • 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,可以将 S 形函数拟合到 PM 曲线上,以提取一些参数;有三个 S 形函数可用:* gompertz * logistic * richards 这些函数在 Zwietering 等人,1990 年(PMID:16348228)中进行了描述。

例如

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

如果没有指定 S 形函数,则使用第一个成功拟合的函数。用户也可以指定一个特定函数。

要指定 gompertz

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

如果无法拟合任何函数,则参数将保留为 None,除了 max、min、average_height 和 area。

__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'))

将 S 形函数拟合到此孔中并提取曲线参数。

如果 function 为 None 或空元组/列表,则不会进行拟合。仅计算对象的 .min.max.average_height

默认情况下,以下拟合函数将按顺序使用
  • gompertz

  • logistic

  • richards

第一个成功拟合到信号的函数将用于提取曲线参数并更新 .area.model。如果无法拟合任何函数,则会引发异常。

函数参数应该是这三个函数名称中的任何一个作为字符串的元组或列表。

没有返回值。

__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)

将此实例的平板写入文件句柄。