前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用biopython处理序列数据

使用biopython处理序列数据

作者头像
生信修炼手册
发布2021-01-11 15:38:05
1.2K0
发布2021-01-11 15:38:05
举报
文章被收录于专栏:生信修炼手册生信修炼手册

!

序列是基因组学数据的基本单位,对于序列先关信息的存储,有以下两种常用的文件格式

1. fasta

2. genebank

通过biopython, 我们可以方便的读取这些格式的文件,并提取其中的信息。具体地,通过以下3个子模块来处理序列数据

1. Bio.Seq

2. Bio.SeqRecore

3. Bio.SeqIO

其中Bio.Seq表示最原始的序列对象,是最核心的模块,提供了序列的格式化,反向互补,碱基计数等基本功能;Bio.SeqRecord表示序列记录,在序列对象的基础上,进一步添加了序列的id, 名称,属性等各种注释信息;Bio.SeqIO模块则用于读取特定的文件格式,返回 SeqRecord对象。

1. Bio.Seq

Bio.Seq提供了最核心的序列对象,即由基本字符构成的序列,比如核酸序列和蛋白质序列,初始化方式如下

代码语言:javascript
复制
>>> from Bio.Seq import Seq
>>> my_seq = Seq('ATCGTACGATCT')
>>> my_seq
Seq('ATCGTACGATCT')

在该模块中,为序列对象提供了python字符的基础操作,比如比较,大小写转换,切片,切分,连接, 格式化等操作,具体用法如

代码语言:javascript
复制
# 切片
>>> my_seq[1]
'T'
>>> my_seq[1:3]
Seq('TC')
>>> my_seq[::-1]
Seq('TCTAGCATGCTA')
# 小写转换
>>> my_seq.lower()
Seq('atcgtacgatct')
# 大写转换
>>> my_seq.upper()
Seq('ATCGTACGATCT')
# split, 序列分隔
>>> my_seq.split('A')
[Seq(''), Seq('TCGT'), Seq('CG'), Seq('TCT')]
# join, 序列连接
>>> my_seq2 = Seq('ACGACTGACTAGCT')
>>> Seq('NNN').join([my_seq, my_seq2])
Seq('ATCGTACGATCTNNNACGACTGACTAGCT')
# 格式化
>>> 'id:1,seq:{}'.format(my_seq)
'id:1,seq:ATCGTACGATCT'

除了基本用法之外,还提供了生物学序列特有的功能,比如互补,反向互补,转录,翻译等,具体用法如下

代码语言:javascript
复制
# 互补
>>> my_seq.complement()
Seq('TAGCATGCTAGA')
# 反向互补
>>> my_seq.reverse_complement()
Seq('AGATCGTACGAT')
# 转录
>>> my_seq.transcribe()
Seq('AUCGUACGAUCU')
# 翻译
>>> my_seq.translate()
Seq('IVRS')

2. Bio.SeqRecord

Bio.SeqRecord在序列的基础上,进一步存储了相关的注释信息,初始化的方式如下

代码语言:javascript
复制
>>> from Bio.SeqRecord import SeqRecord
>>> my_seq = Seq('AGCTACGT')
>>> my_seqrecord = SeqRecord(my_seq)

SeqRecord具有id, name等多个属性,示例如下

代码语言:javascript
复制
>>> my_seqrecord
SeqRecord(seq=Seq('AGCTACGT'), id='<unknown id>', name='<unknown name>', description='<unknown description>', dbxrefs=[])
>>> my_seqrecord.seq
Seq('AGCTACGT')
>>> my_seqrecord.id
'<unknown id>'
>>> my_seqrecord.name
'<unknown name>'
>>> my_seqrecord.description
'<unknown description>'

除了以上基本属性外,还具有annotations和lette_annotations两个属性,进一步丰富了注释信息,annotations属性是一个字典结构,通过key=value的形式可以存储不同类别的注释信息,letter_annotations属性也是一个字典结构,但是其中的value值是长度等于序列长度的列表,主要用于存储每个碱基对应的信息,示例如下

代码语言:javascript
复制
>>> my_seqrecord.annotations['organ'] = 'human'
>>> my_seqrecord.annotations
{'organ': 'human'}
>>> my_seqrecord.letter_annotations['quality'] = [20, 20, 20, 20, 20, 20, 20, 20]

3. Bio.SeqIO

Bio.SeqIO用于文件的读写,支持多种文件格式,对于序列的存储格式fasta和genebank而言,读取的方式如下

代码语言:javascript
复制
>>> from Bio import SeqIO
>>> for seq in SeqIO.parse('input.fasta', 'fasta'):
...     print(seq.id, seq.seq)
>>> for seq in SeqIO.parse('input.gb', 'genebank'):
...     print(seq.id, seq.seq)

在每个for循环中,返回的是SeqRecord对象,可以通过SeqRecord对象的方法来访问各种信息。除了for循环的遍历,也可以直接返回列表,示例如下

代码语言:javascript
复制
>>> records = list(SeqIO.parse('input.fasta', 'fasta'))
>>> records[0]
SeqRecord(seq=Seq('CGATCGATCGACT'), id='1', name='1', description='1', dbxrefs=[])

该模块也支持序列对象的写入操作,最典型的应用就是序列格式的转换,genebank转换为fasta格式,代码如下

代码语言:javascript
复制
>>> records = SeqIO.parse("input.gb", "genbank")
>>> SeqIO.write(records, "out.fasta", "fasta")

write方法提供了输出功能,将序列对象输出到指定格式的文件中,针对格式转换这一常见场景,用法如下

代码语言:javascript
复制
>>> count = SeqIO.convert("input.gb", "genbank", "out.fasta", "fasta")

以上3个子模块层层渐进,构建了biopython处理序列数据的完整生态,对于使用者而言,通过简单的几句代码,就可以完成基本的序列操作,对于开发者而言,其class的抽象设计,方法编写都值得参考借鉴。

·end·

—如果喜欢,快分享给你的朋友们吧—

原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!

本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信修炼手册 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档