简介
基因组是生物体中DNA的完整集合。所有生物物种都有一个基因组,但是它们的差异很大。例如,人类基因组被排列成23条染色体,这有点像百科全书被编辑成23卷。如果算上所有字符(单个DNA“碱基对”),每个人类基因组中将有超过60亿个字符。所以这是一个巨大的工程。
人类基因组大约有60亿个字符。如果您认为基因组(完整的DNA序列)就像一本书,那就是一本由大约60亿个“ A”,“ C”,“ G”和“ T”字母组成的书。每个人都有独特的基因组。尽管如此,科学家发现人类基因组的大部分彼此相似。
作为数据驱动的科学,基因组学广泛地利用机器学习来捕获数据中的关系并推断出新的生物学假设。但是,要想拥有从不断增长的基因组学数据中提取新发现的能力,就需要更强大的机器学习模型。通过有效利用大型数据集,深度学习已给了计算机视觉和自然语言处理等领域带来了很大进步。它已成为许多基因组建模任务的首选方法,包括预测遗传变异对基因调控机制(如DNA接受性和DNA剪接)的影响。
在本文中,我们将了解如何解释DNA结构以及如何使用机器学习算法来建立DNA序列数据的预测模型。
DNA序列如何表示?
该图显示了DNA双螺旋结构的一小部分。
DNA的双螺旋结构
双螺旋是DNA的化学表示。但是DNA很特别。它是由四种类型的碱基组成的核苷酸:腺嘌呤(A),胸腺嘧啶(T),鸟嘌呤(G)和胞嘧啶(C)。我们总是称它们为A
,C
,G
和T
。
这四种化学物质通过氢键以任何可能的顺序连接在一起,形成一条链,这形成了DNA双螺旋的一条线。双螺旋的第二条线平衡了第一根。因此,如果第一条线上有A,则第二条线上对应位置必须为T。此外,C和G始终保持平衡。因此,一旦您确定了螺旋的一个螺纹,就可以随时拼写另一个螺纹。
单个DNA线(螺旋)的序列
这些碱基的顺序决定了DNA链中包含哪些生物学指令。例如,序列ATCGTT可能指示蓝眼睛,而ATCGCT可能指示棕色眼睛。
使用Python处理DNA序列数据
熟悉诸如Biopython
和squiggle
之类的Python包将在处理Python中的生物序列数据时为您提供帮助。
Biopython是python模块的集合,这些模块提供处理DNA,RNA和蛋白质序列操作的功能,例如DNA字符串的反向互补,寻找蛋白质序列中的基序列等。它提供了很多解析器,可以读取所有主要的遗传数据库,例如 GenBank,SwissPort,FASTA等,
安装Biopython
pip install biopython
**Squiggle:**这是一个工具,可以自动生成交互式网页下的原始DNA序列的二维图形表示。考虑到易用性,Squiggle实现了几种序列可视化算法,并引入了“为方便人类使用而做”的新颖可视化方法。
安装Squiggle
pip install Squiggle
DNA序列数据通常以“ fasta”格式的文件格式储存。Fasta格式通过包含注释的大于号和包含序列的另一行作为组成自己的单行数据:
“AAGGTGAGTGAAATCTCAACACGAGTATGGTTCTGAGAGTAGCTCTGTAACTCTGAGG”*
文件可以包含一个或多个DNA序列。还有许多其他格式,但是fasta是最常见的格式。
这是使用Biopython处理Fasta格式的DNA序列的简要示例。序列对象将包含诸如序列ID和sequence等属性以及可以直接使用的序列长度。
我们将使用Biopython的Bio.SeqIO
来解析DNA序列数据(fasta)。它提供了一个简单的统一界面来输入和输出各种文件格式。
from Bio import SeqIOfor for sequence in SeqIO.parse('./drive/My Drive/example.fa', "fasta"): print(sequence.id) print(sequence.seq) print(len(sequence))
这样就产生了序列ID,序列本身和序列长度。
ENST00000435737.5ATGTTTCGCATCACCAACATTGAGTTTCTTCCCGAATACCGACAAAAGGAGTCCAGGGAATTTCTTTCAGTGTCACGGACTGTGCAGCAAGTGATAAACCTGGTTTATACAACATCTGCCTTCTCCAAATTTTATGAGCAGTCTGTTGTTGCAGATGTCAGCAACAACAAAGGCGGCCTCCTTGTCCACTTTTGGATTGTTTTTGTCATGCCACGTGCCAAAGGCCACATCTTCTGTGAAGACTGTGTTGCCGCCATCTTGAAGGACTCCATCCAGACAAGCATCATAAACCGGACCTCTGTGGGGAGCTTGCAGGGACTGGCTGTGGACATGGACTCTGTGGTACTAAATGAAGTCCTGGGGCTGACTCTCATTGTCTGGATTGACTGA390
我们可以可视化这些DNA序列吗?
是的,我们可以使用Squiggle python库将这些DNA序列可视化,进行操作并运行:
Squiggle example.fa --method=gates
DNA序列被转换为2D图像,其中T,A,C和G分别在上,下,左和右方位。这给每个序列一个“形状”。
现在,我们来可视化另一个包含6个DNA序列的fasta数据。
Squiggle example.fasta
在此,首先使用2位编码方案将DNA序列转换为二进制序列,该方案将T映射为00,C映射为01,A映射为10,G映射为11。
现在我们可以轻松加载和操作生物序列数据,那么怎么将数据用于机器学习或深度学习?
由于机器学习或深度学习模型要求输入必须是特征矩阵或数字值,但目前我们仍然以字符或字符串格式存储数据。因此,下一步是将这些字符编码为矩阵。
编码序列数据有3种通用方法:
- 顺序编码DNA序列
- 独热(one-hot)编码DNA序列
- DNA序列作为独立“语言”,称为k-mer计数
让我们分别进行实现,看看哪一个为我们提供了完美的输入。