diff options
author | Florian Jung <flo@windfisch.org> | 2015-08-29 01:44:20 +0200 |
---|---|---|
committer | Florian Jung <flo@windfisch.org> | 2015-08-29 01:44:20 +0200 |
commit | 165dd4185804718ca874a84960f1eb66a8c6c4cb (patch) | |
tree | 1a725b77685889e968a8fb0188f019671ab9b14c | |
parent | 8b2d517c91eac25234894c2969e3b7d792bcd838 (diff) |
better analyzing magic for ejects/splits
-rw-r--r-- | analyze.py | 3 | ||||
-rw-r--r-- | stats.py | 56 |
2 files changed, 53 insertions, 6 deletions
@@ -13,8 +13,9 @@ for f in files[1:]: s.analyze_speed() print("\n" + "-"*40 + "\n") -s.analyze_visible_window(True) +#s.analyze_visible_window(True) for i in ["split cell", "ejected mass", "virus"]: s.analyze_deviations(i) +print("") for i in ["split cell", "ejected mass", "virus"]: s.analyze_distances(i) @@ -19,7 +19,19 @@ def quantile(values, q): if isinstance(values, dict): return quantile(flatten(map(lambda x : [x[0]]*x[1], sorted(values.items(),key=lambda x:x[0]))), q) else: - return values[ int(len(values)*q) ] + try: + return sorted(values)[ int(len(values)*q) ] + except: + return 0 + +def find_smallest_q_confidence_area(values, q): + try: + mid = min(values, key = lambda value : quantile(list(map(lambda x : abs(x-value), values)), q)) + deviation = quantile(list(map(lambda x : abs(x-mid), values)),q) + #print(list(map(lambda x : abs(x-mid), values))) + return mid,deviation + except: + return 0,0 def avg(values): if not isinstance(values, dict): @@ -220,6 +232,12 @@ class Stats: for j in data2.size_vs_speed[i]: self.data.size_vs_speed[i][j] += data2.size_vs_speed[i][j] + for i in data2.eject_deviations: + self.data.eject_deviations[i] += data2.eject_deviations[i] + + for i in data2.eject_distlogs: + self.data.eject_distlogs[i] += data2.eject_distlogs[i] + def analyze_speed(self): @@ -289,11 +307,13 @@ class Stats: def analyze_visible_window(self, verbose=False): for ncells in sorted(self.data.size_vs_visible_window.keys()): - print("\nwith "+str(ncells)+" cells, depending on sum(size)") - self.analyze_visible_window_helper(self.data.size_vs_visible_window[ncells], verbose) + if len(self.data.size_vs_visible_window[ncells]) > 0: + print("\nwith "+str(ncells)+" cells, depending on sum(size)") + self.analyze_visible_window_helper(self.data.size_vs_visible_window[ncells], verbose) for ncells in sorted(self.data.mass_vs_visible_window.keys()): - print("\nwith "+str(ncells)+" cells, depending on sum(mass)") - self.analyze_visible_window_helper(self.data.mass_vs_visible_window[ncells], verbose) + if len(self.data.mass_vs_visible_window[ncells]) > 0: + print("\nwith "+str(ncells)+" cells, depending on sum(mass)") + self.analyze_visible_window_helper(self.data.mass_vs_visible_window[ncells], verbose) def analyze_deviations(self, celltype): ds = self.data.eject_deviations[celltype] @@ -303,7 +323,18 @@ class Stats: except: mean, stddev = "???", "???" + + quant = quantile(list(map(abs, ds)), 0.75) + print(celltype+" eject/split direction deviations: mean = "+str(mean)+", stddev="+str(stddev)+", ndata="+str(len(ds))) + print("\t75%% of the splits had a deviation smaller than %.2f rad = %.2f deg" % (quant, quant*180/math.pi)) + print("") + + + #a,b = numpy.histogram(ds, bins=100) + #midpoints = map(lambda x : (x[0]+x[1])/2, zip(b, b[1:])) + #for n,x in zip(a,midpoints): + # print(str(n) + "\t" + str(x)) def analyze_distances(self, celltype): ds = [v[0] for v in self.data.eject_distlogs[celltype]] @@ -314,3 +345,18 @@ class Stats: mean, stddev = "???", "???" print(celltype+" eject/split distances: mean = "+str(mean)+", stddev="+str(stddev)+", ndata="+str(len(ds))) + + #a,b = numpy.histogram(ds, bins=100) + #midpoints = list(map(lambda x : (x[0]+x[1])/2, zip(b, b[1:]))) + #for n,x in zip(a,midpoints): + # print(str(n) + "\t" + str(x)) + + #maxidx = max(range(0,len(a)), key = lambda i : a[i]) + #print("\tmaximum at "+str(midpoints[maxidx])) + + #q = 75 if celltype == "ejected mass" else 75 + #quant = quantile(list(map(lambda v : abs(v-midpoints[maxidx]), ds)), q/100) + #print("\t"+str(q)+"% of values lie have a distance of at most "+str(quant)+" from the maximum") + + print("\t75%% of the values lie in the interval %.2f plusminus %.2f" % find_smallest_q_confidence_area(ds, 0.75)) + print("") |