2016-05-03 12 views
0

Ich versuche, einen Code zu schreiben, wo es eine METADATA.TXT als eine Eingabe nimmt, dann identifizieren sie die gemeinsamen Gene in den verschiedenen Eingabedateien, deren Namen extrahiert werden aus dem Metadata .txt-Datei.unter Verwendung mehrerer Dateien von einem Eingang

Beispiel METADATA.TXT

 
SIG1 SIG2 
File1 File3 
File2 File4 
File3 File5 
File4 

Die Dateien in meinem Verzeichnis sind File1.xls, File2.xls, File3.xls ... File6.xls. Der Einfachheit halber habe ich gleiche Eingänge für File1 und 3-Datei sowie für File 2 und 4.

File1.xls oder File3.xls

 
TargetID FoldChange p-value Adjusted-p 
A 0.543528215 0.000518847 0.000518847 
B 0.638469898 0.00204759 0.00204759 
C 1.936595724 0.00250229 0.00250229 
D 0.657322154 0.012840013 0.012840013 
E 1.728842021 0.00251105 0.00251105 
F 2.024842641 0.000719261 0.000719261 
G 4.049059413 2.25E-05 2.25E-05 
H 0.478660942 0.000352179 0.000352179 
I 0.449304016 0.000489521 0.000489521 

File2.xls oder File4.xls

 
TargetID FoldChange p-value Adjusted-p 
JJ 0.453537892 4.22E-06 4.22E-06 
A 0.558325503 0.001697851 0.001697851 
B 0.637336564 7.64E-05 7.64E-05 
D 1.804853034 0.000492439 0.000492439 
E 0.378445825 1.72E-05 1.72E-05 
JJJJ 1.601997491 0.019618883 0.019618883 

File5.xls

 
TargetID FoldChange p-value Adjusted-p 
A 3.140223972 0.013347275 0.013347275 
B 1.5205222 0.032318774 0.032318774 
C 1.532760451 0.043763101 0.043763101 
D 1.522865896 0.001791471 0.001791471 

Ziel ist es, Ausgabe zwei Dateien „SIG1.txt“ und „SIG2.txt“, die die gemeinsamen Gene hat sein zwischen File1/File2 und File3/File4/File5. Die Metadaten bieten also eine Plattform, um über Dinge zu iterieren. Hier ist, was ich bisher hatte:

md_input = pd.read_table("Metadata.txt", sep="\t") #opens the metadata file 

for c in range(0, len(md_input.columns)): 
     first_file=md_input.ix[0,c]+".xls" 
     print first_file #this will print "File1.xls" for column1 and File3.xls for column#2 
     first_sig=pd.read_table(first_file, sep="\t", usecols=["TargetID", 'FoldChange']) #opens the first file 
     list1=list(first_file.iloc[:,0]) #takes column of first file and converts to list 
     #Then, I aim to iterate over the remaining files in each column of the metadata and find the intersection/common with each other. I tried the following: 
     for i in range(1, md_input.count()[c]): 
      list2=[] 
      df=pd.read_table("{}.xls".format(md_input.ix[i,c]), sep="\t", usecols=["TargetID", 'FoldChange']) 
      list2=list(df.iloc[:,0]) #assign the LIST 
      common=list(set(list_up_0).intersection(set(list2))) #find intersection 

print common 

Wenn ich die ‚gemeinsamen‘ drucken, erhalte ich nur die Gemeinsamkeiten mit der letzten Datei. Was erwartet wird, wie ich den Loop/Code geschrieben habe. Ich finde keine Möglichkeit, über alle Dateien in der Spalte zu iterieren, sie offen zu halten und dann eine Kreuzung zu identifizieren.

Bitte beraten, wenn ich die oben weiter klären müssen. Ich weiß, es klingt kompliziert, aber es sollte nicht sein. t versucht, es zu vereinfachen, und ich hoffe, dass

arbeitete
+0

Vielleicht brauchen Sie etwas Platz vor 'print common' ??? versuchen auszurichten mit 'gemeinsamen = list (set (list_up_0) .intersection (set (list2))) #find intersection' ... – su79eu7k

+0

, dass es nicht lösen würde. es wird dir dann bei jedem Schritt das Gemeinsame geben. – BioProgram

Antwort

1

war ich endlich in der Lage, es zu bekommen zu arbeiten. Ich bin mir nicht sicher, ob das der einfachste Weg ist, aber es funktioniert. Ich denke, der verwirrende Teil im folgenden Skript ist die Verwendung des globalen Schlüssels, um das Öffnen mehrerer Dateien und das Zuweisen von Dateinamen basierend auf dem # in der for-Schleife zu ermöglichen. Wie auch immer, das Skript funktioniert und es berücksichtigt auch die faltenartigen Änderungen. Ich hoffe, dass dies für andere nützlich sein wird.

md_input = pd.read_table('Metadata.txt', sep="\t") 
list_cols=list(md_input.columns) 
df=pd.DataFrame(columns=list_cols) 
for c in range(0, len(md_input.columns)): 
    sets_up=[] 
    sets_down=[] 
    for i in range(0, md_input.count()[c]): 
     globals()["file_"+str(i)]=md_input.ix[i,c]+".xls" 
     globals()["sig_"+str(i)]=pd.read_table(globals()["file_"+str(i)], sep="\t", usecols=["TargetID", 'FoldChange']) 
     globals()["List_up"+str(i)]=[] 
     globals()["List_down"+str(i)]=[] 
     for z in range(0, len(globals()["sig_"+str(i)].index)): 
      if globals()["sig_"+str(i)].ix[z,'FoldChange']>=1.5: 
       globals()["List_up"+str(i)].append(globals()["sig_"+str(i)].iloc[z,0]) 
      elif globals()["sig_"+str(i)].ix[z,'FoldChange']<=1.5: 
       globals()["List_down"+str(i)].append(globals()["sig_"+str(i)].iloc[z,0]) 
     sets_up.append(set(globals()["List_up"+str(i)])) 
     sets_down.append(set(globals()["List_down"+str(i)])) 

    common_up=list(set.intersection(*sets_up)) 
    common_down=list(set.intersection(*sets_down)) 
    common=common_up + common_down 

    for x in range(0, len(common)): 
     df.loc[x,md_input.columns[c]]=common[x] 

df.to_csv("Output.xls",sep="\t", index=False) 
Verwandte Themen