Brenda Parser NewDev (1, v2.0)

Review

先复习一下寒假前的代码Brenda Parser README。这个版本的代码实现的功能是为每一个EC号维护一个酶表(库),物质表和酶-物质相互作用表。目前需要改进的方向:

  1. 定义反应方程式表(实际上在处理过程中也整理出来了),参考文献表,酶命名表等一系列我们可能感兴趣的文摘内容。
  2. 将各个EC号各自维护的内容表融合成全局的表格,主要是反应表,物质表和参考文献表。

在进行内容整理的同时也要思考,可以利用现有Brenda的全局知识,进行一些怎样的研究趋势的分析?

Target

整理Brenda的内容,希望提供一个细粒度版本的酶-反应关联。Brenda的细粒度由酶的生物来源定义,同时在反应上链接了参考文献信息。生物来源+参考文献,使得Brenda的内容相比Rhea而言要显得精确。

TODO

表格

按照Rhea的反应表述方式来整理,那么需要的表格有

reaction.tsv
表达反应-物质关联
reaction_reactionSide.tsv
reactionSide_reactionParticipants.tsv
reactionParticipants_compound.tsv
compound.tsv
表达反应-酶关联
reactionSide_catalysisParticipants.tsv
catalysitsParticipants_enzyme.tsv
enzyme.tsv
表达反应-文献关联
reaction_reference.tsv
reference.tsv

它们之间的关联关系可以用【酶反应信息数字化-v3.1】中的这幅图(表达方案参考Rhea数据库)来表示:
反应-化学物质-酶关联
对上图的补充说明:

  1. container-content 这一对词形象说明了Side和Participants, Participants和compound/enzyme之间的关系。Reaction实际上是一个有三个桌子的屋子,每个桌子上又可以放许多个茶杯,而每个茶杯里倒的茶才是“真正”的实体。
表项

从构建的角度,明确每一个表的表项。我们来逐表分析一下。

  1. reaction.tsv
    ID数字编号
    name: [br:ID] (如同rh:ID在Rhea数据库中一样)
    label: 反应的表示
    is_complete: 记录是否完整(True/False)
    is_approved: 记录是否被自动补全工具所验证(True/False)
    source_page: 来源EC号页面(不同EC号之间可能有重复的反应,方便追溯和比对)
    feature_code: 特征码(类似于反应的Hash码,仅对approved的反应定义,用于反应消歧)
    DataSource: Brenda
  2. reaction_reactionSide.tsv (不定义反应方向的情况下,无法重用,不必要的表)
    reaction_name: [br:ID]
    relation_type: 枚举值(substrates, products, catalysts)
    reaction_side_name: [br:ID_L|R|C]
  3. reactionSide_reactionParticipants.tsv
    reaction_name:[br:ID]
    relation_type: 枚举值(substrate, product)
    coefficient: 化学计量数, -1代表未定义。
    reaction_participant_ID:该表的Key。
    reaction_participant_name:[br:RP_ID]
    label:如果compound_ID未定义,那么采用该label;否则,采用compound_ID的label。
    is_complete
    compound_name:[br:COM_ID]
  4. reactionParticipants_compound.tsv
    reaction_participant_name
    label:reaction_participant 的表示
    compound_ID:[br:Compound_ID]
  5. compound.tsv
    ID
    name: [br:Compound_ID]
    accession: 检索号 [BRENDA: num] (仿佛还没有定义)
    label
    is_complete
    formula: 分子式 (Brenda中不具有,需要与其它数据库交叉得到)
    charge: 电荷 (Brenda中不具有)
    source_page
    feature_code
  6. reactionSide_catalysisParticipants.tsv
    reaction_name:[br:ID]
    catalysis_participant_ID
    name:[br:CP_ID]
    label:如果enzyme_ID未定义,那么采用该label;否则,采用enzyme_ID的label。
    is_complete
    enzyme_name:[br:ENZ_ID]
  7. catalysitsParticipants_enzyme.tsv
    catalysis_participant_name
    label: catalysis_participant 的表示
    enzyme_ID:[br:Enzyme_ID]
  8. enzyme.tsv
    ID
    name:[br:Enzyme_ID]
    accession
    label:enzyme的表示
    EC:酶的EC号
    i:该EC号下的编号
    source_organism:来源生物(字符串表示)
  9. reaction_reference.tsv
    reaction_name:[br:ID]
    reference_name:[br:Ref_ID]
  10. reference.tsv
    ID:朴素的数字编号
    name:[br:Ref_ID]
    accession
    label:reference的表示
    is_complete
    year:发表时间
    source_page: 来源EC号(不同EC号之间可能有重复的文献记录,方便追溯和比对)
  11. enzyme_atlas.tsv
    略。
  12. organism.tsv
    略。

