如何在python中转换矩阵中的多个fasta线?

时间:2016-01-24 12:13:43

标签: python numpy matrix bioinformatics

我有这样的文件(txt或fasta)。每个序列只位于一行中。

    >Line1
    ATCGCGCTANANAGCTANANAGCTAGANCACGATAGAGAGAGACTATAGC
    >Line2
    ATTGCGCTANANAGCTANANCGATAGANCACGAAAGAGATAGACTATAGC
    >Line3
    ATCGCGCTANANAGCTANANGGCTAGANCNCGAAAGNGATAGACTATAGC
    >Line4
    ATTGCGCTANANAGCTANANGGATAGANCACGAGAGAGATAGACTATAGC
    >Line5
    ATTGCGCTANANAGCTANANCGATAGANCACGATNGAGATAGACTATAGC

我必须得到一个矩阵,其中每个位置对应于序列的每个字母(核苷酸)。在这种情况下,矩阵为(5x50)。 我一直在处理numpy方法。我希望有人可以帮助我。

3 个答案:

答案 0 :(得分:1)

如果您正在使用python中的DNA序列数据,我建议您使用Biopython库。您可以使用pip install biopython进行安装。

以下是如何达到预期效果的方法:

from Bio import SeqIO
import os
import numpy as np

pathToFile = os.path.join("C:\\","Users","Kevin","Desktop","test.fasta")  #windows machine

allSeqs = []
for seq_record in SeqIO.parse(pathToFile, """fasta"""):
        allSeqs.append(seq_record.seq)

seqMat = np.array(allSeqs)

但是在for循环中,每个seq_record.seq都是Seq对象,让您可以灵活地对它们执行操作。

In [5]: seqMat.shape
Out[5]: (5L, 50L)

您可以根据需要对seqMat数组进行切片。

In [6]: seqMat[0]
Out[6]: array(['A', 'T', 'C', 'G', 'C', 'G', 'C', 'T', 'A', 'N', 'A', 'N', 'A',
       'G', 'C', 'T', 'A', 'N', 'A', 'N', 'A', 'G', 'C', 'T', 'A', 'G',
       'A', 'N', 'C', 'A', 'C', 'G', 'A', 'T', 'A', 'G', 'A', 'G', 'A',
       'G', 'A', 'G', 'A', 'C', 'T', 'A', 'T', 'A', 'G', 'C'], 
      dtype='|S1')

强烈建议您查看教程!

答案 1 :(得分:0)

我希望这一小段代码有所帮助。您基本上需要将字符串拆分为字符数组。之后,您只需将所有内容放入矩阵中即可。

Line1 = "ATGC"
Line2 = "GCTA"
Matr1 = np.matrix([n for n in Line1], [n for n in Line2])

Matr1[0,0]将返回矩阵中的第一个元素。

答案 2 :(得分:0)

实现矩阵的一种方法是读取文件的内容并将其转换为列表,其中列表的每个元素是每行中存在的序列。然后,您可以将矩阵作为2D数据结构访问。 例如:[ATCGCGANANAGAGANANAGCTAGANCACGATAGAGAGAGACTATAGC,ATCGCGATANANAGAGANANAGCTAGANCACGATAGAGAGAGACTATAGC,ATCGCGATANANAGCTANANAGCTAGANCACGATAGAGAGAGACTATAGC,ATCGCGANANAGAGANANAGCTAGANCACGATAGAGAGAGACTATAGC,ATCGCGTANANAGAGANANAGCTAGANCACGATAGAGAGAGACTATAGC]

filePath = "file path containing the sequence"

将序列存储为矩阵的列表

listFasta =list ((open(filePath).read()).split("\n"))
for seq in listFasta:
    for charac in seq:
        print charac

访问矩阵的每个元素的另一种方法

for seq in range(len(listFasta)):
    for ch in range(len(listFasta[seq])):
        print listFasta[seq][ch]