10 def __init__(self, srcdir):
11 # eats the whole directory
12 datafilenames = glob('%s/*.json' % srcdir)
13 for dfn in datafilenames:
14 rawdata = json.load(open(dfn))
15 self[rawdata['timestamp']] = rawdata
17 def get_unique(self, key):
18 # return a set of all (unique) values for a field id
20 for d in self.values():
23 if isinstance(el, list):
26 uniq = uniq.union((el,))
29 def get_not_none(self, key):
30 # return a list of all values of a specific field id
31 # the second return value is count of submission that did not have data
35 for d in self.values():
38 if isinstance(el, list):
49 def get_counts(self, key):
50 # return a dict with field values as keys and respective submission
52 vals = self.get_not_none(key)[0]
53 uniq = np.unique(vals)
54 counts = dict(zip(uniq, [vals.count(u) for u in uniq]))
57 def select_match(self, key, values):
58 # return a db with all submissions were a field id has one of the
61 for k, v in self.items():
65 if isinstance(el, list):
66 if len(set(values).intersection(el)):
74 def load_list2dict(name):
79 d[kv[0]] = kv[1].strip().strip('"')
82 def mkpic_submissions_per_datamod(db, destdir):
84 dmd = load_list2dict('datamodlist.txt')
85 spd = db.get_counts('bg_datamod')
86 spd = sorted(spd.items(), cmp=lambda x, y: cmp(x[1], y[1]))[::-1]
87 x = np.arange(len(spd))
88 pl.figure(figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k')
89 pl.title('Data modality')
90 pl.bar(x, [s[1] for s in spd])
91 pl.xticks(x + 0.5, [dmd[k[0]] for k in spd], rotation=-15)
92 pl.ylabel('Survey submissions per data modality\n(multiple choices per submission possible)')
93 pl.savefig('%s/submissions_per_datamod.png' % destdir, format='png')
95 def main(srcdir, destdir):
97 mkpic_submissions_per_datamod(db, destdir)
99 if __name__ == '__main__':
100 main(sys.argv[1], sys.argv[2])