GWAS - plink提取染色体位置范围内的SNP位点

一、首先学会打开文件

写给像我一样的小白,如果你手头有bim、fam等文件,怎么查看呢?
双击是不行的!!!!首先打开terminal,cd到文件所在的目录,然后使用vim命令:

cd /Users/Downloads/sge_genedata 
vi xxxxx.bim 

其中,文件位路径只需要直接选中文件夹,并且拖到terminal中就可以了!!

二、plink命令与文件格式:–bfile 、 --file 和 --tfile

使用–bfile 、 --file 和 --tfile读取文件类型不一样:
–bfile 读取二进制文件,bed、bim和fam格式
–file 读取文本文件,ped和map格式
使用以上两个命令时,文件命名要一致,如test.bed、test.bim、test.fam
二进制文件比较小,处理速度比较快

三、下载一定染色体位置范围内的所有SNP


根据注释可以知道,这条命令包括两个文件夹

  • file data即你要下载的源数据,比如千人基因组计划的数据啦
  • myrange.txt即你要提供的染色体位置范围的数据,下面注释写的很清楚啦,要有四列,分别是CHR ,BP1,BP2和LABEL
    把命令输进去就可以了,如果错误了会报错,plink的错误提示还是很清楚的
plink--bfile /Downloads/sge_genedata/sge_qc_clean 
--extract range /User/Downloads/sge_genedata/myrange.txt 
--make-bed --out rangsnp

*如果没有把plink设入全局变量,则需要在plink前面加入plink的路径

  • –bfile 表示我的文件是sge_qc_clean.bed 、sge_qc_clean.fam 和sge_qc_clean.bim。
    –bfile expects a filename prefix; ‘.bed’, ‘.bim’, and ‘.fam’ are automatically appended.意思是bfile后面只需要加文件名就好了,后缀会自己生成
  • –extract range是我需要提取的范围,按照上述的文件格式自己整理的txt
  • –make-bed 是在它之前的操作之后,创建一个新的PLINK 1二进制文件集
  • –out rangsnp就是想输出的文件名字
    一开始我还不知道最后输出得到的文件放在哪里了,大家搜索一下文件的位置就找到了(应该可以改变输出文件的路径,等我学会了再补充)
    最后我生成的文件:

使用一中介绍的vi命令 ,便可以查看提取的snp信息啦!!!
其中.log文件也可以双击打开,可以看到结果显示4416744 variants loaded from .bim file,即源文件中有这么多位点。–extract range: 24339 variants remaining.使用这行命令提取出的snp有24339个。

`ieu-b-5099.vcf.gz` 是一个 VCF(Variant Call Format)文件,这是一种标准格式,用于存储遗传变异数据,如单核苷酸多态性(SNPs)。VCF 文件包含了个体的基因型信息以及关联到这些位点的其他元数据。 要从这个 VCF 文件中提取基因数据并生成 LD(Linkage Disequilibrium,遗传连锁不平衡)图,你需要使用 Python 中的一些生物信息学库,例如 `bcftools` 或者 `plink`。这里我将提供一个基于 `pandas` 和 `scipy` 的基本示例,假设你已经安装了 `pyvcf` 库来读取 VCF 文件: ```python import pandas as pd from pyvcf import VCF import numpy as np from scipy.sparse.csgraph import connected_components, laplacian # 解压gz文件,如果还没有解压 import gzip with gzip.open('ieu-b-5099.vcf.gz', 'rb') as f_in: with open('ieu-b-5099.vcf', 'wb') as f_out: f_out.write(f_in.read()) # 使用 pyvcf 阅读 vcf 文件 reader = VCF('ieu-b-5099.vcf') # 提取 SNPs 的列名,通常包括染色体位置和等位基因 chromosome = [x.CHROM for x in reader] position = [x.POS for x in reader] alleles = [x.ALT for x in reader] # 将这些数据组织成 DataFrame df_snps = pd.DataFrame({'chrom': chromosome, 'pos': position, 'allele': alleles}) # 选择感兴趣的基因(假设基因ID在'ID'或'SAMPLE_ID'列) genetic_markers = df_snps['ID'] # 如果你的文件有这个字段 # 创建一个稀疏邻接矩阵表示 SNP 之间的 LD 关系 def compute_ld(snps_df, r2_threshold): # 这里计算 r^2 来衡量 LD,实际应用可能需要更复杂的计算逻辑 correlations = snps_df.corr('pearson')['allele'].values # 只保留大于阈值的关联 ld_matrix = correlations[np.abs(correlations) >= r2_threshold].reshape(-1, 1) # 将非零值转换为稀疏矩阵 from scipy.sparse import dok_matrix ld_sparse = dok_matrix((len(genetic_markers), len(genetic_markers)), dtype=bool) ld_sparse[correlations.index, correlations] = True return ld_sparse.tocsr() # 设置 R^2 割阈值 ld_matrix = compute_ld(df_snps[df_snps['ID'].isin(genetic_markers)], r2_threshold=0.8) # 对矩阵进行连接组件分析,找出 LD 块 components, labels = connected_components(ld_matrix, directed=False) # 计算并显示每个块内的基因数 cluster_sizes = np.bincount(labels) ``` 这只是一个基础示例,实际操作中可能需要根据具体的需求调整,比如处理缺失值、滤波、计算更精确的 LD 指标等。对于更复杂的数据处理和图形化,`plink` 或其他专门的遗传学软件包可能会更为适用。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值