code: def read_csv(fname):
      
      values = defaultdict(list)
      with open(fname) as f:
          reader = csv.DictReader(f)
          for row in reader:
              for (k,v) in row.items():
                  values[k].append(v)
      npvalues = {k: np.array(values[k]) for k in values.keys()}
      for k in npvalues.keys():
          for datatype in [np.int, np.float]:
              try:
                  npvalues[k][:1].astype(datatype)
                  npvalues[k] = npvalues[k].astype(datatype)
                  break
              except:
                  pass
      dao = DataAccessObject(npvalues)
      return dao
docs: Read a csv file into a DataAccessObject
  
      :param fname: filename