【问题标题】:Converting PLINK binary files into python dataframe将 PLINK 二进制文件转换为 python 数据帧
【发布时间】:2023-01-07 08:47:14
【问题描述】:

我正在处理一个遗传数据集(大约 23,000 个样本和 300,000 个 SNP 作为特征)。我的文件是 PLINK 二进制格式文件(.bed、.bim、.fam)。下面列出了它们的尺寸:

  • .bed 文件:1.6G
  • .bim 文件 = 9.3M
  • .fam 文件 = 737K

我的目标是将它们转换为 (pandas) 数据帧,然后在 Python 中开始我的预测分析(这是一个机器学习项目)。

我被建议将所有 3 个二进制文件合并到一个 vcf(变体调用格式)文件中。使用 PLINK 软件得到的结果(vcf 文件)是一个 26G 的文件。有用于将 vcf 文件转换为 pandas 数据帧的 python 包和代码,但我的远程系统内存有限(15 Gi)。由于数据集的性质,我只能使用大学计算机。

我的问题是,考虑到我的所有局限性,如何将我的数据集转换为可用于机器学习的数据框?如果您需要更多详细信息,请告诉我。

【问题讨论】:

    标签: python pandas memory-management vcf-vcard genetics


    【解决方案1】:

    为什么要将其转换为 VCF?

    遗憾的是,我认为您无法将整个数据集加载到 Python 中。如果每个基因型为 2 位,则 300,000 个变体的 23,000 个样本约为 1.7 GB;但是,我怀疑您的机器学习算法需要 32 位或 64 位浮点数。使用 64 位浮点数,您将需要 55 GB。

    您可以尝试使用 Python 库 Hail(免责声明:我是 Hail 维护者)。您可以逐行流式传输数据。

    import hail as hl
    
    mt = hl.import_plink(bed='...bed', bim='...bim', fam='...fam')
    mt.show()
    

    您可以使用 Hail 筛选出一组较小的有用变体,然后将它们转储到您的机器学习系统中。例如,您可以过滤到相对罕见的变体:

    mt = hl.variant_qc(mt)
    mt = mt.filter_rows(
        (mt.variant_qc.AF[0] < 0.1) | (mt.variant_qc.AF[0] > 0.9)
    )
    
    import numpy as np
    dataset = np.array(hl.float(mt.GT.n_alt_alleles()).collect())
    

    【讨论】:

      猜你喜欢
      • 2015-05-05
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      • 1970-01-01
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多