add rewiring rate

This commit is contained in:
wjsjwr 2018-04-06 23:25:29 +08:00
parent 042c736602
commit f0934a0fe8
2 changed files with 144 additions and 1 deletions

View File

@ -52,7 +52,7 @@ percents[0] /= _all
percents[1] /= _all
labels = ['Insufficient Time Resource', 'Sufficient Time Resource']
labels = ['Insufficient Temporal Resource', 'Sufficient Temporal Resource']
plt.figure()
plt.pie(percents, labels=labels, autopct="%1.2f%%", pctdistance=1.1, labeldistance=2,startangle=90, colors=['#00b894', '#fdcb6e'])

143
rewiring_rate.py Normal file
View File

@ -0,0 +1,143 @@
import json
from matplotlib import pyplot as plt
from island.match import Match
from island.matches import Matches
import numpy as np
import scipy as sp
from scipy.stats import pearsonr
from matplotlib import markers
def error(f,x,y):
return sp.sum((f(x)-y)**2)
if __name__ == '__main__':
matches = Matches('wos-data-new')
max_round = 15
survivals = {}
with open('survivals.json', 'r') as f:
survivals = json.load(f)
neighbors = {}
rewires = []
x = np.arange(1, max_round)
mwRe = {} # Match-wise frequency of rewiring
mwTau = {} # Match-wise Tau
tau = []
for i in range(len(matches.data)):
m = matches.data[i]
n = {}
for r in m.query('neighbor', 'create').raw_data:
if r['a'] in n:
n[r['a']].append(r['b'])
else:
n[r['a']] = [r['b']]
if r['b'] in n:
n[r['b']].append(r['a'])
else:
n[r['b']] = [r['a']]
neighbors[matches.names[i]] = n
for i in range(max_round):
re = []
for j in range(len(matches.data)):
rewire = 0
rows = matches.data[j].query('action', 'done').where(lambda x: x['rno']==i+1).raw_data
for r in rows:
if matches.data[j].query('action', 'done').where(lambda x: x['rno']==i and ((x['a']==r['a'] and x['b']==r['b']) or (x['a']==r['b'] and x['b']==r['a']))).count() == 0:
rewire += 1
if rows:
re.append(float(rewire) / float(len(rows)*2))
mwRe["%s-%d"%(j,i)] = re[-1]
if re:
rewires.append(np.average(re))
for i in range(max_round-1):
tp = []
for j in range(len(matches.data)):
if i == 0:
for r in matches.data[j].query('player', 'join').raw_data:
t = 0
k = r['pid']
if k not in neighbors[matches.names[j]]:
print("[%s(%d)] alone: %d" % (matches.names[j], i+1, k))
else:
t = 1440 * len(neighbors[matches.names[j]][k])
tp.append(t if t < 1440 else 1440)
mwTau["%s-%d"%(j,i)] = tp[-1]
else:
if str(i) not in survivals[matches.names[j]]:
continue
for k in survivals[matches.names[j]][str(i)]:
t = 0
if k not in neighbors[matches.names[j]]:
print("[%s(%d)] alone: %d" % (matches.names[j], i+1, k))
else:
trs = matches.data[j].get_tr(i, k, neighbors[matches.names[j]][k], survivals[matches.names[j]][str(i)])
for l in neighbors[matches.names[j]][k]:
if l in trs:
t += trs[l]
tp.append(t if t < 1440 else 1440)
mwTau["%s-%d"%(j,i)] = tp[-1]
if tp:
tau.append(np.average(tp))
else:
tau.append(0)
green = '#00b894'
red = '#d63031'
# p1折线图
# fig = plt.figure(figsize=(6.4, 3.6))
# ax = fig.gca()
# ax.plot(x, rewires, color=green, linewidth=3)
# ax.set_ylim(0, 0.5)
# ax2 = ax.twinx()
# ax2.plot(x, tau, color=red, linewidth=3)
# ax2.set_ylim(0,1440)
# ax.set_xlim(1,14)
# ax.set_xlabel("Rounds")
# ax.set_ylabel("Rewiring Rate", color=green)
# ax.tick_params(axis='y', labelcolor=green)
# ax2.set_ylabel("$\\tau_{p}$", family='sans-serif', color=red)
# ax2.tick_params(axis='y', labelcolor=red)
# plt.tight_layout()
# # plt.show()
# plt.savefig('graph/tau_p_rewire_plot.eps')
# # p2散点图
fig = plt.figure(figsize=(6.4, 3.6))
ax = fig.gca()
# ax.set_ylim(0.5, 1)
fp1,residuals,rank,sv,rcond = sp.polyfit(tau, rewires, 1, full=True)
print("残差:",residuals)
print('Model parameter:',fp1)
f1 = sp.poly1d(fp1)
print("error= %f" % error(f1, tau, rewires))
# fx = sp.linspace(0,max(tau2),1000)
fx = sp.linspace(0,1440,2)
plt.plot(fx,f1(fx),linewidth=2,color=red, ls='--', zorder=0)
plt.scatter(tau, rewires, color=green, linewidths=2, zorder=100)
# plt.scatter(tau_r, coopr_r, color='white', edgecolors=green, linewidths=2, zorder=101)
ax.set_xlabel('$\\tau_{p}$', family='sans-serif')
ax.set_ylabel('Rewiring Rate')
ax.set_xlim(0, 1440)
ax.set_xticks(sp.linspace(0, 1440, 13))
ax.set_ylim(0, 0.6)
plt.tight_layout()
# plt.show()
plt.savefig('graph/tau_p_rewire_sca.eps')
# # 皮尔逊相关系数
print("pearson: %f, p-value: %f" % pearsonr(tau, rewires))