本文是《Brenda应用(2) - 构建(酶, 物质, 关系) 0-1表格用于NBI推断新关系》的第一篇:数据获取。

目录

  • 目标
  • 输出
  • 实现
    • 数据来源
    • 问题
  • 应用/测试
    • 针对于感兴趣的十种酶进行数据生成
    • 代码
    • 问题
      • 本地记录不全
      • 数据清洗
        • 目标
        • 实现
        • 问题
  • TODO
    • 网络结构深化
      • 酶空间
      • 化学空间

目标

提取Brenda的底物、产物表内容,构建(酶, 物质, 关系)0-1表格用于NBI推断新关系。

输出

得到的文件均放在文件夹里,文件夹是一个二级的文件夹(如下图):
【Product】/【Substrate】-【3.1.1.3】(EC号命名的文件夹)

产出三个表:

  1. [Chemicals.tsv]

Cj name

  1. [Enzymes.tsv]

Ei EC name

  1. [ECIs.tsv]

Ei Cj [num]
[num] 表示关系在数据库中的计数

希望实现的效果是,在各级EC等级,如EC3, EC3.1, EC3.1.1, EC3.1.1.3上可以用统一的接口整理出三个表。

def genECI(EC, brenda, table, path):'''EC = '3', '3.1', '3.1.1', '3.1.1.3' 等,table = 'Substrate', 'Product'等,在os.path.join(path, table)路径下新建名为*EC*的文件夹,其中包含了Chemicals.tsv, Enzymes.tsv 和 ECIs.tsv 文件。(暂不实现:并且返回对象Chemicals, Enzymes 和 ECIs.)'''pass

实现

数据来源

Substrate表

Substrate
{   'reactionPartners': "1-(4'-fluorophenyl)ethanol + NAD+ = 1-(4'-fluorophenyl)ethanone + NADH + H+", 'substrate': "1-(4'-fluorophenyl)ethanol", 'organism': 'Thermus thermophilus', 'ecNumber': '1.1.1.1', 'ligandStructureId': 210894
}

Product表

Product
{   'organism': 'Leifsonia sp.', 'product': '1-(3-chlorophenyl)ethanol', 'reactionPartners': "3'-chloroacetophenone + NADH + H+ = 1-(3-chlorophenyl)ethanol + NAD+", 'ecNumber': '1.1.1.1', 'ligandStructureId': 134094
}

同样的,还有 NaturalSubstrate 和 NaturalProduct 表,内容类似。
从这个表里提取信息并整理的方法是简单的,下面是伪代码:

def genECI(EC, brenda, table, path):ECs = EC_candidate(EC, brenda, table) # 根据输入的EC str 返回ECs list.results = _genECI(brenda, table, ECs) # 根据ECs从Brenda中整理相应信息,返回results dict. writeFiles(results, path)  # 将 results 保存到 path 所指定的文件夹中

那么是不是也需要一个文件读入接口呢?
(未实现)

def readFile(EC, path):_path = _pathjoin(EC, path)results = _readFile(_path)return results

那么有必要规定一下results的格式了。既然如此,何不使用python中现有的图工具包来做呢?
(未实现)

问题

  1. 需要维护一个合理的tables的取值范围,并且维护提取信息的键名称。如下:
TABLE_SCHEMA = {'Product':('product','ecNumber','organism'),'Substrate':('substrate', 'ecNumber','organism'),'NaturalProduct':('naturalProduct', 'ecNumber','organism'),'NaturalSubstrate':('naturalSubstrate', 'ecNumber','organism'),
}
  1. 利用OrderedDict来同时实现Set和List的功能:
import collections'==略=='results = {}results['Chemicals'] = collections.OrderedDict()results['Enzymes'] = collections.OrderedDict()results['ECIs'] = collections.OrderedDict()

应用/测试

针对于感兴趣的十种酶进行数据生成

