如何在Python中将多个fasta行转换为矩阵?

3
我有一个文件(txt或fasta),内容如下。每个序列只在一行上。

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

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

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

3个回答

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')

强烈建议查看教程!

0
希望这段简短的代码能够帮到你。你需要将字符串分割成字符数组,然后将所有内容放入矩阵中即可。
Line1 = "ATGC"
Line2 = "GCTA"
Matr1 = np.matrix([n for n in Line1], [n for n in Line2])

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


0
一种实现矩阵的方法是读取文件内容并将其转换为列表,其中列表的每个元素是每行中存在的序列。然后,您可以将其作为二维数据结构访问您的矩阵。 例如:[ATCGCGCTANANAGCTANANAGCTAGANCACGATAGAGAGAGACTATAGC,ATCGCGCTANANAGCTANANAGCTAGANCACGATAGAGAGAGACTATAGC,ATCGCGCTANANAGCTANANAGCTAGANCACGATAGAGAGAGACTATAGC,ATCGCGCTANANAGCTANANAGCTAGANCACGATAGAGAGAGACTATAGC,ATCGCGCTANANAGCTANANAGCTAGANCACGATAGAGAGAGACTATAGC]
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]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接