GWAS提取显著位点信息

提取位点,要确定显著SNP上下游多长,来查找基因,这就需要计算LD衰减距离:LD衰减图绘制,然后根据上下游去和gff文件合并,把区间内的基因找到,这就找到目标基因了。

下面,用一个例子,来介绍一下操作的方法:

需要基因注释信息,SNP位点信息

对于SV,要先计算SV覆盖的范围:
计算vcf文件中SV的长度 - 简书 (jianshu.com)

基因位置信息提取,第九列为基因注释信息

###第一列为染色体,第三列为类型,第四五列为起止位置,如果第三列类型为gene,则打印染色体,起止位置
use strict;
open IN,"<$ARGV[0]";


open OU,">$ARGV[1]";
while(<IN>){
    chomp;
    my @vcf=split/\t/;
    if ($vcf[2] eq 'gene') {
        print OU join("\t", $vcf[0], $vcf[3], $vcf[4]), $vcf[8]"\n";
    }
}

close IN;
close OU;
D_GW_snp位置信息
nip.ge基因位置信息

使用bedtools提取信息

bedtools intersect -a D_GW -b nip.ge -loj >dgw
以下是一个Python脚本,用于从命令行中传入文件名,并提取读取文件中第七列以"ID=gene:"开头的内容,并截取第一个":"之前的字符,并去重:

```python
import re
import sys

# 从命令行获取文件名
filename = sys.argv[1]

# 读取文件内容
with open(filename, 'r') as file:
    lines = file.readlines()

# 提取第七列ID=gene:后面及第一个;前面的字符
result = set()
for line in lines:
    columns = line.split('\t')
    if len(columns) >= 7:
        match = re.search(r'ID=gene:(.*?);', columns[6])
        if match:
            result.add(match.group(1))

# 输出结果
for item in result:
    print(item)
匹配的结果信息,-1表示没有匹配

下面的脚本可以合并当前目录下所有的csv文件并打印三列数据

import os
import csv

output_file = "merged_file.txt"  # 新文件名
output_data = []  # 存储合并后的数据

# 遍历当前目录下的所有CSV文件
for file in os.listdir():
    if file.endswith(".csv"):
        with open(file, "r") as csv_file:
            csv_reader = csv.reader(csv_file)
            for row in csv_reader:
                if len(row) >= 3:  # 确保至少有三列数据
                    # 提取第二列、第三列、第三列,并使用制表符进行分割
                    new_row = "\t".join([row[1], row[2], row[2]])
                    output_data.append(new_row)

# 将合并后的数据写入新文件
with open(output_file, "w") as output:
    for row in output_data:
        output.write(row + "\n")

print("合并完成!")

以下脚本可以根据某一阈值筛选文件

import csv
import argparse

def process_csv(input_file, output_file):
    with open(input_file, 'r') as input_csv, open(output_file, 'w', newline='') as output_csv:
        reader = csv.reader(input_csv)
        writer = csv.writer(output_csv)
        
        for row in reader:
            if len(row) >= 6:
                try:
                    value = float(row[5])
                    if value < 1e-4:
                        writer.writerow(row)
                except ValueError:
                    continue

# 解析命令行参数
parser = argparse.ArgumentParser(description='Process CSV file')
parser.add_argument('-i', '--input', type=str, help='input CSV file')
parser.add_argument('-o', '--output', type=str, help='output CSV file')
args = parser.parse_args()

# 检查输入和输出参数是否提供
if not args.input or not args.output:
    print('请输入输入和输出参数。使用 -h 或 --help 查看帮助。')
else:
    process_csv(args.input, args.output)
    print('已完成CSV文件处理。')
以下代码可以根据LD添加加阈值
import sys

# 获取命令行参数
input_file = sys.argv[1]
output_file = sys.argv[2]

# 读取输入文件、处理数据并写入输出文件
with open(input_file, 'r') as input_f, open(output_file, 'w') as output_f:
    for line in input_f:
        # 分割每行数据
        columns = line.strip().split('\t')
        
        # 对第二列和第三列进行操作
        new_columns = [str(int(column) - 213000) if index == 1 else str(int(column) + 213000) if index == 2 else column for index, column in enumerate(columns)]
        
        # 构建新的行数据
        new_line = '\t'.join(new_columns) + '\n'
        
        # 将新行数据写入输出文件
        output_f.write(new_line)
###RMVP标记显著性位点
args<-commandArgs(TRUE)
library(rMVP)
library(dplyr)
df1<- read.csv(args[1],header = TRUE)
df1<- select(df1,-4,-5)
df1<- na.omit(df1)
colnames(df1)[1]<-"id"
colnames(df1)<-c("SNP","CHR","BP","P")
head(df1)
hig<-read.table(args[2],header = FALSE)
MVP.Report(df1,   
                  col = c("#4197d8", "#f8c120", "#d581b7", "#83d3ad","#d60b6f", "#413496", "#495226","#e66519", "#7c162c", "#26755d"),
           threshold = 1e-5, threshold.lwd = 3, amplify = FALSE,  highlight = hig, highlight.cex = 1.5, highlight.pch = 19, highlight.col = "black", 
           file.output = TRUE,file.type = "jpg", dpi = 300, height = NULL, width = NULL)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容