我目前正在尝试进行全基因组分析,我真的想知道我是否使用了正确的结构格式。我在网上找不到关于如何以及在哪里存储数据以提高效率的真实信息。
在这种情况下,数据是这样组织的:
一个文件(.ped) =一个染色体
一条染色体= 3000条线
一行=一个个体,它的身份和它的基因型(超过10万个字符)。
整个文件不仅仅是1,2个Go。我用酸菜来加载它。
我尝试了不同的存储数据的方法,例如,如果我将所有文件放在一个列表中,只需要30秒就可以存储来自4个文件的数据:
pedFile = [
[['G01231GHS', 'G01231GHS', 0, 0, 1, 1], 'ATTTCTC', 'TGTCT00CTGA'],
[['G01324GHS', 'G01324GHS', 0, 0, 1, 1], 'ATT0TAG', 'TGCT000ATGA']
]其中第一个字符串是第一个染色体分析,等等。
index_chr = {'chr2':1, 'chr5':2, 'chr13':3, 'chr16':4}我也尝试过这种类型的结构:
pedDico = {
'G01231GHS': {'id':['G01231GHS', 'G01231GHS', 0, 0, 1, 1], 'chr2': 'ATT0CTC', 'chr5': 'TGTCT00CTGA'},
'G01324GHS': {'id':['G01324GHS', 'G01324GHS', 0, 0, 1, 1], 'chr2':'ATT0TAG', 'chr5': 'TGCT000ATGA'}
}但上面的结构似乎都没有更有效的。
问题是需要过滤数据,这意味着使用for循环来比较个体之间的数据,这意味着它需要几个小时才能运行。我也尝试了numpy数组,但构建它需要太多时间。
你能想到一个更智能的结构吗?尝试使用列表、字典或numpy数组来处理如此庞大的数据,我是不是完全搞错了?
发布于 2016-12-07 16:13:24
我想你想要shelve。它会清理你的字典,但一次只能解开一个词条。
import shelve
db=shelve.open(filename,writeback=True)
db.update(pedDico)
db.close()然后当你以后想要使用它的时候
import shelve
db=shelve.open(filename)
for dbKey in list(db.keys()):
data=db[dbKey] #only unpickle this dictionary entry
#Do stuff with data
db.sync() #clear db[dbkey] out of memory and move on通过这种方式,您不必一直将大型数据库装入和装出内存。
发布于 2016-12-07 16:45:59
基因组测序是一项计算繁重的任务,正如所描述的那样,有大量的数据。也许python不是做这件事的合适工具。看看一些图形处理器加速的方法,比如BarraCUDA (http://seqbarracuda.sourceforge.net/index.html)
https://stackoverflow.com/questions/41011236
复制相似问题