小风0000 发表于 2016-04-26 05:26

新手第一个帖子:转换格式,求大神给个意见

本帖最后由 小风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:28

本帖最后由 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错别字太多了,看着费劲。

mswsg 发表于 2016-04-26 08:46

我也是生物信息的,这个转换竟然看不懂呢

Hadron74 发表于 2016-04-26 09:12

回复 3# mswsg

应该是把alleles 的结果转换成类似plink的ped格式输入的数据转换。
   

mswsg 发表于 2016-04-26 10:37

二楼对的就好回复 4# Hadron74


   

小风0000 发表于 2016-04-26 11:51

回复 2# Hadron74

谢谢,确实输出格式给错了,已经修改过来了。谢谢您的帮忙,我仔细看了您的代码。解决问题了!

beacon1024 发表于 2016-04-27 11:57

回复 5# mswsg


   现在搞生物的写代码都这么牛了啊?
66666666666666666666666666

mswsg 发表于 2016-04-27 12:10

逼着自己学的,除非是那种后来转生物的,本来学生物的,后来学coding的,都比较苦逼,相对来说python简单一点回复 7# beacon1024


   

小风0000 发表于 2016-04-29 06:48

回复 8# mswsg


是的,自学很痛苦啊。大神,刚开始学,还有个问题请教下:http://bbs.chinaunix.net/thread-4244293-1-1.html
页: [1]
查看完整版本: 新手第一个帖子:转换格式,求大神给个意见