You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
soil/examples/tutorial/soil_tutorial.ipynb

3868 lines
725 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T12:41:48.007238Z",
"start_time": "2017-10-19T14:41:47.980725+02:00"
}
},
"source": [
"# Soil Tutorial"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-02T16:44:14.120953Z",
"start_time": "2017-07-02T18:44:14.117152+02:00"
}
},
"source": [
"## Introduction"
]
},
{
"cell_type": "markdown",
"metadata": {
"cell_style": "center",
"collapsed": true
},
"source": [
"This notebook is an introduction to the soil agent-based social network simulation framework.\n",
"In particular, we will focus on a specific use case: studying the propagation of news in a social network.\n",
"\n",
"The steps we will follow are:\n",
"\n",
"* Modelling the behavior of agents\n",
"* Running the simulation using different configurations\n",
"* Analysing the results of each simulation"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-03T13:38:48.052876Z",
"start_time": "2017-07-03T15:38:48.044762+02:00"
}
},
"source": [
"But before that, let's import the soil module and networkx."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:56:07.621891Z",
"start_time": "2017-10-19T17:56:06.963273+02:00"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"import soil\n",
"import networkx as nx\n",
" \n",
"%load_ext autoreload\n",
"%autoreload 2\n",
"\n",
"%pylab inline\n",
"# To display plots in the notebooed_"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-03T13:41:19.788717Z",
"start_time": "2017-07-03T15:41:19.785448+02:00"
}
},
"source": [
"## Basic concepts"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"There are three main elements in a soil simulation:\n",
" \n",
"* The network topology. A simulation may use an existing NetworkX topology, or generate one on the fly\n",
"* 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.\n",
"* The environment. It assigns agents to nodes in the network, and stores the environment parameters (shared state for all agents).\n",
"\n",
"Soil is based on ``simpy``, which is an event-based network simulation library.\n",
"Soil provides several abstractions over events to make developing agents easier.\n",
"This means you can use events (timeouts, delays) in soil, but for the most part we will assume your models will be step-based.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-02T15:55:12.933978Z",
"start_time": "2017-07-02T17:55:12.930860+02:00"
}
},
"source": [
"## Modeling behaviour"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-03T13:49:31.269687Z",
"start_time": "2017-07-03T15:49:31.257850+02:00"
}
},
"source": [
"Our first step will be to model how every person in the social network reacts when it comes to news.\n",
"We will follow a very simple model (a finite state machine).\n",
"\n",
"There are two types of people, those who have heard about a newsworthy event (infected) or those who have not (neutral).\n",
"A neutral person may heard about the news either on the TV (with probability **prob_tv_spread**) or through their friends.\n",
"Once a person has heard the news, they will spread it to their friends (with a probability **prob_neighbor_spread**).\n",
"Some users do not have a TV, so they only rely on their friends.\n",
"\n",
"The spreading probabilities will change over time due to different factors.\n",
"We will represent this variance using an environment agent."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Network Agents"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-03T14:03:07.171127Z",
"start_time": "2017-07-03T16:03:07.165779+02:00"
}
},
"source": [
"A basic network agent in Soil should inherit from ``soil.agents.BaseAgent``, and define its behaviour in every step of the simulation by implementing a ``run(self)`` method.\n",
"The most important attributes of the agent are:\n",
"\n",
"* ``agent.state``, a dictionary with the state of the agent. ``agent.state['id']`` reflects the state id of the agent. That state id can be used to look for other networks in that specific state. The state can be access via the agent as well. For instance:\n",
"```py\n",
"a = soil.agents.BaseAgent(env=env)\n",
"a['hours_of_sleep'] = 10\n",
"print(a['hours_of_sleep'])\n",
"```\n",
" The state of the agent is stored in every step of the simulation:\n",
" ```py\n",
" print(a['hours_of_sleep', 10]) # hours of sleep before step #10\n",
" print(a[None, 0]) # whole state of the agent before step #0\n",
" ```\n",
"\n",
"* ``agent.env``, a reference to the environment. Most commonly used to get access to the environment parameters and the topology:\n",
" ```py\n",
" a.env.G.nodes() # Get all nodes ids in the topology\n",
" a.env['minimum_hours_of_sleep']\n",
"\n",
" ```\n",
"\n",
"Since our model is a finite state machine, we will be basing it on ``soil.agents.FSM``.\n",
"\n",
"With ``soil.agents.FSM``, we do not need to specify a ``step`` method.\n",
"Instead, we describe every step as a function.\n",
"To change to another state, a function may return the new state.\n",
"If no state is returned, the state remains unchanged.[\n",
"It will consist of two states, ``neutral`` (default) and ``infected``.\n",
"\n",
"Here's the code:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:56:08.659268Z",
"start_time": "2017-10-19T17:56:08.606261+02:00"
},
"collapsed": true
},
"outputs": [],
"source": [
"import random\n",
"\n",
"class NewsSpread(soil.agents.FSM):\n",
" @soil.agents.default_state\n",
" @soil.agents.state\n",
" def neutral(self):\n",
" r = random.random()\n",
" if self['has_tv'] and r < self.env['prob_tv_spread']:\n",
" return self.infected\n",
" return\n",
" \n",
" @soil.agents.state\n",
" def infected(self):\n",
" prob_infect = self.env['prob_neighbor_spread']\n",
" for neighbor in self.get_neighboring_agents(state_id=self.neutral.id):\n",
" r = random.random()\n",
" if r < prob_infect:\n",
" neighbor.state['id'] = self.infected.id\n",
" return\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-02T12:22:53.931963Z",
"start_time": "2017-07-02T14:22:53.928340+02:00"
}
},
"source": [
"### Environment agents"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Environment agents allow us to control the state of the environment.\n",
"In this case, we will use an environment agent to simulate a very viral event.\n",
"\n",
"When the event happens, the agent will modify the probability of spreading the rumor."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:56:09.116995Z",
"start_time": "2017-10-19T17:56:09.081481+02:00"
},
"collapsed": true
},
"outputs": [],
"source": [
"NEIGHBOR_FACTOR = 0.9\n",
"TV_FACTOR = 0.5\n",
"class NewsEnvironmentAgent(soil.agents.BaseAgent):\n",
" def step(self):\n",
" if self.now == self['event_time']:\n",
" self.env['prob_tv_spread'] = 1\n",
" self.env['prob_neighbor_spread'] = 1\n",
" elif self.now > self['event_time']:\n",
" self.env['prob_tv_spread'] = self.env['prob_tv_spread'] * TV_FACTOR\n",
" self.env['prob_neighbor_spread'] = self.env['prob_neighbor_spread'] * NEIGHBOR_FACTOR"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-02T11:23:18.052235Z",
"start_time": "2017-07-02T13:23:18.047452+02:00"
}
},
"source": [
"### Testing the agents"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-02T16:14:54.572431Z",
"start_time": "2017-07-02T18:14:54.564095+02:00"
}
},
"source": [
"Feel free to skip this section if this is your first time with soil."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Testing agents is not easy, and this is not a thorough testing process for agents.\n",
"Rather, this section is aimed to show you how to access internal pats of soil so you can test your agents."
]
},
{
"cell_type": "markdown",
"metadata": {
"cell_style": "split"
},
"source": [
"First of all, let's check if our network agent has the states we would expect:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:56:11.367368Z",
"start_time": "2017-10-19T17:56:11.344245+02:00"
},
"cell_style": "split"
},
"outputs": [
{
"data": {
"text/plain": [
"{'infected': <function __main__.NewsSpread.infected>,\n",
" 'neutral': <function __main__.NewsSpread.neutral>}"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"NewsSpread.states"
]
},
{
"cell_type": "markdown",
"metadata": {
"cell_style": "split"
},
"source": [
"Now, let's run a simulation on a simple network. It is comprised of three nodes:\n"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:56:12.472479Z",
"start_time": "2017-10-19T17:56:12.206162+02:00"
},
"cell_style": "split",
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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\nmd1hZh1m1tEdxYiZNWs
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd79a7d5860>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"G = nx.Graph()\n",
"G.add_edge(0, 1)\n",
"G.add_edge(0, 2)\n",
"G.add_edge(2, 3)\n",
"G.add_node(4)\n",
"pos = nx.spring_layout(G)\n",
"nx.draw_networkx(G, pos, node_color='red')\n",
"nx.draw_networkx(G, pos, nodelist=[0], node_color='blue')"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-03T11:53:30.997756Z",
"start_time": "2017-07-03T13:53:30.989609+02:00"
},
"cell_style": "split"
},
"source": [
"Let's run a simple simulation that assigns a NewsSpread agent to all the nodes in that network.\n",
"Notice how node 0 is the only one with a TV."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:56:12.719473Z",
"start_time": "2017-10-19T17:56:12.653974+02:00"
},
"cell_style": "split"
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:soil.utils:Trial: 0\n",
"INFO:soil.utils:\tRunning\n",
"INFO:soil.utils:Finished trial in 0.02695441246032715 seconds\n",
"INFO:soil.utils:NOT dumping results\n",
"INFO:soil.utils:Finished simulation in 0.03360605239868164 seconds\n"
]
}
],
"source": [
"env_params = {'prob_tv_spread': 0,\n",
" 'prob_neighbor_spread': 0}\n",
"\n",
"MAX_TIME = 100\n",
"EVENT_TIME = 10\n",
"\n",
"sim = soil.simulation.SoilSimulation(topology=G,\n",
" num_trials=1,\n",
" max_time=MAX_TIME,\n",
" environment_agents=[{'agent_type': NewsEnvironmentAgent,\n",
" 'state': {\n",
" 'event_time': EVENT_TIME\n",
" }}],\n",
" network_agents=[{'agent_type': NewsSpread,\n",
" 'weight': 1}],\n",
" states={0: {'has_tv': True}},\n",
" default_state={'has_tv': False},\n",
" environment_params=env_params)\n",
"env = sim.run_simulation()[0]"
]
},
{
"cell_type": "markdown",
"metadata": {
"cell_style": "split"
},
"source": [
"Now we can access the results of the simulation and compare them to our expected results"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:56:15.004439Z",
"start_time": "2017-10-19T17:56:14.904160+02:00"
},
"cell_style": "split",
"collapsed": true,
"scrolled": false
},
"outputs": [],
"source": [
"agents = list(env.network_agents)\n",
"\n",
"# Until the event, all agents are neutral\n",
"for t in range(10):\n",
" for a in agents:\n",
" assert a['id', t] == a.neutral.id\n",
"\n",
"# After the event, the node with a TV is infected, the rest are not\n",
"assert agents[0]['id', 11] == NewsSpread.infected.id\n",
"\n",
"for a in agents[1:4]:\n",
" assert a['id', 11] == NewsSpread.neutral.id\n",
"\n",
"# At the end, the agents connected to the infected one will probably be infected, too.\n",
"assert agents[1]['id', MAX_TIME] == NewsSpread.infected.id\n",
"assert agents[2]['id', MAX_TIME] == NewsSpread.infected.id\n",
"\n",
"# But the node with no friends should not be affected\n",
"assert agents[4]['id', MAX_TIME] == NewsSpread.neutral.id\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-02T16:41:09.110652Z",
"start_time": "2017-07-02T18:41:09.106966+02:00"
},
"cell_style": "split"
},
"source": [
"Lastly, let's see if the probabilities have decreased as expected:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:56:17.382019Z",
"start_time": "2017-10-19T17:56:17.340851+02:00"
},
"cell_style": "split",
"collapsed": true
},
"outputs": [],
"source": [
"assert abs(env.environment_params['prob_neighbor_spread'] - (NEIGHBOR_FACTOR**(MAX_TIME-1-10))) < 10e-4\n",
"assert abs(env.environment_params['prob_tv_spread'] - (TV_FACTOR**(MAX_TIME-1-10))) < 10e-6"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Running the simulation"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-03T11:20:28.566944Z",
"start_time": "2017-07-03T13:20:28.561052+02:00"
},
"cell_style": "split"
},
"source": [
"To run a simulation, we need a configuration.\n",
"Soil can load configurations from python dictionaries as well as JSON and YAML files.\n",
"For this demo, we will use a python dictionary:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:56:19.477080Z",
"start_time": "2017-10-19T17:56:19.386840+02:00"
},
"cell_style": "split",
"collapsed": true
},
"outputs": [],
"source": [
"config = {\n",
" 'name': 'ExampleSimulation',\n",
" 'max_time': 20,\n",
" 'interval': 1,\n",
" 'num_trials': 1,\n",
" 'network_params': {\n",
" 'generator': 'complete_graph',\n",
" 'n': 500,\n",
" },\n",
" 'network_agents': [\n",
" {\n",
" 'agent_type': NewsSpread,\n",
" 'weight': 1,\n",
" 'state': {\n",
" 'has_tv': False\n",
" }\n",
" },\n",
" {\n",
" 'agent_type': NewsSpread,\n",
" 'weight': 2,\n",
" 'state': {\n",
" 'has_tv': True\n",
" }\n",
" }\n",
" ],\n",
" 'environment_agents':[\n",
" {'agent_type': NewsEnvironmentAgent,\n",
" 'state': {\n",
" 'event_time': 10\n",
" }\n",
" }\n",
" ],\n",
" 'states': [ {'has_tv': True} ],\n",
" 'environment_params':{\n",
" 'prob_tv_spread': 0.01,\n",
" 'prob_neighbor_spread': 0.5\n",
" }\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-03T11:57:34.219618Z",
"start_time": "2017-07-03T13:57:34.213817+02:00"
},
"cell_style": "split"
},
"source": [
"Let's run our simulation:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:56:28.208300Z",
"start_time": "2017-10-19T17:56:20.515069+02:00"
},
"cell_style": "split"
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:soil.utils:Using config(s): ExampleSimulation\n",
"INFO:soil.utils:Dumping results to soil_output/ExampleSimulation : False\n",
"INFO:soil.utils:Trial: 0\n",
"INFO:soil.utils:\tRunning\n",
"INFO:soil.utils:Finished trial in 5.869051456451416 seconds\n",
"INFO:soil.utils:NOT dumping results\n",
"INFO:soil.utils:Finished simulation in 6.9609293937683105 seconds\n"
]
}
],
"source": [
"soil.simulation.run_from_config(config, dump=False)"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-03T12:03:32.183588Z",
"start_time": "2017-07-03T14:03:32.167797+02:00"
},
"cell_style": "split",
"collapsed": true
},
"source": [
"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.\n",
"\n",
"For instance:\n",
" \n",
"* Does the outcome depend on the structure of our network? We will use different generation algorithms to compare them (Barabasi-Albert and Erdos-Renyi)\n",
"* 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."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:57:10.690166Z",
"start_time": "2017-10-19T17:56:28.210104+02:00"
},
"cell_style": "split",
"scrolled": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:soil.utils:Using config(s): Spread_erdos_renyi_graph_prob_0.0\n",
"INFO:soil.utils:Dumping results to soil_output/Spread_erdos_renyi_graph_prob_0.0 : True\n",
"INFO:soil.utils:Trial: 0\n",
"INFO:soil.utils:\tRunning\n",
"INFO:soil.utils:Finished trial in 1.2258412837982178 seconds\n",
"INFO:soil.utils:Dumping results to soil_output/Spread_erdos_renyi_graph_prob_0.0\n",
"INFO:soil.utils:Finished simulation in 5.597268104553223 seconds\n",
"INFO:soil.utils:Using config(s): Spread_erdos_renyi_graph_prob_0.1\n",
"INFO:soil.utils:Dumping results to soil_output/Spread_erdos_renyi_graph_prob_0.1 : True\n",
"INFO:soil.utils:Trial: 0\n",
"INFO:soil.utils:\tRunning\n",
"INFO:soil.utils:Finished trial in 1.3026399612426758 seconds\n",
"INFO:soil.utils:Dumping results to soil_output/Spread_erdos_renyi_graph_prob_0.1\n",
"INFO:soil.utils:Finished simulation in 5.534018278121948 seconds\n",
"INFO:soil.utils:Using config(s): Spread_erdos_renyi_graph_prob_0.2\n",
"INFO:soil.utils:Dumping results to soil_output/Spread_erdos_renyi_graph_prob_0.2 : True\n",
"INFO:soil.utils:Trial: 0\n",
"INFO:soil.utils:\tRunning\n",
"INFO:soil.utils:Finished trial in 1.4764575958251953 seconds\n",
"INFO:soil.utils:Dumping results to soil_output/Spread_erdos_renyi_graph_prob_0.2\n",
"INFO:soil.utils:Finished simulation in 6.170421123504639 seconds\n",
"INFO:soil.utils:Using config(s): Spread_erdos_renyi_graph_prob_0.3\n",
"INFO:soil.utils:Dumping results to soil_output/Spread_erdos_renyi_graph_prob_0.3 : True\n",
"INFO:soil.utils:Trial: 0\n",
"INFO:soil.utils:\tRunning\n",
"INFO:soil.utils:Finished trial in 1.5429913997650146 seconds\n",
"INFO:soil.utils:Dumping results to soil_output/Spread_erdos_renyi_graph_prob_0.3\n",
"INFO:soil.utils:Finished simulation in 5.936013221740723 seconds\n",
"INFO:soil.utils:Using config(s): Spread_erdos_renyi_graph_prob_0.4\n",
"INFO:soil.utils:Dumping results to soil_output/Spread_erdos_renyi_graph_prob_0.4 : True\n",
"INFO:soil.utils:Trial: 0\n",
"INFO:soil.utils:\tRunning\n",
"INFO:soil.utils:Finished trial in 1.4097135066986084 seconds\n",
"INFO:soil.utils:Dumping results to soil_output/Spread_erdos_renyi_graph_prob_0.4\n",
"INFO:soil.utils:Finished simulation in 5.732810974121094 seconds\n",
"INFO:soil.utils:Using config(s): Spread_barabasi_albert_graph_prob_0.0\n",
"INFO:soil.utils:Dumping results to soil_output/Spread_barabasi_albert_graph_prob_0.0 : True\n",
"INFO:soil.utils:Trial: 0\n",
"INFO:soil.utils:\tRunning\n",
"INFO:soil.utils:Finished trial in 0.751497745513916 seconds\n",
"INFO:soil.utils:Dumping results to soil_output/Spread_barabasi_albert_graph_prob_0.0\n",
"INFO:soil.utils:Finished simulation in 2.3415369987487793 seconds\n",
"INFO:soil.utils:Using config(s): Spread_barabasi_albert_graph_prob_0.1\n",
"INFO:soil.utils:Dumping results to soil_output/Spread_barabasi_albert_graph_prob_0.1 : True\n",
"INFO:soil.utils:Trial: 0\n",
"INFO:soil.utils:\tRunning\n",
"INFO:soil.utils:Finished trial in 0.8503265380859375 seconds\n",
"INFO:soil.utils:Dumping results to soil_output/Spread_barabasi_albert_graph_prob_0.1\n",
"INFO:soil.utils:Finished simulation in 2.5671920776367188 seconds\n",
"INFO:soil.utils:Using config(s): Spread_barabasi_albert_graph_prob_0.2\n",
"INFO:soil.utils:Dumping results to soil_output/Spread_barabasi_albert_graph_prob_0.2 : True\n",
"INFO:soil.utils:Trial: 0\n",
"INFO:soil.utils:\tRunning\n",
"INFO:soil.utils:Finished trial in 0.8511502742767334 seconds\n",
"INFO:soil.utils:Dumping results to soil_output/Spread_barabasi_albert_graph_prob_0.2\n",
"INFO:soil.utils:Finished simulation in 2.55816912651062 seconds\n",
"INFO:soil.utils:Using config(s): Spread_barabasi_albert_graph_prob_0.3\n",
"INFO:soil.utils:Dumping results to soil_output/Spread_barabasi_albert_graph_prob_0.3 : True\n",
"INFO:soil.utils:Trial: 0\n",
"INFO:soil.utils:\tRunning\n",
"INFO:soil.utils:Finished trial in 0.8982968330383301 seconds\n",
"INFO:soil.utils:Dumping results to soil_output/Spread_barabasi_albert_graph_prob_0.3\n",
"INFO:soil.utils:Finished simulation in 2.6871559619903564 seconds\n",
"INFO:soil.utils:Using config(s): Spread_barabasi_albert_graph_prob_0.4\n",
"INFO:soil.utils:Dumping results to soil_output/Spread_barabasi_albert_graph_prob_0.4 : True\n",
"INFO:soil.utils:Trial: 0\n",
"INFO:soil.utils:\tRunning\n",
"INFO:soil.utils:Finished trial in 0.9563727378845215 seconds\n",
"INFO:soil.utils:Dumping results to soil_output/Spread_barabasi_albert_graph_prob_0.4\n",
"INFO:soil.utils:Finished simulation in 2.5253307819366455 seconds\n"
]
}
],
"source": [
"network_1 = {\n",
" 'generator': 'erdos_renyi_graph',\n",
" 'n': 500,\n",
" 'p': 0.1\n",
"}\n",
"network_2 = {\n",
" 'generator': 'barabasi_albert_graph',\n",
" 'n': 500,\n",
" 'm': 2\n",
"}\n",
"\n",
"\n",
"for net in [network_1, network_2]:\n",
" for i in range(5):\n",
" prob = i / 10\n",
" config['environment_params']['prob_neighbor_spread'] = prob\n",
" config['network_params'] = net\n",
" config['name'] = 'Spread_{}_prob_{}'.format(net['generator'], prob)\n",
" s = soil.simulation.run_from_config(config)"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-03T11:05:18.043194Z",
"start_time": "2017-07-03T13:05:18.034699+02:00"
},
"cell_style": "split"
},
"source": [
"The results are conveniently stored in pickle (simulation), csv and sqlite (history of agent and environment state) and gexf (dynamic network) format."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:57:28.534861Z",
"start_time": "2017-10-19T17:57:28.258984+02:00"
},
"cell_style": "split",
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[01;34msoil_output\u001b[00m\n",
"├── \u001b[01;34mSpread_barabasi_albert_graph_prob_0.0\u001b[00m\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.0.dumped.yml\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.0.simulation.pickle\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.0_trial_0.backup1508409808.7944386.sqlite\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.0_trial_0.backup1508428617.9811945.sqlite\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.0_trial_0.db.sqlite\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.0_trial_0.environment.csv\n",
"│   └── Spread_barabasi_albert_graph_prob_0.0_trial_0.gexf\n",
"├── \u001b[01;34mSpread_barabasi_albert_graph_prob_0.1\u001b[00m\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.1.dumped.yml\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.1.simulation.pickle\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.1_trial_0.backup1508409810.9913027.sqlite\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.1_trial_0.backup1508428620.3419535.sqlite\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.1_trial_0.db.sqlite\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.1_trial_0.environment.csv\n",
"│   └── Spread_barabasi_albert_graph_prob_0.1_trial_0.gexf\n",
"├── \u001b[01;34mSpread_barabasi_albert_graph_prob_0.2\u001b[00m\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.2.dumped.yml\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.2.simulation.pickle\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.2_trial_0.backup1508409813.2012305.sqlite\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.2_trial_0.backup1508428622.91827.sqlite\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.2_trial_0.db.sqlite\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.2_trial_0.environment.csv\n",
"│   └── Spread_barabasi_albert_graph_prob_0.2_trial_0.gexf\n",
"├── \u001b[01;34mSpread_barabasi_albert_graph_prob_0.3\u001b[00m\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.3.dumped.yml\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.3.simulation.pickle\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.3_trial_0.backup1508409815.5177016.sqlite\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.3_trial_0.backup1508428625.5117545.sqlite\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.3_trial_0.db.sqlite\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.3_trial_0.environment.csv\n",
"│   └── Spread_barabasi_albert_graph_prob_0.3_trial_0.gexf\n",
"├── \u001b[01;34mSpread_barabasi_albert_graph_prob_0.4\u001b[00m\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.4.dumped.yml\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.4.simulation.pickle\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.4_trial_0.backup1508409818.1516452.sqlite\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.4_trial_0.backup1508428628.1986933.sqlite\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.4_trial_0.db.sqlite\n",
"│   ├── Spread_barabasi_albert_graph_prob_0.4_trial_0.environment.csv\n",
"│   └── Spread_barabasi_albert_graph_prob_0.4_trial_0.gexf\n",
"├── \u001b[01;34mSpread_erdos_renyi_graph_prob_0.0\u001b[00m\n",
"│   ├── Spread_erdos_renyi_graph_prob_0.0.dumped.yml\n",
"│   ├── Spread_erdos_renyi_graph_prob_0.0.simulation.pickle\n",
"│   ├── Spread_erdos_renyi_graph_prob_0.0_trial_0.backup1508409781.0791047.sqlite\n",
"│   ├── Spread_erdos_renyi_graph_prob_0.0_trial_0.backup1508428588.625598.sqlite\n",
"│   ├── Spread_erdos_renyi_graph_prob_0.0_trial_0.db.sqlite\n",
"│   ├── Spread_erdos_renyi_graph_prob_0.0_trial_0.environment.csv\n",
"│   └── Spread_erdos_renyi_graph_prob_0.0_trial_0.gexf\n",
"├── \u001b[01;34mSpread_erdos_renyi_graph_prob_0.1\u001b[00m\n",
"│   ├── Spread_erdos_renyi_graph_prob_0.1.dumped.yml\n",
"│   ├── Spread_erdos_renyi_graph_prob_0.1.simulation.pickle\n",
"│   ├── Spread_erdos_renyi_graph_prob_0.1_trial_0.backup1508409786.6177793.sqlite\n",
"│   ├── Spread_erdos_renyi_graph_prob_0.1_trial_0.backup1508428594.3783743.sqlite\n",
"│   ├── Spread_erdos_renyi_graph_prob_0.1_trial_0.db.sqlite\n",
"│   ├── Spread_erdos_renyi_graph_prob_0.1_trial_0.environment.csv\n",
"│   └── Spread_erdos_renyi_graph_prob_0.1_trial_0.gexf\n",
"├── \u001b[01;34mSpread_erdos_renyi_graph_prob_0.2\u001b[00m\n",
"│   ├── Spread_erdos_renyi_graph_prob_0.2.dumped.yml\n",
"│   ├── Spread_erdos_renyi_graph_prob_0.2.simulation.pickle\n",
"│   ├── Spread_erdos_renyi_graph_prob_0.2_trial_0.backup1508409791.9751768.sqlite\n",
"│   ├── Spread_erdos_renyi_graph_prob_0.2_trial_0.backup1508428600.041021.sqlite\n",
"│   ├── Spread_erdos_renyi_graph_prob_0.2_trial_0.db.sqlite\n",
"│   ├── Spread_erdos_renyi_graph_prob_0.2_trial_0.environment.csv\n",
"│   └── Spread_erdos_renyi_graph_prob_0.2_trial_0.gexf\n",
"├── \u001b[01;34mSpread_erdos_renyi_graph_prob_0.3\u001b[00m\n",
"│   ├── Spread_erdos_renyi_graph_prob_0.3.dumped.yml\n",
"│   ├── Spread_erdos_renyi_graph_prob_0.3.simulation.pickle\n",
"│   ├── Spread_erdos_renyi_graph_prob_0.3_trial_0.backup1508409797.606661.sqlite\n",
"│   ├── Spread_erdos_renyi_graph_prob_0.3_trial_0.backup1508428606.2884977.sqlite\n",
"│   ├── Spread_erdos_renyi_graph_prob_0.3_trial_0.db.sqlite\n",
"│   ├── Spread_erdos_renyi_graph_prob_0.3_trial_0.environment.csv\n",
"│   └── Spread_erdos_renyi_graph_prob_0.3_trial_0.gexf\n",
"└── \u001b[01;34mSpread_erdos_renyi_graph_prob_0.4\u001b[00m\n",
" ├── Spread_erdos_renyi_graph_prob_0.4.dumped.yml\n",
" ├── Spread_erdos_renyi_graph_prob_0.4.simulation.pickle\n",
" ├── Spread_erdos_renyi_graph_prob_0.4_trial_0.backup1508409803.4306188.sqlite\n",
" ├── Spread_erdos_renyi_graph_prob_0.4_trial_0.backup1508428612.3312593.sqlite\n",
" ├── Spread_erdos_renyi_graph_prob_0.4_trial_0.db.sqlite\n",
" ├── Spread_erdos_renyi_graph_prob_0.4_trial_0.environment.csv\n",
" └── Spread_erdos_renyi_graph_prob_0.4_trial_0.gexf\n",
"\n",
"10 directories, 70 files\n",
"2.5M\tsoil_output/Spread_barabasi_albert_graph_prob_0.0\n",
"2.5M\tsoil_output/Spread_barabasi_albert_graph_prob_0.1\n",
"2.5M\tsoil_output/Spread_barabasi_albert_graph_prob_0.2\n",
"2.5M\tsoil_output/Spread_barabasi_albert_graph_prob_0.3\n",
"2.5M\tsoil_output/Spread_barabasi_albert_graph_prob_0.4\n",
"3.6M\tsoil_output/Spread_erdos_renyi_graph_prob_0.0\n",
"3.7M\tsoil_output/Spread_erdos_renyi_graph_prob_0.1\n",
"3.7M\tsoil_output/Spread_erdos_renyi_graph_prob_0.2\n",
"3.7M\tsoil_output/Spread_erdos_renyi_graph_prob_0.3\n",
"3.7M\tsoil_output/Spread_erdos_renyi_graph_prob_0.4\n"
]
}
],
"source": [
"!tree soil_output\n",
"!du -xh soil_output/*"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-02T10:40:14.384177Z",
"start_time": "2017-07-02T12:40:14.381885+02:00"
}
},
"source": [
"## Analysing the results"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Loading data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Once the simulations are over, we can use soil to analyse the results.\n",
"\n",
"Soil allows you to load results for specific trials, or for a set of trials if you specify a pattern. The specific methods are:\n",
"\n",
"* `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. \n",
"* `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')`\n",
"* `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')`"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-03T14:44:30.978223Z",
"start_time": "2017-07-03T16:44:30.971952+02:00"
}
},
"source": [
"Let's see it in action by loading the stored results into a pandas dataframe:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:57:43.662893Z",
"start_time": "2017-10-19T17:57:43.632252+02:00"
},
"cell_style": "center",
"collapsed": true
},
"outputs": [],
"source": [
"from soil.analysis import *"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:57:44.101253Z",
"start_time": "2017-10-19T17:57:44.039710+02:00"
},
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>agent_id</th>\n",
" <th>t_step</th>\n",
" <th>key</th>\n",
" <th>value</th>\n",
" <th>value_type</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>4</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>6</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>10</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>11</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>12</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>13</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>14</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35</th>\n",
" <td>15</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37</th>\n",
" <td>16</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>39</th>\n",
" <td>17</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41</th>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>43</th>\n",
" <td>19</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>45</th>\n",
" <td>20</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>47</th>\n",
" <td>21</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>49</th>\n",
" <td>22</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>51</th>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53</th>\n",
" <td>24</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>55</th>\n",
" <td>25</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>57</th>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>59</th>\n",
" <td>27</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>61</th>\n",
" <td>28</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>63</th>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>id</td>\n",
" <td>neutral</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21025</th>\n",
" <td>470</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21027</th>\n",
" <td>471</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21029</th>\n",
" <td>472</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21031</th>\n",
" <td>473</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21033</th>\n",
" <td>474</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21035</th>\n",
" <td>475</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21037</th>\n",
" <td>476</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21039</th>\n",
" <td>477</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21041</th>\n",
" <td>478</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21043</th>\n",
" <td>479</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21045</th>\n",
" <td>480</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21047</th>\n",
" <td>481</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21049</th>\n",
" <td>482</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21051</th>\n",
" <td>483</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21053</th>\n",
" <td>484</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21055</th>\n",
" <td>485</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21057</th>\n",
" <td>486</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21059</th>\n",
" <td>487</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21061</th>\n",
" <td>488</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21063</th>\n",
" <td>489</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21065</th>\n",
" <td>490</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21067</th>\n",
" <td>491</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21069</th>\n",
" <td>492</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21071</th>\n",
" <td>493</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21073</th>\n",
" <td>494</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21075</th>\n",
" <td>495</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21077</th>\n",
" <td>496</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21079</th>\n",
" <td>497</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21081</th>\n",
" <td>498</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21083</th>\n",
" <td>499</td>\n",
" <td>20</td>\n",
" <td>id</td>\n",
" <td>infected</td>\n",
" <td>str</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>10500 rows × 5 columns</p>\n",
"</div>"
],
"text/plain": [
" agent_id t_step key value value_type\n",
"5 0 0 id neutral str\n",
"7 1 0 id neutral str\n",
"9 2 0 id neutral str\n",
"11 3 0 id neutral str\n",
"13 4 0 id neutral str\n",
"15 5 0 id neutral str\n",
"17 6 0 id neutral str\n",
"19 7 0 id neutral str\n",
"21 8 0 id neutral str\n",
"23 9 0 id neutral str\n",
"25 10 0 id neutral str\n",
"27 11 0 id neutral str\n",
"29 12 0 id neutral str\n",
"31 13 0 id neutral str\n",
"33 14 0 id neutral str\n",
"35 15 0 id neutral str\n",
"37 16 0 id neutral str\n",
"39 17 0 id neutral str\n",
"41 18 0 id neutral str\n",
"43 19 0 id neutral str\n",
"45 20 0 id neutral str\n",
"47 21 0 id neutral str\n",
"49 22 0 id neutral str\n",
"51 23 0 id neutral str\n",
"53 24 0 id neutral str\n",
"55 25 0 id neutral str\n",
"57 26 0 id neutral str\n",
"59 27 0 id neutral str\n",
"61 28 0 id neutral str\n",
"63 29 0 id neutral str\n",
"... ... ... .. ... ...\n",
"21025 470 20 id infected str\n",
"21027 471 20 id infected str\n",
"21029 472 20 id infected str\n",
"21031 473 20 id infected str\n",
"21033 474 20 id infected str\n",
"21035 475 20 id infected str\n",
"21037 476 20 id infected str\n",
"21039 477 20 id infected str\n",
"21041 478 20 id infected str\n",
"21043 479 20 id infected str\n",
"21045 480 20 id infected str\n",
"21047 481 20 id infected str\n",
"21049 482 20 id infected str\n",
"21051 483 20 id infected str\n",
"21053 484 20 id infected str\n",
"21055 485 20 id infected str\n",
"21057 486 20 id infected str\n",
"21059 487 20 id infected str\n",
"21061 488 20 id infected str\n",
"21063 489 20 id infected str\n",
"21065 490 20 id infected str\n",
"21067 491 20 id infected str\n",
"21069 492 20 id infected str\n",
"21071 493 20 id infected str\n",
"21073 494 20 id infected str\n",
"21075 495 20 id infected str\n",
"21077 496 20 id infected str\n",
"21079 497 20 id infected str\n",
"21081 498 20 id infected str\n",
"21083 499 20 id infected str\n",
"\n",
"[10500 rows x 5 columns]"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = read_csv('soil_output/Spread_barabasi_albert_graph_prob_0.0/Spread_barabasi_albert_graph_prob_0.0_trial_0.environment.csv', keys=['id'])\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Soil can also process the data for us and return a dataframe with as many columns as there are attributes in the environment and the agent states:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:57:45.777794Z",
"start_time": "2017-10-19T17:57:45.698020+02:00"
},
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th>id</th>\n",
" </tr>\n",
" <tr>\n",
" <th>t_step</th>\n",
" <th>agent_id</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"30\" valign=\"top\">0</th>\n",
" <th>0</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>100</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>101</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>102</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>103</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>104</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>105</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>106</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>107</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>108</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>109</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>110</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>111</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>112</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>113</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>114</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>115</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>116</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>117</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>118</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>119</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>120</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>121</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>122</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>123</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>124</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"30\" valign=\"top\">20</th>\n",
" <th>72</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>73</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>74</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>76</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>77</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>78</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>79</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>80</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>81</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>82</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>83</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>84</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>85</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>86</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>87</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>88</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>89</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>90</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>91</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>92</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>93</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>94</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>95</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>96</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>97</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>98</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>99</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>10500 rows × 1 columns</p>\n",
"</div>"
],
"text/plain": [
" id\n",
"t_step agent_id \n",
"0 0 neutral\n",
" 1 neutral\n",
" 10 neutral\n",
" 100 neutral\n",
" 101 neutral\n",
" 102 neutral\n",
" 103 neutral\n",
" 104 neutral\n",
" 105 neutral\n",
" 106 neutral\n",
" 107 neutral\n",
" 108 neutral\n",
" 109 neutral\n",
" 11 neutral\n",
" 110 neutral\n",
" 111 neutral\n",
" 112 neutral\n",
" 113 neutral\n",
" 114 neutral\n",
" 115 neutral\n",
" 116 neutral\n",
" 117 neutral\n",
" 118 neutral\n",
" 119 neutral\n",
" 12 neutral\n",
" 120 neutral\n",
" 121 neutral\n",
" 122 neutral\n",
" 123 neutral\n",
" 124 neutral\n",
"... ...\n",
"20 72 infected\n",
" 73 infected\n",
" 74 infected\n",
" 75 infected\n",
" 76 infected\n",
" 77 infected\n",
" 78 infected\n",
" 79 infected\n",
" 8 infected\n",
" 80 infected\n",
" 81 infected\n",
" 82 infected\n",
" 83 infected\n",
" 84 infected\n",
" 85 infected\n",
" 86 infected\n",
" 87 infected\n",
" 88 infected\n",
" 89 infected\n",
" 9 infected\n",
" 90 infected\n",
" 91 infected\n",
" 92 infected\n",
" 93 infected\n",
" 94 infected\n",
" 95 infected\n",
" 96 infected\n",
" 97 infected\n",
" 98 infected\n",
" 99 infected\n",
"\n",
"[10500 rows x 1 columns]"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"env, agents = process(df)\n",
"agents"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-18T14:01:00.669671Z",
"start_time": "2017-10-18T16:01:00.635624+02:00"
}
},
"source": [
"The index of the results are the simulation step and the agent_id. Hence, we can access the state of the simulation at a given step: "
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:57:47.132212Z",
"start_time": "2017-10-19T17:57:47.084737+02:00"
},
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" </tr>\n",
" <tr>\n",
" <th>agent_id</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>100</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>101</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>102</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>103</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>104</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>105</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>106</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>107</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>108</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>109</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>110</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>111</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>112</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>113</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>114</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>115</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>116</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>117</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>118</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>119</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>120</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>121</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>122</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>123</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>124</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>72</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>73</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>74</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>76</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>77</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>78</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>79</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>80</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>81</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>82</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>83</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>84</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>85</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>86</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>87</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>88</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>89</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>90</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>91</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>92</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>93</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>94</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>95</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>96</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>97</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>98</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>99</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>500 rows × 1 columns</p>\n",
"</div>"
],
"text/plain": [
" id\n",
"agent_id \n",
"0 neutral\n",
"1 neutral\n",
"10 neutral\n",
"100 neutral\n",
"101 neutral\n",
"102 neutral\n",
"103 neutral\n",
"104 neutral\n",
"105 neutral\n",
"106 neutral\n",
"107 neutral\n",
"108 neutral\n",
"109 neutral\n",
"11 neutral\n",
"110 neutral\n",
"111 neutral\n",
"112 neutral\n",
"113 neutral\n",
"114 neutral\n",
"115 neutral\n",
"116 neutral\n",
"117 neutral\n",
"118 neutral\n",
"119 neutral\n",
"12 neutral\n",
"120 neutral\n",
"121 neutral\n",
"122 neutral\n",
"123 neutral\n",
"124 neutral\n",
"... ...\n",
"72 neutral\n",
"73 neutral\n",
"74 neutral\n",
"75 neutral\n",
"76 neutral\n",
"77 neutral\n",
"78 neutral\n",
"79 neutral\n",
"8 neutral\n",
"80 neutral\n",
"81 neutral\n",
"82 neutral\n",
"83 neutral\n",
"84 neutral\n",
"85 neutral\n",
"86 neutral\n",
"87 neutral\n",
"88 neutral\n",
"89 neutral\n",
"9 neutral\n",
"90 neutral\n",
"91 neutral\n",
"92 neutral\n",
"93 neutral\n",
"94 neutral\n",
"95 neutral\n",
"96 neutral\n",
"97 neutral\n",
"98 neutral\n",
"99 neutral\n",
"\n",
"[500 rows x 1 columns]"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"agents.loc[0]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Or, we can perform more complex tasks such as showing the agents that have changed their state between two simulation steps:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:57:48.168805Z",
"start_time": "2017-10-19T17:57:48.113961+02:00"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" </tr>\n",
" <tr>\n",
" <th>agent_id</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>140</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>164</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>170</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>310</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>455</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" id\n",
"agent_id \n",
"140 neutral\n",
"164 neutral\n",
"170 neutral\n",
"310 neutral\n",
"455 neutral"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"changed = agents.loc[1]['id'] != agents.loc[0]['id']\n",
"agents.loc[0][changed]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To focus on specific agents, we can swap the levels of the index:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:57:49.046261Z",
"start_time": "2017-10-19T17:57:49.019721+02:00"
},
"collapsed": true
},
"outputs": [],
"source": [
"agents1 = agents.swaplevel()"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:57:49.459500Z",
"start_time": "2017-10-19T17:57:49.420016+02:00"
},
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" </tr>\n",
" <tr>\n",
" <th>t_step</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>infected</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" id\n",
"t_step \n",
"0 neutral\n",
"1 neutral\n",
"2 neutral\n",
"3 neutral\n",
"4 neutral\n",
"5 neutral\n",
"6 neutral\n",
"7 neutral\n",
"8 neutral\n",
"9 neutral\n",
"10 neutral\n",
"11 infected\n",
"12 infected\n",
"13 infected\n",
"14 infected\n",
"15 infected\n",
"16 infected\n",
"17 infected\n",
"18 infected\n",
"19 infected\n",
"20 infected"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"agents1.loc['0'].dropna(axis=1)"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T10:35:40.140920Z",
"start_time": "2017-10-19T12:35:40.106265+02:00"
}
},
"source": [
"### Plotting data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If you don't want to work with pandas, you can also use some pre-defined functions from soil to conveniently plot the results:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:57:52.271094Z",
"start_time": "2017-10-19T17:57:51.102434+02:00"
}
},
"outputs": [
{
"data": {
"image/png": "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\npnZ6evsXL8nPCSQJ594
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd79a1c60f0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\npnZ6evsXL8nPCSQJ594
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd79a1c62b0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_all('soil_output/Spread_barabasi_albert_graph_prob_0.0/', get_count, 'id');"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:57:57.982007Z",
"start_time": "2017-10-19T17:57:52.273160+02:00"
},
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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\npnZ6evsXL8nPCSQJ594
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd79a0b4940>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\npnZ6evsXL8nPCSQJ594
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd79a0b4518>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEXCAYAAACgUUN5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd4FNX6wPHvm0YSSkIvSei9BKQLUpQmWMAK/kTFcrEh\neq3YELF7bVe9otjxomJFLqI0QZp0AekECL2XQEiAkJzfHzOJS9gkG7K7s8m+n+fZZ3dnzsy8Ozs7\n786cmXPEGINSSqngFeJ0AEoppZyliUAppYKcJgKllApymgiUUirIaSJQSqkgp4lAKaWCnCaCEkxE\nPhOR5wso011EdgZSTOcxz5oikioioUWYx1nrQUSSRaSndyIMXCIyRETmBUAcQbG+A5UmAi8QkYtE\nZIGIpIjIYRGZLyLtnI4rWBhjthtjyhhjMp2OJS+6o/MNEekhIutFJE1EZolIrTzKVRGRr0Rkt/07\nnS8iHfwdb6DSRFBEIlIOmAy8A1QA4oBngVOFnI+ISLH+PkQkzOkYAo2v10lxWOe+ilFEKgE/AE9j\n/faWAhPyKF4GWAK0sct+DvwsImV8EVtxU6x3PAGiIYAx5itjTKYxJt0YM80Ys8o+7J4vIu/Y/0LW\ni0iP7AlFZLaIvCAi84E0oK6IxIjIxyKyR0R2icjz2ac8RKSeiPwmIodE5KCIjBeRWJf5XSAiy0Xk\nuIhMACI9/RAi8oQ9z2QRudFl+GUi8qeIHBORHSIyymVcbRExInK7iGwHfrOHfysie+3PPEdEmuVa\nXCURmW7H+bvrvzgR+be9nGMiskxEuriMay8iS+1x+0TkjVxx5LvDEZFbRWSdvdwtInJnAaulnYis\nFZEjIvKpiOSsTxG5XERWiMhR+2gw0WVcsog8JiKrgBMi8hVQE/iffQrr0QLivFlEttnf89OuRxMi\nMkpEvhOR/4rIMWCIvV7+sGPZIyLvikiEy/yMiAy3P/NBEflX7j8dIvKa/Tm3ikjfAtZL9rb7kogs\ntr/nn0Skgj0ur+3iShFZY8c5W0SaeLq+83A1sMYY860x5iQwCmgpIo1zFzTGbDHGvGGM2WP/TscC\nEUCjgj5rUDDG6KMID6AccAjrH0ZfoLzLuCHAGeCfQDgwEEgBKtjjZwPbgWZAmF1mIvABUBqoAiwG\n7rTL1wd6AaWAysAc4C17XASwzWVZ1wIZwPMFxN/djvENe77dgBNAI5fxLbD+NCQC+4AB9rjagAHG\n2fFG2cNvA8ra83sLWOGyvM+A40BXe/y/gXku4wcDFe318RCwF4i0x/0B3GS/LgN0zBVHWAGf9TKg\nHiD250wDWrt8zp0uZZOB1UAC1j/I+dnrEmgN7Ac6AKHALXb5Ui7TrrCnjXIZ1tOD7akpkApcZH+n\nr9nfY097/Cj7/QD7O4nC+pfb0V5ntYF1wAMu8zTALPtz1AQ2Ane4bKMZwD/sz3I3sBuQAuKcDewC\nmtvf/ffAf/PaLrD+MJ3A2n7DgUeBJCCioPWdTwz/BsbkGrYauMaD9dwKOAnEOL0PCYSH4wGUhAfQ\nBGsHtxNrpzoJqGr/yM76UWHt2LN3ZrOB0S7jqmKdUopyGXYDMCuP5Q4A/rRfd3WzrAUe/Ji62zGX\ndhn2DfB0HuXfAt60X2f/4OvmM/9Yu0yM/f4z4GuX8WWATCAhj+mPAC3t13OwTrtVylUmO458E4Gb\neU8E7ndZD7kTwV0u7/sBm+3XY4Dncs1rA9DNZdrbco1PxrNEMBL4yuV9NHCasxPBnALm8QDwo8t7\nA1zq8v4eYKb9egiQlGt5BqhWwDJmAy+7vG9qxxnqbrvAOn3zjcv7EKxE0r2g9Z1PDB+7xmAPmw8M\nKWC6csBfwOOF2V5K8kNPDXmBMWadMWaIMSYe6x9SDawdJsAuY299tm32+Gw7XF7Xwvq3tMc+fD6K\ndXRQBXIqvL62TxkdA/4LVLKnrZHHsjxxxBhzwl2MItJBrEq4AyKSAtzlssxzPoOIhIrIyyKy2Y4x\n2R5VyV15Y0wqcNhleQ/Zp29S7M8f4zLt7Vj/LNeLyBIRudzDz5cdW18RWShWhf5RrJ1N7s/i9nNx\n9vdWC3go+zuy55VA3t9rYdTg7PWThnXEmVdciEhDEZlsn447BrxIPt8R526De3MtD6wEXZDc8wwn\nj+/ZXl7O9miMybLHx3kYozupWDt1V+WwjjjdEpEo4H/AQmPMSwXMP2hoIvAyY8x6rH+9ze1BcSIi\nLkVqYv1zz5nE5fUOrCOCSsaYWPtRzhiTfY79Jbt8ojGmHNZplOx578ljWZ4oLyKl84jxS6wjnARj\nTAzwvssy3X2G/wP6Az2xduK17eGu0yRkvxCrsq4CsNuuD3gMuB7rFFss1qk0ATDGbDLG3ICVGF8B\nvssVd55EpBTW6YvXgKr2vKe4+SyuElxeu66THcALLt9RrDEm2hjzlUv53M36etrM7x4g3iXuKKxT\nZfnNawywHmhgbxdPcO7nyuuzFEXueWYAB/OIczdWAgWsiyPs6XcVIcY1QEuXeZbGOvW3xl1hexuY\naC+zoPqhoKKJoIhEpLH9Lzbefp+AdTpnoV2kCjBcRMJF5Dqs00hT3M3LGLMHmAa8LiLlRCRErAri\nbnaRslj/go6KSBzwiMvkf2Cd4hkuImEicjXQvhAf5VkRibB3xpcD37os87Ax5qSItMfa0eenLFYy\nO4R1muFFN2X6iXXJbQTwHLDIGLPDnvYMcAAIE5GRuPzjE5HBIlLZ/jd51B7s6SWjEVh1EgeAM3aF\naO8CprlXROLtStAn+PuKlA+Bu+yjJRGR0mJVqpfNZ177gLoexPkdcIWIdLLXz7Pkn6zAWm/HgFS7\novRuN2UeEZHy9vZ5P3lfXVMYg0WkqYhEA6OB70zel/B+A1wm1uWe4Vj1P6ewTl9my2t95+VHoLmI\nXGNXLI8EVtl/xs5iL/M7IB242d6GlE0TQdEdx6o0XCQiJ7ASwGqsDR1gEdAA65/SC8C1xpjch/qu\nbsbaaa3FOj/+HVDdHvcsVkVlCvAz1qVzABhjTmNdRTHEnm6g6/gC7LWn2Q2MxzpXm/1jugcYLSLH\nsX5o3xQwr3FYh/W77M+w0E2ZL4FnsE4JtQGyr1KaCvyCVZm5Dasyz/V0waXAGhFJxaooHGSsq0UK\nZIw5Dgy34z+CldAmFTDZl1iJeYv9eN6e11KsytV37XklYa33/LwEPGWfSno4nzjXAPcBX2MdHRzH\nqpjO73Lkh+3PcxwrSbnbgf4ELMOqxP4Z6/x6UX2BdfS7F+sKteF5FTTGbMA6gn0H67dwBXCFvd1m\nc7u+85nnAeAarN/VEazf4aDs8SLyvoi8b7/thPUHpzfWH6lU+9EFZVUsKt8QkSFYV2dc5HQsqniy\nT50dxTrts/U852Hs6ZO8GNdsrKuEPvLWPJVz9IhAqQAjIleISLR9zvs1rCtckp2NSpVkmgiCgFg3\ni6W6efzidGzelsfnDKhTACJyYx4xZldy9sc6Tbcb67TiIOPAoXsgrMtg2nadpKeGlFIqyOkRgVJK\nBTlNBEopFeQCouXCSpUqmdq1azsdhlJKFSvLli07aIypXNT5BEQiqF27NkuXLnU6DKWUKlZExNNm\nZPKlp4aUUirIaSJQSqkgp4lAKaWCnCYCpZQKch4lArG6yvtLrK75ltrDKojV3eAm+7m8PVxE5G0R\nSRKRVSLS2pcfQCmlVNEU5ojgYmNMK2NMW/v9CKxejhoAM+33YHXX2MB+DMVqK10ppVSAKsqpof5Y\n/fRiPw9wGT7OWBYCsSJS3d0MlFJKOc/T+wgMMM1uzvYDY8xYrF6e9oDVoYqIVLHLxnF2G/I77WF7\n8pr5uj3HaPPc9EIH7yoqIpTy0RHERocTExVObHQ4sVHW+9joCGKzh0WHE2MPDw/VKhLlY0s/hVkv\ngLbppQKYp4mgszFmt72zny4i5/QA5MJdb0rn/ApEZCjWqSNia9Slb4tqHobiZuYG0k9nciTtNEfT\nM9h1JJ2j6RkcTTtNVj6
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd799958f28>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nM9h1JJ2j6RkcTTtNVj6
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd799d1a518>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nVHhbUshIiiE9MYa0gZE
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd799764be0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nVHhbUshIiiE9MYa0gZE
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd79941eba8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEXCAYAAACgUUN5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8VOW9+PHPN3tCNkISCARIoiyyBAhIUJRFUSt1qVvF\nKyqKYlVqe7vpvf3Vtl7vvbb1qtW2Vty1LrTaqrW04gICYQcBkS0sAcKWECBkIfvz++OcCUOYJBOY\nmTPJfN+v17zmzFm/c3JyvnOe55znEWMMSimlQleY0wEopZRyliYCpZQKcZoIlFIqxGkiUEqpEKeJ\nQCmlQpwmAqWUCnGaCLowEXlVRB5rZ55JIlIcTDGdwTr7iUiliISfxTpO2Q8iUiQiU3wTYfASkRki\nsiQI4giJ/R2sNBH4gIhcJCJLRaRcRI6ISIGInO90XKHCGLPHGBNvjGl0OpbW6InOP0TkUhHZIiLV\nIrJARPq3Me8CESkVkeMisl5Erg1krMFME8FZEpFE4CPgWSAF6AP8Eqjt4HpERDr130NEIpyOIdj4\ne590hn3urxhFJBX4K/AzrP+91cDcNhb5HpBhjEkEZgF/EpEMf8TW2XTqE0+QGAhgjHnbGNNojDlh\njJlvjNlgX3YXiMiz9tXCFhG51LWgiCwUkf8WkQKgGsgRkSQReUlEDojIPhF5zFXkISLniMjnIlIm\nIodF5E0RSXZb3ygRWSsiFSIyF4jx9kuIyH/a6ywSkVvdxn9TRL60f0XtFZFfuE3LEhEjIjNFZA/w\nuT3+LyJy0P7Oi0RkaIvNpYrIJ3acX7j/ihOR39rbOS4ia0TkYrdpY0VktT3tkIg82SKONk84InKn\niGy2t7tTRO5tZ7ecLyKbROSoiLwiIs37U0SuEpF1InLMvhrMdZtWJCIPicgGoEpE3gb6AX+3i7B+\n0k6ct4vIbvvv/DP3qwkR+YWIvCsifxKR48AMe78ss2M5ICK/E5Eot/UZEXnQ/s6HReQ3LX90iMgT\n9vfcJSJXtrNfXMfu/4rISvvv/IGIpNjTWjsurhGRr+04F4rIed7u71ZcD3xtjPmLMaYG+AUwQkQG\ne5rZGLPBGNPg+ghEAn3b+64hwRijr7N4AYlAGfAacCXQ3W3aDKAB+Hesg+5moBxIsacvBPYAQ4EI\ne573geeBbkA6sBK4157/XOAyIBpIAxYBT9vTooDdbtu6EagHHmsn/kl2jE/a650IVAGD3KYPx/rR\nkAscAr5lT8vC+od63Y431h5/F5Bgr+9pYJ3b9l4FKoAJ9vTfAkvcpk8Hetj744fAQSDGnrYMuM0e\njgfGtYgjop3v+k3gHEDs71kN5Ll9z2K3eYuAjVgnihSgwLUvgTygBMgHwoE77Pmj3ZZdZy8b6zZu\nihfH0xCgErjI/ps+Yf8dp9jTf2F//pb9N4kFRgPj7H2WBWwGvu+2TgMssL9HP2AbcLfbMVoP3GN/\nl/uA/YC0E+dCYB8wzP7bvwf8qbXjAusHUxXW8RsJ/ATYDkS1t7/biOG3wHMtxm0EbmhjmY+AGju+\nfwFhTp9DguHleABd4QWch3WCK8Y6qX4I9LT/yU75p8I6sbtOZguBR92m9cQqUop1G3cLsKCV7X4L\n+NIenuBhW0u9+GeaZMfczW3cn4GftTL/08BT9rDrHz6njfUn2/Mk2Z9fBd5xmx4PNAJ9W1n+KDDC\nHl6EVeyW2mIeVxxtJgIP634f+J7bfmiZCL7j9nkqsMMefg74rxbr2gpMdFv2rhbTi/AuETwCvO32\nOQ6o49REsKiddXwf+JvbZwN8w+3z/cBn9vAMYHuL7RmgVzvbWAg87vZ5iB1nuKfjAqv45s9un8Ow\nEsmk9vZ3GzG85B6DPa4AmNHOcpFYP9r+vSPHS1d+adGQDxhjNhtjZhhjMrF+IfXGOmEC7DP20Wfb\nbU932es23B/rID1gXz4fw7o6SAcQkXQReccuMjoO/AlItZft3cq2vHHUGFPlKUYRyZeTlWzlwHfc\ntnnadxCRcBF5XER22DEW2ZNSPc1vjKkEjrht74d28U25/f2T3JadifXLcouIrBKRq7z8fq7YrhSR\n5WJV6B/DOtm0/C4evxen/t36Az90/Y3sdfWl9b9rR/Tm1P1TjXXF2VpciMhAEfnILo47DvwPbfyN\nOP0YPNhie2Al6Pa0XGckrfyd7e01H4/GmCZ7eh8vY/SkEuuK3F0i1hVnq4wx9caYfwJXiMg17Wwj\nJGgi8DFjzBasX73D7FF9RETcZumH9cu9eRG34b1YVwSpxphk+5VojHGVsf+vPX+usSq8pmMVcwAc\naGVb3uguIt1aifEtrCucvsaYJOCPbtv09B3+DbgWmIJ1Es+yx7sv01wuKyLxWEUB++36gIeAb2MV\nsSVjFaUJgDGm0BhzC1Zi/BXwbou4WyUi0VjFF08APe11z/PwXdy5lx+775O9wH+7/Y2SjTFxxpi3\n3eZv2ayvt838HgAy3eKOxSoqa2tdzwFbgAH2cfGfnP69WvsuZ6PlOuuBw63EuR8rgQLWzRH28vvO\nIsavgRFu6+yGVfT3tRexg1WUdo6X83ZpmgjOkogMtn/FZtqf+2IV5yy3Z0kHHhSRSBG5CasYaZ6n\ndRljDgDzgf8TkUQRCROrgniiPUsC1q+gYyLSB/ix2+LLsIp4HhSRCBG5Hhjbga/ySxGJsk/GVwF/\ncdvmEWNMjYiMxTrRtyUBK5mVYRUz/I+HeaaKdcttFPBfwApjzF572QagFIgQkUdw+8UnItNFJM3+\nNXnMHu3tLaNRWHUSpUCDXSF6eTvLPCAimXYl6H9y8o6UF4Dv2FdLIiLdxKpUT2hjXYeAHC/ifBe4\nWkQutPfPL2k7WYG1344DlXZF6X0e5vmxiHS3j8/v0fbdNd6aLiJDRCQOeBR417R+C++fgW+Kdbtn\nJFb9Ty1W8aVLa/u7NX8DhonIDXbF8iPABvvH2Cns/9MrRSTW/l+cjlWc+kVHvnBXpYng7FVgVRqu\nEJEqrASwEetAB1gBDMD6pfTfwI3GmJaX+u5uxzppbcIqH38XcN3i9kusispy4B9Yt84BYIypw7qL\nYoa93M3u09tx0F5mP/AmVlmt65/pfuBREanA+kf7czvreh3rsn6f/R2We5jnLeDnWEVCowHXXUof\nA//EqszcjVWp515c8A3gaxGpxKoonGasu0XaZYypAB604z+KldA+bGext7AS80779Zi9rtVYlau/\ns9e1HWu/t+V/gf9nFyX9qI04vwa+C7yDdXVQgVUx3dbtyD+yv08FVpLydAL9AFiDVYn9D6zy9bP1\nBtbV70GsO9QebG1GY8xWrCvYZ7H+F64GrraPWxeP+7uNdZYCN2D9Xx3F+j+c5pouIn8UkT+6PmLV\nr5Rg/Rj4HnCzMWatV9+0i5NTi5SVL4nIDKy7My5yOhbVOdlFZ8ewin12neE6jL38dh/GtRDrLqEX\nfbVO5Ry9IlAqyIjI1SISZ5d5PwF8xclKd6V8ThNBCBDrYbFKD69/Oh2br7XyPSvF7cE0p4nIra3E\n6KrkvBarmG4/VrHiNOPApXsw7MtQOnadpEVDSikV4vSKQCmlQpwmAqWUCnFB0XJhamqqycrKcjoM\npZTqVNasWXPYGJN2tusJikSQlZXF6tWrnQ5DKaU6FRHxthmZNmnRkFJKhThNBEopFeI0ESilVIjT\nRKCUUiHOq0QgVld5X4nVNd9qe1yKWN0NFtrv3e3xIiLPiMh2EdkgInn+/AJKKaXOTkeuCCYbY0Ya\nY8bYnx/G6uVoAPCZ/Rmsnn8G2K9ZWG2lK6WUClJnUzR0LVY/vdjv33Ib/7qxLAeSRSTD0wqUUko5\nz9vnCAww327O9nljzBysXp4OgNWhioik2/P24dQ25IvtcQdaW/mWgxVc+dvFJMdGkhxnvZJio6zh\n2FM/d4+z3mMiwzv8ZZXyqaZGqDoMlYdavEqg4qD1XnkIasqdjlSpNnmbCMYbY/bbJ/tPROS0HoDc\neOpN6bSW7URkFlbREUm
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd798e3eeb8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\neOpN6bSW7URkFlbREUm
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd798ea15c0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nr4srL9j2CVSVQbfh3o5
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd798d70898>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nr4srL9j2CVSVQbfh3o5
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd798d81e48>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_all('soil_output/Spread_barabasi*', get_count, 'id');"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:58:26.903783Z",
"start_time": "2017-10-19T17:57:57.983957+02:00"
},
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n3nsvEyZM4IILLuDZZ5/
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd799674080>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n3nsvEyZM4IILLuDZZ5/
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd7996d2eb8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nuYdJkyZx2WWX8cwzz3D
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd799841390>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nuYdJkyZx2WWX8cwzz3D
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd7998504a8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n8wxXXnklRxxxBJdffjn
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd7997c82b0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n8wxXXnklRxxxBJdffjn
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd7997c83c8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAEXCAYAAABF40RQAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8VPW9//HXJztZWJJACIuCCihqFEvBVqtSa0VBsdZe\n9ad1vXqtWrW32uX21qKtXbS3t9pqLbd6Xa9ra0XFaqtSdwUUUUCQTQmyZcI2CWSyfH9/nDNxGCaZ\nSTJbyPv5eOSRmXO+c84nZ04+853v+Z7v15xziIhI35KT6QBERCT9lPxFRPogJX8RkT5IyV9EpA9S\n8hcR6YOU/EVE+iAl/z7OzO4xs5/tLftJNTP7DzP7U6bjiGRmF5jZq1kQxxoz+0qm45DEKPmniZkd\nbWavm9k2M6s3s9fM7POZjku6xjn3c+fcv2Y6jr2JmR1vZh+aWaOZvWRm+3ZSdpRfptF/jT5suknJ\nPw3MrD/wNPA7oBwYDtwANHVxO2ZmWf2emVleFsSQm+kYuiIbjlk8qYrRzCqBvwA/xvvfmA880slL\nHgLeBSqAHwGPm9ngVMS2t8vqRLIXGQvgnHvIOdfqnNvpnHveObfI/8r+mpn9zv9W8KGZHR9+oZnN\nNbObzOw1oBHYz8wGmNldZrbezNaZ2c/CCc/M9jezF80sYGZ1ZvagmQ2M2N4EM3vHzHaY2SNAUSJ/\ngJlNN7OFZrbV/wZTE7FujZl938wWAQ1mlhdvP2Z2iZmt8L8FzTazYf5yM7P/NrNN/vFYZGaHxInt\nHjP7g5nNMbMGYIqZFZrZr83sEzPbaGZ3mlk/v/xxZlZrZt/197PezC70133eL58Xsf2vm9lC//FM\nM3sggeN1npl97L8PP45sEvG38biZPWBm24ELzGySmb3hH9/1ZvZ7MyuI2J4zs6vMbJX/vt4SXRHw\n/94tZrbazE5KIMa5ZvYLM3vbP9ZPmlm5v26Uv8+LzewT4EV/+almttiPc66ZHRS12c+b2RI/jv81\ns3jn1+nAYufcY865XcBM4DAzOzBGvGOBI4Cf+P9DfwbeB74e72+VPSn5p8dyoNXM7jWzk8xsUNT6\nycAqoBL4CfCX8D+h75vApUAZ8DFwL9ACHABMAL4KhJsiDPgFMAw4CBiJ9w+Fn0z+CtyPV8t6jAT+\ncczsCOBu4N/walx/BGabWWFEsbOBacBAvPOqw/2Y2Zf9GP8FqPb/pof91V8FjsH7wBwInAkE4sUI\n/D/gJrxj9CrwK38bh+Mdp+HA9RHlhwID/OUXA7eb2SDn3Dx/fydElD3X/1sSYmbjgTuAc/y/L7yf\nSDOAx/2/8UGgFfgO3jnwBeB44PKo13wNmIiXAGcAF0Wsmwws819/M3CXmVkC4Z7nb2cY3jl1W9T6\nY/HOoxP95PsQcA0wGJgDPBX5IeX/zScC++Md//+Ms/+DgffCT5xzDcBKf3mssqucczsilr3XQVmJ\nxzmnnzT84P0D3QPU4v2TzQaqgAuATwGLKPs28E3/8Vzgxoh1VXjNRf0ilp0NvNTBfk8D3vUfHxNj\nX68DP4sT+x+An0YtWwYc6z9eA1wUsa7T/QB3ATdHrCsFmoFRwJfxPiyPBHISPLb3APdFPDegAdg/\nYtkXgNX+4+OAnUBexPpNwJH+4+8DD/qPy/G+cVX7z2cCD8SJ53rgoYjnxUAI+ErENl6Os41rgCci\nnjtgasTzy4EX/McXACui9ueAoXH2MRf4ZcTz8X6cuf574YD9Itb/GHg04nkOsA44LuI8uCxi/cnA\nyjgx3BUZg7/sNeCCGGW/CbwZtewm4J6e/n/2xZ+sb2vcWzjnluL9k+J/pX0A+C3wHLDO+Wey72O8\nmljY2ojH+wL5wPqIil1OuIyZDcGrvX0JrxacA2zxyw3rYF/x7Aucb2bfjlhW0EmM8fYzDHgn/MQ5\nFzSzADDcOfeimf0euB3Yx8yeAK51zm2PE2Pk/gfjJcAFEcfI8JJaWMA51xLxvBHvQwi892apmZXi\nfTt5xTm3Ps7+Iw2LjMc51+j/fR3FG27S+A1ezb4YyAMWdPKa6HNkQ9T+iPh7OhO9zXy8bw+x1g8j\n4n10zrWZ2Vp2/1bTWYyxBIH+Ucv6Azt6WFbiULNPBjjnPsSrrYbbsodHfUXfB6/m3P6SiMdr8Wr+\nlc65gf5Pf+dc+KvvL/zyNc65/nhNFuFtr+9gX/GsBW6K2N9A51yxc+6hDmKMt59P8T5QADCzErzm\npHUAzrnbnHOfw/s6Pxa4LoEYI/dfh1ezPzgi3gHOuUSSIc65dcAbeM0s36QLTT6+9cCI8BP/WkNF\nJ/GC9+3qQ2CM/779B5+9b2EjIx5HnyPdFb3NZrzjFyvO6PfN/Nev60GMi4HDIrZZgtdktLiDsvuZ\nWVnEssM6KCtxKPmngZkd6F9cHOE/H4nXVPOmX2QIcJWZ5ZvZN/CaiObE2pZfA30e+C8z629mOeZd\n5D3WL1KGV0PaambD2T1xvoHX5HSVeRdlTwcmJfAn/A9wmZlNNk+JmU2L+ieMFG8//wdcaGaH+9cN\nfg685Zxb419wnWxm+XhNN7vw2sMT5pxr82P+b/+bEGY23MxO7MJm7gO+BxwKPNGV/eO15Z9iZl/0\n28NvYM9EHq0M2A4E/W+G34pR5jozG+SfP1fTea+YRJ1rZuPNrBi4EXjcOdfR8X4UmGZe18x84Lt4\nFZHXI8pcYWYj/GtW/5FAjE8Ah5h3Ub0Ir8lskV9B2o1zbjmwEPiJmRWZ2deAGuDPif+5Eqbknx47\n8C7IvWVeb5Q3gQ/w/nkA3gLG4NW4bgLOcM51dpHzPLxmlyV4TTqP411YBC/RHAFsA57B60YHgHMu\nhNe74gL/dWdGru+Ic24+cAnwe/91K/xtdFS+0/04517Aaz/+M14teX/gLH91f7zEvQWv2SAA/Dpe\njDF834/zTb9HzT+AcV14/RN4tdwnnHcRMmHOucXAt/EuYq/He/830XnX3mvxLlrvwPv7YyXNJ/Ga\nghbivbd3dSWuDtyP9y10A16PrKs6KuicW4b3TfJ3eOfqKcAp/vsd9n94lZNV/k+nN/Y55zbjdQa4\nCe89n8xn5wLm9dK6M+IlZ+E1jW0Bfon3v7I5gb9TotjuzbKSbmZ2AfCvzrmjMx2L7M7MVgL/5pz7\nRw+3UwpsxWvSWd3NbTj/9St6EkvUNufiXbzOqjuWJT1U8xeJwcy+jtfe/WI3X3+KmRX7bdi/xuuP\nviZ5EYr0jJK/AO1j1gRj/Dyb6dgA/BuLYsV3Tgr2NRfvAuwV/vWDWGXO6SCe8MXHGXgXOz/Fa9I7\ny2Xga3YHMQbN7EtpjCGrz62+Ss0+IiJ9kGr+IiJ9kJK/iEgflLE7fCsrK92oUaMytXsRkV5pwYIF\ndc65Ho9kmrHkP2rUKObPn5+p3YuI9EpmlsiQLHGp2UdEpA9S8hcR6YOU/EVE+iAN6Syyl2pubqa2\ntpZdu3ZlOhTphqKiIkaMGEF+fn5Kth83+ZvZ3cB0YJNzbo/p9PxhXW/Fm7ihEW8Shneiy4lIetXW\n1lJWVsaoUaNIbFIvyRbOOQKBALW1tYwePTol+0ik2eceYGon60/Cu319DN5Ug3/oeVgi0lO7du2i\noqJCib8XMjMqKipS+q0tbvJ3zr0M1HdSZAbeFHrOOfcmMNDMqjspLyJposTfe6X6vUvGBd/h7D51\nWy17TlYt0mfMeX89l9yne1gkuyUj+cf6eIo5WpyZXWpm881s/ubNmn9B9k6vrqjj70s2UhfsbO4W\nScRxxx2X8M2gc+fO5fXXX49fMMvMnTuX6dOnp32/yUj+tew+b+cIOpi30zk3yzk30Tk3cfDgHt+d\nLJKVAn7SX75R84onorW1S7N0digTyT9ZsWdCMrp6zgauNLOH8aZg2+bPMyvSJwWC3qyGyzfs4Iv7\nV2Y4Gs8NTy1myafbk7rN8cP685NTDu60zJo1a5g6dSqTJ0/m3XffZezYsdx3332MHz+eiy66iOef\nf54rr7ySAw88kMsuu4z
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd799a9cf98>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nf54rr7ySAw88kMsuu4z
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd799a9c588>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAEXCAYAAABF40RQAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8VPW9//HXJztZWJJACIuCCihqFEvBVqtSa0VB8Vp7\n1Z/W9eq1atXeapfbW4u2dtHee6ut1nKr1/W6VisqVluVuiugiAIiqxJEIBO2SSCT5fv745wJwzDJ\nTJLZQt7PxyOPzJzznXM+OXPyme98z/d8v+acQ0RE+pacTAcgIiLpp+QvItIHKfmLiPRBSv4iIn2Q\nkr+ISB+k5C8i0gcp+fdxZnaPmf18b9lPqpnZv5vZnzIdRyQzu8DMXsuCONaY2dcyHYckRsk/Tczs\naDN7w8y2mlm9mb1uZl/MdFzSNc65Xzjn/iXTcexNzOx4M/vIzBrN7GUz27eTsj8zsw/MrMXMZqYx\nzL2Okn8amFl/4Bngd0A5MBy4AWjq4nbMzLL6PTOzvCyIITfTMXRFNhyzeFIVo5lVAk8AP8H735gP\nPNLJS1YA3weeTUU8fUlWJ5K9yFgA59xDzrlW59wO59wLzrlF/lf2183sd/63go/M7PjwC81srpnd\nZGavA43AfmY2wMzuMrP1ZrbOzH4eTnhmtr+ZvWRmATOrM7MHzWxgxPYmmNm7ZrbdzB4BihL5A8xs\nupktNLMt/jeYmoh1a8zsB2a2CGgws7x4+zGzS8xshf8taLaZDfOXm5n9t5lt9I/HIjM7JE5s95jZ\nH8xsjpk1AFPMrNDMfmNmn5rZBjO708z6+eWPM7NaM/uev5/1Znahv+6Lfvm8iO1/w8wW+o9nmtkD\nCRyv88zsE/99+Elkk4i/jcfN7AEz2wZcYGaTzOxN//iuN7Pfm1lBxPacmV1lZqv89/WW6IqA//du\nNrPVZnZSAjHONbNfmtk7/rF+yszK/XWj/H1ebGafAi/5y081s8V+nHPN7KCozX7RzJb4cfyvmcU7\nv04HFjvnHnPO7QRmAoeZ2YGxCjvn7nXOPQdsj/f3SeeU/NPjY6DVzO41s5PMbFDU+snAKqAS+Cnw\nRPif0Pct4FKgDPgEuBdoAQ4AJgBfB8JNEQb8EhgGHASMxPuHwk8mfwHux6tlPQZ8I17wZnYEcDfw\nr0AF8EdgtpkVRhQ7G5gGDMQ7rzrcj5l91Y/xn4Fq/2962F/9deAYvA/MgcCZQCBejMD/A27CO0av\nAb/2t3E43nEaDlwfUX4oMMBffjFwu5kNcs7N8/d3QkTZc/2/JSFmNh64AzjH//vC+4k0A3jc/xsf\nBFqB7+KdA18Cjgcuj3rNPwETgSP8118UsW4ysMx//c3AXWZmCYR7nr+dYXjn1G1R64/FO49ONLOx\nwEPANcBgYA7wdOSHlP83nwjsj3f8/yPO/g8G3g8/cc41ACv95ZJKzjn9pOEH7x/oHqAW759sNlAF\nXAB8BlhE2XeAb/mP5wI3Rqyrwmsu6hex7Gzg5Q72exrwnv/4mBj7egP4eZzY/wD8LGrZMuBY//Ea\n4KKIdZ3uB7gLuDliXSnQDIwCvor3YXkkkJPgsb0HuC/iuQENwP4Ry74ErPYfHwfsAPIi1m8EjvQf\n/wB40H9cjveNq9p/PhN4IE481wMPRTwvBkLA1yK28UqcbVwDPBnx3AFTI55fDrzoP74AWBG1PwcM\njbOPucCvIp6P9+PM9d8LB+wXsf4nwKMRz3OAdcBxEefBZRHrTwZWxonhrsgY/GWvAxfEed0DwMye\n/l/25Z+sb2vcWzjnluL9k+J/pX0A+C3wPLDO+We07xO8mljY2ojH+wL5wPqIil1OuIyZDcGrvX0F\nrxacA2z2yw3rYF/x7Aucb2bfiVhW0EmM8fYzDHg3/MQ5FzSzADDcOfeSmf0euB3Yx8yeBK51zm2L\nE2Pk/gfjJcAFEcfI8JJaWMA51xLxvBHvQwi892apmZXifTt51Tm3Ps7+Iw2LjMc51+j/fR3Fi1+r\n/i+8mn0xkAcs6OQ10efI51H7I+Lv6Uz0NvPxvj3EWj+MiPfROddmZmvZ/VtNZzHGEgT6Ry3rj5p1\nUk7NPhngnPsIr7YabsseHvUVfR+8mnP7SyIer8Wr+Vc65wb6P/2dc+Gvyb/0y9c45/rjNVmEt72+\ng33Fsxa4KWJ/A51zxc65hzqIMd5+PsP7QAHAzErwmpPWATjnbnPOfQHvq/9Y4LoEYozcfx1ezf7g\niHgHOOcSSYY459YBb+I1s3yLLjT5+NYDI8JP/GsNFZ3EC963q4+AMf779u/set/CRkY8jj5Huit6\nm814xy9WnNHvm/mvX9eDGBcDh0VsswSvyWhxArFLDyj5p4GZHehfXBzhPx+J11Tzll9kCHCVmeWb\n2TfxmojmxNqWXwN9AfhPM+tvZjnmXeQ91i9Shleb2mJmw9k9cb6J1+R0lXkXZU8HJiXwJ/wPcJmZ\nTTZPiZlNM7OyDsrH28//ARea2eH+dYNfAG8759b4F1wnm1k+XtPNTrz28IQ559r8mP/b/yaEmQ03\nsxO7sJn78HqVHAo82ZX947Xln2JmX/bbw29gz0QerQzYBgT9b4bfjlHmOjMb5J8/V9N5r5hEnWtm\n482sGLgReNw519HxfhSYZl7XzHzge3gVkTciylxhZiP8a1b/nkCMTwKHmHdRvQivyWyRX0Hag/8/\nUoSXu/LMrMh6We+ubKHknx7b8S7IvW1eb5S3gA/x/nkA3gbG4NW4bgLOcM51dpHzPLxmlyV4TTqP\n411YBC/RHAFsxesO90T4Rc65EF7vigv8150Zub4jzrn5wCXA7/3XrfC30VH5TvfjnHsRr/34z3i1\n5P2Bs/zV/fES92a8ZoMA8Jt4McbwAz/Ot/weNX8HxnXh9U/i1XKfdN5FyIQ55xYD38G7iL0e7/3f\nSOdde6/Fu2i9He/vj5U0n8JrClqI997e1ZW4OnA/3rfQz/F6ZF3VUUHn3DK8b5K/wztXTwFO8d/v\nsP/Dq5ys8n86vbHPObcJrzPATXjv+WR2nQuY10vrzoiX/A/et7qzgR/7j78V/8+UaLZ7s6ykm5ld\nAPyLc+7oTMciuzOzlcC/Ouf+3sPtlAJb8Jp0VndzG85//YqexBK1zbl4F6+z6o5lSQ/V/EViMLNv\n4LV3v9TN159iZsV+G/ZvgA/wesOIZAUlfwHax6wJxvh5LtOxAfg3FsWK75wU7Gsu3gXYK/zrB7HK\nnNNBPOELlTPwLnZ+htekd5bLwNfsDmIMmtlX0hhDVp9bfZWafURE+iDV/EVE+iAlfxGRPihjd/hW\nVla6UaNGZWr3IiK90oIFC+qcc4N7up2MJf9Ro0Yxf/78TO1eRKRXMrNEhmSJS80+IiJ9kJK/iEgf\npOQvItIHaUhnkb1Uc3MztbW17Ny5M9OhSDcUFRUxYsQI8vPzU7L9uMnfzO4GpgMbnXN7TKfnD+t6\nK97EDY14kzC8G11ORNKrtraWsrIyRo0ahSU0qZdkC+ccgUCA2tpaRo8enZJ9JNLscw8wtZP1J+Hd\nvj4Gb6rBP/Q8LBHpqZ07d1JRUaHE3wuZGRUVFSn91hY3+TvnXgHqOykyA28KPeecewsYaGbVnZQX\nkTRR4u+9Uv3eJeOC73B2n7qtlj0nqxbpM+Z8sJ5L7tM9LJLdkpH8Y308xRwtzswuNbP5ZjZ/06ZN\nSdi1SPZ5bUUdf1uygbpgZ3O3SCKOO+64hG8GnTt3Lm+88Ub8gllm7ty5TJ8+Pe37TUbyr2X3eTtH\n0MG8nc65Wc65ic65iYMH9/juZJGsFPCT/scbNAd5IlpbuzRLZ4cykfyTFXsmJKOr52zgSjN7GG8K\ntq3+PLMifVIg6M1q+PHn2/ny/pUZjsZzw9OLWfLZtqRuc/yw/vz0lIM7LbNmzRqmTp3K5MmTee+9\n9xg7diz33Xcf48eP56KLLuKFF17gyiuv5MADD+Syyy6jsbGR/fffn7vvvptBgwYB8MADD3DVVVex\nbds27r77biZN2nPa6TV
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd799c4a7b8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nbds27r77biZN2nPa6TV
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd799d51438>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_all('soil_output/Spread_erdos*', get_value, 'prob_tv_spread');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Manually plotting with pandas"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T11:00:37.003972Z",
"start_time": "2017-10-19T13:00:36.983128+02:00"
}
},
"source": [
"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.\n",
"\n",
"For that, we can use native pandas over the results.\n",
"\n",
"Soil provides some convenience methods to simplify common operations:\n",
"\n",
"* `analysis.split_df` to separate a history dataframe into environment and agent parameters.\n",
"* `analysis.get_count` to get a dataframe with the value counts for different attributes during the simulation.\n",
"* `analysis.get_value` to get the evolution of the value of an attribute during the simulation.\n",
"\n",
"And, as we saw earlier, `analysis.process` can turn a dataframe in canonical form into a dataframe with a column per attribute.\n"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:59:15.791793Z",
"start_time": "2017-10-19T17:59:15.604960+02:00"
},
"collapsed": true
},
"outputs": [],
"source": [
"p = read_sql('soil_output/Spread_barabasi_albert_graph_prob_0.0/Spread_barabasi_albert_graph_prob_0.0_trial_0.db.sqlite')\n",
"env, agents = split_df(p);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's look at the evolution of agent parameters in the simulation"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:59:17.153282Z",
"start_time": "2017-10-19T17:59:16.830872+02:00"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEKCAYAAAAfGVI8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8lNXZ+P/PmS07CSEZCGtopYgshsWVquACdQMXrFhE\nBBUXqFaf9hEfW9tav78HrRVFKtYFpWILFasotXVBqFUflVVEUEEMEAFJgAxkksx6fn/MPUOWSTKZ\nzGRmmOv9euWVmXubK8NwX3POfZ/rKK01Qggh0pcp0QEIIYRILEkEQgiR5iQRCCFEmpNEIIQQaU4S\ngRBCpDlJBEIIkeYkEQghRJqTRCCEEGlOEoEQQqQ5S6IDACgqKtKlpaWJDkMIIVLK+vXrq7TWxR09\nTlIkgtLSUtatW5foMIQQIqUopXbF4jjSNSSEEGlOEoEQQqQ5SQRCCJHmkuIagRAiNjweDxUVFdTX\n1yc6FBFDmZmZ9O7dG6vVGpfjSyIQ4jhSUVFBXl4epaWlKKUSHY6IAa01Bw8epKKigv79+8flNSLq\nGlJKlSulPlNKbVJKrTOWFSql3lZKbTd+dzWWK6XUfKXUDqXUZqXUiLhELoRopr6+nm7dukkSOI4o\npejWrVtcW3ntuUYwVmtdprUeZTyfA6zSWg8AVhnPAS4EBhg/M4GFsQpWCNE2SQLHn3j/m3aka2gi\nMMZ4vBhYA9xtLP+zDsyB+ZFSqkApVaK13tfSgVxffcWuqddh7VmCpaQEa0lPrD17Yu1ZgrWkBFN2\ndgfCFCJ1eVw+3nluK/u+ro5o+6GX51K152icoxKJUHO4nkW/+E9cjh1pItDAW0opDfxJa/0U0D14\nctda71NK2Y1tewF7GuxbYSxrlAiUUjMJtBj4QX4BWvupXbsOz3ffgc/X6MXN+flYevUMJIiSQHKw\n9izB2rMnlpISLEVFKJPcACWOL+46Lyv/+Cn7v3Yw8PQeWKzmNvex2FxkZMfngmI0du3exY9/cgUf\nv78+LV8/liw2M98fbm97w2iOHeF2o7XWe42T/dtKqS9a2TZcG0Y3WxBIJk8BjBo1SpcuWRJY7vXi\nrazEs28fnr378Ozdi2ffXrx79+HZs4fajz/GX1PT+AWtVqy9emHt1xdb337Y+vXD1q8vtr59sfbq\nhbLINXGRWuqdHl5//FOqdh9l3I1DOGFkZCeAbdu2kdctM87RRS73aAYms0pYTIl+/VjKPGBl+E8G\nNl44JTbHjugMqbXea/w+oJR6BTgV+C7Y5aOUKgEOGJtXAH0a7N4b2BtpQMpiCX3rp4XLzL6jR40k\n8S2effvw7t2Le08F7t27qV27Dl1b2+AvtGDt1TOQIPr2DSUJa9++2Hr3RsXpdiwholVX4+a1xzZx\naJ+T8TOH8L2yDpeSSQo7d+7kyiuv5Mknn2T58uWsWbMGl8vFrFmzuPnmm5k6dSqTJk1i4sSJAEyZ\nMoWrr76aCRMmhI5x9dVXM23aNC666CIArr/+ei699FJGjhzJ1KlTcTqdACxYsIAzzzyz0es///zz\nrFu3jgULFgBwySWX8POf/5wxY8bw1ltv8etf/xqXy8X3v/99nnvuOXJzczvjbUkKbSYCpVQOYNJa\nHzUejwPuB14DpgFzjd8rjF1eA2YrpZYCpwGO1q4PRMOcl4d5YB6ZA3/QbJ3WGl9VFe7du3Hv2o17\n1y7cu3fh2bUbx4YN+I0PSuBAZqw9ewZaDn37YCnshjk/H3NBPuaCgsDj/HxM+fmYu3RBmdtumgvR\nEbVH3Kx4dCOOyjouunUY/QZ3S3RIMfHll18yefJknnvuOT755BPy8/NZu3YtLpeL0aNHM27cOG68\n8UbmzZvHxIkTcTgcfPjhhyxevLjRcSZPnsyyZcu46KKLcLvdrFq1ioULF6K15u233yYzM5Pt27dz\nzTXXRFy/rKqqigceeIB33nmHnJwcHnzwQR555BHuu+++eLwVSSmSFkF34BXjqrUF+IvW+l9KqbXA\n35RSNwC7gauM7d8ALgJ2ALXA9JhH3QqlFJbiYizFxWSPHNlondYa36FDgQSxexfuXYEE4d69m7o3\ntuB3OFo9tqlLFyNRHEsSocSRn4+pSz6m7GxMOTnG7+zAb+NHZWbKHR2iRTWHXax4dCM1h+u5eNYw\n+pxYmOiQYqKyspKJEyfy8ssvM3jwYB544AE2b97M8uXLAXA4HGzfvp1x48Yxa9YsDhw4wN///neu\nvPJKLE26dS+88EJuv/12XC4X//rXvzj77LPJysrC4XAwe/ZsNm3ahNls5quvvoo4vo8++oitW7cy\nevRoANxuN2eccUbs3oAU0GYi0FrvBE4Os/wgcF6Y5RqYFZPoYkwphaVbNyzdupE9Yniz9drnw3fk\nCH6HA5/Dga+62vhtPA/9BJa79+zGX+3Ad+QI6GaXQcIF0DgxNEwURvKwFHY71nXVrx8Wu12SRxo4\ncrCOFY9uou6om0t/WkbPAQWJDilm8vPz6dOnDx988AGDBw9Ga83jjz/O+PHjm207depUXnzxRZYu\nXcqiRYuarc/MzGTMmDG8+eabLFu2jGuuuQaAefPm0b17dz799FP8fj+Zmc2vCVgsFvx+f+h58L58\nrTUXXHABf/3rX2P1J6ccuYragDKbsXTtCl27tms/7ffjP3o0kERqa/E7awO/a53G71q08fvYulr8\nzsB636HDeCq+xe904j10CDyeYzFlZhrXNo4lh8AF8b5YuneXu6WOA47KWl6dtxF3nY8Jd5TRo39+\nokOKKZvNxquvvsr48ePJzc1l/PjxLFy4kHPPPRer1cpXX31Fr169yMnJ4frrr+fUU0+lR48eDB48\nGIBvv/2W6667jlWrVgGB7qFnnnmGdevW8fzzzwOBVkXv3r0xmUwsXrwYX5M7DyFQ7v6JJ57A7/fz\n7bff8sknnwBw+umnM2vWLHbs2MEJJ5xAbW0tFRUV/OAHzbuej1eSCGJAmUyhbqKO0j4fnn37ce8q\nxxO8zrF7N66d31Cz5t/ohkkiIwNb3z5Ym14I79ULa48eKJutw/GI+Dq838mKeRvxev1cdudwivvm\nJTqkuMjJyWHlypVccMEF/PKXv+Skk05ixIgRaK0pLi7m1VdfBaB79+4MGjSIyy67LLTvvn37GnUR\njRs3juuuu44JEyZgMz7jt912G1deeSUvvfQSY8eOJScnp1kMo0ePpn///gwdOpQhQ4YwYkTgbpTi\n4mKef/55rrnmGlwuFwAPPPBAWiUCpSPp0oizUaNGaZmYpm3a58P73XeBC+HluwK/dx+7zqGNDzEA\nSmEpKsLSs+TY+IsGg/QsJSWYCwqk2ymBDn5bw4rHNoHWTPzZcLr16vhdKtu2bWPQoEExiC4xamtr\nGTp0KBs2bCDf+GK1YMEC+vbt2+juoXQU7t9WKbW+QbWHqEmLIIUo4y4na8+e5Jx+eqN12u/He+AA\n7l27A2MvQrfW7sP1xRfUrF7dOFEAKjv72AA9Y5BecGS3pbgYi70YU06OJIs4qNx9lNce24TJorjs\nrhF07dH8G2y6eeedd5gxYwZ33XVXKAkAzJ49O4FRpQdJBMcJZTJh7dEDa48eYddrrfEdPhwaf+EN\nDtjbFxi0V79tG76DB5sfNzMz0LIoKsJSXIQ59LgYS1ExlmLjebdu0hUVoe++OcLrj2/CmmFm4p3D\nKbBLCRWA888/n927dyc6jLQkiSBNKKWwFBZiKSwka8jgsNv46+vx7t8faElUVeGtrMJbWRl4XFWJ\nu7wc79p1+KrD170x5+djsRcHkkVht2O32RbkN7rt1hR8nJeXdqO+9+2o5vUFn5KVa2Xiz4bTpSgr\n0SEJIYlAHGPKzMRWWoqttLTV7bTbjffgwWPJospIFpWV+IxldZs3B+6iauPWWlNeXthxGab8fCxd\nC4+1OIqLMRcVY8rJTtmuqoovD/OPJzaTW5DBxJ+Vkds19cseiOODJALRbspmO1YGpA3NxmaExmg0\nGKfRYGyGp6IisLyFBKK
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd799c4f908>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"res = agents.groupby(by=['t_step', 'key', 'value']).size().unstack(level=[1,2]).fillna(0)\n",
"res.plot();"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T11:10:36.086913Z",
"start_time": "2017-10-19T13:10:36.058547+02:00"
}
},
"source": [
"As we can see, `event_time` is cluttering our results, "
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:59:18.418348Z",
"start_time": "2017-10-19T17:59:18.143443+02:00"
}
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7fd795b17b38>"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEKCAYAAAAfGVI8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8VNX98PHPySzJTPZlAmEJoZW6sBgRcaFacAF3tGLF\nKrKoWISi9elT/dX+qvbn83vUx63WSt1YWrFaad342bqw1K0qi4gIFaiFEAjMJCEhISGZ5Tx/zJ0h\nyySZTGYl3/frNa+5c++5d74Zhvudc+495yitNUIIIfqvtEQHIIQQIrEkEQghRD8niUAIIfo5SQRC\nCNHPSSIQQoh+ThKBEEL0c5IIhBCin5NEIIQQ/ZwkAiGE6OfMiQ4AoKioSJeVlSU6DCGESCkbNmyo\n1lo7+nqcpEgEZWVlrF+/PtFhCCFESlFK7Y7GcaRpSAgh+jlJBEII0c9JIhBCiH4uKa4RCCGSg9vt\nprKykiNHjiQ6FNFGRkYGQ4YMwWKxxOT4kgiEEEGVlZVkZ2dTVlaGUirR4QhAa01NTQ2VlZUMHz48\nJu8RVtOQUmqXUupLpdQmpdR6Y12BUupdpdQO4znfWK+UUk8opXYqpTYrpcbGJHIhRNQdOXKEwsJC\nSQJJRClFYWFhTGtpvblGMElrXa61Hme8vgtYpbUeAawyXgNcBIwwHnOBRdEKVggRe5IEkk+s/036\n0jQ0FZhoLC8D1gJ3Gut/r/1zYH6ilMpTSpVorau6OtCOgzuY/bfZlGSWMDBzICVZJQzKHBR8bbfY\n+xCmEKnL19TEvjvvpGnDxri8n/v/3M8RJBEkI/f+/Wy/8aaYHDvcRKCBd5RSGnhaa/0MMCBwctda\nVymlio2yg4E9bfatNNa1SwRKqbn4awzkDcvDp31sOLCBA00H8GpvuzfPTc9lUOYgf5LILPEniKyB\nwWRRaCskTckNUOLY4m1sZM8tP6L588/JnToVlZEe8/dszcggLTcn5u8TsGvPHq6cOZPPV6+O23sm\n0/v3RlrdQbKnTG6/8h8fR+XY4SaCCVrrfcbJ/l2l1D+7KRvq54TutMKfTJ4BGDdunF520TIAPD4P\n1c3VVB2uoqqxin2H97H/8H6qDldR2VjJuv3raHQ3tjuWJc3C4KzBDM0eSmlOKaXZpcHnQVmDMKfJ\nNXGRWrz19VTcPJcjW7cy+NFHyLnwwri8b922bVgHDYrLewFYW1tRZnNc3zOZ3r83TPX1lNxzT/uV\n994blWOHdYbUWu8znp1KqVeB8cCBQJOPUqoEcBrFK4GhbXYfAuwLO6A0MwMzBzIwcyCnFJ8SskxD\na0MwUVQd9ieLyoZK9jTsYf2B9TR7mo8eT5kZlDWIoTlDKc0uZVjOMH/CyC5lcPZgLGmxuR1LiEh5\nDh6k4sYbad2xkyG/fpzs885LdEhx8c0333DVVVfxu9/9jhUrVrB27VpaWlqYP38+t9xyCzNmzGDa\ntGlMnToVgOuuu45rrrmGyy+/PHiMa665hpkzZ3LxxRcDMGvWLC677DJOPfVUZsyYweHDhwF48skn\nOeuss9q9/9KlS1m/fj1PPvkkAJdeeik//elPmThxIu+88w733HMPLS0tfPvb32bJkiVkZWXF42OJ\nix4TgVIqE0jTWjcYy5OBXwFvADOBB4zn141d3gAWKKVeAk4H6ru7PhCJbGs22dZsvpP/nU7btNbU\nHKmh4lAFFQ0V7Z43OTdx2H04WNakTJRkllCaU8rQ7KEUZBSQm55LjjWHvPQ8ctNz/Q9rLtnWbExp\npmj+GUJ04qmupmL2HForKhjy1G/JOvvsRIcUF19//TXTp09nyZIlfPbZZ+Tm5rJu3TpaWlqYMGEC\nkydP5qabbuKxxx5j6tSp1NfX8/HHH7Ns2bJ2x5k+fTovv/wyF198Ma2traxatYpFixahtebdd98l\nIyODHTt2cO2114Y9vll1dTX3338/7733HpmZmTz44IM8+uij/PKXv4zFR5EQ4dQIBgCvGletzcCL\nWuu/KaXWAX9SSt0IVABXG+XfAi4GdgJNwOyoR90NpRRFtiKKbEWMHdD+zlWtNbVHatnTsIeKhgp2\nH9rNnkP+5S3VWzjUeqjbY2dbs8m15gaTRE56DrnW3GDCyLHmYLfYyTRnYrfYsZlt2C127GY7doud\nDFOG3JEhuuQ+cICKWbNx79/P0N8tIvPMMxMdUly4XC6mTp3Kn//8Z0aOHMn999/P5s2bWbFiBQD1\n9fXs2LGDyZMnM3/+fJxOJ3/5y1+46qqrMJvbn8IuuugiFi5cSEtLC3/7298455xzsNls1NfXs2DB\nAjZt2oTJZGL79u1hx/fJJ5+wdetWJkyYAEBraytnHmP/Nj0mAq31N8DJIdbXAJ3qrMbdQvOjEl2U\nKaUotBVSaCukvLi803avz0tDawP1rfXUt9RT11JHfUs9h1oPUd/iXxfYdqjlEHsa9lDf6l/WnS+D\ndH5/VLvEYDcfTRaZlkzsZjsFGQXBGkppdinF9mJJHv2Ae+9eds+eg7emhtJnn8E+blzPOx0jcnNz\nGTp0KB999BEjR45Ea81vfvMbpkyZ0qnsjBkzWL58OS+99BKLFy/utD0jI4OJEyfy9ttv8/LLL3Pt\ntdcC8NhjjzFgwAC++OILfD4fGRkZnfY1m834fL7g68B9+1prLrjgAv74xz9G609OOnIVtQ1Tmom8\njDzyMvJ6tZ9P+2hobeBQ6yGa3E00e5ppcjfR5DEe7u6fDx45yN7GvRx2H6b2SC0enyd47AxTRvD6\nRtuL4KU5/iQhd0ulvtaKCnbPmoWvoZHSxc9jO7nT765jmtVq5bXXXmPKlClkZWUxZcoUFi1axLnn\nnovFYmH79u0MHjyYzMxMZs2axfjx4xk4cCAjR44EYO/evdxwww2sWrUK8DcPPffcc6xfv56lS5cC\n/lrFkCFDSEtLY9myZXi93k5xlJWV8dRTT+Hz+di7dy+fffYZAGeccQbz589n586dHHfccTQ1NVFZ\nWcl3vtO5aTpVSSKIgjSVFmwe6iuvz8v+pv3tmq0qGir4d/2/eb/yfdw+d7BsuimdodlDg7WH0hz/\nY3DmYAZmDsRikgvhya7lm39TMWsWuqWF0qVLsBknt/4mMzOTlStXcsEFF/CLX/yCk046ibFjx6K1\nxuFw8NprrwEwYMAATjzxRK644orgvlVVVe2aiCZPnswNN9zA5ZdfjtVqBeDWW2/lqquu4pVXXmHS\npElkZmZ2imHChAkMHz6c0aNHM2rUKMaO9TctOxwOli5dyrXXXktLSwsA999//zGVCJS/JSexxo0b\np2Vimp55fV6cTc6j1zca9gQvhu9p2EOLtyVYVuG/VhLspJdZQklWSbAfRklmCbnpudLslEBHtm+n\nYs6NoDWlixeTcXziTyzbtm3jxBNPTHQYXWpqamL06NFs3LiR3Fz/D68nn3yS0tLSdncPHYtC/dso\npTa0Ge0hYlIjSCGmNJP/ZJ5Vwuklp7fb5tM+nE1O9jTsYV/jvqP9Lxqr2H5wO3+v/Hu7RAFgM9uO\ndtDrkCyKbEU4bA4yLZmSLGLgyNatVMy5EWWxUPr7ZaR/61uJDinpvffee8yZM4c77rgjmAQAFixY\nkMCojg2SCI4RaSot2P8iFK01B1sOtut/UXW4iv2H97OvcR/bardRe6S2034ZpgwKbYXBO7GKbEUU\n2gpx2Bzt12UUSlNUmJo3b6bipptJy8xk2NIlWIcNS3RIKeH888+noqIi0WEckyQR9BNKKQoyCijI\nKGBkYeh26COeIxxoOkDV4Sqqm6upaa7B1eSi+kg11c3V7D60mw0HNlDXUhdy/9z0XBw2B4W2Qgoy\nCo72xWhzi23b19nW7H7X67tp40b23DwXU0EBpUuWYB0yONEhCSGJQByVYc5gWM4whuV0/wvV7XVT\nc6SG6ubqLh9fur7kUOshGlobur21NtuS3SlJ5KTnkJueS0FGgb82klGEw+6vgdjN9pRtqjr8yafs\nufVWLMXFlC5dgmVg6Nq
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd796e1ff60>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"del res['event_time']\n",
"res.plot()"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:59:42.750011Z",
"start_time": "2017-10-19T17:59:42.649353+02:00"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th>event_time</th>\n",
" <th>has_tv</th>\n",
" <th>id</th>\n",
" </tr>\n",
" <tr>\n",
" <th>t_step</th>\n",
" <th>agent_id</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"30\" valign=\"top\">0</th>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>100</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>101</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>102</th>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>103</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>104</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>105</th>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>106</th>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>107</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>108</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>109</th>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>110</th>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>111</th>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>112</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>113</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>114</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>115</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>116</th>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>117</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>118</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>119</th>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>120</th>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>121</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>122</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>123</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>124</th>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"30\" valign=\"top\">20</th>\n",
" <th>73</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>74</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>76</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>77</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>78</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>79</th>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>80</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>81</th>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>82</th>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>83</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>84</th>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>85</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>86</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>87</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>88</th>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>89</th>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>90</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>91</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>92</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>93</th>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>94</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>95</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>96</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>97</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>98</th>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>99</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>infected</td>\n",
" </tr>\n",
" <tr>\n",
" <th>NewsEnvironmentAgent</th>\n",
" <td>10</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>10521 rows × 3 columns</p>\n",
"</div>"
],
"text/plain": [
" event_time has_tv id\n",
"t_step agent_id \n",
"0 0 0 True neutral\n",
" 1 0 False neutral\n",
" 10 0 True neutral\n",
" 100 0 True neutral\n",
" 101 0 True neutral\n",
" 102 0 False neutral\n",
" 103 0 True neutral\n",
" 104 0 True neutral\n",
" 105 0 False neutral\n",
" 106 0 False neutral\n",
" 107 0 True neutral\n",
" 108 0 True neutral\n",
" 109 0 False neutral\n",
" 11 0 True neutral\n",
" 110 0 False neutral\n",
" 111 0 False neutral\n",
" 112 0 True neutral\n",
" 113 0 True neutral\n",
" 114 0 True neutral\n",
" 115 0 True neutral\n",
" 116 0 False neutral\n",
" 117 0 True neutral\n",
" 118 0 True neutral\n",
" 119 0 False neutral\n",
" 12 0 False neutral\n",
" 120 0 False neutral\n",
" 121 0 True neutral\n",
" 122 0 True neutral\n",
" 123 0 True neutral\n",
" 124 0 False neutral\n",
"... ... ... ...\n",
"20 73 0 True infected\n",
" 74 0 True infected\n",
" 75 0 True infected\n",
" 76 0 True infected\n",
" 77 0 True infected\n",
" 78 0 True infected\n",
" 79 0 False infected\n",
" 8 0 False infected\n",
" 80 0 True infected\n",
" 81 0 False infected\n",
" 82 0 False infected\n",
" 83 0 True infected\n",
" 84 0 False infected\n",
" 85 0 True infected\n",
" 86 0 True infected\n",
" 87 0 True infected\n",
" 88 0 False infected\n",
" 89 0 False infected\n",
" 9 0 True infected\n",
" 90 0 True infected\n",
" 91 0 True infected\n",
" 92 0 True infected\n",
" 93 0 False infected\n",
" 94 0 True infected\n",
" 95 0 True infected\n",
" 96 0 True infected\n",
" 97 0 True infected\n",
" 98 0 False infected\n",
" 99 0 True infected\n",
" NewsEnvironmentAgent 10 False 0\n",
"\n",
"[10521 rows x 3 columns]"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"processed = process_one(agents);\n",
"processed"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Which is equivalent to:"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:59:51.165806Z",
"start_time": "2017-10-19T17:59:50.886780+02:00"
}
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7fd799c15748>"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nufVWLMXFlC5dgmVg6Nq
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd799d3fbe0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"get_count(agents, 'id', 'has_tv').plot()"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:59:55.203641Z",
"start_time": "2017-10-19T17:59:54.950046+02:00"
}
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7fd79a228c88>"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\noGpzEnAG8Gwz65Qktc+
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd79a1fe208>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"get_value(agents, 'event_time').plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Dealing with bigger data"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T16:00:18.148006Z",
"start_time": "2017-10-19T18:00:18.117654+02:00"
},
"collapsed": true
},
"outputs": [],
"source": [
"from soil import analysis"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T16:00:18.636440Z",
"start_time": "2017-10-19T18:00:18.504421+02:00"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"267M\t../rabbits/soil_output/rabbits_example/\r\n"
]
}
],
"source": [
"!du -xsh ../rabbits/soil_output/rabbits_example/"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T11:22:22.301765Z",
"start_time": "2017-10-19T13:22:22.281986+02:00"
}
},
"source": [
"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."
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T16:00:25.080582Z",
"start_time": "2017-10-19T18:00:19.594165+02:00"
},
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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\nVttph3QLuvLKKzl48KC
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd799c54ba8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nVttph3QLuvLKKzl48KC
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd799aa66d8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"p = analysis.plot_all('../rabbits/soil_output/rabbits_example/', analysis.get_count, 'id')"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T16:00:38.434367Z",
"start_time": "2017-10-19T18:00:33.645762+02:00"
},
"collapsed": true
},
"outputs": [],
"source": [
"df = analysis.read_sql('../rabbits/soil_output/rabbits_example/rabbits_example_trial_0.db.sqlite', keys=['id', 'rabbits_alive'])"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T16:00:39.160418Z",
"start_time": "2017-10-19T18:00:38.436153+02:00"
},
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7fd799b5b2b0>"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nv/Xv2qH5CzHGnPYBLAC
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd79a2f8940>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"states = analysis.get_count(df, 'id')\n",
"states.plot()"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T16:00:39.515032Z",
"start_time": "2017-10-19T18:00:39.162240+02:00"
}
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7fd796161cf8>"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYcAAAEKCAYAAAD5MJl4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8VPW9//HXJxsJYQmEsCNhExEQiGFR6koraFW0apXb\nBXq9118rdr1La9tH7Xpve/VeWtsqtVar/vy5Xi3W2lLcWmuVVVBWExYhLEkghCRAQpL5/P6YExyS\nkIRsM5O8n49HHnPme77nzOcLybznLHOOuTsiIiKREqJdgIiIxB6Fg4iINKBwEBGRBhQOIiLSgMJB\nREQaUDiIiEgDCgcREWlA4SAiIg0oHEREpIGk5jqY2UPA1UCRu0+qN+9fgbuBLHc/aGYG/Ay4CjgG\nLHL3dUHfhcC3g0V/6O6PBO3nA78F0oCXgC97C762PWDAAM/Ozm7JGEVEBBgwYADLly9f7u7zmuvb\nbDgQfuP+BfBoZKOZjQA+BuyOaL4SGBf8zATuB2aaWX/gLiAXcGCtmb3g7oeDPrcBbxMOh3nAH5sr\nKjs7mzVr1rSgfBERqWNmA1rSr9ndSu7+V6CkkVlLgH8n/GZfZz7wqIe9DWSY2RBgLrDC3UuCQFgB\nzAvm9XH3t4KthUeB61pSuIiIdJxWHXMws2uBve6+od6sYcCeiOcFQVtT7QWNtJ/udW8zszVmtqa4\nuLg1pYuISAuccTiYWU/gW8B3GpvdSJu3or1R7v6Au+e6e25WVlZLyhURkVZoyTGH+sYAo4AN4ePP\nDAfWmdkMwp/8R0T0HQ7sC9ovrdf+etA+vJH+rVJdXU1BQQGVlZWtXYW0g9TUVIYPH05ycnK0SxGR\nVjrjcHD394CBdc/NbBeQG5yt9AJwh5k9SfiA9BF3329my4H/MLN+wWJXAHe6e4mZlZvZLGAl8Fng\n560dTEFBAb179yY7O5sguKSTuTuHDh2ioKCAUaNGRbscEWmlZncrmdkTwFvAeDMrMLNbm+j+ErAD\nyAd+DdwO4O4lwA+A1cHP94M2gC8ADwbLbKcFZyqdTmVlJZmZmQqGKDIzMjMztfUmEuea3XJw9wXN\nzM+OmHZg8Wn6PQQ81Ej7GmBSwyVaR8EQffo/EIk97k5NqOV3/tQ3pEVEuoEt+8s5/wcrWtxf4SAi\n0g0s33SA8qqaFvdXOERJdnY2Bw8ebNC+aNEinn322Qbta9as4Utf+hIAr7/+On//+9/brZZdu3Yx\nadKkBq8jIl1DKOQsW7+X6dn9W7xMa05ljQvf+/0mNu8ra9d1nju0D3ddM7HF/d0ddychoe0ZnJub\nS25uLhAOh169enHhhRe2eb1NvY6IdA1v7zjErkPH+JcrxvNMC5fRlkM727VrFxMmTOD2228nJyeH\nW2+9ldzcXCZOnMhdd911St+7776bGTNmMGPGDPLz80+2v/zyy1x00UWcffbZvPjii0A4EK6++mp2\n7drF0qVLWbJkCVOnTuWNN97gmWeeYdKkSUyZMoWLL764ydouuugicnJyyMnJaXTro+51QqEQ2dnZ\nlJaWnpw3duxYCgsLKS4u5oYbbmD69OlMnz6dN998s63/bCLSgbYcKAdg9tgWXVYJ6MJbDmfyCb+9\nbdu2jYcffpj77ruPkpIS+vfvT21tLXPmzOHdd9/lvPPOA6BPnz6sWrWKRx99lK985Ssng2DXrl38\n5S9/Yfv27Vx22WWnBEd2djaf//zn6dWrF//6r/8KwOTJk1m+fDnDhg075c28voEDB7JixQpSU1PJ\ny8tjwYIFp714YUJCAvPnz+f555/nc5/7HCtXriQ7O5tBgwbxD//wD3z1q1/lIx/5CLt372bu3Lls\n2bKlvf75RKSd7SiuoG9aMv16tvyLqdpy6AAjR45k1qxZADz99NPk5OQwbdo0Nm3axObNm0/2W7Bg\nwcnHt95662T7Jz/5SRISEhg3bhyjR49m69atTb7e7NmzWbRoEb/+9a+pra09bb/q6mr++Z//mcmT\nJ3PTTTedUktjbr75Zp566ikAnnzySW6++WYgvGVzxx13MHXqVK699lrKysooLy9vcl0iEj3biysY\nnZV+RqeZd9kth2hKT08HYOfOndxzzz2sXr2afv36sWjRolO+HBb5H3W66cae17d06VJWrlzJH/7w\nB6ZOncr69evJzMxs0G/JkiUMGjSIDRs2EAqFSE1NbXK9F1xwAfn5+RQXF/O73/2Ob387fDuOUCjE\nW2+9RVpaWpPLi0j0HTtRw/o9pdycO6L5zhG05dCBysrKSE9Pp2/fvhQWFvLHP5765e+6T+VPPfUU\nF1xwwcn2Z555hlAoxPbt29mxYwfjx48/ZbnevXuf8kl9+/btzJw5k+9///sMGDCAPXv20JgjR44w\nZMgQEhISeOyxx5rcyoBwKF1//fV87WtfY8KECScD54orruAXv/jFyX7r169vwb+GiETDa1uLqawO\nceXkIWe0nLYcOtCUKVOYNm0aEydOZPTo0cyePfuU+VVVVcycOZNQKMQTTzxxsn38+PFccsklFBYW\nsnTp0gaf8K+55hpuvPFGli1bxs9//nOWLFlCXl4e7s6cOXOYMmVKo/Xcfvvt3HDDDTzzzDNcdtll\nJ7dwmnLzzTczffp0fvvb355su/fee1m8eDHnnXceNTU1XHzxxSxduvQM/mVEpLO89N5+BvRKOaPT\nWAGsBXfkjEm5uble/2Dqli1bmDBhQpQqkkj6vxCJvuMnasn5wQo+kTOMH10/GQAzW+vuzZ6vrt1K\nIiJd1F/eL+J4dS0fP8NdSqDdSl3S8uXL+frXv35K26hRo3j++eejVJGIdLbXtxXxX8u30T89hRmj\nzmyXEnTBcHD3bn9V0Llz5zJ37tyovX687qoU6SqOnahh0cOrAVh0YTZJiWe+k6hL7VZKTU3l0KFD\nenOKorqb/TR3mqyIdJx3C44AMH/qUO686pxWraNLbTkMHz6cgoICiouLo11Kt1Z3m1ARiY53C8JX\nSrjrmon0SEps1Tq6VDgkJyfr1pQi0u3tPXyc3j2S6J+e0up1dKndSiIiAoVlVQzq27ZduwoHEZEu\n5kBZJYP7KBxERCRCYVklgzo6HMzsITMrMrONEW13m9lWM3vXzJ43s4yIeXeaWb6ZbTOzuRHt84K2\nfDP7RkT7KDNbaWZ5ZvaUmbV+J5mISDdXXRuiqLyKwX17tGk9Ldly+C0wr17bCmCSu58HvA/cCWBm\n5wK3ABODZe4zs0QzSwR+CVwJnAssCPoC/ARY4u7jgMPArW0akYhIN/bBoaPUhpzRA3q1aT3NhoO7\n/xUoqdf2Z3evu1P120DdeYvzgSfdvcrddwL5wIzgJ9/dd7j7CeBJYL6Fv612OVB30+RHgOvaNCIR\nkW4sr7ACgLMH9W7TetrjmMM/AnXXoh4GRF4vuiBoO117JlAaETR17Y0ys9vMbI2ZrdF3GUREGtoa\n3BJ0zMDmr7rclDaFg5l9C6gBHq9raqSbt6K9Ue7+gLvnuntuVlbWmZYrItLlrd5VwjmDe9MzpW1f\nY2t1OJjZQuBq4FP+4fUqCoDI2w0NB/Y10X4QyDCzpHrtIiJyhsoqq1n7wWEuGNPwTpBnqlXhYGbz\ngK8D17r7sYhZLwC3mFkPMxsFjANWAauBccGZSSmED1q/EITKa8CNwfILgWWtG4qISPe1amcJl939\nOlU1IW7Iafvla1pyKusTwFvAeDMrMLNbgV8AvYEVZrbezJYCuPsm4GlgM/AnYLG71wbHFO4AlgNb\ngKeDvhAOma+ZWT7hYxC/afOoRES6EXfnO8s2kphg/OyWqUwa1rfN6+xSd4ITEemOthdXMOe//8IP\nrpvEZ2aNbLKv7gQnItJN7Cg+CsDkdthiqKNwEBGJczsPhr/bMCqzbaevRlI4iIjEuR3FR8lMT6Fv\nz+R2W6fCQUQkzq3aWcLk4e23SwkUDiIicW1v6XF2HDzKRePa94vBCgcRkTi2ZV8ZANPOymim55lR\nOIiIxLG8ovDB6LED23Y
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd79593ef98>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"alive = analysis.get_value(df, 'rabbits_alive', 'rabbits_alive', aggfunc='sum').apply(pd.to_numeric)\n",
"alive.plot()"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T16:00:58.815038Z",
"start_time": "2017-10-19T18:00:58.566807+02:00"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/jfernando/.local/lib/python3.6/site-packages/pandas/core/reshape/merge.py:551: UserWarning: merging between different levels can give an unintended result (1 levels on the left, 2 on the right)\n",
" warnings.warn(msg, UserWarning)\n"
]
},
{
"data": {
"image/png": "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\nixcvtuh9CSE6xoXcUkx
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd799b45588>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"h = alive.join(states);\n",
"h.plot();"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T16:01:01.195253Z",
"start_time": "2017-10-19T18:01:01.142907+02:00"
},
"collapsed": true,
"scrolled": true
},
"outputs": [],
"source": [
"states[[('id','newborn'),('id','fertile'),('id', 'pregnant')]].sum(axis=1).sub(alive['rabbits_alive'], fill_value=0)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.2"
},
"toc": {
"colors": {
"hover_highlight": "#DAA520",
"navigate_num": "#000000",
"navigate_text": "#333333",
"running_highlight": "#FF0000",
"selected_highlight": "#FFD700",
"sidebar_border": "#EEEEEE",
"wrapper_background": "#FFFFFF"
},
"moveMenuLeft": true,
"nav_menu": {
"height": "31px",
"width": "252px"
},
"navigate_menu": true,
"number_sections": true,
"sideBar": true,
"threshold": 4,
"toc_cell": false,
"toc_position": {
"height": "867px",
"left": "0px",
"right": "1670px",
"top": "106px",
"width": "250px"
},
"toc_section_display": "block",
"toc_window_display": true,
"widenNotebook": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}