首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python在大型数据集中进行快速查找

使用python在大型数据集中进行快速查找
EN

Stack Overflow用户
提问于 2019-09-05 08:42:16
回答 2查看 391关注 0票数 0

我正在处理人类基因组,在一个患者中有大约1000万个SNP(由“SNP_ID”识别)。我有两个包含行的引用TSV,每行包含一个SNP_ID和一个浮点数(以及许多其他元数据),它都是ASCII码格式的。这些参考TSV的大小为300-500 in。

我需要根据TSV中包含的标准来过滤1000万个SNPs。换句话说,找到包含SNP_ID的行,查找浮点数,并确定该值是否高于阈值。

我的想法是将SNP存储在python集合中,然后对每个TSV进行扫描,查找TSV中的行是否与集合中的任何对象匹配。你认为这是一种合理的方法吗,或者在有1000万个项目的集合中查找时间会非常慢吗?我有成百上千的病人需要做这个,所以应该不会超过一两个小时。

EN

回答 2

Stack Overflow用户

发布于 2019-09-05 09:07:07

您的数据大小足够大,您不应该使用内存中的数据结构。相反,可以考虑使用关系数据库系统。您可以从sqlite开始,它与Python捆绑在一起。

This SO answer提供了有关如何将TSV加载到sqlite中的详细信息。

将一组SNP和参考TSV放入sqlite后,可以使用简单的SQL查询来过滤SNP,如下所示:

代码语言:javascript
复制
SELECT
    t1.SNP_ID
FROM
    snps t1
LEFT JOIN
    ref_tsv t2
ON
   t1.SNP_ID = t2.SNP_ID
WHERE
    t2.value >= {your_threshold}
;
票数 0
EN

Stack Overflow用户

发布于 2019-09-05 09:50:36

好的,这是我在你的情况下会做的。

  1. 500‘s的元数据很多,让我们看看如何减少这个数量。
  2. 你的想法是用SNP_ID制作一个set()是很好的。读取您所有的SNP数据,创建一组SNP_ID,它肯定会放入内存中,然后读取TSV数据,对于每一行,检查SNP_ID是否在您的集合中,如果在,则保存SNP_ID和浮点数,丢弃其余的。您最多将有10M条记录,因为一个SNP只有这么多记录。
  3. 使用下一个SNP

重新开始您的魔法

为了以防万一,最好把所有的数据都放在一个快速的固态硬盘上。

另外,如果你丢弃元数据,也许你可以将TSV的大小减少到几if,从而节省SNP_ID和浮点数?然后你可以很容易地将它放入内存中,并使事情变得更快。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57797101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档