酶名称 主要EC号 命名 主要类型
P450酶 [‘1.1.1.B57’, ‘1.11.2’, ‘1.13’, ‘1.14’] P450 氧化还原酶类
卤化酶 [‘1.14.19’] O2->2 Water, oxidoreductase 氧化还原酶类
单萜合酶 [‘4.2.3.118’] 2-methylisoborneol synthase 裂合酶类
甲基化酶 [‘2.1.1’] methyltransferase 转移酶类
异戊烯基转移酶 [‘2.5.1.112’, ‘2.5.1.27’, ‘2.5.1.75’, ‘2.5.1.8’] isopentenyltransferase 转移酶类
环化酶 [‘4.2.1’, ‘4.2.3’] Hydro-lyases; or Acting on phosphate, C-O lyases 裂合酶类
C-糖基转移酶 [‘2.4.1’] hexosyltransferases 转移酶类
β-氨基酸合成酶 [‘4.3.1’] ammonia lyase 裂合酶类
氨基转移酶(酰胺水解酶) [‘3.5.1’] linear amides hydrolases 水解酶类
延胡索酸酶 [‘4.2.1.2’] fumarate hydratase 裂合酶类
漆酶 [‘1.10.3.2’] laccase 氧化还原酶类
脂肪酶 [‘3.1.1’, ‘3.1.1.3’] carboxylic-ester hydrolases 水解酶类

代码

## 设定用户名,路径 ##
brenda = brenda_soap.Brenda(EMAIL, PASSWORD, PATH)
path_eci = os.path.join(PATH,'ECI')
tables = ['Product', 'Substrate']
ECs = ['1.1.1.B57', '1.11.2', '1.13', '1.14', '1.14.19','4.2.3.118','2.1.1','2.5.1.112', '2.5.1.27', '2.5.1.75', '2.5.1.8','4.2.1', '4.2.3', '2.4.1','4.3.1','4.2.1.2','1.10.3.2','3.1.1','3.1.1.3',
]
for table in ['Product']:for EC in ECs:genECI(EC, brenda, table, path_eci)

问题

本地记录不全

发现在本地跑的时候,'4.2.1’出了问题,翻阅日志,发现是之前下载Brenda数据的时候,有中间断网的情况,所以对于某几个表,本地数据是不全的。对于Product,3.4.23.20之后的数据不在本地;Substrate/NaturalProduct/NaturalSubstrate的数据是全的。日志文件的记录如下:

对于 table = Product,有如下ECs并未被加入表中:
ecs = [‘2.1.1.B114’,‘2.3.1.97’,‘3.4.23.20’, (略), ‘7.6.2.B1’]
对于 table = RecommendedName,有如下ECs并未被加入表中:
ecs = [‘6.3.2.13’, (略), ‘7.6.2.B1’]
对于 table = Substrate,有如下ECs并未被加入表中:
ecs = [‘2.1.1.B114’,‘2.3.1.97’,‘7.6.2.B1’]

通过设置brenda的模式来解决:

if ec > '3.4.23.20' and table == 'Product':brenda.mode = 'soap'## 代码 ##brenda.mode = 'default'

之后可以抽空把Product表补全。

table = 'Product'
ecs = brenda.getEcNumbers(table)
brenda.mode = 'soap'
for ec in ecs:if ec > '3.4.23.20':brenda.getContent(table, ec)

数据清洗

brenda的记录略显粗糙,如之前所述,有些带有计量数的,有些是非常常规的分子,如H2O, more, ? 等。需要对ECI表进行数据清洗以赋予数据意义。

目标

  1. 除去无意义物质记录,如 more 和 ?
  2. 辨识/除去常见底物,如异戊烯基转移酶产物中的 diphosphate等
  3. 频数统计,进行简单分析

实现

在genECI()中加入。

nonsense_chemicals = ['?','more']## 略 ##if chemical in nonsense_chemicals:continue

在外部同样写了一个函数:

def refineByChem(results, chemicals_list):# 删除chemicals_list中的物质和相应关系。

问题

问题在于确定哪些是需要删除的。实际上不是那么明显与好选择。

TODO

网络结构深化

酶空间

类似于DTI中的T空间,之前有从发育学的角度关联的;是否能将其方法引入?

化学空间

类似于DTI中的Drug空间,如何从化学名称出发,对应到【化学物质】,再引入网络关系?

