Changeset 7935:9416cfa0758a in orange


Ignore:
Timestamp:
05/25/11 11:43:18 (3 years ago)
Author:
anze <anze.staric@…>
Branch:
default
Convert:
3ade34f7d66994056fd72cdfd82f16281af53076
Message:

Emptied orngIO and added wrappers for deprecated keywords.
closes ticket #770

Location:
orange
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • orange/Orange/data/io.py

    r7933 r7935  
    33     C45ExampleGenerator, TabDelimExampleGenerator, registerFileType 
    44 
    5 import Orange.data.variable 
     5import Orange.data 
    66import os 
    77 
    88def loadARFF(filename, create_on_new = Orange.data.variable.Variable.MakeStatus.Incompatible, **kwargs): 
    9     """Return class:`Orange.data.Table` containing data from file filename""" 
     9    """Return class:`Orange.data.Table` containing data from file in Weka ARFF format""" 
    1010    if not os.path.exists(filename) and os.path.exists(filename + ".arff"): 
    1111        filename = filename + ".arff"  
     
    8787    t.attribute_load_status = attributeLoadStatus 
    8888    return t 
     89loadARFF = Orange.misc.deprecated_keywords( 
     90{"createOnNew": "create_on_new"} 
     91)(loadARFF) 
     92 
    8993 
    9094def toARFF(filename,table,try_numericize=0): 
    91     """Save class:`Orange.data.Table` to file filename in ARFF format""" 
     95    """Save class:`Orange.data.Table` to file in Weka's ARFF format""" 
    9296    t = table 
    9397    if filename[-5:] == ".arff": 
     
    145149 
    146150def toC50(filename,table): 
     151    """Save class:`Orange.data.Table` to file in C50 format""" 
    147152    t = table 
    148153    # export names 
     
    186191 
    187192def toR(filename,t): 
     193    """Save class:`Orange.data.Table` to file in R format""" 
    188194    if str.upper(filename[-2:]) == ".R": 
    189195        filename = filename[:-2] 
     
    243249     
    244250def toLibSVM(filename, example): 
     251    """Save class:`Orange.data.Table` to file in LibSVM format""" 
    245252    import Orange.classification.svm 
    246253    Orange.classification.svm.tableToSVMFormat(example, open(filename, "wb")) 
    247254     
    248255def loadLibSVM(filename, create_on_new=Orange.data.variable.Variable.MakeStatus.Incompatible, **kwargs): 
     256    """Return class:`Orange.data.Table` containing data from file in LibSVM format""" 
    249257    attributeLoadStatus = {} 
    250258    def make_float(name): 
     
    272280    table.attribute_load_status = attributeLoadStatus 
    273281    return table 
     282loadLibSVM = Orange.misc.deprecated_keywords( 
     283{"createOnNew": "create_on_new"} 
     284)(loadLibSVM) 
    274285 
    275286registerFileType("R", None, toR, ".R") 
  • orange/orngIO.py

    r7893 r7935  
    1 # 
    2 # Module: Orange Input/Output 
    3 # -------------------------- 
    4 # 
    5 # CVS Status: $Id$ 
    6 # 
    7 # Author: Aleks Jakulin (jakulin@acm.org)  
    8 # (Copyright (C)2005 Aleks Jakulin) 
    9 # 
    10 # Purpose: Parsing WEKA's input files, support for output into ARFF (tested) and C5.0 (untested) 
    11 # 
    12 # Project initiated on 2005/03/10 
    13 # 
    14 # Notes:  
    15 # 
    16 # ChangeLog: 
    17 #   2005/04/04: 
    18 #       * export for R (source(filename) is to be used for reading the data.frame within R) 
    19 #   2005/03/10: 
    20 #       * initial version 
    21 #       * registration in orange (Janez) 
    22  
    23 import orange, string 
    24 import os 
    25  
    26 def loadARFF(filename, createOnNew=orange.Variable.MakeStatus.Incompatible, **kwargs): 
    27     if not os.path.exists(filename) and os.path.exists(filename + ".arff"): 
    28         filename = filename + ".arff"  
    29     f = open(filename,'r') 
    30      
    31     attributes = [] 
    32     attributeLoadStatus = [] 
    33      
    34     name = '' 
    35     state = 0 # header 
    36     data = [] 
    37     for l in f.readlines(): 
    38         l = l.rstrip("\n") # strip \n 
    39         l = string.replace(l,'\t',' ') # get rid of tabs 
    40         x = string.split(l,sep='%')[0] # strip comments 
    41         if len(string.strip(x)) == 0: 
    42             continue 
    43         if state == 0 and x[0] != '@': 
    44             print "ARFF import ignoring:",x 
    45         if state == 1: 
    46             dd = string.split(x,sep=',') 
    47             r = [] 
    48             for xs in dd: 
    49                 y = string.strip(xs,chars=" ") 
    50                 if len(y) > 0: 
    51                     if y[0]=="'" or y[0]=='"': 
    52                         r.append(string.strip(xs,chars="'\"")) 
    53                     else: 
    54                         ns = string.split(xs,sep=' ') 
    55                         for ls in ns: 
    56                             if len(ls) > 0: 
    57                                 r.append(ls) 
    58                 else: 
    59                     r.append('?') 
    60             data.append(r[:len(attributes)]) 
    61         else: 
    62             y = [] 
    63             for cy in string.split(x,sep=' '): 
    64                 if len(cy) > 0: 
    65                     y.append(cy) 
    66             if string.lower(y[0][1:]) == 'data': 
    67                 state = 1 
    68             elif string.lower(y[0][1:]) == 'relation': 
    69                 name = string.strip(y[1]) 
    70             elif string.lower(y[0][1:]) == 'attribute': 
    71                 if y[1][0] == "'": 
    72                     atn = string.strip(y[1],chars="' ") 
    73                     idx = 1 
    74                     while y[idx][-1] != "'": 
    75                         idx += 1 
    76                         atn += ' '+y[idx] 
    77                     atn = string.strip(atn,chars="' ") 
    78                 else: 
    79                     atn = y[1] 
    80                 z = string.split(x,sep='{') 
    81                 w = string.split(z[-1],sep='}') 
    82                 if len(z) > 1 and len(w) > 1: 
    83                     # there is a list of values 
    84                     vals = [] 
    85                     for y in string.split(w[0],sep=','): 
    86                         sy = string.strip(y,chars=" '\"") 
    87                         if len(sy)>0: 
    88                             vals.append(sy) 
    89                     #print atn,vals 
    90                     a, s = orange.Variable.make(atn, orange.VarTypes.Discrete, vals, [], createOnNew) 
    91 #                    a = orange.EnumVariable(name=atn,values=vals) 
    92                 else: 
    93                     # real... 
    94                     a, s = orange.Variable.make(atn, orange.VarTypes.Continuous, [], [], createOnNew) 
    95 #                    a = orange.FloatVariable(name=atn) 
    96                      
    97                 attributes.append(a) 
    98                 attributeLoadStatus.append(s) 
    99     # generate the domain 
    100     d = orange.Domain(attributes) 
    101     lex = [] 
    102     for dd in data: 
    103         e = orange.Example(d,dd) 
    104         lex.append(e) 
    105     t = orange.ExampleTable(d,lex) 
    106     t.name = name 
    107     t.attributeLoadStatus = attributeLoadStatus 
    108     return t 
    109  
    110 def toARFF(filename,table,try_numericize=0): 
    111     t = table 
    112     if filename[-5:] == ".arff": 
    113         filename = filename[:-5] 
    114     #print filename 
    115     f = open(filename+'.arff','w') 
    116     f.write('@relation %s\n'%t.domain.classVar.name) 
    117     # attributes 
    118     ats = [i for i in t.domain.attributes] 
    119     ats.append(t.domain.classVar) 
    120     for i in ats: 
    121         real = 1 
    122         if i.varType == 1: 
    123             if try_numericize: 
    124                 # try if all values numeric 
    125                 for j in i.values: 
    126                     try: 
    127                         x = string.atof(j) 
    128                     except: 
    129                         real = 0 # failed 
    130                         break 
    131             else: 
    132                 real = 0 
    133         iname = str(i.name) 
    134         if string.find(iname," ") != -1: 
    135             iname = "'%s'"%iname 
    136         if real==1: 
    137             f.write('@attribute %s real\n'%iname) 
    138         else: 
    139             f.write('@attribute %s { '%iname) 
    140             x = [] 
    141             for j in i.values: 
    142                 s = str(j) 
    143                 if string.find(s," ") == -1: 
    144                     x.append("%s"%s) 
    145                 else: 
    146                     x.append("'%s'"%s) 
    147             for j in x[:-1]: 
    148                 f.write('%s,'%j) 
    149             f.write('%s }\n'%x[-1]) 
    150  
    151     # examples 
    152     f.write('@data\n') 
    153     for j in t: 
    154         x = [] 
    155         for i in range(len(ats)): 
    156             s = str(j[i]) 
    157             if string.find(s," ") == -1: 
    158                 x.append("%s"%s) 
    159             else: 
    160                 x.append("'%s'"%s) 
    161         for i in x[:-1]: 
    162             f.write('%s,'%i) 
    163         f.write('%s\n'%x[-1]) 
    164  
    165 def toC50(filename,table): 
    166     t = table 
    167     # export names 
    168     f = open('%s.names'%filename,'w') 
    169     f.write('%s.\n\n'%t.domain.classVar.name) 
    170     # attributes 
    171     ats = [i for i in t.domain.attributes] 
    172     ats.append(t.domain.classVar) 
    173     for i in ats: 
    174         real = 1 
    175         # try if real 
    176         if i.varType == 1 and try_numericize: 
    177             # try if all values numeric 
    178             for j in i.values: 
    179                 try: 
    180                     x = string.atof(j) 
    181                 except: 
    182                     real = 0 # failed 
    183                     break 
    184         if real==1: 
    185             f.write('%s: continuous.\n'%i.name) 
    186         else: 
    187             f.write('%s: '%i.name) 
    188             x = [] 
    189             for j in i.values: 
    190                 x.append('%s'%j) 
    191             for j in x[:-1]: 
    192                 f.write('%s,'%j) 
    193             f.write('%s.\n'%x[-1]) 
    194     # examples 
    195     f.close() 
    196      
    197     f = open('%s.data'%n,'w') 
    198     for j in t: 
    199         x = [] 
    200         for i in range(len(ats)): 
    201             x.append('%s'%j[i]) 
    202         for i in x[:-1]: 
    203             f.write('%s,'%i) 
    204         f.write('%s\n'%x[-1]) 
    205  
    206 def toR(filename,t): 
    207     if string.upper(filename[-2:]) == ".R": 
    208         filename = filename[:-2] 
    209     f = open(filename+'.R','w') 
    210  
    211     atyp = [] 
    212     aord = [] 
    213     labels = [] 
    214     as0 = [] 
    215     for a in t.domain.attributes: 
    216         as0.append(a) 
    217     as0.append(t.domain.classVar) 
    218     for a in as0: 
    219         labels.append(str(a.name)) 
    220         atyp.append(a.varType) 
    221         aord.append(a.ordered) 
    222  
    223     f.write('data <- data.frame(\n') 
    224     for i in xrange(len(labels)): 
    225         if atyp[i] == 2: # continuous 
    226             f.write('"%s" = c('%(labels[i])) 
    227             for j in xrange(len(t)): 
    228                 if t[j][i].isSpecial(): 
    229                     f.write('NA') 
    230                 else: 
    231                     f.write(str(t[j][i])) 
    232                 if (j == len(t)-1): 
    233                     f.write(')') 
    234                 else: 
    235                     f.write(',') 
    236         elif atyp[i] == 1: # discrete 
    237             if aord[i]: # ordered 
    238                 f.write('"%s" = ordered('%labels[i]) 
    239             else: 
    240                 f.write('"%s" = factor('%labels[i]) 
    241             f.write('levels=c(') 
    242             for j in xrange(len(as0[i].values)): 
    243                 f.write('"x%s"'%(as0[i].values[j])) 
    244                 if j == len(as0[i].values)-1: 
    245                     f.write('),c(') 
    246                 else: 
    247                     f.write(',') 
    248             for j in xrange(len(t)): 
    249                 if t[j][i].isSpecial(): 
    250                     f.write('NA') 
    251                 else: 
    252                     f.write('"x%s"'%str(t[j][i])) 
    253                 if (j == len(t)-1): 
    254                     f.write('))') 
    255                 else: 
    256                     f.write(',') 
    257         else: 
    258             raise "Unknown attribute type." 
    259         if (i < len(labels)-1): 
    260             f.write(',\n') 
    261     f.write(')\n') 
    262      
    263 def toLibSVM(filename, example): 
    264     import orngSVM 
    265     orngSVM.exampleTableToSVMFormat(example, open(filename, "wb")) 
    266      
    267 def loadLibSVM(filename, createOnNew=orange.Variable.MakeStatus.Incompatible, **kwargs): 
    268     attributeLoadStatus = {} 
    269     def make_float(name): 
    270         attr, s = orange.Variable.make(name, orange.VarTypes.Continuous, [], [], createOnNew) 
    271         attributeLoadStatus[attr] = s 
    272         return attr 
    273      
    274     def make_disc(name, unordered): 
    275         attr, s = orange.Variable.make(name, orange.VarTypes.Discrete, [], unordered, createOnNew) 
    276         attributeLoadStatus[attr] = s 
    277         return attr 
    278      
    279     data = [line.split() for line in open(filename, "rb").read().splitlines() if line.strip()] 
    280     vars = type("attr", (dict,), {"__missing__": lambda self, key: self.setdefault(key, make_float(key))})() 
    281     item = lambda i, v: (vars[i], vars[i](v)) 
    282     values = [dict([item(*val.split(":"))  for val in ex[1:]]) for ex in data] 
    283     classes = [ex[0] for ex in data] 
    284     disc = all(["." not in c for c in classes]) 
    285     attributes = sorted(vars.values(), key=lambda var: int(var.name)) 
    286     classVar = make_disc("class", sorted(set(classes))) if disc else make_float("target") 
    287     attributeLoadStatus = [attributeLoadStatus[attr] for attr in attributes] + \ 
    288                           [attributeLoadStatus[classVar]] 
    289     domain = orange.Domain(attributes, classVar) 
    290     table = orange.ExampleTable([orange.Example(domain, [ex.get(attr, attr("?")) for attr in attributes] + [c]) for ex, c in zip(values, classes)]) 
    291     table.attributeLoadStatus = attributeLoadStatus 
    292     return table 
    293  
    294 orange.registerFileType("R", None, toR, ".R") 
    295 orange.registerFileType("Weka", loadARFF, toARFF, ".arff") 
    296 orange.registerFileType("C50", None, toC50, [".names", ".data", ".test"]) 
    297 orange.registerFileType("libSVM", loadLibSVM, toLibSVM, ".svm") 
     1from Orange.data.io import \ 
     2    toARFF, loadARFF, \ 
     3    toC50, \ 
     4    toR, \ 
     5    toLibSVM, loadLibSVM 
Note: See TracChangeset for help on using the changeset viewer.