【发布时间】:2016-12-07 06:58:52
【问题描述】:
我目前正在尝试进行全基因组分析,我真的想知道我是否使用了正确的结构格式。我在网上找不到关于如何以及在何处存储数据以提高效率的真实信息。
在这种情况下,数据是这样组织的:
一个文件 (.ped) = 一个染色体
一条染色体 = 3000 行
一行 = 一个个体,其标识后跟其基因型(超过 100 000 个字符)。
整个文件超过 1,2 围棋。我用pickle来加载它。
我尝试了不同的数据存储方式,例如,如果我将数据全部放在一个列表中,只需 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 数组来处理此类大数据时,我是不是搞错了?
【问题讨论】:
-
我建议查看 hdf5 以获取此类数据。它压缩得很好,检索时间很快。看看 PyTables 或 h5py(C 到 Python 的映射)
标签: python performance numpy