在Python中存储DNA矩阵的最佳方法

时间:2018-10-11 08:10:45

标签: python

我想在Python中存储DNA的字符数组,每个单词作为每个元素。

例如,我想更改

Option Explicit

Public Sub Move_info_UPDT()
    Dim objWord As Object
    Dim objDoc As Object

    Dim ProcessRange As Range
    Set ProcessRange = Selection

    Dim i As Long
    For i = ProcessRange.Row To ProcessRange.Rows.Count + ProcessRange.Row - 1
        Set objWord = CreateObject("Word.Application")
        Set objDoc = objWord.Documents.Add(Template:="C:\Users\grusa\Desktop\test2.dotx", NewTemplate:=False, DocumentType:=0)

        With objDoc
            'I need it to  be cell from the same row loop currently is
            ' now this line move info to first doc from C1, to second from C2 and etc.
            .ContentControls.Item(1).Range.Text = ProcessRange.Parent.Cells(i, "C").Value
        End With

        objWord.Visible = True
        Application.StatusBar = "Progress: " & i - ProcessRange.Row + 1 & " of " & ProcessRange.Rows.Count
        DoEvents 'keep Excel responsive
    Next i

    Application.StatusBar = ""
End Sub

转换为2D矩阵形式,每个元素存储一个字符。我想到了 numpy ,但我认为它可能不适用于这些字符串。

Python的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

最简单的简单答案是使用列表列表:

a = "cctgatagacgctatctggctatccaggtacttaggtcctctgtgcgaatctatgcgtttccaaccat"
b = "agtactggtgtacatttgatccatacgtacaccggcaacctgaaacaaacgctcagaaccagaagtgc"
matrix = [list(a), list(b)]
print(matrix)

[
  ['c', 'c', 't', 'g', 'a', 't', 'a', 'g', 'a', 'c', 'g', 'c', 't', 'a', 't', 'c', 't', 'g', 'g', 'c', 't', 'a', 't', 'c', 'c', 'a', 'g', 'g', 't', 'a', 'c', 't', 't', 'a', 'g', 'g', 't', 'c', 'c', 't', 'c', 't', 'g', 't', 'g', 'c', 'g', 'a', 'a', 't', 'c', 't', 'a', 't', 'g', 'c', 'g', 't', 't', 't', 'c', 'c', 'a', 'a', 'c', 'c', 'a', 't'], 
  ['a', 'g', 't', 'a', 'c', 't', 'g', 'g', 't', 'g', 't', 'a', 'c', 'a', 't', 't', 't', 'g', 'a', 't', 'c', 'c', 'a', 't', 'a', 'c', 'g', 't', 'a', 'c', 'a', 'c', 'c', 'g', 'g', 'c', 'a', 'a', 'c', 'c', 't', 'g', 'a', 'a', 'a', 'c', 'a', 'a', 'a', 'c', 'g', 'c', 't', 'c', 'a', 'g', 'a', 'a', 'c', 'c', 'a', 'g', 'a', 'a', 'g', 't', 'g', 'c']
]

现在是否适合您,取决于您计划如何使用它,数据集将要达到的大小,性能和内存使用约束等,在您的问题中都没有提及...

答案 1 :(得分:1)

您可以将其存储为Seq库中Biopython对象的列表,这些对象专门用于处理生物序列,例如DNA或氨基酸链。 该库具有一些专门为DNA序列设计的出色方法,例如reverse_complement()transcribe()。生物信息学家的天堂!

from Bio.Seq import Seq
my_seq1 = Seq("AGTACACTGGT")
my_seq2 = Seq("GATTAGCTGAT")

list = [my_seq1, my_seq2]