当前位置: 首页 > article >正文

解析Uniprot数据库数据|Python

一、数据库简介 【ChatGPT生成

 UniProt 是全球最全面的蛋白质序列和功能注释数据库之一,由 Swiss Institute of Bioinformatics (SIB)、European Bioinformatics Institute (EBI) 和 Protein Information Resource (PIR) 共同维护。UniProtKB 为生物科学研究提供了丰富的蛋白质相关信息,包括氨基酸序列、蛋白质功能、相互作用、蛋白质家族、结构信息、亚细胞定位、疾病关联、进化关系等。该数据库还引入了注释评分(Annotation Score),用于评估蛋白质注释的完备性和研究的深度,以帮助科研人员快速识别高质量数据。

据2025年UniProtKB | Statistics | UniProt的统计显示,该数据库已经收录了超过 2.5 亿个蛋白质序列,涵盖了生命的所有分支,包括细菌、古菌、真核生物,以及病毒等多个生物类别。在这些条目中,超过 57 万个蛋白质 拥有人工整理的详细注释,这些注释主要来源于实验研究和科学文献,由领域专家手动筛选和编辑,以确保高质量的可靠性。

UniProtKB 的两个子数据库

UniProtKB 由两个主要的子数据库组成,分别是 Swiss-Prot 和 TrEMBL,它们在数据质量和处理方式上有所不同:

  • Swiss-Prot(人工审核数据库)

    • Swiss-Prot 包含经过专家人工审核的蛋白质条目,所有数据都经过严格的手动整理和实验验证。
    • 这些蛋白质通常具有高质量的功能描述、相互作用信息、文献支持和交叉数据库链接,广泛用于生物医学研究、药物开发、蛋白质功能预测等领域。
    • 由于人工审核的复杂性,该数据库的更新频率相对较低,但数据的准确性和可靠性极高,是研究中最常引用的部分。
  • TrEMBL(计算注释数据库)

    • TrEMBL 包含基于基因组测序和自动分析生成的蛋白质条目,它的数据量远远大于 Swiss-Prot。
    • 由于生物信息学工具和算法的不断进步,TrEMBL 采用自动化注释规则(如 InterPro、Pfam 等),为大量未经过实验验证的蛋白质提供预测功能和分类信息。
    • 虽然 TrEMBL 数据库的更新频率高,覆盖范围广,但其自动注释可能存在一定的误差,因此在使用时需要谨慎验证。

二、下载人类数据

打开 UniProt 数据库网站,在首页点击 Search

进入到数据库的统计页面,我们会看到Uniprot数据库有包含两个子数据库:Swiss-Prot和TrEMBL,依次点击①→②→③。 

在Download页面,选择你想要下载的格式,其中Excel格式最方便,不用写代码解析,还可以选择你想要的列信息。下载之后是一个压缩包,开盖即可享用,非常友好,节省时间。

下载后的结果如下所示。从这个表格我们可以发现,从官网下载的Excel文件中UniprotID对应多个Gene Name,用空格分割

那如果选择的是fasta格式的文本文件的话,就需要写代码解析,解析出来的UniprotID和GeneName是一对一的关系。

 三、Python实现fasta解析

 代码利用了Biopython包和正则表达式:

from Bio import SeqIO
import pandas as pd
import re
import os

fasta_file = 'uniprotkb_2025_02_13/uniprotkb_2025_02_13.fasta'
current_dir = 'uniprotkb_2025_02_13/fasta/'
os.makedirs(current_dir, exist_ok=True)  # exist_ok=True 避免已存在时报错
print(f"目录已创建:{current_dir}")

# 定义正则表达式模式
pattern1 = r'\|(.*?)\|'     # 匹配竖线之间的内容
pattern2 = r'GN=([^ ]+)'    # 匹配以"GN="开头的内容

results = []
for record in SeqIO.parse(fasta_file, "fasta"):
    sequence = record.seq
    sequence_length = len(sequence)

    header_info = record.description
    EntryName = header_info.split()[0].split('|')[2]
    Name = EntryName.split('_')[0]
    
    # 提取竖线之间的内容
    UniqueId = re.findall(pattern1, header_info)[0]

    # 提取以'GN='开头的内容
    gene_name = re.search(pattern2, header_info)
    
    if gene_name:
        GeneName = gene_name.group(1)
    else:
        GeneName = ''

    results.append([UniqueId, EntryName, Name, GeneName, sequence, sequence_length])

    with open(current_dir + UniqueId + ".fasta", "w") as output_handle:
        output_handle.write(f">{UniqueId}\n")
        output_handle.write(f"{sequence}\n")

col_names = ['UniprotID', 'EntryName','Name','GeneName','Sequence', 'Length']
prot_df = pd.DataFrame(results, columns=col_names)     
prot_df.to_csv('uniprotkb_2025_02_13/fasta_information.csv', index=False)

print('Done!')

下载好/处理好的数据可在uniprotkb_2025_02_13下载。


http://www.kler.cn/a/553316.html

相关文章:

  • PrimeFaces实战:IdleMonitor与Ajax的完美结合
  • Linux之kernel(1)系统基础理论(4)
  • 鸿蒙第三方库MMKV源码学习笔记
  • Redis字符串常见命令(String)
  • 深入浅出C语言内存模型——高阶篇
  • springboot-ffmpeg-m3u8-convertor nplayer视频播放弹幕效果
  • WIN系统服务器如何修改远程端口?
  • 人工智能学习环境配置
  • qt for android release apk 手动签名方式
  • 如何使用Spark SQL进行复杂的数据查询和分析
  • TPU(Tensor Processing Unit)详解
  • 使用DeepSeek+本地知识库,尝试从0到1搭建高度定制化工作流(自动化篇)
  • 新品发布:即插即用,8寸Type-C接口电脑副屏显示器发布!
  • 6.4 k8s的informer机制
  • 什么是掉期(Swap)?——金融衍生品的关键工具(中英双语)
  • 第1期 定时器实现非阻塞式程序 按键控制LED闪烁模式
  • 【PLL】应用:时钟生成
  • Nacos Derby 远程命令执行漏洞修复建议
  • LearnOpenGL——高级OpenGL(下)
  • Linux 多Python版本统一和 PySpark 依赖 python 包方案