pandas 将PLINK二进制文件转换为python Dataframe

11dmarpk  于 2023-01-07  发布在  Python
关注(0)|答案(1)|浏览(143)

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

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

我的目标是将它们转换成(Pandas) Dataframe ,然后开始用Python(这是一个机器学习项目)进行预测分析。
我被建议将所有3个二进制文件合并成一个vcf(变量调用格式)文件。结果(vcf文件)是一个使用PLINK软件的26 G文件。有python包和代码将vcf文件转换成Pandas Dataframe ,但我的远程系统内存有限(15 Gi)。由于数据集的性质,我只能使用大学计算机。
我的问题是,考虑到我的所有限制,我如何将我的数据集转换为可用于机器学习的 Dataframe ?如果您需要更多细节,请告诉我。

t3irkdon

t3irkdon1#

你为什么要把它转换成VCF?
不幸的是,我不认为您可以将整个数据集加载到Python中。如果每个基因型为2位,则23,000个样本乘以300,000个变体大约为1.7GB;但是,我怀疑你的机器学习算法会期望32位或64位浮点数。使用64位浮点数,你将需要55 GB。
您可以尝试使用Python库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())

相关问题