说明一些规则:

  1. 具有ID号的表,ID号为Key,name由ID号生成,因此上述关系表中的name可以由ID号完全替换,在下面的图中便是这么表达的。
  2. source_page:由于整理总表是逐EC号进行的,为了给记录留痕,添加source_page来记录具有该记录的EC页面;但对于一些过于普适的记录,如小分子物质等,不进行记录。
  3. is_complete:在具有内容的几个表中均有均有is_complete来表示该条记录是否完整,其各有自己的判断标准;更新可以使不完整的记录完善。

表的主键设置及索引关系
在这里插入图片描述

表项对任务的支持

基于上图示,说明表项更新与检索时的流程:

  1. 反应的表示与关联
    下图红框中为表示反应所必要的信息(ID,Name的定义不会展现在UI上),蓝框中为反应与化学物质、酶、参考文献的关联,这些信息使得可以通过酶、化合物、文献将多个反应关联起来。
    反应表示
  2. 添加反应
    根据反应的已知信息,给下面各个表格添加内容;通过反应、化合物、酶、文献的feature_code来消歧(判断反应是否在表格中),利用is_complete来标注条目的信息完善程度。
    反应添加
  3. 更新反应
    分为更新元数据与更新关联数据两类。元数据更新与添加反应类似。更新关联数据即对三个关系表中的ID进行更新即可。
  4. 添加化学物质/酶/参考文献
    略。
从Brenda中获取信息,整理为数据表格式

该任务分解如下:

  1. 为每一个EC页面生成自己的反应、酶、化合物、参考文献 Records。参考Brenda Parser README
  2. 整理全局的化合物、酶、参考文献表。
  3. 整理全局的反应表。
  4. 建立反应表与其它三个表的关联关系。

下面图示各个表项的资料来源。
数据来源
相比之前,主要是添加了REFERENCE的内容,也需要在关系中体现出来。

代码工作

为genTables()添加REFERENCE的正则表达式

参考文献的格式如下。

<2> O’Connor, K.C.; Bailey, J.E.: Hydrolysis of emulsified tributyrin by porcine pancreatic lipase. Enzyme Microb. Technol. (1988) 10, 352-356. {Pubmed:} (c)

使用的正则表达式如下:

'<([\d]+)> (.+?) {Pubmed:[\d]*}(?: \(c\))?'

由此,在Page的Tables中可以取到REFERENCE表格。

测试代码对于整个文件的鲁棒性
多个\t分隔符

修复了一处bug。
'\t’作为分隔符,默认是一行只有一个的,如下:
单个分隔符
但是,有的行有两个以上:
两个分隔符
在得到record的时候只取了第一个,便可能会有问题,因此,将record的代码改为:

record = line.split('\t')[1][:-1] # 原版本
record = ' '.join(line.split('\t')[1:])[:-1] # 修改后

解决了这个问题。

边缘情况:{Pubmed:n}

另外,还有一处{Pubmed:n}的bug,在REFERENCE的正则表达式中添加了n,解决了这个问题。

提取全局表信息

主要是将之前的局部表信息整合进全局表,代码多有重复,实际上是又重新写了一遍。
首先是各个表格实际可以得到的与需要的内容:

    '''
    Returns
    -------
    compound : List of (ID, label)
    enzyme : List of (ID, label, EC, i, source_organism)
    reference : List of (ID, label, source_page, i)
    reaction : List of (ID, label, is_complete, is_approved, source_page, Datasource)
    rS_rP : List of (rID, relation_type, rPID, label, cID)
    rS_cP : List of (rID, cPID, label, eID)
    r_r : List of (rID, refID)
    '''

采用一个大字典TSV保存所有的形式,最后输出该字典。

def genTSVs(self):
	TSVs = {'compound':[], 'enzyme':[], 'reference':[], 'reaction':[],
            'rS_rP':[], 'rS_cP':[], 'r_r':[], }
	return TSVs

genTSVs的主要部分是循环Brenda的Pages,根据Pages已做好的保存信息的格式化的str方式存储的Tables,整理输出为各个TSVs。

page.Tables[‘PROTEIN’] >> TSVs[‘enzyme’]
page.Tables[‘REFERENCE’] >> TSVs[‘reference’]
page.Tables[‘NATURAL_SUBSTRATE_PRODUCT’] + page.Tables[‘SUBSTRATE_PRODUCT’] >> Other TSVs.

一些说明:

  1. enzyme和reference都是原Table整理得很好的,耦合也没反应那么强,所以直接拿出来就能用。
  2. compound可以通过外部导入数据库的方式来做比对,这里仍是通过反应来提取。
  3. compound 和 reaction 考虑了不同page之间重复的可能,所以各自用了一个dict+判断来将label映射到ID来消歧。
输出为tsv文件

将输出的TSVs保存为文件:

def toTSVFile(TSVs):
    for table_name, entries in TSVs.items():
        with open(os.path.join('brenda_tables', table_name + '.tsv'), 'w') as f:
            f.write('\n'.join('\t'.join(str(item) for item in entry) for entry in entries))

信息统计:

for table_name, entries in TSVs.items():
    print('{:>10}: {:>7,}'.format(table_name,len(entries)))
'''
  compound: 109,157
    enzyme:  95,145
 reference: 163,605
  reaction: 109,278
     rS_rP: 409,475
     rS_cP: 473,907
       r_r: 557,709
'''

More TODO

至此,基本的信息就提取结束。但是,由于Brenda的“粗糙”,其格式不一致现象严重,例如:

compound.tsv

在compound.tsv中搜索“H2O”,可以得到以下五花八门的“H2O”:

68 H2O
207 H2o
5593 2 H2O
8406 2 H2O ?
21479 + H2O
62003 h2O
等等。

其中有一些是带有化学计量数的,有大小写不一致的,错误划分“+”的,等等。

enzyme.tsv

在enzyme.tsv中,根据来源生物来区分同种不同源(同一EC号不同来源与不同序列)的酶,其名字中有一些带有Uniprot及编号,指代了其序列来源,这个信息应当再划分一列:Uniprot ID来展示(如Brenda所做的那样)。

94 1.1.1.1_95 1.1.1.1 94 Saccharolobus solfataricus Q9UXF1 UniProt
UniProKB-Q9UXF1

reference.tsv

对于reference.tsv,提取其元数据,做一个研究趋势分析(Wildman提建议:为什么不用WoS来做呢?)。
(实际上Brenda中是有2019/2020年的数据的…)
(2018):1977
(2019):691
(2020):20

