127 lines
4.1 KiB
Python
127 lines
4.1 KiB
Python
import json
|
|
from matplotlib import pyplot as plt
|
|
from island.match import Match
|
|
from island.matches import Matches
|
|
from numpy import mean, std
|
|
import numpy as np
|
|
|
|
|
|
matches = Matches('wos-data-new-2')
|
|
max_round = 14
|
|
|
|
# c_req_succ = np.zeros(max_round-2)
|
|
# c_req = np.zeros(max_round-2)
|
|
# d_req_succ = np.zeros(max_round-2)
|
|
# d_req = np.zeros(max_round-2)
|
|
|
|
c_req_succ = np.zeros(max_round)
|
|
c_req = np.zeros(max_round)
|
|
d_req_succ = np.zeros(max_round)
|
|
d_req = np.zeros(max_round)
|
|
|
|
def is_cooperator(rows, pid):
|
|
m = 0
|
|
mall = 0
|
|
for r in rows:
|
|
if pid == r['a'] and r['act_a'] == 'C':
|
|
m += 1
|
|
mall += 1
|
|
elif pid == r['a'] and r['act_a'] == 'D':
|
|
mall += 1
|
|
elif pid == r['b'] and r['act_b'] == 'C':
|
|
m += 1
|
|
mall += 1
|
|
elif pid == r['b'] and r['act_b'] == 'D':
|
|
mall += 1
|
|
return m*2 >= mall
|
|
|
|
for i in range(max_round):
|
|
for j in range(len(matches.data)):
|
|
rows = matches.data[j].query('action', 'done').where(lambda x: x['rno'] == i+1).raw_data
|
|
calced = set()
|
|
for row in rows:
|
|
if row['a'] not in calced:
|
|
r = matches.data[j].query('action', 'request').where(lambda x: x['rno'] == i+2 and x['from'] == row['a']).raw_data
|
|
rs = matches.data[j].query('action', 'approve').where(lambda x: x['rno'] == i+2 and x['to'] == row['a']).raw_data
|
|
if is_cooperator(rows, row['a']):
|
|
c_req_succ[i] += len(rs)
|
|
c_req[i] += len(r)
|
|
else:
|
|
d_req_succ[i] += len(rs)
|
|
d_req[i] += len(r)
|
|
calced.add(row['a'])
|
|
|
|
if row['b'] not in calced:
|
|
r = matches.data[j].query('action', 'request').where(lambda x: x['rno'] == i+2 and x['from'] == row['b']).raw_data
|
|
rs = matches.data[j].query('action', 'approve').where(lambda x: x['rno'] == i+2 and x['to'] == row['b']).raw_data
|
|
if is_cooperator(rows, row['b']):
|
|
c_req_succ[i] += len(rs)
|
|
c_req[i] += len(r)
|
|
else:
|
|
d_req_succ[i] += len(rs)
|
|
d_req[i] += len(r)
|
|
calced.add(row['b'])
|
|
|
|
for i in range(len(c_req)):
|
|
if c_req[i] == 0:
|
|
c_req[i] = 0.1
|
|
if d_req[i] == 0:
|
|
d_req[i] = 0.1
|
|
|
|
c_req_succ_fr = c_req_succ / c_req
|
|
d_req_succ_fr = d_req_succ / d_req
|
|
|
|
print(c_req_succ)
|
|
print(c_req)
|
|
print(c_req_succ_fr)
|
|
print(d_req_succ)
|
|
print(d_req)
|
|
print(d_req_succ_fr)
|
|
|
|
req_succ_fr_mean = [mean(c_req_succ_fr), mean(d_req_succ_fr)]
|
|
req_succ_fr_sem = [std(c_req_succ_fr), std(d_req_succ_fr)]
|
|
|
|
req_succ = [c_req_succ_fr, d_req_succ_fr]
|
|
|
|
fig = plt.figure(figsize=(4, 3))
|
|
ax = fig.gca()
|
|
index = np.arange(2)
|
|
bar_width = 0.5
|
|
opacity = 1
|
|
error_config = {'ecolor': '0.3', 'capsize': 2, 'linewidth': 1}
|
|
# rects1 = ax.bar(index, req_succ_fr_mean, bar_width,
|
|
# alpha=opacity, color='#0984e3',
|
|
# yerr=req_succ_fr_sem, error_kw=error_config,
|
|
# label='C-Req-Success')
|
|
flier_marker = dict(markerfacecolor='w', marker='o', markersize=4, markeredgewidth=0.5)
|
|
mean_marker = dict(markerfacecolor='w', marker='s', markeredgecolor='#0984e3', markersize=5, markeredgewidth=1)
|
|
ax.boxplot(req_succ, showmeans=True, notch=True,
|
|
meanprops=mean_marker, flierprops=flier_marker,
|
|
whis=[0.35,99.65],
|
|
widths=0.4,
|
|
labels=['From Cooperator', 'From Defector'])
|
|
|
|
m1 = np.median(c_req_succ_fr)
|
|
m2 = np.median(d_req_succ_fr)
|
|
# i1 = np.subtract(*np.percentile(c_req_succ_fr, [75*0.98, 25*0.98]))
|
|
# i2 = np.subtract(*np.percentile(d_req_succ_fr, [75*0.98, 25*0.98]))
|
|
i1 = np.subtract(*np.percentile(c_req_succ_fr, [75, 25]))
|
|
i2 = np.subtract(*np.percentile(d_req_succ_fr, [75, 25]))
|
|
|
|
|
|
|
|
print('M=(%f, %f)' % (m1, m2))
|
|
print('IQR=(%f, %f)' % (i1, i2))
|
|
|
|
|
|
# ax.set_xlabel('Group')
|
|
ax.set_ylabel('Request Approval Rate')
|
|
# ax.set_title(' from ', fontsize='small', weight='semibold')
|
|
# ax.set_xticks(index)
|
|
# ax.set_ylim(0, 1)
|
|
# ax.set_xlim(-0.75, 1.75)
|
|
# ax.set_xticklabels(index+2)
|
|
# ax.legend()
|
|
fig.tight_layout()
|
|
plt.show()
|
|
# plt.savefig('graph/request_success.eps') |