In [1]:
import sklearn
import json
import operator
import matplotlib.pyplot as plt
import prettyplotlib as ppl
%matplotlib inline
agent1 = [sklearn.externals.joblib.load('agent1_ind')]
agent2 = [sklearn.externals.joblib.load('agent2_ind')]
hist1 = sklearn.externals.joblib.load('agent1_indhist')
hist2 = sklearn.externals.joblib.load('agent2_indhist')


/usr/local/lib/python3.4/dist-packages/matplotlib/backends/backend_gtk3agg.py:18: UserWarning: The Gtk3Agg backend is known to not work on Python 3.x with pycairo. Try installing cairocffi.
  "The Gtk3Agg backend is known to not work on Python 3.x with pycairo. "

In [2]:
def loader(dictionary):
    def load_keys(k):
        unjsoned = json.loads(k)
        loaded = tuple( ((tuple(unjsoned[0])), unjsoned[1] ))
        return loaded
    return {load_keys(k):v for k,v in dictionary.items()}
def get_score(hist):
    loaded = {k:len(json.loads(v)) for k,v in loader(hist).items()}
    not_running = sum([v for k,v in loaded.items() if k[0][1] == 'sleeping' and k[0][2]=='sleeping'])
    zero = sum([v for k,v in loaded.items() if k[0][0] == 0])
    total = sum([v for k,v in loaded.items()])
    return not_running, zero, total, not_running/total, zero/total
def get_winners(dictionary):
    states = set([k[0] for k,v in dictionary.items()])
    winners = {}
    for s in states:
        matches = [(v, k[1]) for k,v in dictionary.items() if k[0]==s]
        winners[s] = sorted(matches, key=operator.itemgetter(0))[::-1]
    return {k: v[0][1] for k,v in winners.items()}
print(get_score(hist1))
print(get_score(hist2))


(292, 1338, 3856, 0.07572614107883817, 0.34699170124481327)
(352, 1122, 3787, 0.09294956429891735, 0.29627673620279904)

In [3]:
loaded1 = [loader(i) for i in agent1]
[get_winners(j) for j in loaded1]


Out[3]:
[{(0, 'pending', 'pending'): 'go_to_sleep',
  (0, 'pending', 'running'): 'go_to_sleep',
  (0, 'pending', 'sleeping'): 'go_to_sleep',
  (0, 'running', 'pending'): 'prepare_sleep',
  (0, 'running', 'running'): 'prepare_sleep',
  (0, 'running', 'sleeping'): 'prepare_sleep',
  (0, 'sleeping', 'pending'): 'noop',
  (0, 'sleeping', 'running'): 'noop',
  (0, 'sleeping', 'sleeping'): 'wakeup',
  (1, 'pending', 'pending'): 'go_to_sleep',
  (1, 'pending', 'running'): 'go_to_sleep',
  (1, 'pending', 'sleeping'): 'go_to_sleep',
  (1, 'running', 'pending'): 'prepare_sleep',
  (1, 'running', 'running'): 'prepare_sleep',
  (1, 'running', 'sleeping'): 'prepare_sleep',
  (1, 'sleeping', 'pending'): 'wakeup',
  (1, 'sleeping', 'running'): 'wakeup',
  (1, 'sleeping', 'sleeping'): 'wakeup',
  (2, 'pending', 'pending'): 'go_to_sleep',
  (2, 'pending', 'running'): 'go_to_sleep',
  (2, 'pending', 'sleeping'): 'go_to_sleep',
  (2, 'running', 'pending'): 'noop',
  (2, 'running', 'running'): 'prepare_sleep',
  (2, 'running', 'sleeping'): 'noop',
  (2, 'sleeping', 'pending'): 'wakeup',
  (2, 'sleeping', 'running'): 'wakeup',
  (2, 'sleeping', 'sleeping'): 'wakeup',
  (3, 'pending', 'running'): 'go_to_sleep',
  (3, 'pending', 'sleeping'): 'go_to_sleep',
  (3, 'running', 'pending'): 'noop',
  (3, 'running', 'running'): 'wakeup',
  (3, 'running', 'sleeping'): 'noop',
  (3, 'sleeping', 'running'): 'wakeup',
  (4, 'pending', 'running'): 'go_to_sleep',
  (4, 'running', 'pending'): 'noop',
  (4, 'running', 'running'): 'noop',
  (4, 'running', 'sleeping'): 'noop',
  (4, 'sleeping', 'pending'): 'wakeup',
  (4, 'sleeping', 'running'): 'wakeup',
  (4, 'sleeping', 'sleeping'): 'wakeup',
  (5, 'pending', 'pending'): 'go_to_sleep',
  (5, 'pending', 'sleeping'): 'go_to_sleep',
  (5, 'running', 'pending'): 'noop',
  (5, 'running', 'running'): 'noop',
  (5, 'running', 'sleeping'): 'noop',
  (5, 'sleeping', 'pending'): 'wakeup',
  (5, 'sleeping', 'sleeping'): 'wakeup',
  (6, 'pending', 'pending'): 'go_to_sleep',
  (6, 'pending', 'running'): 'go_to_sleep',
  (6, 'running', 'pending'): 'noop',
  (6, 'running', 'running'): 'noop',
  (6, 'running', 'sleeping'): 'noop',
  (6, 'sleeping', 'pending'): 'wakeup',
  (6, 'sleeping', 'running'): 'wakeup',
  (6, 'sleeping', 'sleeping'): 'wakeup',
  (7, 'pending', 'running'): 'go_to_sleep',
  (7, 'running', 'pending'): 'noop',
  (7, 'running', 'running'): 'noop',
  (7, 'running', 'sleeping'): 'noop',
  (7, 'sleeping', 'running'): 'wakeup',
  (8, 'pending', 'running'): 'go_to_sleep',
  (8, 'running', 'pending'): 'noop',
  (8, 'running', 'running'): 'noop',
  (8, 'running', 'sleeping'): 'noop',
  (8, 'sleeping', 'pending'): 'wakeup',
  (8, 'sleeping', 'running'): 'wakeup',
  (8, 'sleeping', 'sleeping'): 'wakeup',
  (9, 'pending', 'running'): 'go_to_sleep',
  (9, 'pending', 'sleeping'): 'go_to_sleep',
  (9, 'running', 'pending'): 'noop',
  (9, 'running', 'running'): 'noop',
  (9, 'running', 'sleeping'): 'prepare_sleep',
  (9, 'sleeping', 'pending'): 'noop',
  (10, 'running', 'pending'): 'noop',
  (10, 'running', 'running'): 'noop',
  (10, 'running', 'sleeping'): 'prepare_sleep',
  (10, 'sleeping', 'running'): 'wakeup',
  (11, 'pending', 'sleeping'): 'go_to_sleep',
  (11, 'running', 'pending'): 'noop',
  (11, 'running', 'running'): 'noop',
  (11, 'sleeping', 'sleeping'): 'wakeup',
  (12, 'running', 'running'): 'noop',
  (12, 'running', 'sleeping'): 'prepare_sleep',
  (12, 'sleeping', 'running'): 'wakeup',
  (13, 'running', 'running'): 'noop',
  (14, 'running', 'running'): 'noop'}]