Brenda应用(2.0) - 构建(酶, 物质, 关系)0-1表格用于NBI推断新关系相关推荐

  1. 【新手教程】51Sim-One Cloud 2.0 构建标准案例2.0场景

    此教学讲述如何编辑出OpenSCENARIO官方案例"两次变道"(DoubleLaneChanger),用户将学会如何创建出符合OpenSCENARIO标准测试场景的全流程.包括标 ...

  2. WR:Tetrasphaera PAO 代谢中的储能物质与微生物多样性及除磷效能之间的关系

    点击蓝字 关注我们 编译:王慧     校稿:袁凌 论文ID 原名:The storage compounds associated with Tetrasphaera PAO metabolism ...

  3. 从0构建AI推荐系统demo(数据准备)

    前言 推荐系统一直以来都是人工智能领域中较为火热的研究方向之一,最近公司需要构建常见的资讯类推荐系统,本人也从无到有.从0开始构建AI推荐系统demo版.此篇主要讲述最基本的数据准备中,最最最最基本的 ...

  4. NVIDIA DeepStream 5.0构建智能视频分析应用程序

    NVIDIA DeepStream 5.0构建智能视频分析应用程序 无论是要平衡产品分配和优化流量的仓库,工厂流水线检查还是医院管理,要确保员工和护理人员在照顾病人的同时使用个人保护设备(PPE),就 ...

  5. 通过构建城市来解释HTML,CSS和JavaScript之间的关系

    by Kevin Kononenko 凯文·科诺年科(Kevin Kononenko) 通过构建城市来解释HTML,CSS和JavaScript之间的关系 (The relationship betw ...

  6. 怎样搞定分类表格数据?有人用TF2.0构建了一套神经网络 | 技术头条

    作者 | 王树义 来源 | 玉树芝兰(ID:nkwangshuyi) 以客户流失数据为例,看 Tensorflow 2.0 版本如何帮助我们快速构建表格(结构化)数据的神经网络分类模型. 变化 表格数 ...

  7. 探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用

    前言 首先说明这并不是一个教程贴,而记事本应用是网上早有的案例,对于学习 vuex 非常有帮助.我的目的是探索 vuex 2.0 ,然后使用 vue 2.0 + vuex 2.0 重写这个应用,其中最 ...

  8. 探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用23

    前言 首先说明这并不是一个教程贴,而记事本应用是网上早有的案例,对于学习 vuex 非常有帮助.我的目的是探索 vuex 2.0 ,然后使用 vuejs 2.0 + vuex 2.0 重写这个应用,其 ...

  9. LINUX 下构建OpenGL ES 3.0

    Ubuntu LINUX 下构建OpenGL ES 3.0 Category : OpenGL LINUX 下构建OpenGL ES 3.0 软件:PowerVRSDKSetup-4.0.run-x6 ...

最新文章

  1. [PSP]通向5.50-D3的倒数计时
  2. Linux免密登陆(CentOS7.2为例)
  3. python好学吗 小木虫-25行Python代码完成人脸识别
  4. python重复执行_关于计时器:在Python中每x秒重复执行一次函数的最佳方法是什么?...
  5. 百度地图同时显示多个路书
  6. u大侠pe系统桌面计算机,详解各种PE启动的过程
  7. C# 系统应用之Cookie\Session基础知识及php读取Cookie\Session
  8. Equipment download - No data contained in BDoc
  9. 太极虚拟服务器,太极 中标 云服务器
  10. 201521123059 《Java程序设计》第八周学习总结
  11. 学习ROS过程中遇到的一些小问题以及解决办法的记录
  12. 微信自动抢红包软件被判赔475万
  13. Maven学习总结(21)——Maven常用的几个核心概念
  14. dell m610刀片查看日志及更换内存
  15. java中src_java中garadle工程没有src问题
  16. 使用delphi 开发多层应用(十四)使用Basic4android 显示kbmMW server数据
  17. 【无标题】C基础 2
  18. IE浏览器连不上网电脑无法联网
  19. AI 换脸术「Deepfakes」进化简史
  20. 偶遇 防火墙,IDS,IPS三个老兄争吵

热门文章

  1. HTML5创业的另一种可能
  2. Java实现信息重复发送
  3. 广州银行冲刺上市:盈利能力下行,还因侵害用户权益被通报
  4. 又是标量子查询引起的性能问题
  5. python新浪api_python调用新浪微博API | 学步园
  6. 细数STM32F103的那些坑
  7. Donut:将.NET程序集注入Windows进程
  8. (二)Windows系统遗忘密码怎么办(网络安全)
  9. pageOffice基本使用
  10. 微软将为美国员工提供无限期休假