2018 Hakyung July Lab note

From Crop Genomics Lab.
Jump to: navigation, search

HT-seq, edgeR 처리 후 한 파일에 리스트 형태로 저장

file = open ("/data2/haggui/RNA/edgeR/raw_edgeR/control.counts.edgeR","r")
lines = file.readlines()
list = []
for line in lines :
       gene_name = line.split('"')[1]  #"gene name" 으로 되어 있는 것 가져오기
       dic = [0,0,0,0,0]
       dic[0] = (gene_name) #dic = [genename,0,0,0,0]
       Cfile = open("/data2/haggui/RNA/edgeR/DEG_edgeR/DEG_control.txt","r") #control 상태에서의 DEG 정보
       Clines = Cfile.readlines()
       for Cline in Clines :
               Cgene_name = Cline.split('"')[1]
               ClogFC = float(Cline.split(' ')[1]) #logFC value
               if Cgene_name == gene_name :
                       if ClogFC < -1 :
                               dic[1] = dic[1]+1 # SS2-2 > TG 이면 1
                       elif ClogFC > 1 :
                               dic[1] = dic[1]+2 # TG < SS2-2 이면 2, dic = [genename,2,0,0,0]
                       else : pass
               else : pass
       Cfile.close()   
       Sfile = open("/data2/haggui/RNA/edgeR/DEG_edgeR/DEG_SS2-2.txt","r") #SS2-2가 drought 때 어떻게 변하는지
       Slines = Sfile.readlines()
       for Sline in Slines :
               Sgene_name = Sline.split('"')[1]
               SlogFC = float(Sline.split(' ')[1])
               if Sgene_name == gene_name :
                       if SlogFC > 1 :
                               dic[2] = dic[2]+1 #up-regulation이면 1
                       elif SlogFC < -1 : 
                               dic[2] = dic[2]+2 #down-regulation이면 2, dic = [genename,2,2,0,0]
                       else : pass
               else : pass
       Sfile.close()
       Tfile = open("/data2/haggui/RNA/edgeR/DEG_edgeR/DEG_TG.txt","r") #태광의 변화
       Tlines = Tfile.readlines()
       for Tline in Tlines :
               Tgene_name = Tline.split('"')[1]
               TlogFC = float(Tline.split(' ')[1])
               if Tgene_name == gene_name :
                       if TlogFC > 1 : #up-regulation이면 1
                               dic[3] = dic[3]+1 
                       elif TlogFC < -1 : #down-regulation이면 2, dic = [genename,2,2,2,0]
                               dic[3] = dic[3]+2
                       else : pass
               else : pass
       Tfile.close()
       Dfile = open("/data2/haggui/RNA/edgeR/DEG_edgeR/DEG_drought.txt","r") #drought상태에서의 expression level
       Dlines = Dfile.readlines()
       for Dline in Dlines :
               Dgene_name = Dline.split('"')[1]
               DlogFC = float(Dline.split(' ')[1])
               if Dgene_name == gene_name :
                       if DlogFC < -1 : #SS2-2 > TG 이면 1 
                               dic[4] = dic[4]+1
                       elif DlogFC > 1: #TG > SS2-2 이면 2, dic = [genename,2,2,2,2]
                               dic[4] = dic[4]+2
                       else : pass
               else : pass
       Dfile.close()
       list.append(dic) #list =[[genename,0,0,1,0],[genename2,0,1,1,0] ...]
f = open('exp_list.txt','w') 
import pickle # 어떤 형태로든 저장해줌, 원래는 새 파일에 쓰면 무조건 string 형태, (리스트 모양의 스트링), 하지만 피클을 사용하면 리스트를 리스트로 저장할 수 있다.
pickle.dump(list,f)  #리스트를 f변수로 저장된 파일에 써라
f.close()


원하는 리스트 뽑기

file = open('exp_list.txt','r') 
import pickle #파일 사용할 때도 pickle 모듈 불러와줘야함
list = pickle.load(file)
import sys # python에서 argument 사용할 때. (command 라인으로 input 바로 받아줌)
a = int(sys.argv[1]) #첫번째 argument
b = int(sys.argv[2])
c = int(sys.argv[3])
d = int(sys.argv[4])
for gene in list : #gene = [genename,0,1,0,1]
       if a == gene[1] or a == 9: #control 상에서 exp level 상태가 첫번째 argument와 같거나, 무시하라는 input을 받았을 때(9)
               if b == gene[2] or b == 9 : #SS2-2의 변화가 두번째 argument와 같거나, 무시하라는 input을 받았을 때
                       if c == gene[3] or c == 9:
                               if d == gene[4] or d == 9:
                                       print (gene[0]) #genename을 print하라
                       elif c == 3 and (gene[3] == 1 or gene[3] == 2) :
                               if d == gene[4] or d == 9:
                                       print (gene[0])
                               else : pass
                       else : pass
               elif b == 3 and (gene[2] == 1 or gene[2] == 2) :
                       if c == gene[3] or c == 9:
                               if d == gene[4] or d == 9:
                                       print (gene[0])
                       elif c == 3 and ( gene[3] == 1 or gene[3] == 2) :
                               if d == gene[4] or d == 9: 
                                       print (gene[0])
                               else : pass
                       else : pass
               else :  pass
       else : pass

리스트 비교하기(차집합,교집합)

import sys
file1 = open(sys.argv[1]).readlines() #첫번째 argument는 비교하고자 하는 input file1
file2 = open(sys.argv[2]).readlines() #두번째 argument는 비교하고자 하는 input file2
s1 = set(file1) #리스트를 집합으로 만들라
s2 = set(file2)
file3 = list(s1&s2) #교집합
file3.sort()
file4 = list(s1-s2) #차집합
file4.sort()
file5 = list(s2-s1)
file5.sort() #집합으로 교집합, 차집합 등을 사용할 경우 순서가 없기 때문에 엉망이 됨. 다시 sort  해주기
if sys.argv[3] == '1' : #세번째 argument option이 1일 경우 교집합 print
       for line in file3: print line,
elif sys.argv[3] == '2' : 
       for line in file4: print line,
elif sys.argv[3] == '3' :
       for line in file5 : print line,


  • 혼자 할 때는 cat > | cat >> | uniq 등을 써서 command 라인에서 바로 수행해도 됨.