• 蛋白质结构信息获取与解析(基于Biopython)


    通常情况下,一个蛋白质所包含的信息是非常多的,与结构相关的包括:包括链名、氨基酸残基序列、原子坐标等。一个蛋白质的结构相关的信息可以以pdb文件的形式保存,这些文件可以直接从PDB、NCBI等数据库获取,也可以利用biopython获取。

    获取某个蛋白的pdb文件,我们可以转成文本格式查看相关信息,不过这样很不利于数据分析。所以利用biopython解析蛋白质结构信息是十分方便的。

    (一)基于Biopython蛋白质文件获取

    (1)Entrez方法(获取数据并保存于文件中)

    1. from Bio import Entrez
    2. Entrez.email='邮箱名' #如'123456789@qq.com'
    3. handle=Entrez.esearch(db='protein',term='2rbg')
    4. record=Entrez.read(handle)
    5. id=record['IdList'][0]
    6. handle=Entrez.efetch(db='protein',id=id,rettype='gb',retmode='text')
    7. with open('2rbg.pdb','w') as f:
    8. for i in handle.readlines():
    9. f.write(i)

    Biopython中Entrez函数主要用于蛋白质、核酸等数据的获取。

    Entrez.email是用于获取你的地址(如果过度使用该工具,NCBI会在阻止访问之前通过该电子邮件通知你)。

    Entrez.esearch()用于从数据库中搜索你所需要的文件的相关信息。参数db表示数据库,这里的'protein'表示蛋白质数据库,其它的数据库可参考NCBI官网首页中'All Databases'中各个数据库(如'nucleotide'核酸数据库等)。参数term表示需要获取的蛋白名称(也可以是核酸数据库中基因名等,这里以2rbg为例)。最终返回的handle是一个对象,通过Entrez.read()获取handle中的数据。读取后得到的record是一个字典。

    1. record={'Count': '3', 'RetMax': '3', 'RetStart': '0',
    2. 'IdList': ['2057065522', '208435533', '208435532'], 'TranslationSet': [],
    3. 'TranslationStack': [{'Term': '2rbg[All Fields]', 'Field': 'All Fields', 'Count': '3', 'Explode': 'N'}, 'GROUP'],
    4. 'QueryTranslation': '2rbg[All Fields]'}

    record中IdList列表包含了所获取的文件id号,这里有3个文件,我们可以从中选取1个id进行文件数据获取。

    通过Entrez.efetch(),根据数据库,id号来获取该蛋白质数据。db与前面Entrez.esearch()相同,id表示id号,rettype表示字节,如'kb','mb'等,这里需要使用gb。retmode表示数据格式,这里是'text'。最后将数据保存在文件中即可。

    (2)retrieve_pdb_file(直接获取数据文件)

    1. from Bio import PDB
    2. PDB.PDBList().retrieve_pdb_file(pdb_code='2FAT',file_format='mmCif')

    retrieve_pdb_file函数中pdb_code表示蛋白文件名,file_format表示文件格式,如''pdb'、'mmCif'等。如果需要下载到指定文件夹,需要使用参数pdir,参数值为指定文件夹的绝对路径。

    (二)蛋白质结构解析

    (1)获取structure类对象

    1. from Bio import PDB
    2. parser=PDB.PDBParser(QUIET=True)
    3. structure=parser.get_structure(file='2rbg.pdb',id=None)

    先使用PDBParser()创建PDB解析器parser,再用parser从pdb文件中解析蛋白质结构,得到structure类对象。parser.get_structure()函数中file参数表示解析的蛋白质文件,id是一个编号,可以用数、字符串等标记,也可以用None。得到的structure用于后面肽链chain、氨基酸残基residues、原子atom、模型model等数据的获取。

    :除了pdb文件,对于其它类型的文件,可以使用相应的PDB.MMCIFParser()、PDB.FastMMCIFParser()解析器,使用get_structure()得到structure,之后的方法都是相同的。

    (2)从structure中获取chains

    chains=structure.get_chains()

    得到的chains为chains类对象,它包含该蛋白质所有肽链。

    1. print(list(chains))
    2. '''------------------'''
    3. >>> [id=A>, id=B>]

    例如这里的2rbg.pdb,其中包含了A、B两条链。

    (3)从structure/chain中获取residues

    从structure、chain中获取residues方法是相同的,structure 是从整体蛋白质获取残基,chain是指定某条链获取残基。

    1. chains=structure.get_chains()
    2. chain_A=list(chains)[0]
    3. residues_A=chain_A.get_residues()

    以A链为例,把chains转成列表,列表中第一个表示A链对象,之后用get_residues()函数即可。

    若从structure获取所有残基,用下面方法即可。

    residues=structure.get_residues()

    将residues转成列表,列表中每个值为一个残基类,包含该残基相关信息。

    1. print(list(residues))
    2. '''--------------------'''
    3. >>> [3 icode= >,
    4. 4 icode= >,
    5. 5 icode= >,.....]

    其中Residue表示氨基酸名;het是异质域,'W'表示水,'H_残基名'表示非标准氨基酸,空表示标准氨基酸;resseq为氨基酸序列编号;icode为插入码。

    对于每个残基,使用get_resname()可获取残基名,使用get_atoms()函数可以获取该residue中所有原子。

    1. resname=list(residues)[0].get_resnames()
    2. atoms=list(residues)[0].get_atoms()

    上述代码第一行获取第一个氨基酸残基名,第二行获取氨基酸残基所有原子。

    1. print(list(atoms))
    2. '''------------------'
    3. >>>[, , , , ,
    4. , , , ,
    5. , , ]

    residue中其它方法:

    get_segid:返回segid

    get_unpacked_list:undisordered原子组成的列表。

    sort():将原子排序,N,CA,C,O等排在前面。

    is_disordered():判断氨基酸中十分含有disordered原子,若含有则返回True。

    (4)从structure/chain/residues中获取原子

    从residues中获取atoms方法前面已讲述,从structure、chain中获取原子信息方法是与前面相同的,仍使用get_atoms()函数。

    1. atoms=structures.get_atoms()
    2. atoms_chain_A=chain_A.get_atoms()

    (5)从atoms中获取原子信息

    get_vector():原子坐标的vector。

    get_coord():原子坐标。

    get_fullname():原子全名。

    get_serial_number() or serial number():原子序号(从1开始)。

    get_sigatm():原子坐标标准差。

    get_bfactor():bfactor温度因子。

    set_?:设置属性,'?'可以为coord、bfactor、serial_number等。

  • 相关阅读:
    Neurocomputing投稿记录
    Docker 部署 Kibana
    dlv调试kubelet
    C++ · 找最大/最小值
    Java基础之数据类型
    猿创征文|Redis的知识总结与项目应用
    解决IDEA中java的system.properties乱码问题
    SQL interview Questions
    每日一题 213打家劫舍||(动态规划)
    英语写作中“建立”、“构造”build、construct、establish、set up的用法
  • 原文地址:https://blog.csdn.net/weixin_60737527/article/details/126152198