add rewiring rate
This commit is contained in:
parent
042c736602
commit
f0934a0fe8
@ -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
143
rewiring_rate.py
Normal 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))
|
||||
Loading…
Reference in New Issue
Block a user