如何从 551S.bim 中获得 常染色体SNP的原始基因分型数据

最后发布时间 : 2026-06-24 15:05:38 浏览量 :

先纠正一个关键点:.bim 里没有“基因分型数据”,它只包含 SNP注释信息。真正的基因型在:

  • .bed(二进制基因型)
  • .bim(SNP信息)
  • .fam(样本信息)

🧠 你真正想做的是:

👉 “从 .bim 里筛选常染色体 SNP,然后提取对应的基因型”

正确流程是:
.bim 过滤 SNP → 再从 .bed/plink 输出 genotype


✅ Step 1:读取 .bim,筛选常染色体 SNP

.bim 格式:

colmeaning
1chr
2SNP ID
3cM
4position
5allele1
6allele2

Python筛选 autosome(1–22)

import pandas as pd

bim = pd.read_csv("551S.bim", sep="\t", header=None)

bim.columns = ["CHR", "SNP", "CM", "BP", "A1", "A2"]

autosome = bim[bim["CHR"].isin(range(1, 23))]

⚠️ 注意

.bim 里的 CHR 有时是字符串:

bim["CHR"] = bim["CHR"].astype(str).replace("X", "23")
bim["CHR"] = pd.to_numeric(bim["CHR"], errors="coerce")

❗关键:你还没有 genotype 数据!

.bim 只是索引,不含基因型。


✅ Step 2:从 PLINK 提取 autosome genotype(推荐方法)

plink \
  --bfile 551S \
  --chr 1-22 \
  --recode A \
  --out autosome_genotype

输出:

autosome_genotype.raw

✔ 直接得到:

| FID | IID | SNP1 | SNP2 | ... |


方法B(更推荐:VCF)

plink --bfile 551S --chr 1-22 --recode vcf --out autosome

方法C(Python + pandas + PLINK2)

plink2 \
  --bfile 551S \
  --chr 1-22 \
  --export A \
  --out autosome

🚀 如果你真的想“Python直接读基因型”

可以用:

from pandas_plink import read_plink1_bin

(bim, fam, G) = read_plink1_bin("551S.bed")

然后筛选:

autosome = bim[bim.chromosome.isin(range(1, 23))]
G_auto = G[:, bim.chromosome.isin(range(1, 23))]

🧠 总结一句话

.bim = SNP信息(不是基因型)
✅ 基因型在 .bed
👉 必须通过 PLINK 或 pandas-plink 才能提取


如果你下一步想做👇我可以继续帮你

  • PCA(plink2 / smartpca)
  • GWAS QC pipeline
  • imputation前 SNP filtering
  • X染色体单独处理策略
  • VCF ↔ PLINK 转换优化

直接说你的目标就行。