蛋白质对中可能相互作用域的数目计算

预备知识

关于蛋白质对中可能相互作用域的数目的计算这篇论文

Ensemble learning prediction of protein–protein interactions using proteins functional annotations只提到下面这句话

46参考的是下面这篇文章

DOMINE a comprehensive collection of known and predicted domain-domain interactions

这是一个在线的web数据库,主要是已知的和预测的蛋白质结构域的相互作用数据。

DOMINE 总共包含26219对域间的相互作用(包含5410个域),6634对是从PDB推断的,21620对是通过最新的计算方法预测得来的。

在这21620对域之中,2989对是高信度的预测,2537对是中信度的预测,剩下的16094是低信度的预测。

网址在这:http://domine.utdallas.edu/cgi-bin/Domine?page=start

蛋白质域相互作用数据的准备

它这网站也提供数据下载了。目前最新的是2010年版本的。(感觉似乎不会更新了。

下载下来后我们得到domine-tables-2.0.zip这个文件,解压后我们可以得到6个文件

里面竟然没有readme

PGMAP.txt:存放的是Pfam ID和GO ID的映射关系。

PFAM.txt:存放的是Pfam数据的基本信息,也就是域的一些描述。

INTERACTION.txt:存放的是相互作用域的信息。

GO.txt:存放的GO的基本信息。

create.sql:存放的是sql语句,具体就是上面4个表的结构

command.sh:linux下的一个脚本。

1.首先我们先把数据导入到mysql

他提供的create.sql文件代码有问题。具体代码如下

这里我使用的mysql可视化界面是Navicat

  1. CREATE TABLE PFAM
  2. (
  3. DomainAccchar(7) PRIMARY KEY,
  4. DomainId varchar(256),
  5. DomainDesc varchar(256),
  6. InterproIdchar(10)
  7. );
  8. CREATE TABLE GO
  9. (
  10. GoTermchar(10) PRIMARY KEY,
  11. Ontology varchar(256),
  12. GoDesc varchar(256)
  13. );
  14. CREATE TABLE PGMAP
  15. (
  16. DomainAccchar(7),
  17. GoTermchar(10),
  18. PRIMARY KEY (DomainAcc,GoTerm),
  19. );
  20. CREATE TABLE INTERACTION
  21. (
  22. Domain1char(7),
  23. Domain2char(7),
  24. iPfam boolean,
  25. 3didboolean,
  26. ME boolean,
  27. RCDP boolean,
  28. Pvalueboolean,
  29. Fusionboolean,
  30. DPEA boolean,
  31. PE boolean,
  32. GPE boolean,
  33. DIPD boolean,
  34. RDFF boolean,
  35. KGIDDI boolean,
  36. INSITE boolean,
  37. DomainGAboolean,
  38. PP boolean,
  39. PredictionConfidencechar(2),
  40. SameGOboolean,
  41. PRIMARY KEY (Domain1,Domain2),
  42. );

我们用上面语句先把数据的表创建好。

然后我们把PGMAP.txt、PFAM.txt、INTERACTION.txt、GO.txt四个文件分别导入到对应的表中。

2.获得Gene ontology IDs和论文的uniport id 数据

然后我们从uniport上下载所有酵母蛋白的Gene ontology IDs

yeast.csv

Ensemble learning prediction of protein–protein interactions using proteins functional annotations

获取论文的uniprot codes列(idA,idB)

yeast_gold_protein_pair.csv

到这里我们的数据已经准备完成了。下面开始写代码!


代码的设计

关于蛋白质对中可能相互作用域的数目的计算,一开始是无从下手的。

但是domine这个网站提供了Pfam id 和GO id的映射。这样我们就可以间接获得蛋白质域间的相互作用

1.首先我们可以从uniport上获得蛋白质的GO id,一个蛋白对应对多GO id

2.根据Pfam id 和GO id的映射关系,我们可以得到一个GO id对应多个Pfam id,也就是说,一个基因本体对应多个域

总的来说就是,一个蛋白质有多个GO,一个GO又有多个域。这样我们就可以间接获得一个蛋白有多少个域。

最后再通过interaction表统计两个蛋白中有多少个域是相互作用的。

代码如下:

  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Fri Nov 04 15:40:03 2016
  4. @author: sun
  5. """
  6. importMySQLdb
  7. import pandas as pd
  8. import re
  9. yeast_gold_protein_pair=pd.read_csv(‘yeast_gold_protein_pair.csv‘,usecols=[‘idA‘,‘idB‘])
  10. yeast=pd.read_csv(‘yeast.csv‘,usecols=[‘Entry‘,‘Gene ontology IDs‘],index_col=0)
  11. idA=yeast.loc[yeast_gold_protein_pair.idA,:]
  12. idB=yeast.loc[yeast_gold_protein_pair.idB,:]
  13. idA.index=range(len(idA))
  14. idB.index=range(len(idB))
  15. db =MySQLdb.connect("127.0.0.1","root","123","domine")
  16. cursor = db.cursor()
  17. results=[]
  18. for i in range(len(idA)):
  19. go_a=tuple(re.findall(r"GO:\d{7}",str(idA.loc[i])))
  20. go_a=‘\‘,\‘‘.join(go_a)
  21. go_b=tuple(re.findall(r"GO:\d{7}",str(idB.loc[i])))
  22. go_b=‘\‘,\‘‘.join(go_b)
  23. sql_a ="select * from pgmap where goterm in (‘%s‘)"% go_a
  24. sql_b ="select * from pgmap where goterm in (‘%s‘)"% go_b
  25. # 执行SQL语句
  26. a=cursor.execute(sql_a)
  27. results_a = cursor.fetchall()
  28. b=cursor.execute(sql_b)
  29. results_b = cursor.fetchall()
  30. if(len(results_a)!=0and len(results_b)!=0):
  31. results_a=tuple(re.findall(r"PF\d{5}",str(results_a)))
  32. results_a=‘\‘,\‘‘.join(results_a)
  33. results_b=tuple(re.findall(r"PF\d{5}",str(results_b)))
  34. results_b=‘\‘,\‘‘.join(results_b)
  35. sql="select * from interaction where domain1 in (‘%s‘) and domain2 in (‘%s‘)"%(results_a,results_b)
  36. result=cursor.execute(sql)
  37. results.append(result)
  38. else:
  39. results.append(0)
  40. yeast_gold_protein_pair[‘domain‘]=results
  41. yeast_gold_protein_pair.to_csv(‘domain.csv‘,index=False)
  42. # 关闭数据库连接
  43. db.close()

最后结果

domain.csv

但是和原论文提供的数据相差太大了。

结论

1.结果相差那么大我也不知道什么原因。关于原论文数据的说明文章里也就那一句话。

2.整个过程我想我应该没理解错。

3.从上面那个图我们可以看到P00572和P00812这两个蛋白是自相互作用的。但是他们的可能相互作用域的数目竟然为0 。

这应该怎么理解呢?同一条蛋白,序列应该是相同的,其他数据应该也是一样的才对啊。为什么会有自己跟自己相互作用呢。这又是怎么判断的?

来自为知笔记(Wiz)

附件列表

时间: 2025-01-01 03:35:23

蛋白质对中可能相互作用域的数目计算的相关文章

C/C++——C++变量的作用域与生命周期,C语言中变量的作用域和生命周期

全局变量 作用域:全局作用域(全局变量只需在一个源文件中定义,就可以作用于所有的源文件.) 生命周期:程序运行期一直存在 引用方法:其他文件中要使用必须用extern 关键字声明要引用的全局变量. 内存分布:全局数据区 注意:如果在两个文件中都定义了相同名字的全局变量,连接出错:变量重定义 全局静态变量 作用域:文件作用域(只在被定义的文件中可见.) 生命周期:程序运行期一直存在 内存分布:全局数据区 定义方法:static关键字,const 关键字 注意:只要文件不互相包含,在两个不同的文件中

计算DNA中每种核苷酸的数目

问题描述:计算DNA中每种核苷酸的数目 输入文件内容: 代码: 输出结果:

spring中bean的作用域

Spring中bean的作用域可以在xml配置文件(一般叫bean.xml或ApplicationContext.xml)中通过scope属性进行指定. 在Spring中,bean对象可以有多种作用域 singletion 默认的,每个IOC容器只创建一个Bean实例 prototype每次请求创建一个Bean实例 request每次http请求创建一个实例 session每次会话创建一个实例 globalsession每个全局Http请求创建一个实例

Angular 中得 scope 作用域梳理

$scope 的使用贯穿整个 Angular App 应用,它与数据模型相关联,同时也是表达式执行的上下文.有了 $scope 就在视图和控制器之间建立了一个通道,基于作用域视图在修改数据时会立刻更新 $scope,同样的 $scope 发生改变时也会立刻重新渲染视图. 有了 $scope 这样一个桥梁,应用的业务代码可以都在 controller 中,而数据都存放在controller 的 $scope 中. $rootScope Angular 应用启动并生成视图时,会将根 ng-app 元

php学习笔记4--php中的变量作用域

变量作用域:可以简单地理解为变量的可见区域,变量能被访问的范围.如同其他语言,php中也有全局作用域和局部作用域之分,但是不同的是:php中的全局作用域指的是:只能在函数外部使用,而局部作用域指的是:只能在函数内部使用.php中的全局变量指的是:在函数外部定义,一般来说只能在函数外部被访问,不能直接在函数内部可见的变量:而局部变量指的是:在函数内部定义,只能在函数内部访问的变量.$name = "csc";function test(){ echo $name; //运行该脚本则会提示

注意for循环中变量的作用域

for e in collections: pass 在for 循环里, 最后一个对象e一直存在在上下文中.就是在循环外面,接下来对e的引用仍然有效. 这里有个问题容易被忽略,如果在循环之前已经有一个同名对象存在,这个对象是被覆盖的. 如果在有代码感知的IDE中, IDE会提示变量是“被重新声明的”, 但运行时却不会出错. for循环不是闭包,可以使用dis模块分解以下代码可以看到: x = 5 for x in range(10): pass print x 将代码保存到test.py文件,运

JavaScript 中变量、作用域和内存问题的学习

这是我学习JavaScript的第二篇文章,之前做过几年的Java开发,发现JavaScript虽然也是面向对象的语言但是确实有很多不同之处.就本篇博客,主要学习总结一下最近学习到的JavaScript的知识,其中有些是网络上的,不过对于理解JavaScript,和在工作总是会很实用的,所以总结了下来: 那么就开始吧,首先是变量 在JavaScript中变量分为两种:一种是基本类型,基本类型值在内存中占用固定大小的空间,因此被保存在栈内存中.从一个变量向另一个变量复制基本类型的值,会创建这个值的

Python中变量的作用域(variable scope)

http://www.crifan.com/summary_python_variable_effective_scope/ 解释python中变量的作用域 示例: 1.代码版 1 #!/usr/bin/python 2 # -*- coding: utf-8 -*- 3 """ 4 ------------------------------------------------------------------------------- 5 Function: 6 [整理

javaScript中的this作用域

javaScript中的this作用域java的区别是,java中的this是在编译中确定, javaScript中的this是在运行时确定的,不同的调用方式,决定js中的this指向不同的对象. 代码实现: //this作用域 function sayName(){ console.log(this.name); console.log(this ===d1); console.log(this ===d2); console.log(this ===window); } sayName();