Last active
July 1, 2017 17:27
-
-
Save DavoudTaghawiNejad/9db2fb3acd37b4c83b10fa35579c601c to your computer and use it in GitHub Desktop.
ABCE Tutorial
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "import abce" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "simulation = abce.Simulation(name='ipythonsimulation', processes=1)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Creating the Agent\n", | |
| "We create a simple agents and intialize it. The agent needs to inherit from abce.Agents. *The `__init__` function should not be overwritten, instead create an `init` function*. The init function will be called during initialisation.\n", | |
| "The agents gets two parameters. All agents get the parameters we will specify in the next round. From agent_parameters the agents get only agent_parameters[id], where id is the number of the agent.\n", | |
| "Agents have for now only one function. They can say their name." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "class Agent(abce.Agent):\n", | |
| " def init(self, parameters, agent_parameter):\n", | |
| " self.family_name = agent_parameter\n", | |
| " self.world_size = parameters['world_size']\n", | |
| " def say(self):\n", | |
| " print(\"hello I am %s my id %i and my group is '%s', it is the %i round\" % (self.family_name, self.id, self.group, self.round))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "agents = simulation.build_agents(Agent, 'agent', \n", | |
| " parameters={\"world_size\": 10}, \n", | |
| " agent_parameters=['fred', 'astaire', 'altair', 'deurich'])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "\r", | |
| "Round0\n", | |
| "hello I am fred my id 0 and my group is 'agent', it is the 0 round\n", | |
| "hello I am astaire my id 1 and my group is 'agent', it is the 0 round\n", | |
| "hello I am altair my id 2 and my group is 'agent', it is the 0 round\n", | |
| "hello I am deurich my id 3 and my group is 'agent', it is the 0 round\n", | |
| "\r", | |
| "Round1\n", | |
| "hello I am fred my id 0 and my group is 'agent', it is the 1 round\n", | |
| "hello I am astaire my id 1 and my group is 'agent', it is the 1 round\n", | |
| "hello I am altair my id 2 and my group is 'agent', it is the 1 round\n", | |
| "hello I am deurich my id 3 and my group is 'agent', it is the 1 round\n", | |
| "\r", | |
| "Round2\n", | |
| "hello I am fred my id 0 and my group is 'agent', it is the 2 round\n", | |
| "hello I am astaire my id 1 and my group is 'agent', it is the 2 round\n", | |
| "hello I am altair my id 2 and my group is 'agent', it is the 2 round\n", | |
| "hello I am deurich my id 3 and my group is 'agent', it is the 2 round\n", | |
| "\r", | |
| "Round3\n", | |
| "hello I am fred my id 0 and my group is 'agent', it is the 3 round\n", | |
| "hello I am astaire my id 1 and my group is 'agent', it is the 3 round\n", | |
| "hello I am altair my id 2 and my group is 'agent', it is the 3 round\n", | |
| "hello I am deurich my id 3 and my group is 'agent', it is the 3 round\n", | |
| "\r", | |
| "Round4\n", | |
| "hello I am fred my id 0 and my group is 'agent', it is the 4 round\n", | |
| "hello I am astaire my id 1 and my group is 'agent', it is the 4 round\n", | |
| "hello I am altair my id 2 and my group is 'agent', it is the 4 round\n", | |
| "hello I am deurich my id 3 and my group is 'agent', it is the 4 round\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "for r in range(5):\n", | |
| " simulation.advance_time(r)\n", | |
| " agents.say()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "We have created an initial agent, and checked the four attributes an agent has. The current round in self.round. His ID and group as well as one variable we assigned ourselfs." | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Giving a Good\n", | |
| "We create 5 agents, the first one has a balls the agents pass the ball around." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "class Kid(abce.Agent):\n", | |
| " def init(self, parameters, agent_parameters):\n", | |
| " self.num_kids = parameters['num_kids']\n", | |
| " if self.id == 0:\n", | |
| " self.create('ball', 1)\n", | |
| " \n", | |
| " def whether_I_have_the_ball(self):\n", | |
| " if self.possession('ball') > 0:\n", | |
| " print('*')\n", | |
| " else:\n", | |
| " print('.')\n", | |
| " \n", | |
| " def give_the_ball_to_the_next_kid(self):\n", | |
| " next_kid = (self.id + 1) % self.num_kids # the id of the next kid, if I am the last the first kid\n", | |
| " if self.possession('ball') >= 1:\n", | |
| " self.give('kid', next_kid, good='ball', quantity=1)\n", | |
| " \n", | |
| " \n", | |
| " " | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "self.create, creates an object. self.possession, checks how much of one object I have. self.give, gives an object to another agent, specied by its group name and its id." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "num_kids = 5" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "simulation = abce.Simulation(name='ipythonsimulation', processes=1)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "kids = simulation.build_agents(Kid, 'kid', num_kids,\n", | |
| " parameters={\"num_kids\": num_kids}) \n", | |
| " " | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 10, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "\r", | |
| "Round0\n", | |
| "*\n", | |
| ".\n", | |
| ".\n", | |
| ".\n", | |
| ".\n", | |
| "\r", | |
| "Round1\n", | |
| ".\n", | |
| "*\n", | |
| ".\n", | |
| ".\n", | |
| ".\n", | |
| "\r", | |
| "Round2\n", | |
| ".\n", | |
| ".\n", | |
| "*\n", | |
| ".\n", | |
| ".\n", | |
| "\r", | |
| "Round3\n", | |
| ".\n", | |
| ".\n", | |
| ".\n", | |
| "*\n", | |
| ".\n", | |
| "\r", | |
| "Round4\n", | |
| ".\n", | |
| ".\n", | |
| ".\n", | |
| ".\n", | |
| "*\n", | |
| "\r", | |
| "Round5\n", | |
| "*\n", | |
| ".\n", | |
| ".\n", | |
| ".\n", | |
| ".\n", | |
| "\r", | |
| "Round6\n", | |
| ".\n", | |
| "*\n", | |
| ".\n", | |
| ".\n", | |
| ".\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "for r in range(7):\n", | |
| " simulation.advance_time(r)\n", | |
| " kids.whether_I_have_the_ball()\n", | |
| " kids.give_the_ball_to_the_next_kid()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Well in every school yard we have a drug dealer.\n", | |
| "We will illustrate this to explain how trade works.\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 11, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "from random import randrange" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 12, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "class NewKid(abce.Agent):\n", | |
| " def init(self, parameters, agent_parameters):\n", | |
| " self.num_dealers = parameters['num_dealers']\n", | |
| " self.create('money', 100) # don't we all wish you'd this function in real live?\n", | |
| " \n", | |
| " def buy_drugs(self):\n", | |
| " drug_dealer_id = randrange(self.num_dealers)\n", | |
| " self.buy('drug_dealer', drug_dealer_id, good='drugs', quantity=1, price=10)\n", | |
| " \n", | |
| " def print_possessions(self):\n", | |
| " print(' ' + self.group + str(dict(self.possessions())))\n", | |
| " \n", | |
| " " | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "The new kids, approach a random drug dealer and offer him 10 bugs." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 13, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "class DrugDealer(abce.Agent):\n", | |
| " def init(self, parameters, agent_parameters):\n", | |
| " self.create('drugs', 1)\n", | |
| " \n", | |
| " def sell_to_customers(self):\n", | |
| " for offer in self.get_offers('drugs'):\n", | |
| " if offer.price >= 10 and self.possession('drugs') > 1:\n", | |
| " self.accept(offer)\n", | |
| " \n", | |
| " def print_possessions(self):\n", | |
| " print(' ' + self.group + str(dict(self.possessions())))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Drug dealer look at all the sell offers they get and decide to sell only to those kids that are willing to give them at least 10 dollars." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 14, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "simulation_parameters={'num_dealers': 1, 'num_customers': 1, 'rounds': 2}" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 15, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "simulation = abce.Simulation(name='school_yard', processes=1)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 16, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "drug_dealers = simulation.build_agents(DrugDealer, 'drug_dealer', number=simulation_parameters['num_dealers'])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "builds 10 drug dealers." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 17, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "customers = simulation.build_agents(NewKid, 'customer', number=simulation_parameters['num_customers'], parameters=simulation_parameters)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 18, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "kids = drug_dealers + customers" | |
| ] | |
| }, | |
| { | |
| "cell_type": "raw", | |
| "metadata": {}, | |
| "source": [ | |
| "Groups of agents can be merged to 'super' groups. We will print the amount of drugs and money all kids have for each of the two kids" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 19, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "\r", | |
| "Round0\n", | |
| "Customer offers 10 dollar:\n", | |
| " drug_dealer{'money': 0, 'drugs': 1.0}\n", | |
| " customer{'money': 90.0}\n", | |
| "Drug Dealer accepts or rejects the offer:\n", | |
| " drug_dealer{'money': 0, 'drugs': 1.0}\n", | |
| " customer{'money': 100.0}\n", | |
| "\n", | |
| "\r", | |
| "Round1\n", | |
| "Customer offers 10 dollar:\n", | |
| " drug_dealer{'money': 0, 'drugs': 1.0}\n", | |
| " customer{'money': 90.0}\n", | |
| "Drug Dealer accepts or rejects the offer:\n", | |
| " drug_dealer{'money': 0, 'drugs': 1.0}\n", | |
| " customer{'money': 100.0}\n", | |
| "\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "for r in range(simulation_parameters['rounds']):\n", | |
| " simulation.advance_time(r)\n", | |
| " print('Customer offers 10 dollar:')\n", | |
| " customers.buy_drugs()\n", | |
| " kids.print_possessions()\n", | |
| " print('Drug Dealer accepts or rejects the offer:')\n", | |
| " drug_dealers.sell_to_customers()\n", | |
| " kids.print_possessions()\n", | |
| " print()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "When looking at round one one can see that after the customer offered 10 dollars, the 10 dollars are not available to him util the deal has either been accepted or rejected. After the drug dealer accepts the offer in the 0 round. The money is transfered to the drug dealer and the drugs to the customer.\n", | |
| "\n", | |
| "In round 1, where the drug dealer runs out of drugs the 10 dollars go back to the customer.\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 20, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "\r", | |
| "Round0\n", | |
| "Customer offers 10 dollar:\n", | |
| " drug_dealer{'money': 0, 'drugs': 1.0}\n", | |
| " customer{'money': 90.0}\n", | |
| "Drug Dealer accepts or rejects the offer:\n", | |
| " drug_dealer{'money': 0, 'drugs': 1.0}\n", | |
| " customer{'money': 100.0}\n", | |
| "\n", | |
| "\r", | |
| "Round1\n", | |
| "Customer offers 10 dollar:\n", | |
| " drug_dealer{'money': 0, 'drugs': 1.0}\n", | |
| " customer{'money': 90.0}\n", | |
| "Drug Dealer accepts or rejects the offer:\n", | |
| " drug_dealer{'money': 0, 'drugs': 1.0}\n", | |
| " customer{'money': 100.0}\n", | |
| "\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "for r in range(simulation_parameters['rounds']):\n", | |
| " simulation.advance_time(r)\n", | |
| " print('Customer offers 10 dollar:')\n", | |
| " customers.buy_drugs()\n", | |
| " kids.print_possessions()\n", | |
| " print('Drug Dealer accepts or rejects the offer:')\n", | |
| " drug_dealers.sell_to_customers()\n", | |
| " kids.print_possessions()\n", | |
| " print()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Lets capture data\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 21, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from math import sin\n", | |
| "\n", | |
| "class DataDealer(abce.Agent):\n", | |
| " def init(self, simulation_parameters, agent_parameters):\n", | |
| " self.count = 0\n", | |
| " self.create('money', 0)\n", | |
| "\n", | |
| " def counting(self):\n", | |
| " self.count += 1\n", | |
| " self.curve = sin(self.count / 100)\n", | |
| " self.create('money', self.curve * self.id)\n", | |
| " \n", | |
| " " | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 22, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "simulation = abce.Simulation(name='gatherdata', processes=1)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 23, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "simulation.aggregate('datadealer', variables=['count'])\n", | |
| "simulation.panel('datadealer', possessions=['money'], variables=['curve'])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 24, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "datadealers = simulation.build_agents(DataDealer, 'datadealer', number=10)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 25, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Round0\n", | |
| "Round1\n", | |
| "Round2\n", | |
| "Round3\n", | |
| "Round4\n", | |
| "Round5\n", | |
| "Round6\n", | |
| "Round7\n", | |
| "Round8\n", | |
| "Round9\n", | |
| "Round10\n", | |
| "Round11\n", | |
| "Round12\n", | |
| "Round13\n", | |
| "Round14\n", | |
| "Round15\n", | |
| "Round16\n", | |
| "Round17\n", | |
| "Round18\n", | |
| "Round19\n", | |
| "Round20\n", | |
| "Round21\n", | |
| "Round22\n", | |
| "Round23\n", | |
| "Round24\n", | |
| "Round25\n", | |
| "Round26\n", | |
| "Round27\n", | |
| "Round28\n", | |
| "Round29\n", | |
| "Round30\n", | |
| "Round31\n", | |
| "Round32\n", | |
| "Round33\n", | |
| "Round34\n", | |
| "Round35\n", | |
| "Round36\n", | |
| "Round37\n", | |
| "Round38\n", | |
| "Round39\n", | |
| "Round40\n", | |
| "Round41\n", | |
| "Round42\n", | |
| "Round43\n", | |
| "Round44\n", | |
| "Round45\n", | |
| "Round46\n", | |
| "Round47\n", | |
| "Round48\n", | |
| "Round49\n", | |
| "Round50\n", | |
| "Round51\n", | |
| "Round52\n", | |
| "Round53\n", | |
| "Round54\n", | |
| "Round55\n", | |
| "Round56\n", | |
| "Round57\n", | |
| "Round58\n", | |
| "Round59\n", | |
| "Round60\n", | |
| "Round61\n", | |
| "Round62\n", | |
| "Round63\n", | |
| "Round64\n", | |
| "Round65\n", | |
| "Round66\n", | |
| "Round67\n", | |
| "Round68\n", | |
| "Round69\n", | |
| "Round70\n", | |
| "Round71\n", | |
| "Round72\n", | |
| "Round73\n", | |
| "Round74\n", | |
| "Round75\n", | |
| "Round76\n", | |
| "Round77\n", | |
| "Round78\n", | |
| "Round79\n", | |
| "Round80\n", | |
| "Round81\n", | |
| "Round82\n", | |
| "Round83\n", | |
| "Round84\n", | |
| "Round85\n", | |
| "Round86\n", | |
| "Round87\n", | |
| "Round88\n", | |
| "Round89\n", | |
| "Round90\n", | |
| "Round91\n", | |
| "Round92\n", | |
| "Round93\n", | |
| "Round94\n", | |
| "Round95\n", | |
| "Round96\n", | |
| "Round97\n", | |
| "Round98\n", | |
| "Round99\n", | |
| "\n", | |
| "time only simulation 0.65\n", | |
| "time with data and network 0.70\n", | |
| "{\n", | |
| " \"name\": \"gatherdata\",\n", | |
| " \"random_seed\": 1498927895.321422\n", | |
| "}\n", | |
| "time with post processing 0.75\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "with simulation.database:\n", | |
| " for r in range(100):\n", | |
| " simulation.advance_time(r)\n", | |
| " datadealers.counting()\n", | |
| " datadealers.aggregate()\n", | |
| " datadealers.panel()\n", | |
| " \n", | |
| " " | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 34, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "/Users/taghawi/Dropbox/workspace/abce/examples/ipython_tutorial/result/gatherdata_2017-07-01_17-51I\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "['aggregate_datadealer.csv',\n", | |
| " 'aggregate_datadealer_mean.csv',\n", | |
| " 'aggregate_datadealer_std.csv',\n", | |
| " 'aggregate_panel_datadealer.csv',\n", | |
| " 'database.db',\n", | |
| " 'description.txt',\n", | |
| " 'panel_datadealer.csv']" | |
| ] | |
| }, | |
| "execution_count": 34, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "import os\n", | |
| "print(simulation.path)\n", | |
| "os.listdir(simulation.path)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 38, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "from abce.show import show" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 39, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 35, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "import pandas as pd" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 46, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "%matplotlib inline\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 43, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "df = pd.read_csv(simulation.path + '/panel_datadealer.csv')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 53, | |
| "metadata": {}, | |
| "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>index</th>\n", | |
| " <th>id</th>\n", | |
| " <th>round</th>\n", | |
| " <th>money</th>\n", | |
| " <th>curve</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>0</td>\n", | |
| " <td>0</td>\n", | |
| " <td>0</td>\n", | |
| " <td>0.000000</td>\n", | |
| " <td>0.010000</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>1</td>\n", | |
| " <td>1</td>\n", | |
| " <td>0</td>\n", | |
| " <td>0.010000</td>\n", | |
| " <td>0.010000</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>2</td>\n", | |
| " <td>2</td>\n", | |
| " <td>0</td>\n", | |
| " <td>0.020000</td>\n", | |
| " <td>0.010000</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>3</td>\n", | |
| " <td>3</td>\n", | |
| " <td>0</td>\n", | |
| " <td>0.030000</td>\n", | |
| " <td>0.010000</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>4</td>\n", | |
| " <td>4</td>\n", | |
| " <td>0</td>\n", | |
| " <td>0.039999</td>\n", | |
| " <td>0.010000</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>5</th>\n", | |
| " <td>5</td>\n", | |
| " <td>5</td>\n", | |
| " <td>0</td>\n", | |
| " <td>0.049999</td>\n", | |
| " <td>0.010000</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>6</th>\n", | |
| " <td>6</td>\n", | |
| " <td>6</td>\n", | |
| " <td>0</td>\n", | |
| " <td>0.059999</td>\n", | |
| " <td>0.010000</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>7</th>\n", | |
| " <td>7</td>\n", | |
| " <td>7</td>\n", | |
| " <td>0</td>\n", | |
| " <td>0.069999</td>\n", | |
| " <td>0.010000</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>8</th>\n", | |
| " <td>8</td>\n", | |
| " <td>8</td>\n", | |
| " <td>0</td>\n", | |
| " <td>0.079999</td>\n", | |
| " <td>0.010000</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>9</th>\n", | |
| " <td>9</td>\n", | |
| " <td>9</td>\n", | |
| " <td>0</td>\n", | |
| " <td>0.089999</td>\n", | |
| " <td>0.010000</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>10</th>\n", | |
| " <td>10</td>\n", | |
| " <td>0</td>\n", | |
| " <td>1</td>\n", | |
| " <td>0.000000</td>\n", | |
| " <td>0.019999</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>11</th>\n", | |
| " <td>11</td>\n", | |
| " <td>1</td>\n", | |
| " <td>1</td>\n", | |
| " <td>0.029999</td>\n", | |
| " <td>0.019999</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>12</th>\n", | |
| " <td>12</td>\n", | |
| " <td>2</td>\n", | |
| " <td>1</td>\n", | |
| " <td>0.059997</td>\n", | |
| " <td>0.019999</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>13</th>\n", | |
| " <td>13</td>\n", | |
| " <td>3</td>\n", | |
| " <td>1</td>\n", | |
| " <td>0.089996</td>\n", | |
| " <td>0.019999</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>14</th>\n", | |
| " <td>14</td>\n", | |
| " <td>4</td>\n", | |
| " <td>1</td>\n", | |
| " <td>0.119994</td>\n", | |
| " <td>0.019999</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>15</th>\n", | |
| " <td>15</td>\n", | |
| " <td>5</td>\n", | |
| " <td>1</td>\n", | |
| " <td>0.149993</td>\n", | |
| " <td>0.019999</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>16</th>\n", | |
| " <td>16</td>\n", | |
| " <td>6</td>\n", | |
| " <td>1</td>\n", | |
| " <td>0.179991</td>\n", | |
| " <td>0.019999</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>17</th>\n", | |
| " <td>17</td>\n", | |
| " <td>7</td>\n", | |
| " <td>1</td>\n", | |
| " <td>0.209990</td>\n", | |
| " <td>0.019999</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>18</th>\n", | |
| " <td>18</td>\n", | |
| " <td>8</td>\n", | |
| " <td>1</td>\n", | |
| " <td>0.239988</td>\n", | |
| " <td>0.019999</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>19</th>\n", | |
| " <td>19</td>\n", | |
| " <td>9</td>\n", | |
| " <td>1</td>\n", | |
| " <td>0.269987</td>\n", | |
| " <td>0.019999</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " index id round money curve\n", | |
| "0 0 0 0 0.000000 0.010000\n", | |
| "1 1 1 0 0.010000 0.010000\n", | |
| "2 2 2 0 0.020000 0.010000\n", | |
| "3 3 3 0 0.030000 0.010000\n", | |
| "4 4 4 0 0.039999 0.010000\n", | |
| "5 5 5 0 0.049999 0.010000\n", | |
| "6 6 6 0 0.059999 0.010000\n", | |
| "7 7 7 0 0.069999 0.010000\n", | |
| "8 8 8 0 0.079999 0.010000\n", | |
| "9 9 9 0 0.089999 0.010000\n", | |
| "10 10 0 1 0.000000 0.019999\n", | |
| "11 11 1 1 0.029999 0.019999\n", | |
| "12 12 2 1 0.059997 0.019999\n", | |
| "13 13 3 1 0.089996 0.019999\n", | |
| "14 14 4 1 0.119994 0.019999\n", | |
| "15 15 5 1 0.149993 0.019999\n", | |
| "16 16 6 1 0.179991 0.019999\n", | |
| "17 17 7 1 0.209990 0.019999\n", | |
| "18 18 8 1 0.239988 0.019999\n", | |
| "19 19 9 1 0.269987 0.019999" | |
| ] | |
| }, | |
| "execution_count": 53, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df.head(20)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 65, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<matplotlib.axes._subplots.AxesSubplot at 0x110c33748>" | |
| ] | |
| }, | |
| "execution_count": 65, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0x110c437f0>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "df.pivot(index='round', columns='id', values='money').plot()\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [] | |
| } | |
| ], | |
| "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.1" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 2 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment