diff --git a/cluster_stat.py b/cluster_stat.py index cd9cb4c..b64b78a 100644 --- a/cluster_stat.py +++ b/cluster_stat.py @@ -2,22 +2,28 @@ 统计所有的连通子图规模 """ import csv +import json import numpy as np from collections import Counter from island.matches import Matches from island.match import Match +from matplotlib import pyplot as plt class ClusterStat: - def __init__(self): + def __init__(self, cb): self.detail = {} # self.matches = Matches.from_profile_expr(lambda r: True) self.matches = Matches.from_profile('SURVIVE') + self.life = {} # key(size), value(list of cluster-life) + self.cluster_born = cb def stat(self): for m in self.matches.data: cluster = {} + dick = {} no = 0 + cluster_life = {} for r in m.query('player','join').raw_data: cluster[r['pid']] = no no += 1 @@ -27,10 +33,50 @@ class ClusterStat: cmax, cmin = cluster[r['b']], cluster[r['a']] else: cmax, cmin = cluster[r['a']], cluster[r['b']] - lmax = [k for (k,v) in cluster.items() if v == cmax] - for k in lmax: - cluster[k] = cmin - res = [v for v in Counter(cluster.values()).values()] + if self.cluster_born == 1 or ((cmin,cmax) in dick and dick[(cmin,cmax)] > self.cluster_born - 1): + #link + lmax = [k for (k,v) in cluster.items() if v == cmax] + for k in lmax: + cluster[k] = cmin + else: + if (cmin, cmax) not in dick: + dick[(cmin, cmax)] = 1 + else: + dick[(cmin, cmax)] += 1 + info = m.query('game', 'created').select('info').first()['info'] + conf = json.loads(info['config']) + game_end_at = int(info['game_end_at']) + foods = {} + for p in m.query('player', 'join').select('pid').raw_data: + foods[p['pid']] = conf['start_resource'] + + for i in range(1, game_end_at + 1): + for a in m.query('action', 'done').where(lambda x: x['rno'] == i).raw_data: + foods[a['a']] += conf['payoffs']["%s%s" % (a['act_a'], a['act_b'])][0] * a['tr'] / 1440.0 + foods[a['b']] += conf['payoffs']["%s%s" % (a['act_a'], a['act_b'])][1] * a['tr'] / 1440.0 + for j in foods.keys(): + foods[j] -= conf['rounds']['consumption'] + for k,v in foods.items(): + if -10 < v <= 0: + if cluster[k] in cluster_life: + if cluster_life[cluster[k]] < i: + cluster_life[cluster[k]] = i + else: + cluster_life[cluster[k]] = i + foods[k] = -1000 + for k,v in foods.items(): + if v >= 0: + if cluster[k] in cluster_life: + if cluster_life[cluster[k]] < game_end_at: + cluster_life[cluster[k]] = game_end_at + else: + cluster_life[cluster[k]] = game_end_at + counter = Counter(cluster.values()) + for k,v in counter.items(): + if v not in self.life: + self.life[v] = [] + self.life[v].append(cluster_life[k]) + res = [v for v in counter.values()] # print(m.name, list(sorted(res, reverse=True))) self.detail[m.name] = res @@ -44,10 +90,13 @@ class ClusterStat: for d in data: res[d-1] += d res /= s - print(res) + # print(res) np.save('outputs/cluster.npy', res) + with open("outputs/cluster_life_%d.json" % self.cluster_born, 'w') as f: + json.dump(self.life, f) if __name__ == '__main__': - c = ClusterStat() - c.stat() - c.output() \ No newline at end of file + for i in range(1, 10): + c = ClusterStat(i) + c.stat() + c.output() diff --git a/outputs/cluster.npy b/outputs/cluster.npy index 81c0287..e3f651e 100644 Binary files a/outputs/cluster.npy and b/outputs/cluster.npy differ diff --git a/outputs/cluster_life_1.json b/outputs/cluster_life_1.json new file mode 100644 index 0000000..ce20f69 --- /dev/null +++ b/outputs/cluster_life_1.json @@ -0,0 +1 @@ +{"4": [13, 15, 6, 10, 10, 10, 12, 6, 14, 7, 12, 11, 7, 12, 10, 10, 8, 8, 15, 5], "3": [3, 6, 14, 2, 4, 7, 6, 11, 5, 5, 13, 5, 7, 5, 10, 9, 10, 11, 4, 4], "1": [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], "14": [7], "2": [13, 14, 6, 12, 12, 8, 12, 4, 12, 5, 4, 7, 11, 10, 10, 10, 6, 12, 4, 14, 13, 9, 10, 10, 12, 12, 5, 12, 2, 13, 14, 11, 14, 4, 6, 13, 13, 13, 7, 12, 12, 7, 4, 12, 12, 11, 7, 4, 9, 10, 6, 7, 4, 5, 10, 10, 10, 6, 5, 14, 7, 14, 12, 4, 13, 13, 13, 6, 10, 10, 10, 8, 4, 12, 5, 10, 10, 10, 4, 4, 11, 11, 11, 4, 11, 11, 11, 11, 11, 11, 8, 14, 4, 10, 10, 6, 10, 9, 10, 10, 4, 4, 10, 10, 10, 10, 5, 10, 2, 10, 10, 13, 12, 11, 2, 10, 4, 10, 10, 14, 2, 4, 3, 4, 11, 11, 11, 11, 11], "17": [6], "12": [4, 5], "10": [7], "7": [11, 5], "6": [6, 7, 12, 5, 15, 9, 5], "8": [8, 10, 6], "5": [9, 4, 5, 14, 4, 5, 5, 4], "11": [15], "9": [10, 7]} \ No newline at end of file diff --git a/outputs/cluster_life_2.json b/outputs/cluster_life_2.json new file mode 100644 index 0000000..723845c --- /dev/null +++ b/outputs/cluster_life_2.json @@ -0,0 +1 @@ +{"2": [12, 13, 7, 13, 5, 6, 14, 3, 6, 4, 6, 12, 5, 12, 14, 6, 11, 8, 15, 6, 10, 7, 12, 12, 5, 6, 6, 2, 7, 11, 8, 10, 10, 10, 10, 9, 7, 6, 12, 12, 14, 13, 6, 9, 10, 10, 12, 12, 5, 12, 13, 14, 15, 15, 10, 11, 15, 14, 10, 5, 6, 7, 13, 13, 13, 5, 7, 12, 7, 12, 6, 7, 12, 12, 11, 7, 11, 9, 10, 6, 7, 10, 10, 9, 4, 10, 14, 14, 6, 14, 14, 5, 14, 7, 14, 12, 13, 13, 13, 13, 6, 10, 10, 10, 8, 7, 12, 12, 8, 10, 10, 10, 11, 11, 11, 7, 11, 11, 11, 11, 11, 11, 11, 7, 8, 11, 12, 11, 14, 10, 10, 6, 10, 9, 10, 9, 10, 10, 10, 10, 10, 5, 10, 10, 10, 10, 10, 10, 10, 8, 13, 8, 11, 12, 11, 10, 10, 10, 14, 15, 15, 11, 11, 11, 11, 11], "1": [3, 3, 2, 2, 2, 3, 3, 2, 4, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 4, 2, 2, 3, 2, 2, 3, 3, 4, 2, 3, 2, 3, 3, 3, 2, 2, 3, 3, 2, 3, 3, 2, 3, 2, 4, 2, 2, 2, 3, 2, 2, 4, 3, 3, 4, 3, 3, 3, 5, 2, 2, 2, 2, 2, 4, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 3, 2, 4, 2, 2, 2, 2, 2, 2, 2, 6, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 3, 3, 2, 2, 4, 2, 4, 2, 4, 2, 2, 3, 3, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 7, 2, 3, 2, 2, 2, 4, 2, 4, 2, 4, 2, 3, 4, 4, 4, 2, 4, 2, 2, 2, 3, 2, 3, 2, 2, 2, 2, 2, 2, 4, 2, 3, 5, 3, 4, 3, 6, 2, 2, 4, 2, 2, 4, 2, 5, 3, 5, 3, 2, 4, 3, 2, 6, 2, 2, 2, 4, 2, 2, 2, 4, 2, 5, 3, 2, 2, 4, 5, 2, 2, 3, 5, 2, 2, 2, 4, 2, 3, 2, 2, 2, 2, 3, 2, 4, 2, 2, 2, 2, 5, 2, 5, 2, 4, 4, 3, 4, 4, 2, 2, 3, 2, 2, 4, 2, 4, 2, 4, 2, 2, 4, 2, 3, 2, 2, 5, 2, 4, 4, 2, 4, 2, 2, 2, 2, 4, 2, 2, 2, 2, 3, 3, 5, 5, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 4, 2, 2, 2, 4, 2, 4, 2, 3, 2, 2, 4, 4, 2, 2, 3, 2, 2, 2, 2, 2, 3, 2, 2, 5, 4, 2, 2, 2, 2, 5, 2, 5, 5, 2, 2, 2, 2, 2, 4, 3, 2, 2, 2, 5, 3, 2, 2, 2, 2, 4, 2, 2, 2, 2, 5, 2, 2, 4, 2, 2, 4, 2, 2, 2, 2, 4, 2, 2, 2, 2, 4, 2, 2, 2, 3, 4, 2, 2, 2], "3": [4, 7, 14, 10], "5": [4], "4": [10, 12]} \ No newline at end of file diff --git a/outputs/cluster_life_3.json b/outputs/cluster_life_3.json new file mode 100644 index 0000000..7f12eb1 --- /dev/null +++ b/outputs/cluster_life_3.json @@ -0,0 +1 @@ +{"2": [12, 13, 7, 13, 6, 14, 6, 6, 12, 12, 14, 6, 11, 8, 15, 10, 7, 12, 12, 10, 5, 10, 6, 2, 7, 11, 8, 10, 10, 10, 10, 9, 7, 6, 12, 12, 14, 13, 6, 9, 10, 10, 12, 12, 12, 13, 14, 15, 15, 10, 11, 15, 14, 10, 5, 6, 7, 13, 13, 13, 7, 12, 7, 12, 6, 7, 12, 12, 11, 7, 11, 9, 10, 6, 7, 10, 10, 9, 10, 14, 14, 6, 14, 14, 14, 7, 14, 12, 13, 13, 13, 13, 6, 10, 10, 10, 8, 12, 12, 8, 10, 10, 10, 11, 11, 11, 7, 11, 11, 11, 11, 11, 11, 11, 7, 8, 11, 12, 11, 14, 10, 10, 6, 10, 9, 10, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 8, 13, 8, 11, 12, 11, 10, 10, 10, 14, 15, 15, 11, 11, 11, 11, 11], "1": [3, 3, 2, 2, 2, 3, 3, 3, 2, 4, 4, 3, 2, 2, 5, 3, 2, 3, 2, 2, 2, 2, 2, 3, 4, 3, 4, 2, 3, 2, 3, 3, 3, 2, 2, 3, 3, 4, 2, 3, 2, 3, 3, 3, 3, 4, 2, 2, 3, 3, 2, 4, 3, 3, 2, 3, 3, 2, 3, 4, 5, 2, 2, 2, 3, 2, 2, 4, 3, 3, 4, 3, 3, 6, 3, 5, 2, 5, 2, 2, 2, 2, 4, 2, 6, 2, 2, 4, 2, 3, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 3, 2, 4, 2, 2, 2, 2, 2, 2, 2, 6, 4, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, 4, 2, 2, 3, 3, 2, 2, 4, 2, 4, 2, 4, 2, 2, 3, 3, 5, 2, 2, 5, 2, 4, 2, 2, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 7, 2, 3, 2, 2, 2, 4, 2, 4, 2, 4, 2, 3, 4, 4, 4, 2, 4, 2, 2, 2, 3, 2, 3, 2, 2, 2, 2, 2, 4, 2, 5, 4, 2, 3, 5, 3, 4, 3, 6, 2, 2, 4, 2, 2, 4, 2, 5, 3, 5, 3, 2, 4, 3, 2, 6, 2, 2, 2, 4, 2, 2, 2, 4, 2, 5, 3, 2, 2, 4, 4, 4, 5, 2, 2, 3, 5, 2, 2, 4, 2, 5, 4, 2, 3, 2, 2, 2, 5, 2, 7, 3, 2, 4, 2, 2, 2, 2, 5, 2, 5, 2, 4, 4, 3, 4, 4, 2, 2, 3, 2, 2, 4, 2, 4, 2, 4, 2, 2, 4, 2, 3, 2, 2, 5, 2, 4, 4, 2, 4, 2, 2, 2, 2, 4, 2, 2, 2, 2, 3, 3, 5, 5, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 4, 2, 2, 2, 4, 4, 5, 2, 4, 2, 3, 2, 2, 4, 4, 2, 2, 3, 2, 2, 2, 2, 2, 3, 2, 2, 5, 4, 2, 2, 2, 2, 5, 2, 5, 5, 2, 2, 2, 2, 2, 4, 3, 2, 2, 2, 5, 3, 2, 2, 2, 2, 4, 2, 2, 2, 2, 5, 2, 2, 4, 2, 2, 4, 2, 2, 2, 2, 4, 2, 2, 2, 2, 4, 2, 2, 2, 3, 4, 2, 2, 2], "3": [7, 14, 12, 10]} \ No newline at end of file diff --git a/outputs/cluster_life_4.json b/outputs/cluster_life_4.json new file mode 100644 index 0000000..07ccb04 --- /dev/null +++ b/outputs/cluster_life_4.json @@ -0,0 +1 @@ +{"2": [12, 13, 7, 13, 14, 6, 12, 12, 14, 6, 11, 8, 15, 10, 7, 12, 12, 10, 10, 7, 11, 10, 10, 10, 10, 7, 6, 12, 12, 14, 13, 6, 9, 10, 10, 12, 12, 12, 13, 14, 15, 15, 10, 11, 15, 14, 10, 6, 7, 13, 13, 13, 7, 12, 7, 12, 6, 7, 12, 12, 11, 7, 11, 9, 10, 7, 10, 10, 9, 10, 14, 14, 14, 14, 14, 7, 14, 12, 13, 13, 13, 13, 10, 10, 10, 8, 12, 12, 8, 10, 10, 10, 11, 11, 11, 7, 11, 11, 11, 11, 11, 11, 11, 8, 11, 12, 11, 14, 10, 10, 6, 10, 9, 10, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 8, 13, 8, 11, 12, 11, 10, 10, 10, 14, 15, 15, 11, 11, 11, 11, 11], "1": [3, 3, 2, 2, 2, 3, 3, 3, 2, 4, 4, 3, 2, 2, 5, 3, 2, 3, 2, 2, 2, 2, 2, 6, 5, 3, 4, 3, 4, 2, 3, 2, 3, 3, 3, 2, 2, 3, 3, 4, 2, 3, 2, 3, 3, 3, 3, 4, 2, 2, 3, 3, 2, 4, 3, 3, 2, 3, 3, 6, 2, 3, 6, 4, 5, 2, 2, 5, 5, 2, 3, 2, 2, 7, 4, 3, 3, 4, 3, 3, 6, 3, 5, 2, 5, 2, 2, 2, 2, 5, 4, 5, 2, 6, 6, 2, 6, 2, 2, 4, 2, 3, 2, 2, 2, 2, 2, 2, 4, 5, 2, 2, 2, 2, 8, 3, 2, 4, 2, 2, 2, 2, 2, 9, 2, 2, 7, 6, 4, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, 4, 2, 2, 3, 3, 2, 2, 4, 2, 4, 2, 4, 2, 2, 3, 3, 5, 2, 2, 5, 2, 4, 2, 2, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 7, 2, 3, 2, 2, 2, 4, 2, 4, 2, 4, 2, 3, 4, 4, 4, 2, 4, 2, 2, 4, 2, 5, 3, 2, 3, 2, 2, 2, 2, 2, 4, 2, 5, 4, 2, 3, 5, 3, 4, 3, 6, 2, 2, 4, 2, 2, 4, 2, 5, 3, 5, 3, 2, 4, 3, 2, 6, 2, 2, 2, 4, 6, 6, 2, 2, 2, 4, 2, 5, 3, 2, 2, 4, 4, 4, 5, 2, 2, 5, 3, 6, 5, 2, 2, 4, 2, 5, 4, 2, 3, 2, 6, 6, 2, 2, 5, 2, 7, 3, 2, 4, 2, 2, 2, 2, 5, 2, 5, 2, 4, 4, 3, 4, 4, 2, 2, 3, 2, 2, 4, 2, 4, 2, 4, 2, 2, 4, 2, 3, 7, 2, 6, 2, 5, 2, 4, 4, 2, 4, 2, 2, 2, 2, 4, 2, 2, 2, 2, 3, 3, 5, 5, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 4, 2, 2, 2, 4, 4, 5, 2, 4, 2, 3, 2, 2, 4, 4, 2, 2, 3, 2, 2, 2, 2, 2, 3, 2, 2, 5, 4, 2, 2, 2, 2, 5, 2, 5, 5, 2, 2, 2, 2, 2, 4, 3, 2, 2, 2, 5, 3, 2, 2, 2, 2, 4, 2, 2, 2, 2, 5, 2, 2, 4, 2, 2, 4, 2, 2, 2, 2, 4, 2, 2, 2, 2, 4, 2, 2, 2, 3, 4, 2, 2, 2], "3": [14, 12, 10]} \ No newline at end of file diff --git a/outputs/cluster_life_5.json b/outputs/cluster_life_5.json new file mode 100644 index 0000000..4da9526 --- /dev/null +++ b/outputs/cluster_life_5.json @@ -0,0 +1 @@ +{"2": [12, 13, 13, 14, 12, 12, 14, 11, 15, 10, 12, 12, 10, 11, 10, 10, 10, 10, 12, 12, 12, 14, 13, 9, 10, 10, 12, 12, 12, 13, 14, 15, 15, 10, 11, 15, 14, 10, 7, 13, 13, 13, 7, 12, 7, 12, 7, 12, 12, 11, 11, 9, 10, 7, 10, 10, 9, 10, 14, 14, 14, 14, 14, 7, 14, 12, 13, 13, 13, 13, 10, 10, 10, 8, 12, 12, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 8, 11, 12, 11, 14, 10, 10, 10, 9, 10, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 11, 12, 11, 10, 10, 10, 14, 15, 15, 11, 11, 11, 11, 11], "1": [3, 3, 2, 2, 2, 3, 3, 3, 5, 2, 4, 4, 3, 2, 2, 7, 5, 3, 2, 3, 2, 2, 2, 2, 2, 6, 5, 3, 4, 3, 4, 2, 3, 2, 3, 3, 3, 2, 2, 3, 3, 4, 2, 3, 2, 3, 3, 3, 3, 6, 4, 2, 2, 3, 3, 2, 4, 3, 3, 2, 3, 6, 3, 6, 2, 3, 6, 4, 5, 2, 2, 5, 5, 2, 3, 2, 2, 7, 4, 3, 6, 8, 3, 5, 4, 3, 3, 6, 6, 3, 5, 2, 5, 6, 2, 7, 2, 2, 2, 10, 5, 4, 5, 6, 2, 6, 6, 2, 6, 2, 2, 4, 2, 3, 2, 2, 2, 2, 2, 2, 7, 6, 4, 5, 2, 2, 2, 2, 8, 3, 2, 4, 2, 2, 2, 2, 2, 9, 2, 2, 7, 6, 6, 6, 4, 7, 2, 6, 2, 2, 2, 2, 2, 2, 6, 2, 5, 2, 2, 4, 5, 6, 2, 2, 3, 3, 2, 2, 4, 2, 4, 2, 4, 2, 2, 3, 3, 5, 2, 2, 5, 2, 4, 2, 2, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 7, 2, 3, 2, 2, 2, 4, 2, 4, 2, 4, 2, 3, 4, 4, 4, 2, 4, 2, 2, 4, 2, 5, 3, 2, 3, 2, 2, 6, 6, 2, 2, 2, 4, 2, 5, 4, 2, 3, 5, 3, 4, 3, 6, 2, 6, 2, 4, 6, 2, 2, 4, 2, 5, 7, 3, 5, 3, 5, 2, 4, 3, 2, 6, 2, 2, 2, 4, 6, 6, 2, 2, 2, 4, 2, 5, 3, 2, 2, 4, 4, 4, 5, 2, 2, 5, 3, 6, 5, 2, 2, 4, 2, 5, 4, 2, 3, 2, 6, 6, 2, 2, 5, 2, 7, 3, 2, 4, 2, 6, 2, 8, 2, 2, 5, 2, 5, 2, 4, 4, 3, 4, 4, 2, 2, 3, 6, 7, 2, 2, 4, 2, 4, 2, 4, 2, 2, 4, 2, 3, 7, 2, 6, 2, 5, 2, 4, 4, 2, 4, 2, 2, 2, 2, 4, 2, 2, 2, 2, 3, 3, 5, 5, 2, 2, 2, 2, 6, 6, 2, 2, 2, 3, 2, 2, 4, 2, 2, 2, 4, 4, 5, 2, 4, 2, 3, 2, 2, 4, 4, 2, 2, 8, 3, 7, 2, 2, 2, 2, 8, 2, 6, 3, 2, 2, 5, 4, 2, 2, 2, 2, 5, 2, 5, 5, 2, 2, 2, 2, 2, 4, 3, 2, 2, 2, 5, 3, 2, 2, 2, 2, 4, 2, 2, 2, 2, 5, 2, 2, 4, 2, 2, 4, 2, 2, 2, 2, 4, 2, 2, 2, 2, 4, 2, 2, 2, 3, 4, 2, 2, 2], "3": [14, 10]} \ No newline at end of file diff --git a/outputs/cluster_life_6.json b/outputs/cluster_life_6.json new file mode 100644 index 0000000..9783f0b --- /dev/null +++ b/outputs/cluster_life_6.json @@ -0,0 +1 @@ +{"2": [12, 13, 13, 14, 12, 12, 14, 11, 15, 12, 12, 11, 10, 10, 10, 10, 12, 12, 12, 14, 13, 9, 10, 10, 12, 12, 12, 13, 14, 15, 15, 10, 11, 15, 14, 10, 13, 13, 13, 12, 12, 12, 12, 11, 11, 9, 10, 10, 10, 10, 14, 14, 14, 14, 14, 14, 12, 13, 13, 13, 13, 10, 10, 10, 8, 12, 12, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 8, 11, 12, 11, 14, 10, 10, 10, 9, 10, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 11, 12, 11, 10, 10, 10, 14, 15, 15, 11, 11, 11, 11, 11], "1": [3, 3, 2, 2, 2, 3, 3, 3, 5, 2, 4, 4, 3, 2, 2, 7, 5, 3, 2, 3, 2, 2, 2, 2, 2, 6, 5, 3, 4, 3, 4, 2, 3, 2, 3, 3, 3, 2, 2, 3, 3, 4, 2, 3, 2, 3, 3, 3, 3, 6, 4, 2, 2, 3, 3, 2, 4, 3, 3, 2, 3, 6, 3, 6, 2, 3, 6, 4, 5, 2, 2, 5, 5, 2, 3, 2, 2, 7, 4, 3, 6, 8, 3, 5, 4, 3, 3, 6, 6, 10, 3, 5, 2, 6, 5, 6, 2, 7, 2, 2, 2, 10, 5, 10, 4, 7, 5, 6, 2, 6, 6, 2, 6, 2, 2, 4, 2, 3, 2, 2, 2, 2, 2, 2, 7, 6, 4, 5, 2, 2, 2, 2, 8, 3, 2, 4, 2, 2, 2, 2, 2, 9, 2, 2, 7, 6, 6, 6, 4, 7, 2, 6, 2, 2, 2, 2, 2, 2, 6, 2, 5, 2, 2, 4, 5, 6, 2, 2, 3, 3, 2, 2, 4, 2, 4, 2, 4, 2, 2, 3, 3, 5, 2, 2, 5, 2, 4, 2, 2, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 7, 2, 3, 2, 2, 2, 4, 2, 4, 2, 4, 2, 3, 4, 4, 4, 2, 4, 2, 2, 4, 2, 5, 3, 2, 3, 2, 2, 6, 6, 6, 7, 2, 2, 2, 4, 2, 5, 4, 2, 3, 6, 5, 3, 7, 4, 3, 7, 6, 2, 7, 6, 7, 2, 4, 6, 2, 2, 6, 4, 2, 5, 7, 3, 5, 3, 5, 2, 4, 3, 2, 6, 2, 2, 2, 4, 6, 6, 2, 7, 2, 7, 2, 4, 2, 5, 3, 2, 9, 7, 2, 4, 4, 4, 5, 2, 2, 5, 3, 6, 5, 2, 2, 4, 2, 7, 7, 5, 4, 2, 3, 2, 6, 6, 2, 2, 5, 2, 7, 3, 2, 4, 2, 6, 2, 8, 2, 2, 5, 2, 5, 2, 4, 4, 3, 4, 4, 2, 2, 3, 6, 7, 2, 2, 4, 2, 4, 2, 4, 2, 2, 4, 2, 3, 7, 2, 6, 2, 5, 2, 4, 4, 2, 4, 2, 2, 2, 2, 4, 2, 2, 2, 2, 3, 3, 5, 5, 2, 2, 2, 2, 6, 6, 2, 2, 2, 3, 2, 2, 4, 2, 2, 2, 4, 4, 5, 2, 4, 2, 3, 2, 2, 4, 4, 2, 2, 8, 3, 7, 2, 2, 2, 2, 8, 2, 6, 3, 2, 2, 5, 4, 2, 2, 2, 2, 5, 2, 5, 5, 2, 2, 2, 2, 2, 4, 3, 2, 2, 2, 5, 3, 2, 2, 2, 2, 4, 2, 2, 2, 2, 5, 2, 2, 4, 2, 2, 4, 2, 2, 2, 2, 4, 2, 2, 2, 2, 4, 2, 2, 2, 3, 4, 2, 2, 2], "3": [14, 10]} \ No newline at end of file diff --git a/outputs/cluster_life_7.json b/outputs/cluster_life_7.json new file mode 100644 index 0000000..f0d528d --- /dev/null +++ b/outputs/cluster_life_7.json @@ -0,0 +1 @@ +{"2": [12, 13, 13, 14, 12, 12, 14, 11, 15, 12, 12, 11, 10, 10, 10, 12, 12, 14, 13, 9, 10, 10, 12, 12, 12, 13, 14, 15, 15, 11, 15, 14, 13, 13, 13, 12, 12, 12, 12, 11, 11, 10, 10, 10, 10, 14, 14, 14, 14, 14, 14, 12, 13, 13, 13, 13, 10, 10, 10, 12, 12, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 14, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 11, 12, 11, 10, 10, 10, 14, 15, 15, 11, 11, 11, 11, 11], "1": [3, 3, 2, 2, 2, 3, 3, 3, 5, 2, 4, 4, 3, 2, 2, 7, 5, 3, 2, 3, 2, 2, 2, 2, 2, 6, 5, 3, 4, 3, 4, 2, 3, 2, 3, 3, 3, 2, 2, 3, 3, 4, 2, 3, 2, 3, 3, 3, 3, 6, 4, 2, 2, 3, 3, 2, 4, 3, 3, 2, 3, 6, 3, 6, 2, 3, 6, 4, 5, 2, 2, 5, 5, 2, 3, 2, 2, 7, 4, 3, 6, 8, 3, 5, 4, 3, 3, 6, 6, 10, 3, 5, 2, 6, 5, 6, 2, 7, 2, 2, 2, 10, 5, 10, 4, 7, 5, 6, 2, 6, 6, 2, 6, 2, 2, 4, 2, 3, 2, 2, 2, 2, 2, 2, 7, 6, 4, 5, 2, 10, 10, 2, 2, 2, 8, 3, 2, 4, 2, 2, 2, 2, 2, 9, 2, 2, 7, 6, 6, 6, 4, 7, 2, 6, 2, 12, 2, 2, 2, 2, 2, 12, 6, 2, 5, 2, 2, 4, 5, 6, 2, 2, 3, 3, 2, 2, 4, 2, 4, 2, 4, 2, 2, 3, 3, 5, 2, 2, 5, 2, 4, 2, 2, 2, 2, 2, 2, 4, 4, 2, 10, 2, 2, 9, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 7, 2, 3, 2, 2, 2, 4, 2, 4, 2, 4, 2, 10, 3, 4, 8, 4, 4, 2, 4, 2, 2, 4, 2, 5, 3, 2, 3, 2, 2, 6, 6, 6, 7, 2, 2, 2, 4, 2, 5, 4, 2, 3, 6, 5, 3, 7, 4, 3, 7, 6, 2, 7, 6, 7, 2, 4, 6, 2, 2, 6, 4, 2, 5, 7, 3, 5, 3, 5, 2, 4, 3, 2, 6, 2, 2, 7, 2, 9, 4, 6, 6, 2, 7, 2, 7, 2, 4, 2, 5, 3, 2, 9, 7, 2, 4, 4, 4, 5, 2, 2, 5, 3, 6, 5, 2, 2, 4, 2, 7, 7, 5, 4, 2, 3, 2, 6, 6, 2, 2, 8, 5, 2, 7, 8, 3, 2, 4, 2, 6, 2, 8, 2, 2, 5, 2, 5, 2, 4, 4, 3, 4, 4, 2, 2, 3, 6, 7, 2, 2, 4, 2, 4, 2, 4, 2, 2, 4, 2, 3, 7, 2, 8, 6, 2, 8, 5, 2, 4, 4, 2, 4, 2, 2, 2, 2, 4, 2, 2, 2, 2, 3, 3, 5, 5, 2, 2, 2, 2, 6, 6, 2, 9, 2, 9, 2, 7, 3, 7, 2, 2, 4, 2, 2, 2, 4, 4, 5, 2, 4, 2, 3, 2, 2, 4, 4, 2, 2, 8, 3, 7, 2, 2, 2, 2, 8, 2, 6, 3, 2, 2, 5, 4, 2, 2, 2, 2, 5, 2, 5, 5, 2, 2, 2, 2, 2, 4, 3, 2, 2, 2, 5, 3, 2, 2, 2, 2, 4, 2, 2, 2, 2, 5, 2, 2, 4, 2, 2, 4, 2, 2, 2, 2, 4, 2, 2, 2, 2, 4, 2, 2, 2, 3, 4, 2, 2, 2], "3": [14, 10]} \ No newline at end of file diff --git a/outputs/cluster_life_8.json b/outputs/cluster_life_8.json new file mode 100644 index 0000000..1de7bbb --- /dev/null +++ b/outputs/cluster_life_8.json @@ -0,0 +1 @@ +{"2": [12, 13, 13, 14, 12, 12, 14, 11, 15, 12, 12, 11, 10, 10, 10, 12, 12, 14, 13, 10, 10, 12, 12, 12, 13, 14, 15, 15, 11, 15, 14, 13, 13, 13, 12, 12, 12, 12, 11, 11, 10, 10, 10, 10, 14, 14, 14, 14, 14, 14, 12, 13, 13, 13, 13, 10, 10, 10, 12, 12, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 11, 14, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 11, 12, 11, 10, 10, 10, 14, 15, 15, 11, 11, 11, 11, 11], "1": [3, 3, 2, 2, 2, 3, 3, 3, 5, 2, 4, 4, 3, 2, 2, 7, 5, 3, 2, 3, 2, 2, 2, 2, 2, 6, 5, 3, 4, 3, 4, 2, 3, 2, 3, 3, 3, 2, 2, 3, 3, 4, 2, 3, 2, 3, 3, 3, 3, 6, 4, 2, 2, 3, 3, 2, 4, 3, 3, 2, 3, 6, 3, 6, 2, 3, 6, 4, 5, 2, 2, 5, 5, 2, 3, 2, 2, 7, 4, 3, 6, 8, 3, 5, 4, 3, 3, 6, 6, 10, 3, 5, 2, 6, 5, 6, 2, 7, 2, 2, 2, 10, 5, 10, 4, 7, 5, 6, 2, 6, 6, 2, 6, 2, 2, 4, 2, 3, 2, 2, 2, 2, 2, 2, 7, 6, 4, 5, 2, 10, 10, 2, 2, 2, 8, 3, 2, 4, 2, 2, 2, 2, 2, 9, 2, 2, 7, 6, 6, 6, 4, 7, 2, 6, 2, 12, 2, 2, 2, 2, 2, 12, 6, 2, 5, 2, 2, 4, 5, 6, 2, 2, 3, 3, 2, 2, 9, 4, 9, 2, 4, 2, 4, 2, 2, 3, 3, 5, 2, 2, 5, 2, 4, 2, 2, 2, 2, 2, 2, 4, 4, 2, 10, 2, 2, 9, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 7, 2, 3, 2, 2, 2, 4, 2, 4, 2, 4, 2, 10, 3, 4, 8, 4, 4, 2, 4, 2, 2, 4, 2, 5, 3, 2, 3, 2, 2, 6, 6, 6, 7, 2, 2, 2, 4, 2, 5, 4, 2, 3, 6, 5, 3, 7, 4, 3, 7, 6, 2, 7, 6, 7, 2, 4, 6, 2, 2, 6, 4, 2, 5, 7, 3, 5, 3, 5, 2, 4, 3, 2, 6, 2, 2, 7, 2, 9, 4, 6, 6, 2, 7, 2, 7, 2, 4, 2, 5, 3, 2, 9, 7, 2, 4, 4, 4, 5, 2, 2, 5, 3, 6, 5, 2, 2, 4, 2, 7, 7, 5, 4, 2, 3, 2, 6, 6, 2, 2, 8, 5, 2, 7, 8, 3, 2, 4, 2, 6, 2, 8, 2, 2, 5, 2, 5, 2, 4, 4, 3, 4, 4, 2, 2, 3, 6, 7, 2, 2, 4, 2, 4, 2, 4, 2, 2, 4, 2, 3, 7, 2, 8, 6, 2, 8, 5, 2, 4, 4, 2, 4, 2, 2, 2, 2, 4, 2, 2, 2, 2, 3, 3, 5, 5, 2, 2, 2, 2, 6, 6, 2, 9, 2, 9, 2, 7, 3, 7, 2, 2, 4, 2, 2, 2, 4, 4, 5, 2, 4, 2, 3, 2, 2, 4, 10, 4, 9, 2, 2, 8, 3, 7, 2, 2, 2, 2, 8, 2, 6, 3, 2, 2, 5, 4, 2, 2, 2, 2, 5, 2, 5, 5, 2, 2, 2, 2, 2, 4, 3, 2, 2, 2, 5, 3, 2, 2, 2, 2, 4, 2, 2, 2, 2, 5, 2, 2, 4, 2, 2, 4, 2, 2, 2, 2, 4, 2, 2, 2, 2, 4, 2, 2, 2, 3, 4, 2, 2, 2], "3": [14, 10]} \ No newline at end of file diff --git a/outputs/cluster_life_9.json b/outputs/cluster_life_9.json new file mode 100644 index 0000000..b255838 --- /dev/null +++ b/outputs/cluster_life_9.json @@ -0,0 +1 @@ +{"2": [12, 13, 13, 14, 12, 12, 14, 11, 15, 12, 12, 11, 10, 10, 12, 12, 14, 13, 10, 10, 12, 12, 12, 13, 14, 15, 15, 11, 15, 14, 13, 13, 13, 12, 12, 12, 12, 11, 11, 10, 10, 10, 10, 14, 14, 14, 14, 14, 14, 12, 13, 13, 13, 13, 10, 10, 10, 12, 12, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 11, 12, 11, 10, 10, 10, 14, 15, 15, 11, 11, 11, 11, 11], "1": [3, 3, 2, 2, 2, 3, 3, 3, 5, 2, 4, 4, 3, 2, 2, 7, 5, 3, 2, 3, 2, 2, 2, 2, 2, 6, 5, 3, 4, 3, 4, 2, 3, 2, 3, 3, 3, 2, 2, 3, 3, 4, 2, 3, 2, 3, 3, 3, 3, 6, 4, 2, 2, 3, 3, 2, 4, 3, 3, 2, 3, 6, 3, 6, 2, 3, 6, 4, 5, 2, 2, 5, 5, 2, 3, 2, 2, 7, 4, 3, 6, 8, 3, 5, 4, 3, 3, 6, 6, 10, 3, 5, 2, 6, 5, 6, 2, 7, 2, 2, 2, 10, 5, 10, 4, 7, 5, 6, 2, 6, 6, 2, 6, 2, 2, 4, 2, 3, 2, 2, 2, 2, 2, 2, 7, 6, 4, 5, 2, 10, 10, 2, 2, 2, 8, 3, 2, 4, 10, 2, 10, 2, 2, 2, 2, 9, 2, 2, 7, 6, 6, 6, 4, 7, 2, 6, 2, 12, 2, 2, 2, 2, 2, 12, 6, 2, 5, 2, 2, 4, 5, 6, 2, 2, 3, 3, 2, 2, 9, 4, 9, 2, 4, 2, 4, 2, 2, 3, 3, 5, 2, 2, 5, 2, 4, 2, 2, 2, 2, 2, 2, 4, 4, 2, 10, 2, 2, 9, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 7, 2, 3, 2, 2, 2, 4, 2, 4, 2, 4, 2, 10, 3, 4, 8, 4, 4, 2, 4, 2, 2, 4, 2, 5, 3, 2, 3, 2, 2, 6, 6, 6, 7, 2, 2, 2, 4, 2, 5, 4, 2, 3, 6, 5, 3, 7, 4, 3, 7, 6, 2, 7, 6, 7, 2, 4, 6, 2, 2, 6, 4, 2, 5, 7, 3, 5, 3, 5, 2, 4, 3, 2, 6, 2, 2, 7, 2, 9, 4, 6, 6, 2, 7, 2, 7, 2, 4, 2, 5, 3, 2, 9, 7, 2, 4, 4, 4, 5, 2, 2, 5, 3, 6, 5, 2, 2, 4, 2, 7, 7, 5, 4, 2, 3, 2, 6, 6, 2, 2, 8, 5, 2, 7, 8, 3, 2, 4, 2, 6, 2, 8, 2, 2, 5, 2, 5, 2, 4, 4, 3, 4, 4, 2, 2, 3, 6, 7, 2, 2, 4, 2, 4, 2, 4, 2, 2, 4, 2, 3, 7, 2, 8, 6, 2, 8, 5, 12, 2, 4, 4, 9, 2, 4, 2, 2, 2, 2, 4, 2, 2, 2, 2, 3, 3, 5, 5, 2, 2, 2, 2, 6, 6, 2, 9, 2, 9, 2, 7, 3, 7, 2, 2, 4, 2, 2, 2, 4, 4, 5, 2, 4, 2, 3, 2, 2, 4, 10, 4, 9, 2, 2, 8, 3, 7, 2, 2, 2, 2, 8, 2, 6, 3, 2, 2, 5, 4, 2, 2, 2, 2, 5, 2, 5, 5, 2, 2, 2, 2, 2, 4, 3, 2, 2, 2, 5, 3, 2, 2, 2, 2, 4, 2, 2, 2, 2, 5, 2, 2, 4, 2, 2, 4, 2, 2, 2, 2, 4, 2, 2, 2, 2, 4, 2, 2, 2, 3, 4, 2, 2, 2], "3": [14, 10]} \ No newline at end of file diff --git a/plot_cluster_life.py b/plot_cluster_life.py new file mode 100644 index 0000000..04ea714 --- /dev/null +++ b/plot_cluster_life.py @@ -0,0 +1,37 @@ +import json +import sys +from matplotlib import pyplot as plt +from matplotlib.patches import Polygon +import numpy as np + +if __name__ == "__main__": + cb = int(sys.argv[1]) + with open("outputs/cluster_life_%d.json" % cb) as f: + raw = json.load(f) + idx = [] + data = [] + if raw: + for k in sorted(map(int, raw.keys())): + idx.append(k) + data.append(np.array(raw[str(k)])) + fig = plt.figure(figsize=(3,3)) + ax = fig.gca() + bp = ax.boxplot(data, labels=idx)#, boxprops=dict(facecolor='lightblue')) + ax.plot(np.arange(1, len(idx)+1), [np.mean(r) for r in data], '^-', color='green', linewidth=1, alpha=0.8) + ax.set_xlabel("Cluster size") + ax.set_ylabel("Cluster life") + # for patch in bp['boxes']: + # patch.set_facecolor('lightblue') + + for i in range(len(idx)): + box = bp['boxes'][i] + boxX = [] + boxY = [] + for j in range(5): + boxX.append(box.get_xdata()[j]) + boxY.append(box.get_ydata()[j]) + boxCoords = list(zip(boxX, boxY)) + boxPolygon = Polygon(boxCoords, facecolor='lightblue') + ax.add_patch(boxPolygon) + fig.tight_layout() + plt.show()