source: orange-bioinformatics/scripts/geo2orange.py @ 1629:0d6de7936e04

Revision 1629:0d6de7936e04, 2.6 KB checked in by mitar, 2 years ago (diff)

Moving files around.

Line 
1import string
2import re
3import sys
4import os.path
5
6def usage():
7   print "%s geo-file-name orange-file-name" % os.path.basename(sys.argv[0])
8
9if len(sys.argv)<>3:
10   usage()
11   sys.exit(0)
12   
13inname = sys.argv[1]
14outname = sys.argv[2]
15
16#outname = "out.tab"
17#inname = "GDS1962.soft.tab"
18
19attvalue = re.compile("(.*) = (.*)")
20
21def geo_process_file(inname, choice=None):
22   print "Processing: %s" % inname
23   f = open(inname)
24   subsets = {}
25   data = {}
26   genes = []
27   while True:
28      line = f.readline()
29      if "!dataset_table_begin" in line:
30         # which sample to include
31         samples = []
32         for v in subsets.values():
33            samples.extend(v)
34         for s in samples:
35            data[s] = []
36
37         # classification class(sample)
38         classification = {}
39         for c, ss in subsets.items():
40            for s in ss:
41               classification[s] = c
42
43         # header with sample names         
44         line = f.readline() 
45         line = line[:-1]
46         header = string.split(line, "\t")
47         accept = dict([(h,i) for i,h in enumerate(header[2:]) if h in samples])
48
49         # read the data
50         while True:
51            line = f.readline() # read data line
52            if "!dataset_table_end" in line:
53               f.close()
54               return data, genes, classification
55            line = line[:-1]
56            items = string.split(line, "\t")
57            genes.append(items[1]) # 1=gene name, 0=spot id
58            items = items[2:] # only the data values
59            for k,i in accept.items():
60               data[k].append(items[i])
61
62         
63      if "!subset_description" in line:
64         m = attvalue.search(line)
65         sname = m.group(2)
66         line = f.readline()
67         m = attvalue.search(line)
68         if not choice or sname in choice:
69            subsets[sname] = string.split(m.group(2), ",")
70           
71      if "!dataset_table_end" in line:
72         break
73     
74   return subsets
75
76#rawdata, geneids = geo_process_file(inname, ['tumor grade IV', 'tumor grade II', 'tumor grade III'])
77#rawdata, geneids, classification = geo_process_file("GDS330.soft.txt")
78rawdata, geneids, classification = geo_process_file(inname)
79
80
81genepos = {}
82for i, g in enumerate(geneids):
83   genepos[g] = genepos.get(g, []) + [i]
84
85fout = open(outname, "w")
86print "Saving to:  %s" % outname
87fout.write("id\toutcome\t" + "\t".join(geneids) + "\n")
88fout.write("string\td" + "\tc"*len(geneids) + "\n")
89fout.write("meta\tclass" + "\t"*len(geneids) + "\n")
90for s, items in rawdata.items():
91   fout.write("%s\t%s\t" % (s, classification[s]) + "\t".join(items) + "\n")
92fout.close()
93
Note: See TracBrowser for help on using the repository browser.