swdata/coopr_per_match.py
2018-06-16 21:37:40 +08:00

58 lines
1.2 KiB
Python

# -*- coding: UTF-8 -*-
import json
from matplotlib import pyplot as plt
import scipy as sp
from island.match import Match
from island.matches import Matches
def error(f,x,y):
return sp.sum((f(x)-y)**2)
matches = Matches('wos-data-new-2')
max_round = 17
coopr = []
data = {}
x = []
_x = []
survivals = {}
with open('winner.json','r') as f:
survivals = json.load(f)
for j in range(len(matches.data)):
coop = 0
rows = matches.data[j].query('action', 'done').raw_data
info = matches.data[j].query('game', 'created').select('info').raw_data[0]['info']
ns = int(info['next_start'])
for row in rows:
if row['act_a'] == 'C':
coop += 1
if row['act_b'] == 'C':
coop += 1
if rows:
data[ns] = float(coop) / len(rows) / 2
x.append(ns)
x = sorted(x)
for i in range(len(x)):
_x.append(i)
coopr.append(data[x[i]])
fig = plt.figure()
plt.scatter(_x, coopr)
ax = fig.gca()
plt.ylim(0,1)
fp1,residuals,rank,sv,rcond = sp.polyfit(_x, coopr, 1, full=True)
print("残差:",residuals)
print('Model parameter:',fp1)
f1 = sp.poly1d(fp1)
print(error(f1, _x, coopr))
fx = sp.linspace(0,_x[-1],1000)
plt.plot(fx,f1(fx),linewidth=1,color='red')
plt.show()
# plt.savefig('graph/co_per_game.png')