122497 Maianti, J.P.; Tan, G.A.; Vetere, A.; Welsh, A.J.; Wagner, B.K.; Seeliger, M.A.; Liu, D.R.: Substrate-selective inhibitors that reprogram the activity of insulin-degrading enzyme. Nat. Chem. Biol. (2019) 15, 565-574. 3.4.24.56 130
(这个格式似乎是一个home-made的格式,不属于以下的主流参考文献格式规范)
参考文献格式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 对于Brenda的存货布置问题,我们可以从以下几个方面进行分析: 1. 存货分类:首先需要对公司的存货进行分类,根据不同的属性和特征,将存货分为不同的类别。例如,可以将存货分为原材料、半成品和成品等不同的类别,以便更好地管理和布置存货。 2. 存货周转率:存货周转率是指企业在一定时间内存货的销售次数。通过计算存货周转率,可以评估存货的合理性和优化存货的布置。如果存货周转率较低,说明存货过多,占用了过多的资金和仓储空间,需要优化存货布置。 3. 存货价值:除了考虑存货数量和周转率外,还需要考虑存货的价值。有些存货可能价值较高,需要进行专门的保管和管理。对于低价值的存货,可以考虑减少存储空间或者采取其他方式进行管理。 4. 仓库布局:对于存货布置,需要考虑仓库的布局和设计。合理的仓库设计可以提高存货的周转率和管理效率。例如,可以采用先进的物流管理系统,实现存货的即时监控和追踪,从而提高存货的管理效率。 5. 供应链管理:最后,需要考虑供应链管理。存货布置需要与供应链管理相结合,以便更好地管理和控制存货的流通和库存情况。通过优化供应链管理,可以实现存货的高效布置和管理,从而提高企业的经济效益。 总之,对于Brenda的存货布置问题,需要通过对存货分类、计算存货周转率、考虑存货价值、优化仓库布局和改善供应链管理等多个方面进行综合分析和优化,从而实现最优化的存货布置和管理。 ### 回答2: Brenda的存货布置问题分析涉及对其存货管理的评估和改进。存货布置是指为了优化企业存货管理而采取的措施和策略。 首先,我们需要进行存货布置的目标和目的分析。这包括确定Brenda对存货的需求和规模,并确保存货能够满足市场需求和客户需求。此外,还需要考虑存货布置的成本和利润预期,以确保存货布置能够增加企业的竞争力和利益。 其次,我们需要对Brenda的存货管理流程进行审查。这涉及从采购到销售的整个存货流动过程,包括存货进货、储存、库存管理、销售和报废处理等。通过对存货管理流程进行审查,可以发现存货布置中存在的问题和瓶颈,从而提出改进建议。 在存货布置问题分析中,还要考虑供应链管理的因素。这包括与供应商的合作关系、供货周期、供应商的信用和可靠性等。通过与供应链各方密切合作,可以提高存货的响应速度和准确性,降低存货的滞销和过期风险。 最后,为了改进存货布置,我们可以制定一套适合Brenda的存货管理策略。这包括定期库存盘点、建立存货有效期管理制度、优化供应链合作关系、制定库存警戒线和定期报废存货等。同时,还可以使用存货管理软件和技术,提高存货管理的效率和精确度。 综上所述,Brenda的存货布置问题分析需要综合考虑存货需求、存货管理流程和供应链管理等因素,以制定适合企业的存货管理策略和措施。这将有助于提高存货管理的效果和企业的竞争力。 ### 回答3: Brenda的存货布置问题分析主要涉及到存货的管理和控制,包括存货的分类、估价、计提和核算等方面。存货布置问题的核心是如何正确处理存货的计价和核算,以确保企业能够准确反映存货的价值和成本信息。 首先,存货的分类是存货布置的基础。对于不同的存货,应根据其性质和用途进行分类,例如原材料、在产品、产成品等。存货的分类将会对存货计价和核算产生直接影响,因此分类的准确性和合理性是非常重要的。 其次,存货的估价应基于合理和公允的依据。在存货布置中,常用的估价方法包括历史成本法、市场价格法和实际成本法等。选择合适的估价方法要考虑到存货的特点和市场状况,以确保估价的准确性和公允性。 第三,存货的计提也是存货布置中的重要环节。计提包括存货跌价准备和存货损耗准备等。存货跌价准备是为应对存货价值下降的风险而计提的,而存货损耗准备则是为应对存货质量问题而计提的。计提的准确性和及时性对于企业的财务状况和利润水平有着重要的影响。 最后,存货的核算也是存货布置的关键环节之一。存货的核算包括存货的进货、销售、报废和库存等方面。进行存货的核算时,要保证数据的准确性和可靠性,确保存货信息的真实性和合规性。同时,存货的核算还需要与其他财务科目进行有效的关联,以确保财务报表的准确性和完整性。 综上所述,Brenda的存货布置问题分析涉及到存货的分类、估价、计提和核算等方面。解决这些问题需要建立科学的存货管理制度和加强内部控制,以确保存货信息的准确性和合规性,为企业的经营决策提供有力的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值