58 lines
1.2 KiB
Python
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') |