新手第一个帖子:转换格式,求大神给个意见
本帖最后由 小风0000 于 2016-04-26 11:13 编辑求大家给个流程,怎么解决这个问题?找了好久还是解决不了。
按本人的想法是,把dat2做成个矩阵,然后对dat1文件进行迭代,每次按da2进行替换。但是第一步就出现问题:怎么读入数据,转换成矩阵?
dat1:
ind1 2202220
ind2 2222002
ind3 2222002
ind4 1221102
ind5 2222002
ind6 2212111
ind7 2202210
ind8 1221102
ind9 2222002
ind10 2222002
dat2:
SNPID_600K,Allele_0,Allele_1
snp1,A,C
snp2,A,G
snp3,A,G
snp4,T,C
snp5,T,C
snp6,T,C
snp7,A,G
dat1有10000行,2列,第2列有428896个数字。
dat2有428896行,3列。
现在要根据dat1第2列的数字转换成字符,以dat1的第2列的第1个数字为例,数字2按dat2里的第3列转换成C C。如果数字为1则按第2和第3列,转换成A C。如果数字为0,则按第2列转换成A A。
最后输出的格式为:
ind1 C C G G A A C C C C C C A A
ind2 C C G G G G C C T T T T G G
本帖最后由 Hadron74 于 2016-04-26 08:30 编辑
一看你也是学生物信息的。
按我的理解,dat1的列应该对应dat2的行吧,所以你的输出格式的例子有误。
如果这样,程序如下:dat1 = """ind1 2202220
ind2 2222002
ind3 2222002
ind4 1221102
ind5 2222002
ind6 2212111
ind7 2202210
ind8 1221102
ind9 2222002
ind10 2222002"""
dat2 = """snp1,A,C
snp2,A,G
snp3,A,G
snp4,T,C
snp5,T,C
snp6,T,C
snp7,A,G"""
snps = []
for line in dat2.split("\n"):
snp,a0,a2=line.rstrip().split(",")
snps.append((a0,a2))
d1={}
import re
for line in dat1.split("\n"):
ind,values =re.split("\s+",line.rstrip())
bases = []
for i, v in enumerate(values):
s = snps
if v == "1":
bases.append(s)
bases.append(s)
elif v == "2":
bases.append(s)
bases.append(s)
elif v == "0":
bases.append(s)
bases.append(s)
else:
raise ValueError("Not valid number: " + v)
d1=bases
print "ind1"," ".join(d1["ind1"])
print "ind2"," ".join(d1["ind2"])
ind1 C C G G A A C C C C C C A A
ind2 C C G G G G C C T T T T G G错别字太多了,看着费劲。 我也是生物信息的,这个转换竟然看不懂呢 回复 3# mswsg
应该是把alleles 的结果转换成类似plink的ped格式输入的数据转换。
二楼对的就好回复 4# Hadron74
回复 2# Hadron74
谢谢,确实输出格式给错了,已经修改过来了。谢谢您的帮忙,我仔细看了您的代码。解决问题了!
回复 5# mswsg
现在搞生物的写代码都这么牛了啊?
66666666666666666666666666 逼着自己学的,除非是那种后来转生物的,本来学生物的,后来学coding的,都比较苦逼,相对来说python简单一点回复 7# beacon1024
回复 8# mswsg
是的,自学很痛苦啊。大神,刚开始学,还有个问题请教下:http://bbs.chinaunix.net/thread-4244293-1-1.html
页:
[1]