mirror of
https://github.com/gsi-upm/soil
synced 2024-11-14 15:32:29 +00:00
3706 lines
106 KiB
ReStructuredText
3706 lines
106 KiB
ReStructuredText
Soil Tutorial
|
||
=============
|
||
|
||
Introduction
|
||
------------
|
||
|
||
This notebook is an introduction to the soil agent-based social network
|
||
simulation framework. In particular, we will focus on a specific use
|
||
case: studying the propagation of news in a social network.
|
||
|
||
The steps we will follow are:
|
||
|
||
- Modelling the behavior of agents
|
||
- Running the simulation using different configurations
|
||
- Analysing the results of each simulation
|
||
|
||
But before that, let’s import the soil module and networkx.
|
||
|
||
.. code:: ipython3
|
||
|
||
import soil
|
||
import networkx as nx
|
||
|
||
%load_ext autoreload
|
||
%autoreload 2
|
||
|
||
%matplotlib inline
|
||
# To display plots in the notebooed_
|
||
|
||
Basic concepts
|
||
--------------
|
||
|
||
There are three main elements in a soil simulation:
|
||
|
||
- The network topology. A simulation may use an existing NetworkX
|
||
topology, or generate one on the fly
|
||
- Agents. There are two types: 1) network agents, which are linked to a
|
||
node in the topology, and 2) environment agents, which are freely
|
||
assigned to the environment.
|
||
- The environment. It assigns agents to nodes in the network, and
|
||
stores the environment parameters (shared state for all agents).
|
||
|
||
Soil is based on ``simpy``, which is an event-based network simulation
|
||
library. Soil provides several abstractions over events to make
|
||
developing agents easier. This means you can use events (timeouts,
|
||
delays) in soil, but for the most part we will assume your models will
|
||
be step-based.
|
||
|
||
Modeling behaviour
|
||
------------------
|
||
|
||
Our first step will be to model how every person in the social network
|
||
reacts when it comes to news. We will follow a very simple model (a
|
||
finite state machine).
|
||
|
||
There are two types of people, those who have heard about a newsworthy
|
||
event (infected) or those who have not (neutral). A neutral person may
|
||
heard about the news either on the TV (with probability
|
||
**prob_tv_spread**) or through their friends. Once a person has heard
|
||
the news, they will spread it to their friends (with a probability
|
||
**prob_neighbor_spread**). Some users do not have a TV, so they only
|
||
rely on their friends.
|
||
|
||
The spreading probabilities will change over time due to different
|
||
factors. We will represent this variance using an environment agent.
|
||
|
||
Network Agents
|
||
~~~~~~~~~~~~~~
|
||
|
||
A basic network agent in Soil would typically inherit from
|
||
``soil.agents.NetworkAgent``, and define its behaviour in every step of
|
||
the simulation by implementing a ``run(self)`` method. The most
|
||
important attributes of the agent are:
|
||
|
||
- ``agent.state``, a dictionary with the state of the agent. This tate
|
||
will be saved in every step of the simulation. It can be accessed
|
||
from the agent as well:
|
||
|
||
.. code:: py
|
||
|
||
a = soil.agents.NetworkAgent(env=env)
|
||
agent.state['hours_of_sleep'] = 10
|
||
# is the same as
|
||
a['hours_of_sleep'] = 10
|
||
|
||
The state of the agent is stored in every step of the simulation:
|
||
``py print(a['hours_of_sleep', 10]) # hours of sleep before step #10 print(a[None, 0]) # whole state of the agent before step #0``
|
||
|
||
- ``agent.env``, a reference to the environment. Most commonly used to
|
||
get access to the environment parameters and the topology: \```py
|
||
a.env.G.nodes() # Get all nodes ids in the topology
|
||
a.env[‘minimum_hours_of_sleep’]
|
||
|
||
\``\`
|
||
|
||
Since our model is a finite state machine, we will be basing it on
|
||
``soil.agents.FSM``.
|
||
|
||
Agents that inherit from ``soil.agents.FSM`` do not need to specify a
|
||
``step`` method. Instead, we describe each finite state with a function.
|
||
To change to another state, a function may return the new state, or the
|
||
``id`` of a state. If no state is returned, the state remains unchanged.
|
||
|
||
The current state of the agent can be checked with
|
||
``agent.state['id']``. That state id can be used to look for other
|
||
networks in that specific state
|
||
|
||
Our agent will have of two states, ``neutral`` (default) and
|
||
``infected``.
|
||
|
||
Here’s the code:
|
||
|
||
.. code:: ipython3
|
||
|
||
import random
|
||
|
||
class NewsSpread(soil.agents.FSM):
|
||
@soil.agents.default_state
|
||
@soil.agents.state
|
||
def neutral(self):
|
||
r = random.random()
|
||
if self['has_tv'] and r <= self.env['prob_tv_spread']:
|
||
return self.infected
|
||
return
|
||
|
||
@soil.agents.state
|
||
def infected(self):
|
||
prob_infect = self.env['prob_neighbor_spread']
|
||
for neighbor in self.get_neighboring_agents(state_id=self.neutral.id):
|
||
r = random.random()
|
||
if r < prob_infect:
|
||
neighbor.set_state(self.infected.id)
|
||
return
|
||
|
||
|
||
Environment agents
|
||
~~~~~~~~~~~~~~~~~~
|
||
|
||
Environment agents allow us to control the state of the environment. In
|
||
this case, we will use an environment agent to simulate a very viral
|
||
event.
|
||
|
||
When the event happens, the agent will modify the probability of
|
||
spreading the rumor.
|
||
|
||
.. code:: ipython3
|
||
|
||
NEIGHBOR_FACTOR = 0.9
|
||
TV_FACTOR = 0.5
|
||
|
||
|
||
class NewsEnvironmentAgent(soil.agents.NetworkAgent):
|
||
def step(self):
|
||
if self.now == self['event_time']:
|
||
self.env['prob_tv_spread'] = 1
|
||
self.env['prob_neighbor_spread'] = 1
|
||
elif self.now > self['event_time']:
|
||
self.env['prob_tv_spread'] = self.env['prob_tv_spread'] * TV_FACTOR
|
||
self.env['prob_neighbor_spread'] = self.env['prob_neighbor_spread'] * NEIGHBOR_FACTOR
|
||
|
||
Testing the agents
|
||
~~~~~~~~~~~~~~~~~~
|
||
|
||
Feel free to skip this section if this is your first time with soil.
|
||
|
||
Testing agents is not easy, and this is not a thorough testing process
|
||
for agents. Rather, this section is aimed to show you how to access
|
||
internal pats of soil so you can test your agents.
|
||
|
||
First of all, let’s check if our network agent has the states we would
|
||
expect:
|
||
|
||
.. code:: ipython3
|
||
|
||
NewsSpread.states
|
||
|
||
|
||
|
||
|
||
.. parsed-literal::
|
||
|
||
{'neutral': <function __main__.NewsSpread.neutral(self)>,
|
||
'infected': <function __main__.NewsSpread.infected(self)>}
|
||
|
||
|
||
|
||
Now, let’s run a simulation on a simple network. It is comprised of
|
||
three nodes:
|
||
|
||
.. code:: ipython3
|
||
|
||
G = nx.Graph()
|
||
G.add_edge(0, 1)
|
||
G.add_edge(0, 2)
|
||
G.add_edge(2, 3)
|
||
G.add_node(4)
|
||
pos = nx.spring_layout(G)
|
||
nx.draw_networkx(G, pos, node_color='red')
|
||
nx.draw_networkx(G, pos, nodelist=[0], node_color='blue')
|
||
|
||
|
||
|
||
.. image:: output_21_0.png
|
||
|
||
|
||
Let’s run a simple simulation that assigns a NewsSpread agent to all the
|
||
nodes in that network. Notice how node 0 is the only one with a TV.
|
||
|
||
.. code:: ipython3
|
||
|
||
import importlib
|
||
importlib.reload(soil.agents)
|
||
|
||
|
||
|
||
|
||
.. parsed-literal::
|
||
|
||
<module 'soil.agents' from '/mnt/data/home/j/git/lab.gsi/soil/soil/soil/agents/__init__.py'>
|
||
|
||
|
||
|
||
.. code:: ipython3
|
||
|
||
env_params = {
|
||
'prob_tv_spread': 0,
|
||
'prob_neighbor_spread': 0
|
||
}
|
||
|
||
MAX_TIME = 100
|
||
EVENT_TIME = 10
|
||
|
||
sim = soil.Simulation(topology=G,
|
||
num_trials=1,
|
||
max_time=MAX_TIME,
|
||
environment_agents=[{'agent_type': NewsEnvironmentAgent,
|
||
'state': {
|
||
'event_time': EVENT_TIME
|
||
}}],
|
||
network_agents=[{'agent_type': NewsSpread,
|
||
'weight': 1}],
|
||
states={0: {'has_tv': True}},
|
||
default_state={'has_tv': False},
|
||
environment_params=env_params)
|
||
env = sim.run_simulation(dry_run=True)[0]
|
||
|
||
Now we can access the results of the simulation and compare them to our
|
||
expected results
|
||
|
||
.. code:: ipython3
|
||
|
||
agents = list(env.network_agents)
|
||
|
||
# Until the event, all agents are neutral
|
||
for t in range(10):
|
||
for a in agents:
|
||
assert a['state_id', t] == a.neutral.id
|
||
|
||
# After the event, the node with a TV is infected, the rest are not
|
||
assert agents[0]['has_tv']
|
||
assert agents[0]['state_id', 11] == NewsSpread.infected.id
|
||
assert not agents[2]['has_tv']
|
||
assert agents[2]['state_id', 11] == NewsSpread.neutral.id
|
||
|
||
|
||
# At the end, the agents connected to the infected one will probably be infected, too.
|
||
assert agents[1]['state_id', MAX_TIME] == NewsSpread.infected.id
|
||
assert agents[2]['state_id', MAX_TIME] == NewsSpread.infected.id
|
||
|
||
# But the node with no friends should not be affected
|
||
assert agents[4]['state_id', MAX_TIME] == NewsSpread.neutral.id
|
||
|
||
|
||
Lastly, let’s see if the probabilities have decreased as expected:
|
||
|
||
.. code:: ipython3
|
||
|
||
assert abs(env.environment_params['prob_neighbor_spread'] - (NEIGHBOR_FACTOR**(MAX_TIME-1-10))) < 10e-4
|
||
assert abs(env.environment_params['prob_tv_spread'] - (TV_FACTOR**(MAX_TIME-1-10))) < 10e-6
|
||
|
||
Running the simulation
|
||
----------------------
|
||
|
||
To run a simulation, we need a configuration. Soil can load
|
||
configurations from python dictionaries as well as JSON and YAML files.
|
||
For this demo, we will use a python dictionary:
|
||
|
||
.. code:: ipython3
|
||
|
||
config = {
|
||
'name': 'ExampleSimulation',
|
||
'max_time': 20,
|
||
'interval': 1,
|
||
'num_trials': 1,
|
||
'network_params': {
|
||
'generator': 'complete_graph',
|
||
'n': 500,
|
||
},
|
||
'network_agents': [
|
||
{
|
||
'agent_type': NewsSpread,
|
||
'weight': 1,
|
||
'state': {
|
||
'has_tv': False
|
||
}
|
||
},
|
||
{
|
||
'agent_type': NewsSpread,
|
||
'weight': 2,
|
||
'state': {
|
||
'has_tv': True
|
||
}
|
||
}
|
||
],
|
||
'environment_agents':[
|
||
{'agent_type': NewsEnvironmentAgent,
|
||
'state': {
|
||
'event_time': 10
|
||
}
|
||
}
|
||
],
|
||
'states': [ {'has_tv': True} ],
|
||
'environment_params':{
|
||
'prob_tv_spread': 0.01,
|
||
'prob_neighbor_spread': 0.5
|
||
}
|
||
}
|
||
|
||
Let’s run our simulation:
|
||
|
||
.. code:: ipython3
|
||
|
||
soil.simulation.run_from_config(config, dry_run=True)
|
||
|
||
In real life, you probably want to run several simulations, varying some
|
||
of the parameters so that you can compare and answer your research
|
||
questions.
|
||
|
||
For instance:
|
||
|
||
- Does the outcome depend on the structure of our network? We will use
|
||
different generation algorithms to compare them (Barabasi-Albert and
|
||
Erdos-Renyi)
|
||
- How does neighbor spreading probability affect my simulation? We will
|
||
try probability values in the range of [0, 0.4], in intervals of 0.1.
|
||
|
||
.. code:: ipython3
|
||
|
||
network_1 = {
|
||
'generator': 'erdos_renyi_graph',
|
||
'n': 500,
|
||
'p': 0.1
|
||
}
|
||
network_2 = {
|
||
'generator': 'barabasi_albert_graph',
|
||
'n': 500,
|
||
'm': 2
|
||
}
|
||
|
||
|
||
for net in [network_1, network_2]:
|
||
for i in range(5):
|
||
prob = i / 10
|
||
config['environment_params']['prob_neighbor_spread'] = prob
|
||
config['network_params'] = net
|
||
config['name'] = 'Spread_{}_prob_{}'.format(net['generator'], prob)
|
||
s = soil.simulation.run_from_config(config, exporters=['default', 'csv'])
|
||
|
||
The results are conveniently stored in sqlite (history of agent and
|
||
environment state) and the configuration is saved in a YAML file.
|
||
|
||
You can also export the results to GEXF format (dynamic network) and CSV
|
||
using .\ ``run_from_config(config, dump=['gexf', 'csv'])`` or the
|
||
command line flags ``--graph --csv``.
|
||
|
||
.. code:: ipython3
|
||
|
||
!tree soil_output
|
||
!du -xh soil_output/*
|
||
|
||
|
||
.. parsed-literal::
|
||
|
||
[01;34msoil_output[00m
|
||
├── [01;34mSpread_barabasi_albert_graph_prob_0.0[00m
|
||
│ ├── [01;34mbackup[00m
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.0.dumped.yml@2023-03-23_12.57.35
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.0.dumped.yml@2023-03-23_14.06.30
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.0.dumped.yml@2023-03-23_14.19.33
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.0.dumped.yml@2023-03-23_14.30.56
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.0.sqlite@2023-03-23_12.57.35
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.0.sqlite@2023-03-23_14.06.31
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.0.sqlite@2023-03-23_14.19.33
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.0.sqlite@2023-03-23_14.30.56
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.0_trial_0.csv@2023-03-23_12.57.35
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.0_trial_0.csv@2023-03-23_14.06.31
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.0_trial_0.csv@2023-03-23_14.19.33
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.0_trial_0.csv@2023-03-23_14.30.56
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.0_trial_0.sqlite@2023-03-23_12.57.35
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.0_trial_0.sqlite@2023-03-23_14.06.31
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.0_trial_0.sqlite@2023-03-23_14.19.33
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.0_trial_0.sqlite@2023-03-23_14.30.56
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.0_trial_0.stats.csv@2023-03-23_12.57.35
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.0_trial_0.stats.csv@2023-03-23_14.06.31
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.0_trial_0.stats.csv@2023-03-23_14.19.33
|
||
│ │ └── Spread_barabasi_albert_graph_prob_0.0_trial_0.stats.csv@2023-03-23_14.30.56
|
||
│ ├── Spread_barabasi_albert_graph_prob_0.0.dumped.yml
|
||
│ ├── Spread_barabasi_albert_graph_prob_0.0.sqlite
|
||
│ ├── Spread_barabasi_albert_graph_prob_0.0_trial_0.csv
|
||
│ ├── Spread_barabasi_albert_graph_prob_0.0_trial_0.sqlite
|
||
│ └── Spread_barabasi_albert_graph_prob_0.0_trial_0.stats.csv
|
||
├── [01;34mSpread_barabasi_albert_graph_prob_0.1[00m
|
||
│ ├── [01;34mbackup[00m
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.1.dumped.yml@2023-03-23_12.57.35
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.1.dumped.yml@2023-03-23_14.06.31
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.1.dumped.yml@2023-03-23_14.19.34
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.1.dumped.yml@2023-03-23_14.30.56
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.1.sqlite@2023-03-23_12.57.35
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.1.sqlite@2023-03-23_14.06.31
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.1.sqlite@2023-03-23_14.19.34
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.1.sqlite@2023-03-23_14.30.56
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.1_trial_0.csv@2023-03-23_12.57.35
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.1_trial_0.csv@2023-03-23_14.06.31
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.1_trial_0.csv@2023-03-23_14.19.34
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.1_trial_0.csv@2023-03-23_14.30.56
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.1_trial_0.sqlite@2023-03-23_12.57.35
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.1_trial_0.sqlite@2023-03-23_14.06.31
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.1_trial_0.sqlite@2023-03-23_14.19.34
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.1_trial_0.sqlite@2023-03-23_14.30.56
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.1_trial_0.stats.csv@2023-03-23_12.57.35
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.1_trial_0.stats.csv@2023-03-23_14.06.31
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.1_trial_0.stats.csv@2023-03-23_14.19.34
|
||
│ │ └── Spread_barabasi_albert_graph_prob_0.1_trial_0.stats.csv@2023-03-23_14.30.56
|
||
│ ├── Spread_barabasi_albert_graph_prob_0.1.dumped.yml
|
||
│ ├── Spread_barabasi_albert_graph_prob_0.1.sqlite
|
||
│ ├── Spread_barabasi_albert_graph_prob_0.1_trial_0.csv
|
||
│ ├── Spread_barabasi_albert_graph_prob_0.1_trial_0.sqlite
|
||
│ └── Spread_barabasi_albert_graph_prob_0.1_trial_0.stats.csv
|
||
├── [01;34mSpread_barabasi_albert_graph_prob_0.2[00m
|
||
│ ├── [01;34mbackup[00m
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.2.dumped.yml@2023-03-23_12.57.36
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.2.dumped.yml@2023-03-23_14.06.31
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.2.dumped.yml@2023-03-23_14.19.34
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.2.dumped.yml@2023-03-23_14.30.56
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.2.sqlite@2023-03-23_12.57.36
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.2.sqlite@2023-03-23_14.06.31
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.2.sqlite@2023-03-23_14.19.34
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.2.sqlite@2023-03-23_14.30.57
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.2_trial_0.csv@2023-03-23_12.57.36
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.2_trial_0.csv@2023-03-23_14.06.31
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.2_trial_0.csv@2023-03-23_14.19.34
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.2_trial_0.csv@2023-03-23_14.30.57
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.2_trial_0.sqlite@2023-03-23_12.57.36
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.2_trial_0.sqlite@2023-03-23_14.06.31
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.2_trial_0.sqlite@2023-03-23_14.19.34
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.2_trial_0.sqlite@2023-03-23_14.30.57
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.2_trial_0.stats.csv@2023-03-23_12.57.36
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.2_trial_0.stats.csv@2023-03-23_14.06.31
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.2_trial_0.stats.csv@2023-03-23_14.19.34
|
||
│ │ └── Spread_barabasi_albert_graph_prob_0.2_trial_0.stats.csv@2023-03-23_14.30.57
|
||
│ ├── Spread_barabasi_albert_graph_prob_0.2.dumped.yml
|
||
│ ├── Spread_barabasi_albert_graph_prob_0.2.sqlite
|
||
│ ├── Spread_barabasi_albert_graph_prob_0.2_trial_0.csv
|
||
│ ├── Spread_barabasi_albert_graph_prob_0.2_trial_0.sqlite
|
||
│ └── Spread_barabasi_albert_graph_prob_0.2_trial_0.stats.csv
|
||
├── [01;34mSpread_barabasi_albert_graph_prob_0.3[00m
|
||
│ ├── [01;34mbackup[00m
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.3.dumped.yml@2023-03-23_12.57.36
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.3.dumped.yml@2023-03-23_14.06.31
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.3.dumped.yml@2023-03-23_14.19.34
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.3.dumped.yml@2023-03-23_14.30.57
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.3.sqlite@2023-03-23_12.57.36
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.3.sqlite@2023-03-23_14.06.32
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.3.sqlite@2023-03-23_14.19.34
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.3.sqlite@2023-03-23_14.30.57
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.3_trial_0.csv@2023-03-23_12.57.36
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.3_trial_0.csv@2023-03-23_14.06.32
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.3_trial_0.csv@2023-03-23_14.19.34
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.3_trial_0.csv@2023-03-23_14.30.57
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.3_trial_0.sqlite@2023-03-23_12.57.36
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.3_trial_0.sqlite@2023-03-23_14.06.31
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.3_trial_0.sqlite@2023-03-23_14.19.34
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.3_trial_0.sqlite@2023-03-23_14.30.57
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.3_trial_0.stats.csv@2023-03-23_12.57.36
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.3_trial_0.stats.csv@2023-03-23_14.06.32
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.3_trial_0.stats.csv@2023-03-23_14.19.34
|
||
│ │ └── Spread_barabasi_albert_graph_prob_0.3_trial_0.stats.csv@2023-03-23_14.30.57
|
||
│ ├── Spread_barabasi_albert_graph_prob_0.3.dumped.yml
|
||
│ ├── Spread_barabasi_albert_graph_prob_0.3.sqlite
|
||
│ ├── Spread_barabasi_albert_graph_prob_0.3_trial_0.csv
|
||
│ ├── Spread_barabasi_albert_graph_prob_0.3_trial_0.sqlite
|
||
│ └── Spread_barabasi_albert_graph_prob_0.3_trial_0.stats.csv
|
||
├── [01;34mSpread_barabasi_albert_graph_prob_0.4[00m
|
||
│ ├── [01;34mbackup[00m
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.4.dumped.yml@2023-03-23_12.57.36
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.4.dumped.yml@2023-03-23_14.06.32
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.4.dumped.yml@2023-03-23_14.19.35
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.4.dumped.yml@2023-03-23_14.30.57
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.4.sqlite@2023-03-23_12.57.36
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.4.sqlite@2023-03-23_14.06.32
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.4.sqlite@2023-03-23_14.19.35
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.4.sqlite@2023-03-23_14.30.57
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.4_trial_0.csv@2023-03-23_12.57.36
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.4_trial_0.csv@2023-03-23_14.06.32
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.4_trial_0.csv@2023-03-23_14.19.35
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.4_trial_0.csv@2023-03-23_14.30.57
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.4_trial_0.sqlite@2023-03-23_12.57.36
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.4_trial_0.sqlite@2023-03-23_14.06.32
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.4_trial_0.sqlite@2023-03-23_14.19.35
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.4_trial_0.sqlite@2023-03-23_14.30.57
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.4_trial_0.stats.csv@2023-03-23_12.57.36
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.4_trial_0.stats.csv@2023-03-23_14.06.32
|
||
│ │ ├── Spread_barabasi_albert_graph_prob_0.4_trial_0.stats.csv@2023-03-23_14.19.35
|
||
│ │ └── Spread_barabasi_albert_graph_prob_0.4_trial_0.stats.csv@2023-03-23_14.30.57
|
||
│ ├── Spread_barabasi_albert_graph_prob_0.4.dumped.yml
|
||
│ ├── Spread_barabasi_albert_graph_prob_0.4.sqlite
|
||
│ ├── Spread_barabasi_albert_graph_prob_0.4_trial_0.csv
|
||
│ ├── Spread_barabasi_albert_graph_prob_0.4_trial_0.sqlite
|
||
│ └── Spread_barabasi_albert_graph_prob_0.4_trial_0.stats.csv
|
||
├── [01;34mSpread_erdos_renyi_graph_prob_0.0[00m
|
||
│ ├── [01;34mbackup[00m
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.0.dumped.yml@2023-03-23_12.57.26
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.0.dumped.yml@2023-03-23_14.06.21
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.0.dumped.yml@2023-03-23_14.19.24
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.0.dumped.yml@2023-03-23_14.30.47
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.0.sqlite@2023-03-23_12.57.26
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.0.sqlite@2023-03-23_14.06.22
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.0.sqlite@2023-03-23_14.19.25
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.0.sqlite@2023-03-23_14.30.47
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.0_trial_0.csv@2023-03-23_12.57.26
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.0_trial_0.csv@2023-03-23_14.06.22
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.0_trial_0.csv@2023-03-23_14.19.25
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.0_trial_0.csv@2023-03-23_14.30.47
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.0_trial_0.sqlite@2023-03-23_12.57.26
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.0_trial_0.sqlite@2023-03-23_14.06.22
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.0_trial_0.sqlite@2023-03-23_14.19.25
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.0_trial_0.sqlite@2023-03-23_14.30.47
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.0_trial_0.stats.csv@2023-03-23_12.57.26
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.0_trial_0.stats.csv@2023-03-23_14.06.22
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.0_trial_0.stats.csv@2023-03-23_14.19.25
|
||
│ │ └── Spread_erdos_renyi_graph_prob_0.0_trial_0.stats.csv@2023-03-23_14.30.47
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.0.dumped.yml
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.0.sqlite
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.0_trial_0.csv
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.0_trial_0.sqlite
|
||
│ └── Spread_erdos_renyi_graph_prob_0.0_trial_0.stats.csv
|
||
├── [01;34mSpread_erdos_renyi_graph_prob_0.1[00m
|
||
│ ├── [01;34mbackup[00m
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.1.dumped.yml@2023-03-23_12.57.28
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.1.dumped.yml@2023-03-23_14.06.24
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.1.dumped.yml@2023-03-23_14.19.26
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.1.dumped.yml@2023-03-23_14.30.49
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.1.sqlite@2023-03-23_12.57.28
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.1.sqlite@2023-03-23_14.06.24
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.1.sqlite@2023-03-23_14.19.27
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.1.sqlite@2023-03-23_14.30.49
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.1_trial_0.csv@2023-03-23_12.57.28
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.1_trial_0.csv@2023-03-23_14.06.24
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.1_trial_0.csv@2023-03-23_14.19.27
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.1_trial_0.csv@2023-03-23_14.30.49
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.1_trial_0.sqlite@2023-03-23_12.57.28
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.1_trial_0.sqlite@2023-03-23_14.06.24
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.1_trial_0.sqlite@2023-03-23_14.19.27
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.1_trial_0.sqlite@2023-03-23_14.30.49
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.1_trial_0.stats.csv@2023-03-23_12.57.28
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.1_trial_0.stats.csv@2023-03-23_14.06.24
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.1_trial_0.stats.csv@2023-03-23_14.19.27
|
||
│ │ └── Spread_erdos_renyi_graph_prob_0.1_trial_0.stats.csv@2023-03-23_14.30.49
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.1.dumped.yml
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.1.sqlite
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.1_trial_0.csv
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.1_trial_0.sqlite
|
||
│ └── Spread_erdos_renyi_graph_prob_0.1_trial_0.stats.csv
|
||
├── [01;34mSpread_erdos_renyi_graph_prob_0.2[00m
|
||
│ ├── [01;34mbackup[00m
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.2.dumped.yml@2023-03-23_12.57.30
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.2.dumped.yml@2023-03-23_14.06.26
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.2.dumped.yml@2023-03-23_14.19.28
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.2.dumped.yml@2023-03-23_14.30.51
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.2.sqlite@2023-03-23_12.57.31
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.2.sqlite@2023-03-23_14.06.26
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.2.sqlite@2023-03-23_14.19.29
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.2.sqlite@2023-03-23_14.30.51
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.2_trial_0.csv@2023-03-23_12.57.31
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.2_trial_0.csv@2023-03-23_14.06.26
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.2_trial_0.csv@2023-03-23_14.19.29
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.2_trial_0.csv@2023-03-23_14.30.51
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.2_trial_0.sqlite@2023-03-23_12.57.31
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.2_trial_0.sqlite@2023-03-23_14.06.26
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.2_trial_0.sqlite@2023-03-23_14.19.29
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.2_trial_0.sqlite@2023-03-23_14.30.51
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.2_trial_0.stats.csv@2023-03-23_12.57.31
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.2_trial_0.stats.csv@2023-03-23_14.06.26
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.2_trial_0.stats.csv@2023-03-23_14.19.29
|
||
│ │ └── Spread_erdos_renyi_graph_prob_0.2_trial_0.stats.csv@2023-03-23_14.30.51
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.2.dumped.yml
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.2.sqlite
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.2_trial_0.csv
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.2_trial_0.sqlite
|
||
│ └── Spread_erdos_renyi_graph_prob_0.2_trial_0.stats.csv
|
||
├── [01;34mSpread_erdos_renyi_graph_prob_0.3[00m
|
||
│ ├── [01;34mbackup[00m
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.3.dumped.yml@2023-03-23_12.57.32
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.3.dumped.yml@2023-03-23_14.06.28
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.3.dumped.yml@2023-03-23_14.19.31
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.3.dumped.yml@2023-03-23_14.30.53
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.3.sqlite@2023-03-23_12.57.33
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.3.sqlite@2023-03-23_14.06.28
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.3.sqlite@2023-03-23_14.19.31
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.3.sqlite@2023-03-23_14.30.53
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.3_trial_0.csv@2023-03-23_12.57.33
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.3_trial_0.csv@2023-03-23_14.06.28
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.3_trial_0.csv@2023-03-23_14.19.31
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.3_trial_0.csv@2023-03-23_14.30.53
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.3_trial_0.sqlite@2023-03-23_12.57.33
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.3_trial_0.sqlite@2023-03-23_14.06.28
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.3_trial_0.sqlite@2023-03-23_14.19.31
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.3_trial_0.sqlite@2023-03-23_14.30.53
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.3_trial_0.stats.csv@2023-03-23_12.57.33
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.3_trial_0.stats.csv@2023-03-23_14.06.28
|
||
│ │ ├── Spread_erdos_renyi_graph_prob_0.3_trial_0.stats.csv@2023-03-23_14.19.31
|
||
│ │ └── Spread_erdos_renyi_graph_prob_0.3_trial_0.stats.csv@2023-03-23_14.30.53
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.3.dumped.yml
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.3.sqlite
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.3_trial_0.csv
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.3_trial_0.sqlite
|
||
│ └── Spread_erdos_renyi_graph_prob_0.3_trial_0.stats.csv
|
||
└── [01;34mSpread_erdos_renyi_graph_prob_0.4[00m
|
||
├── [01;34mbackup[00m
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.4.dumped.yml@2023-03-23_12.57.34
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.4.dumped.yml@2023-03-23_14.06.30
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.4.dumped.yml@2023-03-23_14.19.33
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.4.dumped.yml@2023-03-23_14.30.55
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.4.sqlite@2023-03-23_12.57.35
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.4.sqlite@2023-03-23_14.06.30
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.4.sqlite@2023-03-23_14.19.33
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.4.sqlite@2023-03-23_14.30.56
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.4_trial_0.csv@2023-03-23_12.57.35
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.4_trial_0.csv@2023-03-23_14.06.30
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.4_trial_0.csv@2023-03-23_14.19.33
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.4_trial_0.csv@2023-03-23_14.30.56
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.4_trial_0.sqlite@2023-03-23_12.57.35
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.4_trial_0.sqlite@2023-03-23_14.06.30
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.4_trial_0.sqlite@2023-03-23_14.19.33
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.4_trial_0.sqlite@2023-03-23_14.30.56
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.4_trial_0.stats.csv@2023-03-23_12.57.35
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.4_trial_0.stats.csv@2023-03-23_14.06.30
|
||
│ ├── Spread_erdos_renyi_graph_prob_0.4_trial_0.stats.csv@2023-03-23_14.19.33
|
||
│ └── Spread_erdos_renyi_graph_prob_0.4_trial_0.stats.csv@2023-03-23_14.30.56
|
||
├── Spread_erdos_renyi_graph_prob_0.4.dumped.yml
|
||
├── Spread_erdos_renyi_graph_prob_0.4.sqlite
|
||
├── Spread_erdos_renyi_graph_prob_0.4_trial_0.csv
|
||
├── Spread_erdos_renyi_graph_prob_0.4_trial_0.sqlite
|
||
└── Spread_erdos_renyi_graph_prob_0.4_trial_0.stats.csv
|
||
|
||
20 directories, 250 files
|
||
1.3M soil_output/Spread_barabasi_albert_graph_prob_0.0/backup
|
||
1.7M soil_output/Spread_barabasi_albert_graph_prob_0.0
|
||
1.3M soil_output/Spread_barabasi_albert_graph_prob_0.1/backup
|
||
1.7M soil_output/Spread_barabasi_albert_graph_prob_0.1
|
||
1.3M soil_output/Spread_barabasi_albert_graph_prob_0.2/backup
|
||
1.6M soil_output/Spread_barabasi_albert_graph_prob_0.2
|
||
1.3M soil_output/Spread_barabasi_albert_graph_prob_0.3/backup
|
||
1.7M soil_output/Spread_barabasi_albert_graph_prob_0.3
|
||
1.3M soil_output/Spread_barabasi_albert_graph_prob_0.4/backup
|
||
1.7M soil_output/Spread_barabasi_albert_graph_prob_0.4
|
||
2.7M soil_output/Spread_erdos_renyi_graph_prob_0.0/backup
|
||
3.4M soil_output/Spread_erdos_renyi_graph_prob_0.0
|
||
2.7M soil_output/Spread_erdos_renyi_graph_prob_0.1/backup
|
||
3.4M soil_output/Spread_erdos_renyi_graph_prob_0.1
|
||
2.7M soil_output/Spread_erdos_renyi_graph_prob_0.2/backup
|
||
3.4M soil_output/Spread_erdos_renyi_graph_prob_0.2
|
||
2.7M soil_output/Spread_erdos_renyi_graph_prob_0.3/backup
|
||
3.4M soil_output/Spread_erdos_renyi_graph_prob_0.3
|
||
2.7M soil_output/Spread_erdos_renyi_graph_prob_0.4/backup
|
||
3.4M soil_output/Spread_erdos_renyi_graph_prob_0.4
|
||
|
||
|
||
Analysing the results
|
||
---------------------
|
||
|
||
Loading data
|
||
~~~~~~~~~~~~
|
||
|
||
Once the simulations are over, we can use soil to analyse the results.
|
||
|
||
Soil allows you to load results for specific trials, or for a set of
|
||
trials if you specify a pattern. The specific methods are:
|
||
|
||
- ``analysis.read_data(<directory pattern>)`` to load all the results
|
||
from a directory. e.g. \ ``read_data('my_simulation/')``. For each
|
||
trial it finds in each folder matching the pattern, it will return
|
||
the dumped configuration for the simulation, the results of the
|
||
trial, and the configuration itself. By default, it will try to load
|
||
data from the sqlite database.
|
||
- ``analysis.read_csv(<csv_file>)`` to load all the results from a CSV
|
||
file.
|
||
e.g. \ ``read_csv('my_simulation/my_simulation_trial0.environment.csv')``
|
||
- ``analysis.read_sql(<sqlite_file>)`` to load all the results from a
|
||
sqlite database .
|
||
e.g. \ ``read_sql('my_simulation/my_simulation_trial0.db.sqlite')``
|
||
|
||
Let’s see it in action by loading the stored results into a pandas
|
||
dataframe:
|
||
|
||
.. code:: ipython3
|
||
|
||
from soil import analysis
|
||
import pandas as pd
|
||
|
||
.. code:: ipython3
|
||
|
||
df = analysis.read_csv('soil_output/Spread_barabasi_albert_graph_prob_0.0/Spread_barabasi_albert_graph_prob_0.0_trial_0.csv')
|
||
df
|
||
|
||
|
||
|
||
|
||
.. raw:: html
|
||
|
||
<div>
|
||
<style scoped>
|
||
.dataframe tbody tr th:only-of-type {
|
||
vertical-align: middle;
|
||
}
|
||
|
||
.dataframe tbody tr th {
|
||
vertical-align: top;
|
||
}
|
||
|
||
.dataframe thead tr th {
|
||
text-align: left;
|
||
}
|
||
|
||
.dataframe thead tr:last-of-type th {
|
||
text-align: right;
|
||
}
|
||
</style>
|
||
<table border="1" class="dataframe">
|
||
<thead>
|
||
<tr>
|
||
<th>key</th>
|
||
<th>SEED</th>
|
||
<th colspan="9" halign="left">alive</th>
|
||
<th>...</th>
|
||
<th colspan="10" halign="left">state_id</th>
|
||
</tr>
|
||
<tr>
|
||
<th>agent_id</th>
|
||
<th>env</th>
|
||
<th>0</th>
|
||
<th>1</th>
|
||
<th>10</th>
|
||
<th>100</th>
|
||
<th>101</th>
|
||
<th>102</th>
|
||
<th>103</th>
|
||
<th>104</th>
|
||
<th>105</th>
|
||
<th>...</th>
|
||
<th>90</th>
|
||
<th>91</th>
|
||
<th>92</th>
|
||
<th>93</th>
|
||
<th>94</th>
|
||
<th>95</th>
|
||
<th>96</th>
|
||
<th>97</th>
|
||
<th>98</th>
|
||
<th>99</th>
|
||
</tr>
|
||
<tr>
|
||
<th>t_step</th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<th>0.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>1.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>2.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>3.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>4.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>5.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>6.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>7.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>8.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>9.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>10.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>11.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>12.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>13.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>14.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>15.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>16.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>17.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>18.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>19.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p>20 rows × 2507 columns</p>
|
||
</div>
|
||
|
||
|
||
|
||
Soil can also process the data for us and split the results into
|
||
environment attributes and agent attributes:
|
||
|
||
.. code:: ipython3
|
||
|
||
env, agents = analysis.split_processed(df)
|
||
|
||
.. code:: ipython3
|
||
|
||
agents
|
||
|
||
|
||
|
||
|
||
.. raw:: html
|
||
|
||
<div>
|
||
<style scoped>
|
||
.dataframe tbody tr th:only-of-type {
|
||
vertical-align: middle;
|
||
}
|
||
|
||
.dataframe tbody tr th {
|
||
vertical-align: top;
|
||
}
|
||
|
||
.dataframe thead tr th {
|
||
text-align: left;
|
||
}
|
||
|
||
.dataframe thead tr:last-of-type th {
|
||
text-align: right;
|
||
}
|
||
</style>
|
||
<table border="1" class="dataframe">
|
||
<thead>
|
||
<tr>
|
||
<th>key</th>
|
||
<th colspan="10" halign="left">alive</th>
|
||
<th>...</th>
|
||
<th colspan="10" halign="left">state_id</th>
|
||
</tr>
|
||
<tr>
|
||
<th>agent_id</th>
|
||
<th>0</th>
|
||
<th>1</th>
|
||
<th>10</th>
|
||
<th>100</th>
|
||
<th>101</th>
|
||
<th>102</th>
|
||
<th>103</th>
|
||
<th>104</th>
|
||
<th>105</th>
|
||
<th>106</th>
|
||
<th>...</th>
|
||
<th>90</th>
|
||
<th>91</th>
|
||
<th>92</th>
|
||
<th>93</th>
|
||
<th>94</th>
|
||
<th>95</th>
|
||
<th>96</th>
|
||
<th>97</th>
|
||
<th>98</th>
|
||
<th>99</th>
|
||
</tr>
|
||
<tr>
|
||
<th>t_step</th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<th>0.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>1.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>2.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>3.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>4.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>5.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>6.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>7.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>8.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>9.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>10.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>11.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>12.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>13.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>14.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>15.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>16.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>17.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>18.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>19.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p>20 rows × 2504 columns</p>
|
||
</div>
|
||
|
||
|
||
|
||
The index of the results are the simulation step. Hence, we can access
|
||
the state of the simulation at a given step (e.g., 13):
|
||
|
||
.. code:: ipython3
|
||
|
||
agents.loc[13, 'state_id']
|
||
|
||
|
||
|
||
|
||
.. parsed-literal::
|
||
|
||
agent_id
|
||
0 infected
|
||
1 infected
|
||
10 infected
|
||
100 infected
|
||
101 infected
|
||
...
|
||
95 infected
|
||
96 infected
|
||
97 infected
|
||
98 infected
|
||
99 infected
|
||
Name: 13.0, Length: 500, dtype: object
|
||
|
||
|
||
|
||
Or, we can perform more complex tasks such as showing the agents that
|
||
have changed their state between two simulation steps (2 and 1):
|
||
|
||
.. code:: ipython3
|
||
|
||
(agents.loc[2]['state_id'] != agents.loc[1]['state_id']).sum()
|
||
|
||
|
||
|
||
|
||
.. parsed-literal::
|
||
|
||
2
|
||
|
||
|
||
|
||
To focus on specific agents, we can swap the levels of the index:
|
||
|
||
.. code:: ipython3
|
||
|
||
agents.swaplevel(axis=1)
|
||
|
||
|
||
|
||
|
||
.. raw:: html
|
||
|
||
<div>
|
||
<style scoped>
|
||
.dataframe tbody tr th:only-of-type {
|
||
vertical-align: middle;
|
||
}
|
||
|
||
.dataframe tbody tr th {
|
||
vertical-align: top;
|
||
}
|
||
|
||
.dataframe thead tr th {
|
||
text-align: left;
|
||
}
|
||
|
||
.dataframe thead tr:last-of-type th {
|
||
text-align: right;
|
||
}
|
||
</style>
|
||
<table border="1" class="dataframe">
|
||
<thead>
|
||
<tr>
|
||
<th>agent_id</th>
|
||
<th>0</th>
|
||
<th>1</th>
|
||
<th>10</th>
|
||
<th>100</th>
|
||
<th>101</th>
|
||
<th>102</th>
|
||
<th>103</th>
|
||
<th>104</th>
|
||
<th>105</th>
|
||
<th>106</th>
|
||
<th>...</th>
|
||
<th>90</th>
|
||
<th>91</th>
|
||
<th>92</th>
|
||
<th>93</th>
|
||
<th>94</th>
|
||
<th>95</th>
|
||
<th>96</th>
|
||
<th>97</th>
|
||
<th>98</th>
|
||
<th>99</th>
|
||
</tr>
|
||
<tr>
|
||
<th>key</th>
|
||
<th>alive</th>
|
||
<th>alive</th>
|
||
<th>alive</th>
|
||
<th>alive</th>
|
||
<th>alive</th>
|
||
<th>alive</th>
|
||
<th>alive</th>
|
||
<th>alive</th>
|
||
<th>alive</th>
|
||
<th>alive</th>
|
||
<th>...</th>
|
||
<th>state_id</th>
|
||
<th>state_id</th>
|
||
<th>state_id</th>
|
||
<th>state_id</th>
|
||
<th>state_id</th>
|
||
<th>state_id</th>
|
||
<th>state_id</th>
|
||
<th>state_id</th>
|
||
<th>state_id</th>
|
||
<th>state_id</th>
|
||
</tr>
|
||
<tr>
|
||
<th>t_step</th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<th>0.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>1.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>2.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>3.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>4.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>5.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>6.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>7.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>8.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>9.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>10.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>11.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>12.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>13.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>14.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>15.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>16.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>17.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>18.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>19.0</th>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p>20 rows × 2504 columns</p>
|
||
</div>
|
||
|
||
|
||
|
||
Plotting data
|
||
~~~~~~~~~~~~~
|
||
|
||
If you don’t want to work with pandas, you can also use some pre-defined
|
||
functions from soil to conveniently plot the results:
|
||
|
||
.. code:: ipython3
|
||
|
||
analysis.plot_all('soil_output/Spread_barabasi_albert_graph_prob_0.0/', analysis.get_count, 'state_id');
|
||
|
||
|
||
|
||
.. image:: output_55_0.png
|
||
|
||
|
||
.. code:: ipython3
|
||
|
||
analysis.plot_all('soil_output/Spread_barabasi_albert_graph_prob_0.3/', analysis.get_count, 'state_id');
|
||
|
||
|
||
|
||
.. image:: output_56_0.png
|
||
|
||
|
||
You can use wildcards in the results path:
|
||
|
||
.. code:: ipython3
|
||
|
||
analysis.plot_all('soil_output/Spread_barabasi*/', analysis.get_count, 'state_id');
|
||
|
||
|
||
|
||
.. image:: output_58_0.png
|
||
|
||
|
||
|
||
.. image:: output_58_1.png
|
||
|
||
|
||
|
||
.. image:: output_58_2.png
|
||
|
||
|
||
|
||
.. image:: output_58_3.png
|
||
|
||
|
||
|
||
.. image:: output_58_4.png
|
||
|
||
|
||
If we compare these results to those of the other graph model (a
|
||
fully-connected graph), we can see a stark difference:
|
||
|
||
.. code:: ipython3
|
||
|
||
analysis.plot_all('soil_output/Spread_erdos*', analysis.get_count, 'state_id');
|
||
|
||
|
||
|
||
.. image:: output_60_0.png
|
||
|
||
|
||
|
||
.. image:: output_60_1.png
|
||
|
||
|
||
|
||
.. image:: output_60_2.png
|
||
|
||
|
||
|
||
.. image:: output_60_3.png
|
||
|
||
|
||
|
||
.. image:: output_60_4.png
|
||
|
||
|
||
The previous cells were using the ``count_value`` function for
|
||
aggregation. There’s another function to plot numeral values:
|
||
|
||
.. code:: ipython3
|
||
|
||
analysis.plot_all('soil_output/Spread_erdos*', analysis.get_value, 'prob_tv_spread');
|
||
|
||
|
||
|
||
.. image:: output_62_0.png
|
||
|
||
|
||
|
||
.. image:: output_62_1.png
|
||
|
||
|
||
|
||
.. image:: output_62_2.png
|
||
|
||
|
||
|
||
.. image:: output_62_3.png
|
||
|
||
|
||
|
||
.. image:: output_62_4.png
|
||
|
||
|
||
Manually plotting with pandas
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
Although the simplest way to visualize the results of a simulation is to
|
||
use the built-in methods in the analysis module, sometimes the setup is
|
||
more complicated and we need to explore the data a little further.
|
||
|
||
For that, we can use native pandas over the results.
|
||
|
||
Soil provides some convenience methods to simplify common operations:
|
||
|
||
- ``analysis.split_df`` to separate a history dataframe into
|
||
environment and agent parameters.
|
||
- ``analysis.get_count`` to get a dataframe with the value counts for
|
||
different attributes during the simulation.
|
||
- ``analysis.get_value`` to get the evolution of the value of an
|
||
attribute during the simulation.
|
||
|
||
And, as we saw earlier, ``analysis.process`` can turn a dataframe in
|
||
canonical form into a dataframe with a column per attribute.
|
||
|
||
.. code:: ipython3
|
||
|
||
!ls soil_output/Spread_barabasi_albert_graph_prob_0.0/Spread_barabasi_albert_graph_prob_0*
|
||
|
||
|
||
.. parsed-literal::
|
||
|
||
soil_output/Spread_barabasi_albert_graph_prob_0.0/Spread_barabasi_albert_graph_prob_0.0.dumped.yml
|
||
soil_output/Spread_barabasi_albert_graph_prob_0.0/Spread_barabasi_albert_graph_prob_0.0.sqlite
|
||
soil_output/Spread_barabasi_albert_graph_prob_0.0/Spread_barabasi_albert_graph_prob_0.0_trial_0.csv
|
||
soil_output/Spread_barabasi_albert_graph_prob_0.0/Spread_barabasi_albert_graph_prob_0.0_trial_0.sqlite
|
||
soil_output/Spread_barabasi_albert_graph_prob_0.0/Spread_barabasi_albert_graph_prob_0.0_trial_0.stats.csv
|
||
|
||
|
||
.. code:: ipython3
|
||
|
||
df = analysis.read_sql('soil_output/Spread_barabasi_albert_graph_prob_0.0/Spread_barabasi_albert_graph_prob_0.0_trial_0.sqlite')
|
||
df
|
||
|
||
|
||
|
||
|
||
.. raw:: html
|
||
|
||
<div>
|
||
<style scoped>
|
||
.dataframe tbody tr th:only-of-type {
|
||
vertical-align: middle;
|
||
}
|
||
|
||
.dataframe tbody tr th {
|
||
vertical-align: top;
|
||
}
|
||
|
||
.dataframe thead tr th {
|
||
text-align: left;
|
||
}
|
||
|
||
.dataframe thead tr:last-of-type th {
|
||
text-align: right;
|
||
}
|
||
</style>
|
||
<table border="1" class="dataframe">
|
||
<thead>
|
||
<tr>
|
||
<th>key</th>
|
||
<th>SEED</th>
|
||
<th colspan="9" halign="left">alive</th>
|
||
<th>...</th>
|
||
<th colspan="10" halign="left">state_id</th>
|
||
</tr>
|
||
<tr>
|
||
<th>dict_id</th>
|
||
<th>env</th>
|
||
<th>0</th>
|
||
<th>1</th>
|
||
<th>10</th>
|
||
<th>100</th>
|
||
<th>101</th>
|
||
<th>102</th>
|
||
<th>103</th>
|
||
<th>104</th>
|
||
<th>105</th>
|
||
<th>...</th>
|
||
<th>90</th>
|
||
<th>91</th>
|
||
<th>92</th>
|
||
<th>93</th>
|
||
<th>94</th>
|
||
<th>95</th>
|
||
<th>96</th>
|
||
<th>97</th>
|
||
<th>98</th>
|
||
<th>99</th>
|
||
</tr>
|
||
<tr>
|
||
<th>t_step</th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<th>0.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>1.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>2.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>3.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>4.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>5.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>6.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>7.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>8.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>9.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>10.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>neutral</td>
|
||
</tr>
|
||
<tr>
|
||
<th>11.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>neutral</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>12.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>13.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>14.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>15.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>16.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>17.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>18.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
<tr>
|
||
<th>19.0</th>
|
||
<td>Spread_barabasi_albert_graph_prob_0.0_trial_0</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>True</td>
|
||
<td>...</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
<td>infected</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p>20 rows × 3008 columns</p>
|
||
</div>
|
||
|
||
|
||
|
||
Let’s look at the evolution of agent parameters in the simulation
|
||
|
||
.. code:: ipython3
|
||
|
||
df.plot()
|
||
|
||
|
||
|
||
|
||
.. parsed-literal::
|
||
|
||
<Axes: xlabel='t_step'>
|
||
|
||
|
||
|
||
|
||
.. image:: output_68_1.png
|
||
|
||
|
||
As we can see, ``event_time`` and ``interval`` are cluttering our
|
||
results,
|
||
|
||
.. code:: ipython3
|
||
|
||
del df['interval']
|
||
del df['event_time']
|
||
df.plot()
|
||
|
||
|
||
|
||
|
||
.. parsed-literal::
|
||
|
||
<Axes: xlabel='t_step'>
|
||
|
||
|
||
|
||
|
||
.. image:: output_70_1.png
|
||
|
||
|
||
The ``soil.analysis`` module also provides convenient functions to count
|
||
the number of agents in a given state:
|
||
|
||
.. code:: ipython3
|
||
|
||
analysis.get_count(agents, 'state_id').plot();
|
||
|
||
|
||
|
||
.. image:: output_72_0.png
|
||
|
||
|
||
Dealing with bigger data
|
||
------------------------
|
||
|
||
.. code:: ipython3
|
||
|
||
from soil import analysis
|
||
|
||
.. code:: ipython3
|
||
|
||
!du -xsh ../rabbits/soil_output/rabbits_example/
|
||
|
||
|
||
.. parsed-literal::
|
||
|
||
1.1M ../rabbits/soil_output/rabbits_example/
|
||
|
||
|
||
If we tried to load the entire history, we would probably run out of
|
||
memory. Hence, it is recommended that you also specify the attributes
|
||
you are interested in.
|
||
|
||
.. code:: ipython3
|
||
|
||
p = analysis.plot_all('../rabbits/soil_output/rabbits_example/', analysis.get_count, 'state_id')
|
||
|
||
|
||
|
||
.. image:: output_77_0.png
|
||
|
||
|
||
.. code:: ipython3
|
||
|
||
!ls ../rabbits/soil_output/rabbits_example
|
||
|
||
|
||
.. parsed-literal::
|
||
|
||
backup rabbits_example.sqlite
|
||
rabbits_example.dumped.yml rabbits_example_trial_0.sqlite
|
||
|
||
|
||
.. code:: ipython3
|
||
|
||
df = analysis.read_sql('../rabbits/soil_output/rabbits_example/rabbits_example_trial_0.sqlite', keys=['state_id', 'rabbits_alive'])
|
||
|
||
.. code:: ipython3
|
||
|
||
df
|
||
|
||
|
||
|
||
|
||
.. raw:: html
|
||
|
||
<div>
|
||
<style scoped>
|
||
.dataframe tbody tr th:only-of-type {
|
||
vertical-align: middle;
|
||
}
|
||
|
||
.dataframe tbody tr th {
|
||
vertical-align: top;
|
||
}
|
||
|
||
.dataframe thead tr th {
|
||
text-align: left;
|
||
}
|
||
|
||
.dataframe thead tr:last-of-type th {
|
||
text-align: right;
|
||
}
|
||
</style>
|
||
<table border="1" class="dataframe">
|
||
<thead>
|
||
<tr>
|
||
<th>key</th>
|
||
<th>rabbits_alive</th>
|
||
<th colspan="20" halign="left">state_id</th>
|
||
</tr>
|
||
<tr>
|
||
<th>dict_id</th>
|
||
<th>env</th>
|
||
<th>0</th>
|
||
<th>1</th>
|
||
<th>10</th>
|
||
<th>100</th>
|
||
<th>101</th>
|
||
<th>102</th>
|
||
<th>103</th>
|
||
<th>104</th>
|
||
<th>105</th>
|
||
<th>...</th>
|
||
<th>90</th>
|
||
<th>91</th>
|
||
<th>92</th>
|
||
<th>93</th>
|
||
<th>94</th>
|
||
<th>95</th>
|
||
<th>96</th>
|
||
<th>97</th>
|
||
<th>98</th>
|
||
<th>99</th>
|
||
</tr>
|
||
<tr>
|
||
<th>t_step</th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<th>0.0</th>
|
||
<td>0</td>
|
||
<td>newborn</td>
|
||
<td>newborn</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>...</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
</tr>
|
||
<tr>
|
||
<th>2.0</th>
|
||
<td>0</td>
|
||
<td>fertile</td>
|
||
<td>fertile</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>...</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
</tr>
|
||
<tr>
|
||
<th>16.0</th>
|
||
<td>0</td>
|
||
<td>pregnant</td>
|
||
<td>fertile</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>...</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
</tr>
|
||
<tr>
|
||
<th>49.0</th>
|
||
<td>8</td>
|
||
<td>fertile</td>
|
||
<td>fertile</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>...</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
</tr>
|
||
<tr>
|
||
<th>51.0</th>
|
||
<td>8</td>
|
||
<td>fertile</td>
|
||
<td>fertile</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>...</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
<td>nan</td>
|
||
</tr>
|
||
<tr>
|
||
<th>...</th>
|
||
<td>...</td>
|
||
<td>...</td>
|
||
<td>...</td>
|
||
<td>...</td>
|
||
<td>...</td>
|
||
<td>...</td>
|
||
<td>...</td>
|
||
<td>...</td>
|
||
<td>...</td>
|
||
<td>...</td>
|
||
<td>...</td>
|
||
<td>...</td>
|
||
<td>...</td>
|
||
<td>...</td>
|
||
<td>...</td>
|
||
<td>...</td>
|
||
<td>...</td>
|
||
<td>...</td>
|
||
<td>...</td>
|
||
<td>...</td>
|
||
<td>...</td>
|
||
</tr>
|
||
<tr>
|
||
<th>739.0</th>
|
||
<td>15</td>
|
||
<td>fertile</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>fertile</td>
|
||
<td>dead</td>
|
||
<td>fertile</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>...</td>
|
||
<td>dead</td>
|
||
<td>fertile</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>fertile</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
</tr>
|
||
<tr>
|
||
<th>742.0</th>
|
||
<td>14</td>
|
||
<td>fertile</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>fertile</td>
|
||
<td>dead</td>
|
||
<td>fertile</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>...</td>
|
||
<td>dead</td>
|
||
<td>fertile</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>fertile</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
</tr>
|
||
<tr>
|
||
<th>743.0</th>
|
||
<td>12</td>
|
||
<td>fertile</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>fertile</td>
|
||
<td>dead</td>
|
||
<td>fertile</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>...</td>
|
||
<td>dead</td>
|
||
<td>fertile</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>fertile</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
</tr>
|
||
<tr>
|
||
<th>744.0</th>
|
||
<td>10</td>
|
||
<td>fertile</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>fertile</td>
|
||
<td>dead</td>
|
||
<td>fertile</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>...</td>
|
||
<td>dead</td>
|
||
<td>fertile</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>fertile</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
</tr>
|
||
<tr>
|
||
<th>751.0</th>
|
||
<td>9</td>
|
||
<td>fertile</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>fertile</td>
|
||
<td>dead</td>
|
||
<td>fertile</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>...</td>
|
||
<td>dead</td>
|
||
<td>fertile</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>fertile</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
<td>dead</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p>326 rows × 349 columns</p>
|
||
</div>
|
||
|
||
|
||
|
||
.. code:: ipython3
|
||
|
||
states = analysis.get_count(df, 'state_id')
|
||
states.plot();
|
||
|
||
|
||
|
||
.. image:: output_81_0.png
|
||
|
||
|
||
.. code:: ipython3
|
||
|
||
alive = analysis.get_value(df, 'rabbits_alive', aggfunc='sum').apply(pd.to_numeric)
|
||
alive.plot()
|
||
|
||
|
||
|
||
|
||
.. parsed-literal::
|
||
|
||
<Axes: xlabel='t_step'>
|
||
|
||
|
||
|
||
|
||
.. image:: output_82_1.png
|
||
|
||
|
||
.. code:: ipython3
|
||
|
||
h = pd.concat([alive, states]);
|
||
h.plot();
|
||
|
||
|
||
|
||
.. image:: output_83_0.png
|
||
|