In [4]:
{k:len(json.loads(v)) for k,v in loader(hist1).items()}


Out[4]:
{((0, 'pending', 'pending'), 'go_to_sleep'): 104,
 ((0, 'pending', 'running'), 'go_to_sleep'): 267,
 ((0, 'pending', 'sleeping'), 'go_to_sleep'): 94,
 ((0, 'running', 'pending'), 'noop'): 4,
 ((0, 'running', 'pending'), 'prepare_sleep'): 19,
 ((0, 'running', 'running'), 'noop'): 9,
 ((0, 'running', 'running'), 'prepare_sleep'): 58,
 ((0, 'running', 'sleeping'), 'noop'): 4,
 ((0, 'running', 'sleeping'), 'prepare_sleep'): 34,
 ((0, 'sleeping', 'pending'), 'noop'): 52,
 ((0, 'sleeping', 'pending'), 'wakeup'): 98,
 ((0, 'sleeping', 'running'), 'noop'): 201,
 ((0, 'sleeping', 'running'), 'wakeup'): 190,
 ((0, 'sleeping', 'sleeping'), 'noop'): 49,
 ((0, 'sleeping', 'sleeping'), 'wakeup'): 155,
 ((1, 'pending', 'pending'), 'go_to_sleep'): 70,
 ((1, 'pending', 'running'), 'go_to_sleep'): 130,
 ((1, 'pending', 'sleeping'), 'go_to_sleep'): 59,
 ((1, 'running', 'pending'), 'noop'): 7,
 ((1, 'running', 'pending'), 'prepare_sleep'): 47,
 ((1, 'running', 'running'), 'noop'): 19,
 ((1, 'running', 'running'), 'prepare_sleep'): 200,
 ((1, 'running', 'sleeping'), 'noop'): 15,
 ((1, 'running', 'sleeping'), 'prepare_sleep'): 101,
 ((1, 'sleeping', 'pending'), 'wakeup'): 10,
 ((1, 'sleeping', 'running'), 'wakeup'): 18,
 ((1, 'sleeping', 'sleeping'), 'wakeup'): 7,
 ((2, 'pending', 'pending'), 'go_to_sleep'): 5,
 ((2, 'pending', 'running'), 'go_to_sleep'): 23,
 ((2, 'pending', 'sleeping'), 'go_to_sleep'): 3,
 ((2, 'running', 'pending'), 'noop'): 82,
 ((2, 'running', 'pending'), 'prepare_sleep'): 56,
 ((2, 'running', 'running'), 'noop'): 129,
 ((2, 'running', 'running'), 'prepare_sleep'): 213,
 ((2, 'running', 'sleeping'), 'noop'): 217,
 ((2, 'running', 'sleeping'), 'prepare_sleep'): 14,
 ((2, 'sleeping', 'pending'), 'noop'): 5,
 ((2, 'sleeping', 'pending'), 'wakeup'): 52,
 ((2, 'sleeping', 'running'), 'noop'): 5,
 ((2, 'sleeping', 'running'), 'wakeup'): 126,
 ((2, 'sleeping', 'sleeping'), 'noop'): 1,
 ((2, 'sleeping', 'sleeping'), 'wakeup'): 67,
 ((3, 'pending', 'running'), 'go_to_sleep'): 7,
 ((3, 'pending', 'sleeping'), 'go_to_sleep'): 5,
 ((3, 'running', 'pending'), 'noop'): 64,
 ((3, 'running', 'pending'), 'prepare_sleep'): 2,
 ((3, 'running', 'running'), 'noop'): 134,
 ((3, 'running', 'running'), 'prepare_sleep'): 1,
 ((3, 'running', 'sleeping'), 'noop'): 109,
 ((3, 'running', 'sleeping'), 'prepare_sleep'): 7,
 ((3, 'sleeping', 'running'), 'wakeup'): 2,
 ((4, 'running', 'pending'), 'noop'): 63,
 ((4, 'running', 'pending'), 'prepare_sleep'): 2,
 ((4, 'running', 'running'), 'noop'): 153,
 ((4, 'running', 'running'), 'prepare_sleep'): 5,
 ((4, 'running', 'sleeping'), 'noop'): 100,
 ((4, 'running', 'sleeping'), 'prepare_sleep'): 3,
 ((4, 'sleeping', 'pending'), 'noop'): 1,
 ((4, 'sleeping', 'pending'), 'wakeup'): 7,
 ((4, 'sleeping', 'running'), 'noop'): 1,
 ((4, 'sleeping', 'running'), 'wakeup'): 20,
 ((4, 'sleeping', 'sleeping'), 'noop'): 1,
 ((4, 'sleeping', 'sleeping'), 'wakeup'): 8,
 ((5, 'pending', 'pending'), 'go_to_sleep'): 1,
 ((5, 'pending', 'sleeping'), 'go_to_sleep'): 1,
 ((5, 'running', 'pending'), 'noop'): 5,
 ((5, 'running', 'running'), 'noop'): 25,
 ((5, 'running', 'sleeping'), 'noop'): 21,
 ((5, 'sleeping', 'pending'), 'wakeup'): 1,
 ((6, 'running', 'pending'), 'noop'): 10,
 ((6, 'running', 'running'), 'noop'): 27,
 ((6, 'running', 'running'), 'prepare_sleep'): 2,
 ((6, 'running', 'sleeping'), 'noop'): 20,
 ((6, 'sleeping', 'sleeping'), 'wakeup'): 4,
 ((7, 'running', 'running'), 'noop'): 3,
 ((7, 'running', 'sleeping'), 'noop'): 4,
 ((7, 'sleeping', 'running'), 'wakeup'): 1,
 ((8, 'pending', 'running'), 'go_to_sleep'): 1,
 ((8, 'running', 'pending'), 'noop'): 1,
 ((8, 'running', 'running'), 'noop'): 1,
 ((8, 'running', 'sleeping'), 'noop'): 3,
 ((8, 'sleeping', 'pending'), 'wakeup'): 2,
 ((9, 'pending', 'running'), 'go_to_sleep'): 3,
 ((9, 'running', 'pending'), 'noop'): 1,
 ((10, 'running', 'running'), 'noop'): 1,
 ((10, 'running', 'sleeping'), 'prepare_sleep'): 1,
 ((11, 'running', 'running'), 'noop'): 1,
 ((12, 'running', 'running'), 'noop'): 2}

In [5]:
record = sklearn.externals.joblib.load('ind_writer')

In [8]:
one = [(i[0], i[1]['battery']) for i in record if i[1]['_id']==0]
two = [(i[0], i[1]['battery']) for i in record if i[1]['_id']==1]

In [10]:
fig,ax = plt.subplots(1)
ppl.plot(ax, [i[0] for i in one],[i[1] for i in one] )


/usr/local/lib/python3.4/dist-packages/matplotlib/__init__.py:872: UserWarning: axes.color_cycle is deprecated and replaced with axes.prop_cycle; please use the latter.
  warnings.warn(self.msg_depr % (key, alt_key))
Out[10]:
[<matplotlib.lines.Line2D at 0x7fd84c5bb710>]

In [19]:
fig, ax = plt.subplots(1)
ppl.plot(ax, [i[0] for i in one[2000:3000]],[i[1] for i in one[2000:3000]] )


/usr/local/lib/python3.4/dist-packages/matplotlib/__init__.py:872: UserWarning: axes.color_cycle is deprecated and replaced with axes.prop_cycle; please use the latter.
  warnings.warn(self.msg_depr % (key, alt_key))
Out[19]:
[<matplotlib.lines.Line2D at 0x7fd84c218518>]

In [ ]: