{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# CIC Subpopulation Construction\n",
    "\n",
    "To create a representative model of the agent interactions, we will use subpopulation modeling. We take all of the agents and cluster them based off of the following features from full population actual transactional data from Jan - May 11 2020 xDai data (s means source, t means target):\n",
    "* s_location - source individual location\n",
    "* s_business_type - source individual business type\n",
    "* t_location - target individual location\n",
    "* t_business_type - target individual business type.\n",
    "* weight, which is tokens, exchange amount\n",
    "* s_bal - source individual CIC wallet balance\n",
    "* t_bal - target individual CIC wallet balance\n",
    "\n",
    "Essentially, we are taking a graph zoom operation, bundling nodes together based off of their likeness. Nodes are constant with edges being transative. The algorithm we use for this graph zoom operation is Kmeans clustering. Based off our descriptive statistical analysis and use of th Gap Statistic created by Stanford researchers Tibshirani, Walther and Hastie in their 2001 [paper](https://web.stanford.edu/~hastie/Papers/gap.pdf), we determined 50 clusters are representative of the subpopulations. All of the flows inside of the bundle become part of the self-loop flow. For example, within cluster 1, agent a can transaction with as b. This will not be reflected within our model as this is intra not inter cluster interactions.\n",
    " \n",
    "## Graph Model of Current Spend Activity\n",
    "\n",
    "We created a network graph of the CIC transaction data as a $G(N,E)$ weighted directed graph with source and target agents as nodes, $N$ and the edges as $E$. Tokens are used as the edge weight to denote the actual CIC flow between agents, as $i,j \\in E$.\n",
    "\n",
    "The observed data shows the actual payments between network actors that are transacting in CIC. The observed data does not show us shillings payments between actors, actors utility, or demand. We only know actual CIC spends between agents.     \n",
    "\n",
    "\n",
    "## Saving Clustering Results\n",
    "At the bottom of this notebook, we calculate the median, 1st quartile, 3rd quartile, mean, standard deviation, utility types ordering, and utility types probability. These values can then be copied into the ```subpopulation_clusters.py``` in the simulation folders for use in the simulations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# import libraries\n",
    "import networkx as nx\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from sklearn.cluster import KMeans\n",
    "from gap_statistic import OptimalK\n",
    "from sklearn.decomposition import PCA\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Data Dump as of 5-15-2020\n",
    "Jan - May 11 2020 xDai Blockchain data\n",
    "https://www.grassrootseconomics.org/research"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# import the data\n",
    "transactions = pd.read_csv('data/sarafu_xDAI_tx_all_pub_all_time_12May2020.csv')\n",
    "users = pd.read_csv('data/sarafu_xDAI_users_all_pub_all_time_12May2020.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\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",
       "      <th>timeset</th>\n",
       "      <th>transfer_subtype</th>\n",
       "      <th>source</th>\n",
       "      <th>s_gender</th>\n",
       "      <th>s_location</th>\n",
       "      <th>s_business_type</th>\n",
       "      <th>target</th>\n",
       "      <th>t_gender</th>\n",
       "      <th>t_location</th>\n",
       "      <th>t_business_type</th>\n",
       "      <th>tx_token</th>\n",
       "      <th>weight</th>\n",
       "      <th>type</th>\n",
       "      <th>token_name</th>\n",
       "      <th>token_address</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2020-01-25 19:13:17.731529</td>\n",
       "      <td>DISBURSEMENT</td>\n",
       "      <td>0xBDB3Bc887C3b70586BC25D04d89eC802b897fC5F</td>\n",
       "      <td>NaN</td>\n",
       "      <td>None</td>\n",
       "      <td>System</td>\n",
       "      <td>0x245fc81fe385450Dc0f4787668e47c903C00b0A1</td>\n",
       "      <td>female</td>\n",
       "      <td>GE Office</td>\n",
       "      <td>Savings Group</td>\n",
       "      <td>NaN</td>\n",
       "      <td>18000.000000</td>\n",
       "      <td>directed</td>\n",
       "      <td>Sarafu</td>\n",
       "      <td>0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>2020-01-25 19:13:19.056070</td>\n",
       "      <td>DISBURSEMENT</td>\n",
       "      <td>0xBDB3Bc887C3b70586BC25D04d89eC802b897fC5F</td>\n",
       "      <td>NaN</td>\n",
       "      <td>None</td>\n",
       "      <td>System</td>\n",
       "      <td>0xC1697C1326fD192438515fE2F7E4cCb0C705C5d2</td>\n",
       "      <td>male</td>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9047.660892</td>\n",
       "      <td>directed</td>\n",
       "      <td>Sarafu</td>\n",
       "      <td>0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>2020-01-25 19:13:20.288346</td>\n",
       "      <td>DISBURSEMENT</td>\n",
       "      <td>0xBDB3Bc887C3b70586BC25D04d89eC802b897fC5F</td>\n",
       "      <td>NaN</td>\n",
       "      <td>None</td>\n",
       "      <td>System</td>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "      <td>male</td>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>NaN</td>\n",
       "      <td>25378.726002</td>\n",
       "      <td>directed</td>\n",
       "      <td>Sarafu</td>\n",
       "      <td>0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>2020-01-25 19:13:21.478850</td>\n",
       "      <td>DISBURSEMENT</td>\n",
       "      <td>0xBDB3Bc887C3b70586BC25D04d89eC802b897fC5F</td>\n",
       "      <td>NaN</td>\n",
       "      <td>None</td>\n",
       "      <td>System</td>\n",
       "      <td>0xD95954e3fCd2f09A6Be5931D24f731eFa63BF435</td>\n",
       "      <td>male</td>\n",
       "      <td>G.E</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>NaN</td>\n",
       "      <td>4495.932576</td>\n",
       "      <td>directed</td>\n",
       "      <td>Sarafu</td>\n",
       "      <td>0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>2020-01-26 07:48:43.042684</td>\n",
       "      <td>DISBURSEMENT</td>\n",
       "      <td>0xBDB3Bc887C3b70586BC25D04d89eC802b897fC5F</td>\n",
       "      <td>NaN</td>\n",
       "      <td>None</td>\n",
       "      <td>System</td>\n",
       "      <td>0x4AB73CfaC1732a9DcD74BdB4C9605f21832D7C72</td>\n",
       "      <td>male</td>\n",
       "      <td>Home</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>NaN</td>\n",
       "      <td>400.000000</td>\n",
       "      <td>directed</td>\n",
       "      <td>Sarafu</td>\n",
       "      <td>0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id                     timeset transfer_subtype  \\\n",
       "0   1  2020-01-25 19:13:17.731529     DISBURSEMENT   \n",
       "1   2  2020-01-25 19:13:19.056070     DISBURSEMENT   \n",
       "2   3  2020-01-25 19:13:20.288346     DISBURSEMENT   \n",
       "3   4  2020-01-25 19:13:21.478850     DISBURSEMENT   \n",
       "4   5  2020-01-26 07:48:43.042684     DISBURSEMENT   \n",
       "\n",
       "                                       source s_gender s_location  \\\n",
       "0  0xBDB3Bc887C3b70586BC25D04d89eC802b897fC5F      NaN       None   \n",
       "1  0xBDB3Bc887C3b70586BC25D04d89eC802b897fC5F      NaN       None   \n",
       "2  0xBDB3Bc887C3b70586BC25D04d89eC802b897fC5F      NaN       None   \n",
       "3  0xBDB3Bc887C3b70586BC25D04d89eC802b897fC5F      NaN       None   \n",
       "4  0xBDB3Bc887C3b70586BC25D04d89eC802b897fC5F      NaN       None   \n",
       "\n",
       "  s_business_type                                      target t_gender  \\\n",
       "0          System  0x245fc81fe385450Dc0f4787668e47c903C00b0A1   female   \n",
       "1          System  0xC1697C1326fD192438515fE2F7E4cCb0C705C5d2     male   \n",
       "2          System  0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31     male   \n",
       "3          System  0xD95954e3fCd2f09A6Be5931D24f731eFa63BF435     male   \n",
       "4          System  0x4AB73CfaC1732a9DcD74BdB4C9605f21832D7C72     male   \n",
       "\n",
       "   t_location t_business_type  tx_token        weight      type token_name  \\\n",
       "0   GE Office   Savings Group       NaN  18000.000000  directed     Sarafu   \n",
       "1  GE Nairobi  Farming/Labour       NaN   9047.660892  directed     Sarafu   \n",
       "2  GE Nairobi  Farming/Labour       NaN  25378.726002  directed     Sarafu   \n",
       "3         G.E  Farming/Labour       NaN   4495.932576  directed     Sarafu   \n",
       "4        Home  Farming/Labour       NaN    400.000000  directed     Sarafu   \n",
       "\n",
       "                                token_address  \n",
       "0  0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4  \n",
       "1  0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4  \n",
       "2  0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4  \n",
       "3  0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4  \n",
       "4  0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "transactions.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'STANDARD': 0.5085207861177824,\n",
       " 'DISBURSEMENT': 0.35574873997902784,\n",
       " 'RECLAMATION': 0.13483070053783444,\n",
       " 'AGENT_OUT': 0.0008997733653553429}"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "transactions.transfer_subtype.value_counts(normalize=True).to_dict()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Based on the data dictionary provided by Grassroots Economics, we know that the transfer subtype codes are:\n",
    "\n",
    "* DISBURSEMENT = from Grassroots Economics\n",
    "* RECLAMATION = Back to GE, \n",
    "* STANDARD = a trade between users, \n",
    "* AGENT = when a group account is cashing out\n",
    "\n",
    "\n",
    "For purposes of our analysis, we will subset to STANDARD transactions. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "transactions_subset = transactions[transactions['transfer_subtype'] == 'STANDARD']\n",
    "transactions_subset = transactions_subset[transactions_subset['token_name']=='Sarafu']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\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",
       "      <th>start</th>\n",
       "      <th>label</th>\n",
       "      <th>gender</th>\n",
       "      <th>location</th>\n",
       "      <th>held_roles</th>\n",
       "      <th>business_type</th>\n",
       "      <th>bal</th>\n",
       "      <th>xDAI_blockchain_address</th>\n",
       "      <th>confidence</th>\n",
       "      <th>...</th>\n",
       "      <th>otxns_in</th>\n",
       "      <th>otxns_out</th>\n",
       "      <th>ounique_in</th>\n",
       "      <th>ounique_out</th>\n",
       "      <th>svol_in</th>\n",
       "      <th>svol_out</th>\n",
       "      <th>stxns_in</th>\n",
       "      <th>stxns_out</th>\n",
       "      <th>sunique_in</th>\n",
       "      <th>sunique_out</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2020-01-25 19:10:50.218686</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>None</td>\n",
       "      <td>ADMIN</td>\n",
       "      <td>System</td>\n",
       "      <td>8.916761e+06</td>\n",
       "      <td>0xBDB3Bc887C3b70586BC25D04d89eC802b897fC5F</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>19917</td>\n",
       "      <td>52610</td>\n",
       "      <td>9</td>\n",
       "      <td>19862</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>2018-10-23 09:09:58</td>\n",
       "      <td>2</td>\n",
       "      <td>female</td>\n",
       "      <td>GE Office</td>\n",
       "      <td>TOKEN_AGENT</td>\n",
       "      <td>Savings Group</td>\n",
       "      <td>1.800000e+05</td>\n",
       "      <td>0x245fc81fe385450Dc0f4787668e47c903C00b0A1</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>134</td>\n",
       "      <td>16</td>\n",
       "      <td>68</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>2018-10-21 14:20:57</td>\n",
       "      <td>3</td>\n",
       "      <td>male</td>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>BENEFICIARY</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>5.666089e+01</td>\n",
       "      <td>0xC1697C1326fD192438515fE2F7E4cCb0C705C5d2</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>9007.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>2018-10-21 15:38:30</td>\n",
       "      <td>4</td>\n",
       "      <td>male</td>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>BENEFICIARY</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>1.173773e+04</td>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "      <td>0.100000</td>\n",
       "      <td>...</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>20619.0</td>\n",
       "      <td>50449.0</td>\n",
       "      <td>20</td>\n",
       "      <td>15</td>\n",
       "      <td>11</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>2018-10-23 14:10:27</td>\n",
       "      <td>5</td>\n",
       "      <td>male</td>\n",
       "      <td>G.E</td>\n",
       "      <td>BENEFICIARY</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>7.297263e+03</td>\n",
       "      <td>0xD95954e3fCd2f09A6Be5931D24f731eFa63BF435</td>\n",
       "      <td>0.405063</td>\n",
       "      <td>...</td>\n",
       "      <td>15</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>127393.3</td>\n",
       "      <td>168905.0</td>\n",
       "      <td>158</td>\n",
       "      <td>208</td>\n",
       "      <td>84</td>\n",
       "      <td>65</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 22 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   id                       start  label  gender    location   held_roles  \\\n",
       "0   1  2020-01-25 19:10:50.218686      1     NaN        None        ADMIN   \n",
       "1   2         2018-10-23 09:09:58      2  female   GE Office  TOKEN_AGENT   \n",
       "2   3         2018-10-21 14:20:57      3    male  GE Nairobi  BENEFICIARY   \n",
       "3   4         2018-10-21 15:38:30      4    male  GE Nairobi  BENEFICIARY   \n",
       "4   5         2018-10-23 14:10:27      5    male         G.E  BENEFICIARY   \n",
       "\n",
       "    business_type           bal                     xDAI_blockchain_address  \\\n",
       "0          System  8.916761e+06  0xBDB3Bc887C3b70586BC25D04d89eC802b897fC5F   \n",
       "1   Savings Group  1.800000e+05  0x245fc81fe385450Dc0f4787668e47c903C00b0A1   \n",
       "2  Farming/Labour  5.666089e+01  0xC1697C1326fD192438515fE2F7E4cCb0C705C5d2   \n",
       "3  Farming/Labour  1.173773e+04  0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31   \n",
       "4  Farming/Labour  7.297263e+03  0xD95954e3fCd2f09A6Be5931D24f731eFa63BF435   \n",
       "\n",
       "   confidence  ...  otxns_in  otxns_out  ounique_in  ounique_out   svol_in  \\\n",
       "0    0.000000  ...     19917      52610           9        19862       0.0   \n",
       "1    0.000000  ...       134         16          68            0       0.0   \n",
       "2    0.000000  ...         2          2           1            0       0.0   \n",
       "3    0.100000  ...         6          1           1            0   20619.0   \n",
       "4    0.405063  ...        15          1           1            0  127393.3   \n",
       "\n",
       "   svol_out  stxns_in  stxns_out  sunique_in  sunique_out  \n",
       "0       0.0         0          0           0            0  \n",
       "1       0.0         0          0           0            0  \n",
       "2    9007.0         0          1           0            1  \n",
       "3   50449.0        20         15          11            5  \n",
       "4  168905.0       158        208          84           65  \n",
       "\n",
       "[5 rows x 22 columns]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "users.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'Farming/Labour': 0.43367860016090104,\n",
       " 'Food/Water': 0.22863032984714401,\n",
       " 'Shop': 0.1406878519710378,\n",
       " 'Fuel/Energy': 0.06365647626709574,\n",
       " 'None': 0.0621983105390185,\n",
       " 'Transport': 0.04379525341914722,\n",
       " 'Education': 0.014380530973451327,\n",
       " 'Savings Group': 0.006335478680611424,\n",
       " 'Health': 0.00331858407079646,\n",
       " 'Environment': 0.001910699919549477,\n",
       " 'System': 0.0012067578439259854,\n",
       " 'Staff': 0.00010056315366049879,\n",
       " 'Chama': 5.0281576830249393e-05,\n",
       " 'Game': 5.0281576830249393e-05}"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "users['business_type'].value_counts(normalize=True).to_dict()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Combine user and transaction tables\n",
    "\n",
    "Combine user and transaction tables on both the source and target features."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "user_subset = users[['bal','xDAI_blockchain_address']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\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",
       "      <th>timeset</th>\n",
       "      <th>transfer_subtype</th>\n",
       "      <th>source</th>\n",
       "      <th>s_gender</th>\n",
       "      <th>s_location</th>\n",
       "      <th>s_business_type</th>\n",
       "      <th>target</th>\n",
       "      <th>t_gender</th>\n",
       "      <th>t_location</th>\n",
       "      <th>t_business_type</th>\n",
       "      <th>tx_token</th>\n",
       "      <th>weight</th>\n",
       "      <th>type</th>\n",
       "      <th>token_name</th>\n",
       "      <th>token_address</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>72647</th>\n",
       "      <td>170140</td>\n",
       "      <td>2020-04-30 10:43:45.170528</td>\n",
       "      <td>STANDARD</td>\n",
       "      <td>0xC1697C1326fD192438515fE2F7E4cCb0C705C5d2</td>\n",
       "      <td>male</td>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "      <td>male</td>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9007.0</td>\n",
       "      <td>directed</td>\n",
       "      <td>Sarafu</td>\n",
       "      <td>0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>72648</th>\n",
       "      <td>10</td>\n",
       "      <td>2020-01-26 08:26:22.521902</td>\n",
       "      <td>STANDARD</td>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "      <td>male</td>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>0x4AB73CfaC1732a9DcD74BdB4C9605f21832D7C72</td>\n",
       "      <td>male</td>\n",
       "      <td>Home</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>NaN</td>\n",
       "      <td>100.0</td>\n",
       "      <td>directed</td>\n",
       "      <td>Sarafu</td>\n",
       "      <td>0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>72649</th>\n",
       "      <td>11</td>\n",
       "      <td>2020-01-26 08:27:26.757372</td>\n",
       "      <td>STANDARD</td>\n",
       "      <td>0xD95954e3fCd2f09A6Be5931D24f731eFa63BF435</td>\n",
       "      <td>male</td>\n",
       "      <td>G.E</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "      <td>male</td>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2.0</td>\n",
       "      <td>directed</td>\n",
       "      <td>Sarafu</td>\n",
       "      <td>0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>72650</th>\n",
       "      <td>13</td>\n",
       "      <td>2020-01-26 08:32:05.154096</td>\n",
       "      <td>STANDARD</td>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "      <td>male</td>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>0x4AB73CfaC1732a9DcD74BdB4C9605f21832D7C72</td>\n",
       "      <td>male</td>\n",
       "      <td>Home</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>NaN</td>\n",
       "      <td>23.0</td>\n",
       "      <td>directed</td>\n",
       "      <td>Sarafu</td>\n",
       "      <td>0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>72651</th>\n",
       "      <td>15</td>\n",
       "      <td>2020-01-26 08:38:42.186525</td>\n",
       "      <td>STANDARD</td>\n",
       "      <td>0x4AfD04b9eD17759B362c8C929207Fe7ad81C39d3</td>\n",
       "      <td>male</td>\n",
       "      <td>Test</td>\n",
       "      <td>Health</td>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "      <td>male</td>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>NaN</td>\n",
       "      <td>12.0</td>\n",
       "      <td>directed</td>\n",
       "      <td>Sarafu</td>\n",
       "      <td>0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>147810</th>\n",
       "      <td>208035</td>\n",
       "      <td>2020-05-11 08:52:34.504171</td>\n",
       "      <td>STANDARD</td>\n",
       "      <td>0x97F5165b544e0869ba3Be80D7eEe8b73a0270Dfe</td>\n",
       "      <td>Unknown gender</td>\n",
       "      <td>kilibole</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>0x5CAaA1f7dC13235Fe181D0307e682c387e75a6ec</td>\n",
       "      <td>Unknown gender</td>\n",
       "      <td>Kilibole</td>\n",
       "      <td>Food/Water</td>\n",
       "      <td>NaN</td>\n",
       "      <td>20.0</td>\n",
       "      <td>directed</td>\n",
       "      <td>Sarafu</td>\n",
       "      <td>0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>147811</th>\n",
       "      <td>208021</td>\n",
       "      <td>2020-05-11 08:49:20.768559</td>\n",
       "      <td>STANDARD</td>\n",
       "      <td>0x9a05d12df366cE3aa1420c6DFFD0db9ce4ba77Fc</td>\n",
       "      <td>Unknown gender</td>\n",
       "      <td>Kikomani</td>\n",
       "      <td>Food/Water</td>\n",
       "      <td>0xb44279a1d11A2bc4b1b3D08D3BEAb8278cc86985</td>\n",
       "      <td>Unknown gender</td>\n",
       "      <td>Bofu</td>\n",
       "      <td>Shop</td>\n",
       "      <td>NaN</td>\n",
       "      <td>350.0</td>\n",
       "      <td>directed</td>\n",
       "      <td>Sarafu</td>\n",
       "      <td>0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>147812</th>\n",
       "      <td>208459</td>\n",
       "      <td>2020-05-11 10:11:18.699013</td>\n",
       "      <td>STANDARD</td>\n",
       "      <td>0x2e44845BE57687bFdcdd26044bB7CdD575781336</td>\n",
       "      <td>male</td>\n",
       "      <td>Miyani</td>\n",
       "      <td>Shop</td>\n",
       "      <td>0xfCF20a412eB6DD345237C7BEeBab53B424b98297</td>\n",
       "      <td>male</td>\n",
       "      <td>Miyani</td>\n",
       "      <td>Shop</td>\n",
       "      <td>NaN</td>\n",
       "      <td>400.0</td>\n",
       "      <td>directed</td>\n",
       "      <td>Sarafu</td>\n",
       "      <td>0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>147813</th>\n",
       "      <td>208395</td>\n",
       "      <td>2020-05-11 10:01:04.805823</td>\n",
       "      <td>STANDARD</td>\n",
       "      <td>0xAc4DB7728940e76BCd98Bb8E60671916f3B7576A</td>\n",
       "      <td>male</td>\n",
       "      <td>Kilifi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>0x2f99a653F5dc201eA97578A6a203BC4db1eaD2FF</td>\n",
       "      <td>Unknown gender</td>\n",
       "      <td>KIlifi</td>\n",
       "      <td>Education</td>\n",
       "      <td>NaN</td>\n",
       "      <td>20.0</td>\n",
       "      <td>directed</td>\n",
       "      <td>Sarafu</td>\n",
       "      <td>0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>147814</th>\n",
       "      <td>208396</td>\n",
       "      <td>2020-05-11 10:01:10.449068</td>\n",
       "      <td>STANDARD</td>\n",
       "      <td>0x2f99a653F5dc201eA97578A6a203BC4db1eaD2FF</td>\n",
       "      <td>Unknown gender</td>\n",
       "      <td>KIlifi</td>\n",
       "      <td>Education</td>\n",
       "      <td>0xAc4DB7728940e76BCd98Bb8E60671916f3B7576A</td>\n",
       "      <td>male</td>\n",
       "      <td>Kilifi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>NaN</td>\n",
       "      <td>20.0</td>\n",
       "      <td>directed</td>\n",
       "      <td>Sarafu</td>\n",
       "      <td>0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>75167 rows × 16 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "            id                     timeset transfer_subtype  \\\n",
       "72647   170140  2020-04-30 10:43:45.170528         STANDARD   \n",
       "72648       10  2020-01-26 08:26:22.521902         STANDARD   \n",
       "72649       11  2020-01-26 08:27:26.757372         STANDARD   \n",
       "72650       13  2020-01-26 08:32:05.154096         STANDARD   \n",
       "72651       15  2020-01-26 08:38:42.186525         STANDARD   \n",
       "...        ...                         ...              ...   \n",
       "147810  208035  2020-05-11 08:52:34.504171         STANDARD   \n",
       "147811  208021  2020-05-11 08:49:20.768559         STANDARD   \n",
       "147812  208459  2020-05-11 10:11:18.699013         STANDARD   \n",
       "147813  208395  2020-05-11 10:01:04.805823         STANDARD   \n",
       "147814  208396  2020-05-11 10:01:10.449068         STANDARD   \n",
       "\n",
       "                                            source        s_gender  \\\n",
       "72647   0xC1697C1326fD192438515fE2F7E4cCb0C705C5d2            male   \n",
       "72648   0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31            male   \n",
       "72649   0xD95954e3fCd2f09A6Be5931D24f731eFa63BF435            male   \n",
       "72650   0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31            male   \n",
       "72651   0x4AfD04b9eD17759B362c8C929207Fe7ad81C39d3            male   \n",
       "...                                            ...             ...   \n",
       "147810  0x97F5165b544e0869ba3Be80D7eEe8b73a0270Dfe  Unknown gender   \n",
       "147811  0x9a05d12df366cE3aa1420c6DFFD0db9ce4ba77Fc  Unknown gender   \n",
       "147812  0x2e44845BE57687bFdcdd26044bB7CdD575781336            male   \n",
       "147813  0xAc4DB7728940e76BCd98Bb8E60671916f3B7576A            male   \n",
       "147814  0x2f99a653F5dc201eA97578A6a203BC4db1eaD2FF  Unknown gender   \n",
       "\n",
       "        s_location s_business_type  \\\n",
       "72647   GE Nairobi  Farming/Labour   \n",
       "72648   GE Nairobi  Farming/Labour   \n",
       "72649          G.E  Farming/Labour   \n",
       "72650   GE Nairobi  Farming/Labour   \n",
       "72651         Test          Health   \n",
       "...            ...             ...   \n",
       "147810    kilibole  Farming/Labour   \n",
       "147811    Kikomani      Food/Water   \n",
       "147812      Miyani            Shop   \n",
       "147813      Kilifi  Farming/Labour   \n",
       "147814      KIlifi       Education   \n",
       "\n",
       "                                            target        t_gender  \\\n",
       "72647   0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31            male   \n",
       "72648   0x4AB73CfaC1732a9DcD74BdB4C9605f21832D7C72            male   \n",
       "72649   0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31            male   \n",
       "72650   0x4AB73CfaC1732a9DcD74BdB4C9605f21832D7C72            male   \n",
       "72651   0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31            male   \n",
       "...                                            ...             ...   \n",
       "147810  0x5CAaA1f7dC13235Fe181D0307e682c387e75a6ec  Unknown gender   \n",
       "147811  0xb44279a1d11A2bc4b1b3D08D3BEAb8278cc86985  Unknown gender   \n",
       "147812  0xfCF20a412eB6DD345237C7BEeBab53B424b98297            male   \n",
       "147813  0x2f99a653F5dc201eA97578A6a203BC4db1eaD2FF  Unknown gender   \n",
       "147814  0xAc4DB7728940e76BCd98Bb8E60671916f3B7576A            male   \n",
       "\n",
       "        t_location t_business_type  tx_token  weight      type token_name  \\\n",
       "72647   GE Nairobi  Farming/Labour       NaN  9007.0  directed     Sarafu   \n",
       "72648         Home  Farming/Labour       NaN   100.0  directed     Sarafu   \n",
       "72649   GE Nairobi  Farming/Labour       NaN     2.0  directed     Sarafu   \n",
       "72650         Home  Farming/Labour       NaN    23.0  directed     Sarafu   \n",
       "72651   GE Nairobi  Farming/Labour       NaN    12.0  directed     Sarafu   \n",
       "...            ...             ...       ...     ...       ...        ...   \n",
       "147810    Kilibole      Food/Water       NaN    20.0  directed     Sarafu   \n",
       "147811        Bofu            Shop       NaN   350.0  directed     Sarafu   \n",
       "147812      Miyani            Shop       NaN   400.0  directed     Sarafu   \n",
       "147813      KIlifi       Education       NaN    20.0  directed     Sarafu   \n",
       "147814      Kilifi  Farming/Labour       NaN    20.0  directed     Sarafu   \n",
       "\n",
       "                                     token_address  \n",
       "72647   0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4  \n",
       "72648   0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4  \n",
       "72649   0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4  \n",
       "72650   0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4  \n",
       "72651   0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4  \n",
       "...                                            ...  \n",
       "147810  0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4  \n",
       "147811  0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4  \n",
       "147812  0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4  \n",
       "147813  0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4  \n",
       "147814  0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4  \n",
       "\n",
       "[75167 rows x 16 columns]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "transactions_subset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "transactions_subset_v1 = transactions_subset.merge(user_subset, how='left', left_on='source', right_on='xDAI_blockchain_address')\n",
    "transactions_subset_v1['s_bal'] = transactions_subset_v1['bal']\n",
    "del transactions_subset_v1['bal']\n",
    "transactions_subset_v1['s_xDAI_blockchain_address'] = transactions_subset_v1['xDAI_blockchain_address']\n",
    "del transactions_subset_v1['xDAI_blockchain_address']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "transactions_subset_v2 = transactions_subset_v1.merge(user_subset, how='left', left_on='target', right_on='xDAI_blockchain_address')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "transactions_subset_v2 = transactions_subset_v1.merge(user_subset, how='left', left_on='target', right_on='xDAI_blockchain_address')\n",
    "transactions_subset_v2['t_bal'] = transactions_subset_v2['bal']\n",
    "del transactions_subset_v2['bal']\n",
    "transactions_subset_v2['t_xDAI_blockchain_address'] = transactions_subset_v2['xDAI_blockchain_address']\n",
    "del transactions_subset_v2['xDAI_blockchain_address']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\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",
       "      <th>timeset</th>\n",
       "      <th>transfer_subtype</th>\n",
       "      <th>source</th>\n",
       "      <th>s_gender</th>\n",
       "      <th>s_location</th>\n",
       "      <th>s_business_type</th>\n",
       "      <th>target</th>\n",
       "      <th>t_gender</th>\n",
       "      <th>t_location</th>\n",
       "      <th>t_business_type</th>\n",
       "      <th>tx_token</th>\n",
       "      <th>weight</th>\n",
       "      <th>type</th>\n",
       "      <th>token_name</th>\n",
       "      <th>token_address</th>\n",
       "      <th>s_bal</th>\n",
       "      <th>s_xDAI_blockchain_address</th>\n",
       "      <th>t_bal</th>\n",
       "      <th>t_xDAI_blockchain_address</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>170140</td>\n",
       "      <td>2020-04-30 10:43:45.170528</td>\n",
       "      <td>STANDARD</td>\n",
       "      <td>0xC1697C1326fD192438515fE2F7E4cCb0C705C5d2</td>\n",
       "      <td>male</td>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "      <td>male</td>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9007.0</td>\n",
       "      <td>directed</td>\n",
       "      <td>Sarafu</td>\n",
       "      <td>0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4</td>\n",
       "      <td>56.660892</td>\n",
       "      <td>0xC1697C1326fD192438515fE2F7E4cCb0C705C5d2</td>\n",
       "      <td>11737.726002</td>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>10</td>\n",
       "      <td>2020-01-26 08:26:22.521902</td>\n",
       "      <td>STANDARD</td>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "      <td>male</td>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>0x4AB73CfaC1732a9DcD74BdB4C9605f21832D7C72</td>\n",
       "      <td>male</td>\n",
       "      <td>Home</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>NaN</td>\n",
       "      <td>100.0</td>\n",
       "      <td>directed</td>\n",
       "      <td>Sarafu</td>\n",
       "      <td>0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4</td>\n",
       "      <td>11737.726002</td>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "      <td>902.500000</td>\n",
       "      <td>0x4AB73CfaC1732a9DcD74BdB4C9605f21832D7C72</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>11</td>\n",
       "      <td>2020-01-26 08:27:26.757372</td>\n",
       "      <td>STANDARD</td>\n",
       "      <td>0xD95954e3fCd2f09A6Be5931D24f731eFa63BF435</td>\n",
       "      <td>male</td>\n",
       "      <td>G.E</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "      <td>male</td>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2.0</td>\n",
       "      <td>directed</td>\n",
       "      <td>Sarafu</td>\n",
       "      <td>0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4</td>\n",
       "      <td>7297.262576</td>\n",
       "      <td>0xD95954e3fCd2f09A6Be5931D24f731eFa63BF435</td>\n",
       "      <td>11737.726002</td>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>13</td>\n",
       "      <td>2020-01-26 08:32:05.154096</td>\n",
       "      <td>STANDARD</td>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "      <td>male</td>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>0x4AB73CfaC1732a9DcD74BdB4C9605f21832D7C72</td>\n",
       "      <td>male</td>\n",
       "      <td>Home</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>NaN</td>\n",
       "      <td>23.0</td>\n",
       "      <td>directed</td>\n",
       "      <td>Sarafu</td>\n",
       "      <td>0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4</td>\n",
       "      <td>11737.726002</td>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "      <td>902.500000</td>\n",
       "      <td>0x4AB73CfaC1732a9DcD74BdB4C9605f21832D7C72</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>15</td>\n",
       "      <td>2020-01-26 08:38:42.186525</td>\n",
       "      <td>STANDARD</td>\n",
       "      <td>0x4AfD04b9eD17759B362c8C929207Fe7ad81C39d3</td>\n",
       "      <td>male</td>\n",
       "      <td>Test</td>\n",
       "      <td>Health</td>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "      <td>male</td>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>NaN</td>\n",
       "      <td>12.0</td>\n",
       "      <td>directed</td>\n",
       "      <td>Sarafu</td>\n",
       "      <td>0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4</td>\n",
       "      <td>448.000000</td>\n",
       "      <td>0x4AfD04b9eD17759B362c8C929207Fe7ad81C39d3</td>\n",
       "      <td>11737.726002</td>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       id                     timeset transfer_subtype  \\\n",
       "0  170140  2020-04-30 10:43:45.170528         STANDARD   \n",
       "1      10  2020-01-26 08:26:22.521902         STANDARD   \n",
       "2      11  2020-01-26 08:27:26.757372         STANDARD   \n",
       "3      13  2020-01-26 08:32:05.154096         STANDARD   \n",
       "4      15  2020-01-26 08:38:42.186525         STANDARD   \n",
       "\n",
       "                                       source s_gender  s_location  \\\n",
       "0  0xC1697C1326fD192438515fE2F7E4cCb0C705C5d2     male  GE Nairobi   \n",
       "1  0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31     male  GE Nairobi   \n",
       "2  0xD95954e3fCd2f09A6Be5931D24f731eFa63BF435     male         G.E   \n",
       "3  0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31     male  GE Nairobi   \n",
       "4  0x4AfD04b9eD17759B362c8C929207Fe7ad81C39d3     male        Test   \n",
       "\n",
       "  s_business_type                                      target t_gender  \\\n",
       "0  Farming/Labour  0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31     male   \n",
       "1  Farming/Labour  0x4AB73CfaC1732a9DcD74BdB4C9605f21832D7C72     male   \n",
       "2  Farming/Labour  0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31     male   \n",
       "3  Farming/Labour  0x4AB73CfaC1732a9DcD74BdB4C9605f21832D7C72     male   \n",
       "4          Health  0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31     male   \n",
       "\n",
       "   t_location t_business_type  tx_token  weight      type token_name  \\\n",
       "0  GE Nairobi  Farming/Labour       NaN  9007.0  directed     Sarafu   \n",
       "1        Home  Farming/Labour       NaN   100.0  directed     Sarafu   \n",
       "2  GE Nairobi  Farming/Labour       NaN     2.0  directed     Sarafu   \n",
       "3        Home  Farming/Labour       NaN    23.0  directed     Sarafu   \n",
       "4  GE Nairobi  Farming/Labour       NaN    12.0  directed     Sarafu   \n",
       "\n",
       "                                token_address         s_bal  \\\n",
       "0  0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4     56.660892   \n",
       "1  0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4  11737.726002   \n",
       "2  0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4   7297.262576   \n",
       "3  0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4  11737.726002   \n",
       "4  0x0Fd6e8F2320C90e9D4b3A5bd888c4D556d20AbD4    448.000000   \n",
       "\n",
       "                    s_xDAI_blockchain_address         t_bal  \\\n",
       "0  0xC1697C1326fD192438515fE2F7E4cCb0C705C5d2  11737.726002   \n",
       "1  0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31    902.500000   \n",
       "2  0xD95954e3fCd2f09A6Be5931D24f731eFa63BF435  11737.726002   \n",
       "3  0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31    902.500000   \n",
       "4  0x4AfD04b9eD17759B362c8C929207Fe7ad81C39d3  11737.726002   \n",
       "\n",
       "                    t_xDAI_blockchain_address  \n",
       "0  0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31  \n",
       "1  0x4AB73CfaC1732a9DcD74BdB4C9605f21832D7C72  \n",
       "2  0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31  \n",
       "3  0x4AB73CfaC1732a9DcD74BdB4C9605f21832D7C72  \n",
       "4  0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31  "
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "transactions_subset_v2.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# subset the data into the needed columns for clustering\n",
    "combined = transactions_subset_v2[['source','s_location','s_business_type','target','t_location',\n",
    "            't_business_type','weight','s_bal','t_bal']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>source</th>\n",
       "      <th>s_location</th>\n",
       "      <th>s_business_type</th>\n",
       "      <th>target</th>\n",
       "      <th>t_location</th>\n",
       "      <th>t_business_type</th>\n",
       "      <th>weight</th>\n",
       "      <th>s_bal</th>\n",
       "      <th>t_bal</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0xC1697C1326fD192438515fE2F7E4cCb0C705C5d2</td>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>9007.0</td>\n",
       "      <td>56.660892</td>\n",
       "      <td>11737.726002</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>0x4AB73CfaC1732a9DcD74BdB4C9605f21832D7C72</td>\n",
       "      <td>Home</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>100.0</td>\n",
       "      <td>11737.726002</td>\n",
       "      <td>902.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0xD95954e3fCd2f09A6Be5931D24f731eFa63BF435</td>\n",
       "      <td>G.E</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>2.0</td>\n",
       "      <td>7297.262576</td>\n",
       "      <td>11737.726002</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>0x4AB73CfaC1732a9DcD74BdB4C9605f21832D7C72</td>\n",
       "      <td>Home</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>23.0</td>\n",
       "      <td>11737.726002</td>\n",
       "      <td>902.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0x4AfD04b9eD17759B362c8C929207Fe7ad81C39d3</td>\n",
       "      <td>Test</td>\n",
       "      <td>Health</td>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>12.0</td>\n",
       "      <td>448.000000</td>\n",
       "      <td>11737.726002</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75162</th>\n",
       "      <td>0x97F5165b544e0869ba3Be80D7eEe8b73a0270Dfe</td>\n",
       "      <td>kilibole</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>0x5CAaA1f7dC13235Fe181D0307e682c387e75a6ec</td>\n",
       "      <td>Kilibole</td>\n",
       "      <td>Food/Water</td>\n",
       "      <td>20.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>5.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75163</th>\n",
       "      <td>0x9a05d12df366cE3aa1420c6DFFD0db9ce4ba77Fc</td>\n",
       "      <td>Kikomani</td>\n",
       "      <td>Food/Water</td>\n",
       "      <td>0xb44279a1d11A2bc4b1b3D08D3BEAb8278cc86985</td>\n",
       "      <td>Bofu</td>\n",
       "      <td>Shop</td>\n",
       "      <td>350.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>800.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75164</th>\n",
       "      <td>0x2e44845BE57687bFdcdd26044bB7CdD575781336</td>\n",
       "      <td>Miyani</td>\n",
       "      <td>Shop</td>\n",
       "      <td>0xfCF20a412eB6DD345237C7BEeBab53B424b98297</td>\n",
       "      <td>Miyani</td>\n",
       "      <td>Shop</td>\n",
       "      <td>400.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>800.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75165</th>\n",
       "      <td>0xAc4DB7728940e76BCd98Bb8E60671916f3B7576A</td>\n",
       "      <td>Kilifi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>0x2f99a653F5dc201eA97578A6a203BC4db1eaD2FF</td>\n",
       "      <td>KIlifi</td>\n",
       "      <td>Education</td>\n",
       "      <td>20.0</td>\n",
       "      <td>400.000000</td>\n",
       "      <td>500.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75166</th>\n",
       "      <td>0x2f99a653F5dc201eA97578A6a203BC4db1eaD2FF</td>\n",
       "      <td>KIlifi</td>\n",
       "      <td>Education</td>\n",
       "      <td>0xAc4DB7728940e76BCd98Bb8E60671916f3B7576A</td>\n",
       "      <td>Kilifi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>20.0</td>\n",
       "      <td>500.000000</td>\n",
       "      <td>400.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>75167 rows × 9 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                                           source  s_location s_business_type  \\\n",
       "0      0xC1697C1326fD192438515fE2F7E4cCb0C705C5d2  GE Nairobi  Farming/Labour   \n",
       "1      0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31  GE Nairobi  Farming/Labour   \n",
       "2      0xD95954e3fCd2f09A6Be5931D24f731eFa63BF435         G.E  Farming/Labour   \n",
       "3      0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31  GE Nairobi  Farming/Labour   \n",
       "4      0x4AfD04b9eD17759B362c8C929207Fe7ad81C39d3        Test          Health   \n",
       "...                                           ...         ...             ...   \n",
       "75162  0x97F5165b544e0869ba3Be80D7eEe8b73a0270Dfe    kilibole  Farming/Labour   \n",
       "75163  0x9a05d12df366cE3aa1420c6DFFD0db9ce4ba77Fc    Kikomani      Food/Water   \n",
       "75164  0x2e44845BE57687bFdcdd26044bB7CdD575781336      Miyani            Shop   \n",
       "75165  0xAc4DB7728940e76BCd98Bb8E60671916f3B7576A      Kilifi  Farming/Labour   \n",
       "75166  0x2f99a653F5dc201eA97578A6a203BC4db1eaD2FF      KIlifi       Education   \n",
       "\n",
       "                                           target  t_location t_business_type  \\\n",
       "0      0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31  GE Nairobi  Farming/Labour   \n",
       "1      0x4AB73CfaC1732a9DcD74BdB4C9605f21832D7C72        Home  Farming/Labour   \n",
       "2      0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31  GE Nairobi  Farming/Labour   \n",
       "3      0x4AB73CfaC1732a9DcD74BdB4C9605f21832D7C72        Home  Farming/Labour   \n",
       "4      0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31  GE Nairobi  Farming/Labour   \n",
       "...                                           ...         ...             ...   \n",
       "75162  0x5CAaA1f7dC13235Fe181D0307e682c387e75a6ec    Kilibole      Food/Water   \n",
       "75163  0xb44279a1d11A2bc4b1b3D08D3BEAb8278cc86985        Bofu            Shop   \n",
       "75164  0xfCF20a412eB6DD345237C7BEeBab53B424b98297      Miyani            Shop   \n",
       "75165  0x2f99a653F5dc201eA97578A6a203BC4db1eaD2FF      KIlifi       Education   \n",
       "75166  0xAc4DB7728940e76BCd98Bb8E60671916f3B7576A      Kilifi  Farming/Labour   \n",
       "\n",
       "       weight         s_bal         t_bal  \n",
       "0      9007.0     56.660892  11737.726002  \n",
       "1       100.0  11737.726002    902.500000  \n",
       "2         2.0   7297.262576  11737.726002  \n",
       "3        23.0  11737.726002    902.500000  \n",
       "4        12.0    448.000000  11737.726002  \n",
       "...       ...           ...           ...  \n",
       "75162    20.0      0.000000      5.000000  \n",
       "75163   350.0      0.000000    800.000000  \n",
       "75164   400.0      0.000000    800.000000  \n",
       "75165    20.0    400.000000    500.000000  \n",
       "75166    20.0    500.000000    400.000000  \n",
       "\n",
       "[75167 rows x 9 columns]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "combined"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "source = combined.source.values\n",
    "target = combined.target.values\n",
    "# remove the source and target variables for clustering\n",
    "del combined['source']\n",
    "del combined['target']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# create dummy variables of the categorical variables \n",
    "updated = pd.get_dummies(combined)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# define how many clusters to test\n",
    "clustersToTest = [10,20,25,30,40,50]\n",
    "# calculate the optimal number of clusters using the Gap Statistic -https://statweb.stanford.edu/~gwalther/gap\n",
    "optimalK = OptimalK(parallel_backend='joblib')\n",
    "n_clusters = optimalK(X=updated, cluster_array=clustersToTest)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>n_clusters</th>\n",
       "      <th>gap_value</th>\n",
       "      <th>gap*</th>\n",
       "      <th>ref_dispersion_std</th>\n",
       "      <th>sk</th>\n",
       "      <th>sk*</th>\n",
       "      <th>diff</th>\n",
       "      <th>diff*</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>10.0</td>\n",
       "      <td>3.363615</td>\n",
       "      <td>1.414036e+14</td>\n",
       "      <td>2.510135e+12</td>\n",
       "      <td>0.019816</td>\n",
       "      <td>1.633046e+14</td>\n",
       "      <td>0.200252</td>\n",
       "      <td>1.555745e+14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>20.0</td>\n",
       "      <td>3.177815</td>\n",
       "      <td>9.154344e+13</td>\n",
       "      <td>1.200491e+12</td>\n",
       "      <td>0.014451</td>\n",
       "      <td>1.057143e+14</td>\n",
       "      <td>0.187308</td>\n",
       "      <td>1.033105e+14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>25.0</td>\n",
       "      <td>3.001553</td>\n",
       "      <td>7.603468e+13</td>\n",
       "      <td>7.675192e+11</td>\n",
       "      <td>0.011046</td>\n",
       "      <td>8.780176e+13</td>\n",
       "      <td>0.106216</td>\n",
       "      <td>8.643467e+13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>30.0</td>\n",
       "      <td>2.904411</td>\n",
       "      <td>6.720920e+13</td>\n",
       "      <td>5.602132e+11</td>\n",
       "      <td>0.009074</td>\n",
       "      <td>7.760920e+13</td>\n",
       "      <td>0.230329</td>\n",
       "      <td>7.539618e+13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>40.0</td>\n",
       "      <td>2.686358</td>\n",
       "      <td>5.289592e+13</td>\n",
       "      <td>6.017818e+11</td>\n",
       "      <td>0.012277</td>\n",
       "      <td>6.108290e+13</td>\n",
       "      <td>-1.248115</td>\n",
       "      <td>6.018132e+13</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   n_clusters  gap_value          gap*  ref_dispersion_std        sk  \\\n",
       "0        10.0   3.363615  1.414036e+14        2.510135e+12  0.019816   \n",
       "1        20.0   3.177815  9.154344e+13        1.200491e+12  0.014451   \n",
       "2        25.0   3.001553  7.603468e+13        7.675192e+11  0.011046   \n",
       "3        30.0   2.904411  6.720920e+13        5.602132e+11  0.009074   \n",
       "4        40.0   2.686358  5.289592e+13        6.017818e+11  0.012277   \n",
       "\n",
       "            sk*      diff         diff*  \n",
       "0  1.633046e+14  0.200252  1.555745e+14  \n",
       "1  1.057143e+14  0.187308  1.033105e+14  \n",
       "2  8.780176e+13  0.106216  8.643467e+13  \n",
       "3  7.760920e+13  0.230329  7.539618e+13  \n",
       "4  6.108290e+13 -1.248115  6.018132e+13  "
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "optimalK.gap_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(optimalK.gap_df.n_clusters, optimalK.gap_df.gap_value, linewidth=3)\n",
    "plt.scatter(optimalK.gap_df[optimalK.gap_df.n_clusters == n_clusters].n_clusters,\n",
    "            optimalK.gap_df[optimalK.gap_df.n_clusters == n_clusters].gap_value, s=250, c='r')\n",
    "plt.grid(True)\n",
    "plt.text(20, 4, 'Clusters: {}'.format(str(clustersToTest)), horizontalalignment='center',verticalalignment='center')\n",
    "plt.xlabel('Cluster Count')\n",
    "plt.ylabel('Gap Value')\n",
    "plt.title('Gap Values by Cluster Count')\n",
    "plt.savefig('gap_statistic.png')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Compute clusters based off of the following features:\n",
    "* s_location\n",
    "* s_business_type\n",
    "* t_location\n",
    "* t_business_type\n",
    "* weight, which is tokens exchange\n",
    "* s_bal\n",
    "* t_bal\n",
    "\n",
    "\n",
    "\"The KMeans algorithm clusters data by trying to separate samples in n groups of equal variance, minimizing a criterion known as the inertia or within-cluster sum-of-squares (see below). This algorithm requires the number of clusters to be specified. It scales well to large number of samples and has been used across a large range of application areas in many different fields.\n",
    "\n",
    "The k-means algorithm divides a set of  samples  into  disjoint clusters , each described by the mean \n",
    " of the samples in the cluster. The means are commonly called the cluster “centroids”; note that they are not, in general, points from , although they live in the same space.\" - https://scikit-learn.org/stable/modules/clustering.html#k-means"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/aclarkdata/anaconda3/lib/python3.7/site-packages/sklearn/cluster/_kmeans.py:974: FutureWarning: 'n_jobs' was deprecated in version 0.23 and will be removed in 0.25.\n",
      "  \" removed in 0.25.\", FutureWarning)\n"
     ]
    }
   ],
   "source": [
    "kmeans = KMeans(n_clusters=50, random_state=1,n_jobs=-1).fit(updated.values)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/aclarkdata/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:2: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  \n"
     ]
    }
   ],
   "source": [
    "# add the clusters back to the combined dataframe\n",
    "combined['cluster'] = kmeans.labels_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/aclarkdata/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:2: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  \n",
      "/home/aclarkdata/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:3: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  This is separate from the ipykernel package so we can avoid doing imports until\n"
     ]
    }
   ],
   "source": [
    "# add back the source and target variables\n",
    "combined['source'] = source\n",
    "combined['target'] = target"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>s_location</th>\n",
       "      <th>s_business_type</th>\n",
       "      <th>t_location</th>\n",
       "      <th>t_business_type</th>\n",
       "      <th>weight</th>\n",
       "      <th>s_bal</th>\n",
       "      <th>t_bal</th>\n",
       "      <th>cluster</th>\n",
       "      <th>source</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>9007.0</td>\n",
       "      <td>56.660892</td>\n",
       "      <td>11737.726002</td>\n",
       "      <td>13</td>\n",
       "      <td>0xC1697C1326fD192438515fE2F7E4cCb0C705C5d2</td>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>Home</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>100.0</td>\n",
       "      <td>11737.726002</td>\n",
       "      <td>902.500000</td>\n",
       "      <td>12</td>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "      <td>0x4AB73CfaC1732a9DcD74BdB4C9605f21832D7C72</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>G.E</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>2.0</td>\n",
       "      <td>7297.262576</td>\n",
       "      <td>11737.726002</td>\n",
       "      <td>48</td>\n",
       "      <td>0xD95954e3fCd2f09A6Be5931D24f731eFa63BF435</td>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>Home</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>23.0</td>\n",
       "      <td>11737.726002</td>\n",
       "      <td>902.500000</td>\n",
       "      <td>12</td>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "      <td>0x4AB73CfaC1732a9DcD74BdB4C9605f21832D7C72</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Test</td>\n",
       "      <td>Health</td>\n",
       "      <td>GE Nairobi</td>\n",
       "      <td>Farming/Labour</td>\n",
       "      <td>12.0</td>\n",
       "      <td>448.000000</td>\n",
       "      <td>11737.726002</td>\n",
       "      <td>13</td>\n",
       "      <td>0x4AfD04b9eD17759B362c8C929207Fe7ad81C39d3</td>\n",
       "      <td>0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   s_location s_business_type  t_location t_business_type  weight  \\\n",
       "0  GE Nairobi  Farming/Labour  GE Nairobi  Farming/Labour  9007.0   \n",
       "1  GE Nairobi  Farming/Labour        Home  Farming/Labour   100.0   \n",
       "2         G.E  Farming/Labour  GE Nairobi  Farming/Labour     2.0   \n",
       "3  GE Nairobi  Farming/Labour        Home  Farming/Labour    23.0   \n",
       "4        Test          Health  GE Nairobi  Farming/Labour    12.0   \n",
       "\n",
       "          s_bal         t_bal  cluster  \\\n",
       "0     56.660892  11737.726002       13   \n",
       "1  11737.726002    902.500000       12   \n",
       "2   7297.262576  11737.726002       48   \n",
       "3  11737.726002    902.500000       12   \n",
       "4    448.000000  11737.726002       13   \n",
       "\n",
       "                                       source  \\\n",
       "0  0xC1697C1326fD192438515fE2F7E4cCb0C705C5d2   \n",
       "1  0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31   \n",
       "2  0xD95954e3fCd2f09A6Be5931D24f731eFa63BF435   \n",
       "3  0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31   \n",
       "4  0x4AfD04b9eD17759B362c8C929207Fe7ad81C39d3   \n",
       "\n",
       "                                       target  \n",
       "0  0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31  \n",
       "1  0x4AB73CfaC1732a9DcD74BdB4C9605f21832D7C72  \n",
       "2  0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31  \n",
       "3  0x4AB73CfaC1732a9DcD74BdB4C9605f21832D7C72  \n",
       "4  0xBAB77A20a757e8438DfaBF01D5F36DD12d862B31  "
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "combined.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Calculate and plot Two PCA components of the data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 165,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZQAAAD8CAYAAABQFVIjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi41LCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvSM8oowAAIABJREFUeJzsnXmclNWV97+31l7phYaWnUYFZBGEFlBAwQ0dnSQmajQmaiJj5lWTODNJdOadRMfRCc4YE2OIeZ1olMTEBKLRLIoaaRXjAnQAAUGQvVmaXumt1ue+f9ynuqtr6a7url7oPt/Ppz5dde7z3KXQ51f3nnPPVVprBEEQBKGnOPq7A4IgCMLgQARFEARBSAsiKIIgCEJaEEERBEEQ0oIIiiAIgpAWRFAEQRCEtCCCIgiCIKQFERRBEAQhLYigCIIgCGnB1d8dSDdFRUV64sSJfd5uU1MT2dnZfd5ufyBjHZwMpbHC0BpvKmPdtGlTldZ6RE/aGXSCMnHiRDZu3Njn7ZaVlbFkyZI+b7c/kLEOTobSWGFojTeVsSqlDvS0HVnyEgRBENKCCIogCIKQFkRQBEEQhLQggiIIgiCkBREUQRAEIS2IoAiCIAhpQQRFEARBSAuDbh9Kv1JTA6EQuFyQnw8OW68tC+rqEpelUi4IgnAKIILSE5qbobwc1q+HUaNg1SpQCrQ25W63+RsKGVukzOWCsWOhqAiqq+HQIXNNdPmkSbBoEcydC5mZ/TdGYUhw7Ngx7r//fm699Vby8/MpLi7mhz/8IR6Ph6uuuopt27Z1uc6nn36ayy67jNGjR/dCj9NHbD8jm6OLior6tA8bN27kxz/+cYfXdda3uro6fvWrX3H77bf3Rjc7RQSlO4TDsG4drF4NgQAMGwbjx5uXZcG+fbB9O7S0mOszMmDmTIikhNmzx9zr84HXC7Nmwemnt81KQiE4ehSefBJ+8Qu49lpYuhSczn4ZrjC40Vpz9dVXc9555/HGG28AsGXLFo4fP864ceO6Xe/TTz/NjBkzuiQooVAIl6vnjyWtNVprHCnM9LvTz1RI11i6Ql1dHT/5yU/6TVBkXaWr1NfDQw+Z2UhhIUyYAAUFZnbh88E778DWrZCVBcXF5pWdDVu2wJtvmtf27ZCXB2PGmOWtbdvMfT6facPlMnVOmGDaWLXKtFlf379jFwYl69atw+1286lPfarVNmvWLBYvXtzuuqeffpo777yz9fNVV11FWVkZ4XCYW265hRkzZjBz5kx+8IMfsGbNGjZu3MiNN97I7NmzaWlpYdOmTVx44YXMnTuXZcuWcfToUQCWLFnCXXfdRWlpKY8++iirV69mxowZzJo1iwsuuCCuv42NjVx88cXMmTOHmTNn8uKLLwKwf/9+pkyZwk033cSMGTM4dOgQr776Kueddx5z5szh2muvpbGxsV1difoJ8Nhjj7XWv3PnTsDkw/rKV77CvHnzOOecc1rbjaasrIzFixfzqU99imnTpgHwy1/+knnz5jF79my++tWvEg6HAfj5z3/O5MmTmTdvHu+8807Cf5vq6mouu+wypk+fzvLly9GR1Q/gkUceYcaMGcyYMYMf/vCHANxzzz188sknzJ49m29961scPXqUCy64gOXLlzNjxgzefvvthO2kC5mhdIX6elixAqqqoKTEiEgEyzJLX83NRiSiy1wuyMmBXbvM59NPN7ZIWX4+1Naa+xctMjOaCF6vaWvfPtP2PfcYMRKENLFt2zbmzp3b7fs3b95MRUVF67JYXV0d+fn5/PjHP+bhhx+mtLSUYDDI1772NV588UVGjBjBb37zG/7v//2/PPXUUwAEAoHWHHwzZ85k7dq1jBkzhrq6urj2MjIyeOGFFxg2bBhVVVUsWLCgVQx3797NM888w4IFC6iqquKBBx7g9ddfJzs7m4ceeohHHnmE7373u611XXPNNe36GaGoqIjy8nJ+8pOf8PDDD/Ozn/2MBx98kIsuuoinnnqKuro65s2bxyWXXBKXdLG8vJxt27ZRUlLCRx99xG9+8xveeecd3G43t99+O88++yyXXnop9957L5s2bSIvL4+lS5dyzjnnxI31P/7jP1i0aBHf/e53+dOf/sSTTz4JwKZNm/j5z3/O+++/j9aa+fPnc+GFF7JixQq2bdvG5s2bAfj+97/PsmXLWLhwIYsXL6a5ubnb/86pIIKSKuEwrFxpxGTMmPZllgVNTUZMhg2Lv1drOHKkTWSOHDHLY5HPSpn7Tp6EDRtg4cL2TnmlTJsVFaYPd98ty1/CgGHSpEns3buXr33ta1x55ZVcdtllcdfs2rWLbdu2cemllwIQDocZNWpUa/nnP//51vcLFy7klltu4brrruOzn/1sXF1aa/7t3/6N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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Create a PCA instance: pca\n",
    "pca = PCA(n_components=2)\n",
    "principalComponents = pca.fit_transform(updated\n",
    "                                       )\n",
    "df = pd.DataFrame(principalComponents)\n",
    "\n",
    "df['label'] = kmeans.labels_\n",
    "colors = plt.cm.Spectral(np.linspace(0, 1, len(df.label.unique())))\n",
    "\n",
    "for color, label in zip(colors, df.label.unique()):\n",
    "    \n",
    "    tempdf = df[df.label == label]\n",
    "    plt.scatter(tempdf[0], tempdf[1], c=color)\n",
    "    \n",
    "plt.scatter(kmeans.cluster_centers_[:,0], kmeans.cluster_centers_[:, 1], c='r', s=500, alpha=0.5,)\n",
    "plt.grid(True)\n",
    "plt.text(200000, 260000, 'Clusters are the red dots', horizontalalignment='center',verticalalignment='center')\n",
    "plt.savefig('pca.png')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Descriptive statistics \n",
    "\n",
    "Calculate relevant statistics, such as median, mean, etc for creating probability distributions in the subpopulation model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>weight</th>\n",
       "      <th>s_bal</th>\n",
       "      <th>t_bal</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>cluster</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>217.737536</td>\n",
       "      <td>332.674357</td>\n",
       "      <td>3122.710726</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>588.111940</td>\n",
       "      <td>793.864819</td>\n",
       "      <td>251651.998315</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>957.820312</td>\n",
       "      <td>7089.179214</td>\n",
       "      <td>21755.181601</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>349.925309</td>\n",
       "      <td>516.042937</td>\n",
       "      <td>64166.491418</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>455.317844</td>\n",
       "      <td>64995.360511</td>\n",
       "      <td>751.148124</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2443.890625</td>\n",
       "      <td>251651.998315</td>\n",
       "      <td>1746.597767</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>586.917409</td>\n",
       "      <td>1022.866799</td>\n",
       "      <td>38404.821609</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>1533.448040</td>\n",
       "      <td>23214.200804</td>\n",
       "      <td>1469.670862</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>408.100000</td>\n",
       "      <td>895.817336</td>\n",
       "      <td>100579.182676</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>1468.701299</td>\n",
       "      <td>64148.612782</td>\n",
       "      <td>22314.167052</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>271.261258</td>\n",
       "      <td>573.611940</td>\n",
       "      <td>1152.574038</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>365.099390</td>\n",
       "      <td>406.400941</td>\n",
       "      <td>14410.774177</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>790.907135</td>\n",
       "      <td>11235.023756</td>\n",
       "      <td>956.054517</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>433.822322</td>\n",
       "      <td>537.032863</td>\n",
       "      <td>9837.111302</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>8074.000000</td>\n",
       "      <td>251651.998315</td>\n",
       "      <td>121082.429001</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>1187.972973</td>\n",
       "      <td>9402.471887</td>\n",
       "      <td>55225.482860</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>15562.500000</td>\n",
       "      <td>121082.429001</td>\n",
       "      <td>50899.750788</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>389.501989</td>\n",
       "      <td>401.109603</td>\n",
       "      <td>25436.848041</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>4298.095238</td>\n",
       "      <td>34136.137502</td>\n",
       "      <td>62137.100395</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>80000.000000</td>\n",
       "      <td>63145.960000</td>\n",
       "      <td>121082.429001</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>8978.181818</td>\n",
       "      <td>44220.000308</td>\n",
       "      <td>121082.429001</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>1039.047619</td>\n",
       "      <td>100579.182676</td>\n",
       "      <td>1313.687026</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>302.688709</td>\n",
       "      <td>2335.376506</td>\n",
       "      <td>576.133882</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>374.248656</td>\n",
       "      <td>529.628969</td>\n",
       "      <td>31342.309668</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>1631.845550</td>\n",
       "      <td>38576.683107</td>\n",
       "      <td>1335.521733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>1962.083333</td>\n",
       "      <td>63573.309892</td>\n",
       "      <td>43986.716465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>285.848711</td>\n",
       "      <td>848.769339</td>\n",
       "      <td>18260.218613</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>37712.500000</td>\n",
       "      <td>15293.127761</td>\n",
       "      <td>6721.732034</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>1941.818182</td>\n",
       "      <td>45110.659482</td>\n",
       "      <td>251651.998315</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>468.716263</td>\n",
       "      <td>17535.443217</td>\n",
       "      <td>791.779968</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>3240.503052</td>\n",
       "      <td>862.117155</td>\n",
       "      <td>993.258934</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>1236.973333</td>\n",
       "      <td>15340.314634</td>\n",
       "      <td>39194.641356</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>1408.134556</td>\n",
       "      <td>15404.220436</td>\n",
       "      <td>68353.725751</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>317.344987</td>\n",
       "      <td>336.022102</td>\n",
       "      <td>6084.374342</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>404.778700</td>\n",
       "      <td>594.851729</td>\n",
       "      <td>44619.093968</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>482.002628</td>\n",
       "      <td>4479.433066</td>\n",
       "      <td>4557.371287</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>3593.148148</td>\n",
       "      <td>3569.248851</td>\n",
       "      <td>121082.429001</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37</th>\n",
       "      <td>9354.545455</td>\n",
       "      <td>121082.429001</td>\n",
       "      <td>2014.247057</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>14338.571429</td>\n",
       "      <td>251651.998315</td>\n",
       "      <td>60154.599923</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>39</th>\n",
       "      <td>503.700787</td>\n",
       "      <td>928.528786</td>\n",
       "      <td>71742.725832</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>40</th>\n",
       "      <td>175.678483</td>\n",
       "      <td>294.939972</td>\n",
       "      <td>271.114703</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>1302.072607</td>\n",
       "      <td>12999.924780</td>\n",
       "      <td>7072.339809</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>42</th>\n",
       "      <td>387.122709</td>\n",
       "      <td>697.305678</td>\n",
       "      <td>21694.464157</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>43</th>\n",
       "      <td>437.794249</td>\n",
       "      <td>568.978270</td>\n",
       "      <td>55748.221328</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>44</th>\n",
       "      <td>11678.857143</td>\n",
       "      <td>4067.108100</td>\n",
       "      <td>4226.813826</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>45</th>\n",
       "      <td>548.573207</td>\n",
       "      <td>6283.897324</td>\n",
       "      <td>679.334775</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>46</th>\n",
       "      <td>13100.037736</td>\n",
       "      <td>4238.100340</td>\n",
       "      <td>28746.781097</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>47</th>\n",
       "      <td>32377.777778</td>\n",
       "      <td>59578.441515</td>\n",
       "      <td>14515.326330</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48</th>\n",
       "      <td>772.342169</td>\n",
       "      <td>4772.491359</td>\n",
       "      <td>12047.885243</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>49</th>\n",
       "      <td>3661.085106</td>\n",
       "      <td>30063.054365</td>\n",
       "      <td>19776.065227</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               weight          s_bal          t_bal\n",
       "cluster                                            \n",
       "0          217.737536     332.674357    3122.710726\n",
       "1          588.111940     793.864819  251651.998315\n",
       "2          957.820312    7089.179214   21755.181601\n",
       "3          349.925309     516.042937   64166.491418\n",
       "4          455.317844   64995.360511     751.148124\n",
       "5         2443.890625  251651.998315    1746.597767\n",
       "6          586.917409    1022.866799   38404.821609\n",
       "7         1533.448040   23214.200804    1469.670862\n",
       "8          408.100000     895.817336  100579.182676\n",
       "9         1468.701299   64148.612782   22314.167052\n",
       "10         271.261258     573.611940    1152.574038\n",
       "11         365.099390     406.400941   14410.774177\n",
       "12         790.907135   11235.023756     956.054517\n",
       "13         433.822322     537.032863    9837.111302\n",
       "14        8074.000000  251651.998315  121082.429001\n",
       "15        1187.972973    9402.471887   55225.482860\n",
       "16       15562.500000  121082.429001   50899.750788\n",
       "17         389.501989     401.109603   25436.848041\n",
       "18        4298.095238   34136.137502   62137.100395\n",
       "19       80000.000000   63145.960000  121082.429001\n",
       "20        8978.181818   44220.000308  121082.429001\n",
       "21        1039.047619  100579.182676    1313.687026\n",
       "22         302.688709    2335.376506     576.133882\n",
       "23         374.248656     529.628969   31342.309668\n",
       "24        1631.845550   38576.683107    1335.521733\n",
       "25        1962.083333   63573.309892   43986.716465\n",
       "26         285.848711     848.769339   18260.218613\n",
       "27       37712.500000   15293.127761    6721.732034\n",
       "28        1941.818182   45110.659482  251651.998315\n",
       "29         468.716263   17535.443217     791.779968\n",
       "30        3240.503052     862.117155     993.258934\n",
       "31        1236.973333   15340.314634   39194.641356\n",
       "32        1408.134556   15404.220436   68353.725751\n",
       "33         317.344987     336.022102    6084.374342\n",
       "34         404.778700     594.851729   44619.093968\n",
       "35         482.002628    4479.433066    4557.371287\n",
       "36        3593.148148    3569.248851  121082.429001\n",
       "37        9354.545455  121082.429001    2014.247057\n",
       "38       14338.571429  251651.998315   60154.599923\n",
       "39         503.700787     928.528786   71742.725832\n",
       "40         175.678483     294.939972     271.114703\n",
       "41        1302.072607   12999.924780    7072.339809\n",
       "42         387.122709     697.305678   21694.464157\n",
       "43         437.794249     568.978270   55748.221328\n",
       "44       11678.857143    4067.108100    4226.813826\n",
       "45         548.573207    6283.897324     679.334775\n",
       "46       13100.037736    4238.100340   28746.781097\n",
       "47       32377.777778   59578.441515   14515.326330\n",
       "48         772.342169    4772.491359   12047.885243\n",
       "49        3661.085106   30063.054365   19776.065227"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "combined.groupby('cluster').mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "# compute median, Q1,Q3, mean, and sigma\n",
    "clustersMedianSourceBalance = []\n",
    "clusters1stQSourceBalance = []\n",
    "clusters3rdQSourceBalance = []\n",
    "clustersMu = []\n",
    "clustersSigma = []\n",
    "for i in range(0,len(combined.cluster.unique())):\n",
    "    temp = combined[combined['cluster']==i]\n",
    "    clustersMu.append(round(temp.weight.mean(),2))\n",
    "    clustersSigma.append(round(temp.weight.std(),2))\n",
    "    clustersMedianSourceBalance.append(round(temp.weight.median(),2))\n",
    "    clusters1stQSourceBalance.append(round(temp.s_bal.quantile(0.25),2))\n",
    "    clusters3rdQSourceBalance.append(round(temp.s_bal.quantile(0.75),2))\n",
    "    \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "clusters = []\n",
    "for i in range(0,len(combined.cluster.unique())):\n",
    "    clusters.append(str(i))\n",
    "    \n",
    "    \n",
    "mixingAgents = clusters.copy()\n",
    "mixingAgents.append('external')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "UtilityTypesOrdered = {}\n",
    "for i in range(0,len(combined.cluster.unique())):\n",
    "    UtilityTypesOrdered[str(i)] = dict(zip(list(combined[combined['cluster']==i].t_business_type.value_counts(normalize=True).to_dict().keys()),list(combined[combined['cluster']==i].t_business_type.value_counts(normalize=True).to_dict().values())))\n",
    "    \n",
    "UtilityTypesOrdered['external'] =  {'Food/Water':1,\n",
    "                                            'Fuel/Energy':2,\n",
    "                                            'Health':3,\n",
    "                                            'Education':4,\n",
    "                                            'Savings Group':5,\n",
    "                                            'Shop':6}\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "utilityTypesProbability = {}\n",
    "for i in range(0,len(combined.cluster.unique())):\n",
    "    utilityTypesProbability[str(i)] = combined[combined['cluster']==i].t_business_type.value_counts(normalize=True).to_dict()\n",
    "    \n",
    "    \n",
    "utilityTypesProbability['external'] = {'Food/Water':0.6,\n",
    "                                            'Fuel/Energy':0.10,\n",
    "                                            'Health':0.03,\n",
    "                                            'Education':0.015,\n",
    "                                            'Savings Group':0.065,\n",
    "                                            'Shop':0.19}\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Create initilization file (copy from here) \n",
    "\n",
    "clusters = ['0',\n",
    " '1',\n",
    " '2',\n",
    " '3',\n",
    " '4',\n",
    " '5',\n",
    " '6',\n",
    " '7',\n",
    " '8',\n",
    " '9',\n",
    " '10',\n",
    " '11',\n",
    " '12',\n",
    " '13',\n",
    " '14',\n",
    " '15',\n",
    " '16',\n",
    " '17',\n",
    " '18',\n",
    " '19',\n",
    " '20',\n",
    " '21',\n",
    " '22',\n",
    " '23',\n",
    " '24',\n",
    " '25',\n",
    " '26',\n",
    " '27',\n",
    " '28',\n",
    " '29',\n",
    " '30',\n",
    " '31',\n",
    " '32',\n",
    " '33',\n",
    " '34',\n",
    " '35',\n",
    " '36',\n",
    " '37',\n",
    " '38',\n",
    " '39',\n",
    " '40',\n",
    " '41',\n",
    " '42',\n",
    " '43',\n",
    " '44',\n",
    " '45',\n",
    " '46',\n",
    " '47',\n",
    " '48',\n",
    " '49']\n",
    "\n",
    "mixingAgents = ['0',\n",
    " '1',\n",
    " '2',\n",
    " '3',\n",
    " '4',\n",
    " '5',\n",
    " '6',\n",
    " '7',\n",
    " '8',\n",
    " '9',\n",
    " '10',\n",
    " '11',\n",
    " '12',\n",
    " '13',\n",
    " '14',\n",
    " '15',\n",
    " '16',\n",
    " '17',\n",
    " '18',\n",
    " '19',\n",
    " '20',\n",
    " '21',\n",
    " '22',\n",
    " '23',\n",
    " '24',\n",
    " '25',\n",
    " '26',\n",
    " '27',\n",
    " '28',\n",
    " '29',\n",
    " '30',\n",
    " '31',\n",
    " '32',\n",
    " '33',\n",
    " '34',\n",
    " '35',\n",
    " '36',\n",
    " '37',\n",
    " '38',\n",
    " '39',\n",
    " '40',\n",
    " '41',\n",
    " '42',\n",
    " '43',\n",
    " '44',\n",
    " '45',\n",
    " '46',\n",
    " '47',\n",
    " '48',\n",
    " '49',\n",
    " 'external']\n",
    "\n",
    "\n",
    "clustersMedianSourceBalance = [150.0,\n",
    " 340.0,\n",
    " 250.0,\n",
    " 20.0,\n",
    " 330.0,\n",
    " 320.0,\n",
    " 240.0,\n",
    " 300.0,\n",
    " 300.0,\n",
    " 50.0,\n",
    " 900.0,\n",
    " 120.0,\n",
    " 400.0,\n",
    " 180.0,\n",
    " 300.0,\n",
    " 6000.0,\n",
    " 132.5,\n",
    " 130.0,\n",
    " 160.0,\n",
    " 5000.0,\n",
    " 150.0,\n",
    " 10000.0,\n",
    " 200.0,\n",
    " 10000.0,\n",
    " 200.0,\n",
    " 200.0,\n",
    " 35000.0,\n",
    " 20000.0,\n",
    " 100.0,\n",
    " 500.0,\n",
    " 425.0,\n",
    " 13320.0,\n",
    " 500.0,\n",
    " 500.0,\n",
    " 1000.0,\n",
    " 390.0,\n",
    " 150.0,\n",
    " 250.0,\n",
    " 45000.0,\n",
    " 36300.0,\n",
    " 960.0,\n",
    " 120.0,\n",
    " 200.0,\n",
    " 100.0,\n",
    " 220.0,\n",
    " 600.0,\n",
    " 62000.0,\n",
    " 500.0,\n",
    " 900.0,\n",
    " 486.0]\n",
    "\n",
    "clusters1stQSourceBalance = [56.0,\n",
    " 118.46,\n",
    " 105.0,\n",
    " 64767.51,\n",
    " 251652.0,\n",
    " 124.5,\n",
    " 4139.28,\n",
    " 146.1,\n",
    " 1002.5,\n",
    " 17145.78,\n",
    " 52676.2,\n",
    " 100.0,\n",
    " 121082.43,\n",
    " 112.0,\n",
    " 28849.43,\n",
    " 27619.22,\n",
    " 66.36,\n",
    " 251652.0,\n",
    " 148.0,\n",
    " 38653.54,\n",
    " 67.22,\n",
    " 121082.43,\n",
    " 6429.46,\n",
    " 555.04,\n",
    " 104.48,\n",
    " 96.43,\n",
    " 52676.2,\n",
    " 251652.0,\n",
    " 64.73,\n",
    " 36824.5,\n",
    " 15182.03,\n",
    " 485.94,\n",
    " 21660.89,\n",
    " 11210.0,\n",
    " 100579.18,\n",
    " 100.46,\n",
    " 2845.01,\n",
    " 3338.98,\n",
    " 1274.91,\n",
    " 6724.88,\n",
    " 38653.54,\n",
    " 114.5,\n",
    " 68.0,\n",
    " 100.0,\n",
    " 20.93,\n",
    " 14050.3,\n",
    " 63145.96,\n",
    " 9276.23,\n",
    " 63234.8,\n",
    " 64767.51]\n",
    "\n",
    "clusters3rdQSourceBalance = [403.96,\n",
    " 506.6,\n",
    " 592.96,\n",
    " 64767.51,\n",
    " 251652.0,\n",
    " 1501.41,\n",
    " 7214.9,\n",
    " 869.82,\n",
    " 1557.01,\n",
    " 18304.36,\n",
    " 55142.93,\n",
    " 419.96,\n",
    " 121082.43,\n",
    " 816.3,\n",
    " 38653.54,\n",
    " 37106.89,\n",
    " 770.65,\n",
    " 251652.0,\n",
    " 838.46,\n",
    " 38653.54,\n",
    " 315.0,\n",
    " 121082.43,\n",
    " 9074.79,\n",
    " 5726.66,\n",
    " 602.02,\n",
    " 437.96,\n",
    " 63234.8,\n",
    " 251652.0,\n",
    " 425.0,\n",
    " 40953.15,\n",
    " 17145.78,\n",
    " 6349.27,\n",
    " 25695.83,\n",
    " 13156.46,\n",
    " 100579.18,\n",
    " 819.33,\n",
    " 4158.5,\n",
    " 5597.38,\n",
    " 2823.81,\n",
    " 20030.91,\n",
    " 51710.52,\n",
    " 537.94,\n",
    " 542.92,\n",
    " 415.43,\n",
    " 895.66,\n",
    " 18304.36,\n",
    " 63145.96,\n",
    " 14050.3,\n",
    " 64767.51,\n",
    " 64767.51]\n",
    "\n",
    "clustersMu = [329.98,\n",
    " 588.11,\n",
    " 469.93,\n",
    " 492.32,\n",
    " 2443.89,\n",
    " 565.21,\n",
    " 1120.5,\n",
    " 408.1,\n",
    " 550.09,\n",
    " 503.42,\n",
    " 2478.89,\n",
    " 349.93,\n",
    " 9354.55,\n",
    " 453.69,\n",
    " 4298.1,\n",
    " 7508.1,\n",
    " 376.86,\n",
    " 8074.0,\n",
    " 333.75,\n",
    " 7691.43,\n",
    " 362.68,\n",
    " 15562.5,\n",
    " 672.28,\n",
    " 10809.6,\n",
    " 274.98,\n",
    " 405.46,\n",
    " 34555.56,\n",
    " 14338.57,\n",
    " 255.48,\n",
    " 1229.44,\n",
    " 1470.23,\n",
    " 14590.61,\n",
    " 1527.75,\n",
    " 770.73,\n",
    " 1039.05,\n",
    " 503.7,\n",
    " 362.11,\n",
    " 499.51,\n",
    " 45000.0,\n",
    " 37504.55,\n",
    " 1941.82,\n",
    " 262.96,\n",
    " 702.23,\n",
    " 168.57,\n",
    " 2000.58,\n",
    " 1383.32,\n",
    " 65333.33,\n",
    " 1454.43,\n",
    " 1483.11,\n",
    " 1853.03]\n",
    "\n",
    "clustersSigma = [583.23,\n",
    " 1501.26,\n",
    " 966.32,\n",
    " 1452.2,\n",
    " 6789.39,\n",
    " 847.29,\n",
    " 2228.12,\n",
    " 483.5,\n",
    " 852.2,\n",
    " 1170.38,\n",
    " 3256.26,\n",
    " 1174.55,\n",
    " 16235.99,\n",
    " 841.35,\n",
    " 7696.91,\n",
    " 6814.68,\n",
    " 785.21,\n",
    " 10886.9,\n",
    " 712.65,\n",
    " 8713.11,\n",
    " 708.54,\n",
    " 18542.24,\n",
    " 1164.0,\n",
    " 3682.08,\n",
    " 340.99,\n",
    " 624.76,\n",
    " 8171.77,\n",
    " 15060.34,\n",
    " 461.52,\n",
    " 1774.39,\n",
    " 4617.97,\n",
    " 4770.82,\n",
    " 2641.75,\n",
    " 1133.41,\n",
    " 767.87,\n",
    " 437.68,\n",
    " 652.72,\n",
    " 761.07,\n",
    " 7071.07,\n",
    " 5274.96,\n",
    " 2716.8,\n",
    " 572.43,\n",
    " 1553.21,\n",
    " 210.61,\n",
    " 4477.94,\n",
    " 1798.73,\n",
    " 31134.12,\n",
    " 2147.9,\n",
    " 1900.27,\n",
    " 2909.68]\n",
    "\n",
    "\n",
    "# nested dictionary\n",
    "UtilityTypesOrdered = {'0': {'Food/Water': 0.4119323241317899,\n",
    "  'Farming/Labour': 0.26090828138913624,\n",
    "  'Shop': 0.17916295636687443,\n",
    "  'Savings Group': 0.07266251113089937,\n",
    "  'Fuel/Energy': 0.034194122885129116,\n",
    "  'Transport': 0.02617987533392698,\n",
    "  'Health': 0.006767586821015138,\n",
    "  'Education': 0.004096170970614425,\n",
    "  'None': 0.004096170970614425},\n",
    " '1': {'Food/Water': 1.0},\n",
    " '2': {'Savings Group': 0.87890625,\n",
    "  'Health': 0.08984375,\n",
    "  'Food/Water': 0.03125},\n",
    " '3': {'Savings Group': 0.4905964535196131,\n",
    "  'Farming/Labour': 0.3610961848468565,\n",
    "  'Food/Water': 0.14830736163353037},\n",
    " '4': {'Farming/Labour': 0.2843866171003718,\n",
    "  'Shop': 0.25650557620817843,\n",
    "  'Fuel/Energy': 0.17843866171003717,\n",
    "  'Food/Water': 0.16171003717472118,\n",
    "  'None': 0.10966542750929369,\n",
    "  'Savings Group': 0.0055762081784386614,\n",
    "  'Transport': 0.0037174721189591076},\n",
    " '5': {'Farming/Labour': 0.421875,\n",
    "  'Food/Water': 0.421875,\n",
    "  'Shop': 0.0625,\n",
    "  'Savings Group': 0.03125,\n",
    "  'Fuel/Energy': 0.03125,\n",
    "  'Transport': 0.03125},\n",
    " '6': {'Savings Group': 0.6008097165991902,\n",
    "  'Food/Water': 0.35870445344129553,\n",
    "  'Shop': 0.04048582995951417},\n",
    " '7': {'Farming/Labour': 0.4346590909090909,\n",
    "  'Food/Water': 0.2869318181818182,\n",
    "  'Shop': 0.1278409090909091,\n",
    "  'Fuel/Energy': 0.07670454545454546,\n",
    "  'Savings Group': 0.03977272727272727,\n",
    "  'Education': 0.017045454545454544,\n",
    "  'None': 0.011363636363636364,\n",
    "  'Transport': 0.002840909090909091,\n",
    "  'Health': 0.002840909090909091},\n",
    " '8': {'Savings Group': 1.0},\n",
    " '9': {'Savings Group': 0.7142857142857143,\n",
    "  'Food/Water': 0.18181818181818182,\n",
    "  'Farming/Labour': 0.07792207792207792,\n",
    "  'Education': 0.025974025974025976},\n",
    " '10': {'Food/Water': 0.3499875508340941,\n",
    "  'Farming/Labour': 0.3162088140094614,\n",
    "  'Shop': 0.21047389824881732,\n",
    "  'Transport': 0.03950535314133953,\n",
    "  'None': 0.03386173126400531,\n",
    "  'Fuel/Energy': 0.022491493069964313,\n",
    "  'Education': 0.01709685451074778,\n",
    "  'Savings Group': 0.006473566271059839,\n",
    "  'Environment': 0.002157855423686613,\n",
    "  'Health': 0.0016598887874512407,\n",
    "  'Chama': 8.299443937256204e-05},\n",
    " '11': {'Savings Group': 0.4873417721518987,\n",
    "  'Food/Water': 0.3377445339470656,\n",
    "  'Education': 0.09723820483314154,\n",
    "  'Farming/Labour': 0.06271576524741082,\n",
    "  'Shop': 0.014959723820483314},\n",
    " '12': {'Food/Water': 0.34994337485843713,\n",
    "  'Shop': 0.2332955832389581,\n",
    "  'Farming/Labour': 0.19592298980747452,\n",
    "  'Fuel/Energy': 0.057757644394110984,\n",
    "  'Savings Group': 0.053227633069082674,\n",
    "  'Education': 0.05096262740656852,\n",
    "  'None': 0.026047565118912798,\n",
    "  'Transport': 0.020385050962627407,\n",
    "  'Health': 0.011325028312570781,\n",
    "  'Environment': 0.0011325028312570782},\n",
    " '13': {'Savings Group': 0.3712871287128713,\n",
    "  'Food/Water': 0.247974797479748,\n",
    "  'Shop': 0.19801980198019803,\n",
    "  'Fuel/Energy': 0.08235823582358236,\n",
    "  'Health': 0.07605760576057606,\n",
    "  'Farming/Labour': 0.024302430243024302},\n",
    " '14': {'Savings Group': 1.0},\n",
    " '15': {'Savings Group': 1.0},\n",
    " '16': {'Savings Group': 0.5, 'Food/Water': 0.5},\n",
    " '17': {'Savings Group': 0.7335701598579041,\n",
    "  'Shop': 0.17584369449378331,\n",
    "  'Food/Water': 0.0905861456483126},\n",
    " '18': {'Savings Group': 0.6984126984126984,\n",
    "  'Food/Water': 0.23809523809523808,\n",
    "  'Farming/Labour': 0.06349206349206349},\n",
    " '19': {'Savings Group': 1.0},\n",
    " '20': {'Savings Group': 1.0},\n",
    " '21': {'Farming/Labour': 0.47619047619047616,\n",
    "  'Food/Water': 0.3333333333333333,\n",
    "  'Shop': 0.09523809523809523,\n",
    "  'Fuel/Energy': 0.047619047619047616,\n",
    "  'Transport': 0.047619047619047616},\n",
    " '22': {'Food/Water': 0.33040588654165676,\n",
    "  'Farming/Labour': 0.3209114645145977,\n",
    "  'Shop': 0.164016140517446,\n",
    "  'None': 0.06147638262520769,\n",
    "  'Fuel/Energy': 0.05008307619273677,\n",
    "  'Transport': 0.028957987182530263,\n",
    "  'Savings Group': 0.023973415618324233,\n",
    "  'Education': 0.014478993591265131,\n",
    "  'Health': 0.0035604082601471635,\n",
    "  'Environment': 0.0011868027533823878,\n",
    "  'Staff': 0.00047472110135295516,\n",
    "  'Chama': 0.00023736055067647758,\n",
    "  'Game': 0.00023736055067647758},\n",
    " '23': {'Savings Group': 0.8323424494649228,\n",
    "  'Farming/Labour': 0.16765755053507728},\n",
    " '24': {'Farming/Labour': 0.38481675392670156,\n",
    "  'Food/Water': 0.3717277486910995,\n",
    "  'Shop': 0.1387434554973822,\n",
    "  'Fuel/Energy': 0.05235602094240838,\n",
    "  'Transport': 0.02356020942408377,\n",
    "  'Savings Group': 0.01832460732984293,\n",
    "  'Education': 0.007853403141361256,\n",
    "  'Staff': 0.002617801047120419},\n",
    " '25': {'Savings Group': 0.7916666666666666,\n",
    "  'Food/Water': 0.20833333333333334},\n",
    " '26': {'Savings Group': 0.7442348008385744, 'Food/Water': 0.2557651991614256},\n",
    " '27': {'Food/Water': 0.3333333333333333,\n",
    "  'Farming/Labour': 0.25,\n",
    "  'Health': 0.25,\n",
    "  'Savings Group': 0.08333333333333333,\n",
    "  'Fuel/Energy': 0.08333333333333333},\n",
    " '28': {'Food/Water': 1.0},\n",
    " '29': {'Food/Water': 0.27335640138408307,\n",
    "  'Farming/Labour': 0.23529411764705882,\n",
    "  'Shop': 0.21972318339100347,\n",
    "  'Fuel/Energy': 0.21280276816608998,\n",
    "  'None': 0.03806228373702422,\n",
    "  'Education': 0.006920415224913495,\n",
    "  'Transport': 0.006920415224913495,\n",
    "  'Savings Group': 0.005190311418685121,\n",
    "  'Staff': 0.0017301038062283738},\n",
    " '30': {'Food/Water': 0.36228287841191065,\n",
    "  'Shop': 0.2679900744416873,\n",
    "  'Farming/Labour': 0.21712158808933002,\n",
    "  'Savings Group': 0.08436724565756824,\n",
    "  'Education': 0.02481389578163772,\n",
    "  'Fuel/Energy': 0.018610421836228287,\n",
    "  'Transport': 0.017369727047146403,\n",
    "  'None': 0.0037220843672456576,\n",
    "  'Health': 0.0024813895781637717,\n",
    "  'Environment': 0.0012406947890818859},\n",
    " '31': {'Savings Group': 0.8,\n",
    "  'Food/Water': 0.13333333333333333,\n",
    "  'Shop': 0.06666666666666667},\n",
    " '32': {'Savings Group': 0.7444444444444445,\n",
    "  'Farming/Labour': 0.2,\n",
    "  'Food/Water': 0.05555555555555555},\n",
    " '33': {'Food/Water': 0.33343474292668085,\n",
    "  'Farming/Labour': 0.28414968055978096,\n",
    "  'Savings Group': 0.18892607240644965,\n",
    "  'Shop': 0.1146942500760572,\n",
    "  'Fuel/Energy': 0.06936416184971098,\n",
    "  'None': 0.006693033160937024,\n",
    "  'Education': 0.0027380590203833284},\n",
    " '34': {'Savings Group': 1.0},\n",
    " '35': {'Food/Water': 0.3829787234042553,\n",
    "  'Farming/Labour': 0.2390488110137672,\n",
    "  'Shop': 0.1902377972465582,\n",
    "  'Savings Group': 0.07259073842302878,\n",
    "  'Transport': 0.060075093867334166,\n",
    "  'Health': 0.030037546933667083,\n",
    "  'Fuel/Energy': 0.016270337922403004,\n",
    "  'None': 0.0050062578222778474,\n",
    "  'Education': 0.0037546933667083854},\n",
    " '36': {'Savings Group': 1.0},\n",
    " '37': {'Farming/Labour': 0.5454545454545454,\n",
    "  'Food/Water': 0.36363636363636365,\n",
    "  'Savings Group': 0.045454545454545456,\n",
    "  'Shop': 0.045454545454545456},\n",
    " '38': {'Savings Group': 1.0},\n",
    " '39': {'Savings Group': 1.0},\n",
    " '40': {'Farming/Labour': 0.3595236417447678,\n",
    "  'Food/Water': 0.3165386512578395,\n",
    "  'Shop': 0.18842928616728913,\n",
    "  'Fuel/Energy': 0.05108871820167712,\n",
    "  'None': 0.0360439715312522,\n",
    "  'Transport': 0.022443802409978154,\n",
    "  'Education': 0.01039391163413431,\n",
    "  'Savings Group': 0.00842083010358678,\n",
    "  'Health': 0.004545134240011275,\n",
    "  'Staff': 0.0011627087590726517,\n",
    "  'Environment': 0.0010570079627933197,\n",
    "  'System': 0.00035233598759777326},\n",
    " '41': {'Food/Water': 0.33003300330033003,\n",
    "  'Farming/Labour': 0.2739273927392739,\n",
    "  'Shop': 0.1782178217821782,\n",
    "  'Savings Group': 0.13861386138613863,\n",
    "  'Health': 0.0429042904290429,\n",
    "  'Fuel/Energy': 0.0165016501650165,\n",
    "  'Transport': 0.0165016501650165,\n",
    "  'Education': 0.0033003300330033004},\n",
    " '42': {'Savings Group': 0.8661740558292282, 'Health': 0.13382594417077176},\n",
    " '43': {'Savings Group': 1.0},\n",
    " '44': {'Food/Water': 0.4805194805194805,\n",
    "  'Shop': 0.14285714285714285,\n",
    "  'Savings Group': 0.14285714285714285,\n",
    "  'Farming/Labour': 0.13636363636363635,\n",
    "  'Health': 0.06493506493506493,\n",
    "  'Transport': 0.012987012987012988,\n",
    "  'Environment': 0.012987012987012988,\n",
    "  'Fuel/Energy': 0.006493506493506494},\n",
    " '45': {'Food/Water': 0.35471100554235946,\n",
    "  'Farming/Labour': 0.2414885193982581,\n",
    "  'Shop': 0.23198733174980204,\n",
    "  'Education': 0.03800475059382423,\n",
    "  'None': 0.035629453681710214,\n",
    "  'Transport': 0.035629453681710214,\n",
    "  'Fuel/Energy': 0.028503562945368172,\n",
    "  'Savings Group': 0.02454473475851148,\n",
    "  'Health': 0.006334125098970704,\n",
    "  'Environment': 0.001583531274742676,\n",
    "  'Staff': 0.000791765637371338,\n",
    "  'System': 0.000791765637371338},\n",
    " '46': {'Savings Group': 0.6981132075471698,\n",
    "  'Health': 0.18867924528301888,\n",
    "  'Food/Water': 0.09433962264150944,\n",
    "  'Shop': 0.018867924528301886},\n",
    " '47': {'Savings Group': 0.5555555555555556,\n",
    "  'Farming/Labour': 0.2222222222222222,\n",
    "  'Food/Water': 0.2222222222222222},\n",
    " '48': {'Food/Water': 0.38795180722891565,\n",
    "  'Savings Group': 0.38313253012048193,\n",
    "  'Health': 0.10120481927710843,\n",
    "  'Shop': 0.09879518072289156,\n",
    "  'Fuel/Energy': 0.016867469879518072,\n",
    "  'Farming/Labour': 0.012048192771084338},\n",
    " '49': {'Food/Water': 0.3829787234042553,\n",
    "  'Savings Group': 0.3829787234042553,\n",
    "  'Education': 0.19148936170212766,\n",
    "  'Fuel/Energy': 0.0425531914893617},\n",
    " 'external': {'Food/Water': 1,\n",
    "  'Fuel/Energy': 2,\n",
    "  'Health': 3,\n",
    "  'Education': 4,\n",
    "  'Savings Group': 5,\n",
    "  'Shop': 6}}\n",
    "    \n",
    "#  nested dictionary \n",
    "utilityTypesProbability = {'0': {'Food/Water': 0.4119323241317899,\n",
    "  'Farming/Labour': 0.26090828138913624,\n",
    "  'Shop': 0.17916295636687443,\n",
    "  'Savings Group': 0.07266251113089937,\n",
    "  'Fuel/Energy': 0.034194122885129116,\n",
    "  'Transport': 0.02617987533392698,\n",
    "  'Health': 0.006767586821015138,\n",
    "  'Education': 0.004096170970614425,\n",
    "  'None': 0.004096170970614425},\n",
    " '1': {'Food/Water': 1.0},\n",
    " '2': {'Savings Group': 0.87890625,\n",
    "  'Health': 0.08984375,\n",
    "  'Food/Water': 0.03125},\n",
    " '3': {'Savings Group': 0.4905964535196131,\n",
    "  'Farming/Labour': 0.3610961848468565,\n",
    "  'Food/Water': 0.14830736163353037},\n",
    " '4': {'Farming/Labour': 0.2843866171003718,\n",
    "  'Shop': 0.25650557620817843,\n",
    "  'Fuel/Energy': 0.17843866171003717,\n",
    "  'Food/Water': 0.16171003717472118,\n",
    "  'None': 0.10966542750929369,\n",
    "  'Savings Group': 0.0055762081784386614,\n",
    "  'Transport': 0.0037174721189591076},\n",
    " '5': {'Farming/Labour': 0.421875,\n",
    "  'Food/Water': 0.421875,\n",
    "  'Shop': 0.0625,\n",
    "  'Savings Group': 0.03125,\n",
    "  'Fuel/Energy': 0.03125,\n",
    "  'Transport': 0.03125},\n",
    " '6': {'Savings Group': 0.6008097165991902,\n",
    "  'Food/Water': 0.35870445344129553,\n",
    "  'Shop': 0.04048582995951417},\n",
    " '7': {'Farming/Labour': 0.4346590909090909,\n",
    "  'Food/Water': 0.2869318181818182,\n",
    "  'Shop': 0.1278409090909091,\n",
    "  'Fuel/Energy': 0.07670454545454546,\n",
    "  'Savings Group': 0.03977272727272727,\n",
    "  'Education': 0.017045454545454544,\n",
    "  'None': 0.011363636363636364,\n",
    "  'Transport': 0.002840909090909091,\n",
    "  'Health': 0.002840909090909091},\n",
    " '8': {'Savings Group': 1.0},\n",
    " '9': {'Savings Group': 0.7142857142857143,\n",
    "  'Food/Water': 0.18181818181818182,\n",
    "  'Farming/Labour': 0.07792207792207792,\n",
    "  'Education': 0.025974025974025976},\n",
    " '10': {'Food/Water': 0.3499875508340941,\n",
    "  'Farming/Labour': 0.3162088140094614,\n",
    "  'Shop': 0.21047389824881732,\n",
    "  'Transport': 0.03950535314133953,\n",
    "  'None': 0.03386173126400531,\n",
    "  'Fuel/Energy': 0.022491493069964313,\n",
    "  'Education': 0.01709685451074778,\n",
    "  'Savings Group': 0.006473566271059839,\n",
    "  'Environment': 0.002157855423686613,\n",
    "  'Health': 0.0016598887874512407,\n",
    "  'Chama': 8.299443937256204e-05},\n",
    " '11': {'Savings Group': 0.4873417721518987,\n",
    "  'Food/Water': 0.3377445339470656,\n",
    "  'Education': 0.09723820483314154,\n",
    "  'Farming/Labour': 0.06271576524741082,\n",
    "  'Shop': 0.014959723820483314},\n",
    " '12': {'Food/Water': 0.34994337485843713,\n",
    "  'Shop': 0.2332955832389581,\n",
    "  'Farming/Labour': 0.19592298980747452,\n",
    "  'Fuel/Energy': 0.057757644394110984,\n",
    "  'Savings Group': 0.053227633069082674,\n",
    "  'Education': 0.05096262740656852,\n",
    "  'None': 0.026047565118912798,\n",
    "  'Transport': 0.020385050962627407,\n",
    "  'Health': 0.011325028312570781,\n",
    "  'Environment': 0.0011325028312570782},\n",
    " '13': {'Savings Group': 0.3712871287128713,\n",
    "  'Food/Water': 0.247974797479748,\n",
    "  'Shop': 0.19801980198019803,\n",
    "  'Fuel/Energy': 0.08235823582358236,\n",
    "  'Health': 0.07605760576057606,\n",
    "  'Farming/Labour': 0.024302430243024302},\n",
    " '14': {'Savings Group': 1.0},\n",
    " '15': {'Savings Group': 1.0},\n",
    " '16': {'Savings Group': 0.5, 'Food/Water': 0.5},\n",
    " '17': {'Savings Group': 0.7335701598579041,\n",
    "  'Shop': 0.17584369449378331,\n",
    "  'Food/Water': 0.0905861456483126},\n",
    " '18': {'Savings Group': 0.6984126984126984,\n",
    "  'Food/Water': 0.23809523809523808,\n",
    "  'Farming/Labour': 0.06349206349206349},\n",
    " '19': {'Savings Group': 1.0},\n",
    " '20': {'Savings Group': 1.0},\n",
    " '21': {'Farming/Labour': 0.47619047619047616,\n",
    "  'Food/Water': 0.3333333333333333,\n",
    "  'Shop': 0.09523809523809523,\n",
    "  'Fuel/Energy': 0.047619047619047616,\n",
    "  'Transport': 0.047619047619047616},\n",
    " '22': {'Food/Water': 0.33040588654165676,\n",
    "  'Farming/Labour': 0.3209114645145977,\n",
    "  'Shop': 0.164016140517446,\n",
    "  'None': 0.06147638262520769,\n",
    "  'Fuel/Energy': 0.05008307619273677,\n",
    "  'Transport': 0.028957987182530263,\n",
    "  'Savings Group': 0.023973415618324233,\n",
    "  'Education': 0.014478993591265131,\n",
    "  'Health': 0.0035604082601471635,\n",
    "  'Environment': 0.0011868027533823878,\n",
    "  'Staff': 0.00047472110135295516,\n",
    "  'Chama': 0.00023736055067647758,\n",
    "  'Game': 0.00023736055067647758},\n",
    " '23': {'Savings Group': 0.8323424494649228,\n",
    "  'Farming/Labour': 0.16765755053507728},\n",
    " '24': {'Farming/Labour': 0.38481675392670156,\n",
    "  'Food/Water': 0.3717277486910995,\n",
    "  'Shop': 0.1387434554973822,\n",
    "  'Fuel/Energy': 0.05235602094240838,\n",
    "  'Transport': 0.02356020942408377,\n",
    "  'Savings Group': 0.01832460732984293,\n",
    "  'Education': 0.007853403141361256,\n",
    "  'Staff': 0.002617801047120419},\n",
    " '25': {'Savings Group': 0.7916666666666666,\n",
    "  'Food/Water': 0.20833333333333334},\n",
    " '26': {'Savings Group': 0.7442348008385744, 'Food/Water': 0.2557651991614256},\n",
    " '27': {'Food/Water': 0.3333333333333333,\n",
    "  'Farming/Labour': 0.25,\n",
    "  'Health': 0.25,\n",
    "  'Savings Group': 0.08333333333333333,\n",
    "  'Fuel/Energy': 0.08333333333333333},\n",
    " '28': {'Food/Water': 1.0},\n",
    " '29': {'Food/Water': 0.27335640138408307,\n",
    "  'Farming/Labour': 0.23529411764705882,\n",
    "  'Shop': 0.21972318339100347,\n",
    "  'Fuel/Energy': 0.21280276816608998,\n",
    "  'None': 0.03806228373702422,\n",
    "  'Education': 0.006920415224913495,\n",
    "  'Transport': 0.006920415224913495,\n",
    "  'Savings Group': 0.005190311418685121,\n",
    "  'Staff': 0.0017301038062283738},\n",
    " '30': {'Food/Water': 0.36228287841191065,\n",
    "  'Shop': 0.2679900744416873,\n",
    "  'Farming/Labour': 0.21712158808933002,\n",
    "  'Savings Group': 0.08436724565756824,\n",
    "  'Education': 0.02481389578163772,\n",
    "  'Fuel/Energy': 0.018610421836228287,\n",
    "  'Transport': 0.017369727047146403,\n",
    "  'None': 0.0037220843672456576,\n",
    "  'Health': 0.0024813895781637717,\n",
    "  'Environment': 0.0012406947890818859},\n",
    " '31': {'Savings Group': 0.8,\n",
    "  'Food/Water': 0.13333333333333333,\n",
    "  'Shop': 0.06666666666666667},\n",
    " '32': {'Savings Group': 0.7444444444444445,\n",
    "  'Farming/Labour': 0.2,\n",
    "  'Food/Water': 0.05555555555555555},\n",
    " '33': {'Food/Water': 0.33343474292668085,\n",
    "  'Farming/Labour': 0.28414968055978096,\n",
    "  'Savings Group': 0.18892607240644965,\n",
    "  'Shop': 0.1146942500760572,\n",
    "  'Fuel/Energy': 0.06936416184971098,\n",
    "  'None': 0.006693033160937024,\n",
    "  'Education': 0.0027380590203833284},\n",
    " '34': {'Savings Group': 1.0},\n",
    " '35': {'Food/Water': 0.3829787234042553,\n",
    "  'Farming/Labour': 0.2390488110137672,\n",
    "  'Shop': 0.1902377972465582,\n",
    "  'Savings Group': 0.07259073842302878,\n",
    "  'Transport': 0.060075093867334166,\n",
    "  'Health': 0.030037546933667083,\n",
    "  'Fuel/Energy': 0.016270337922403004,\n",
    "  'None': 0.0050062578222778474,\n",
    "  'Education': 0.0037546933667083854},\n",
    " '36': {'Savings Group': 1.0},\n",
    " '37': {'Farming/Labour': 0.5454545454545454,\n",
    "  'Food/Water': 0.36363636363636365,\n",
    "  'Savings Group': 0.045454545454545456,\n",
    "  'Shop': 0.045454545454545456},\n",
    " '38': {'Savings Group': 1.0},\n",
    " '39': {'Savings Group': 1.0},\n",
    " '40': {'Farming/Labour': 0.3595236417447678,\n",
    "  'Food/Water': 0.3165386512578395,\n",
    "  'Shop': 0.18842928616728913,\n",
    "  'Fuel/Energy': 0.05108871820167712,\n",
    "  'None': 0.0360439715312522,\n",
    "  'Transport': 0.022443802409978154,\n",
    "  'Education': 0.01039391163413431,\n",
    "  'Savings Group': 0.00842083010358678,\n",
    "  'Health': 0.004545134240011275,\n",
    "  'Staff': 0.0011627087590726517,\n",
    "  'Environment': 0.0010570079627933197,\n",
    "  'System': 0.00035233598759777326},\n",
    " '41': {'Food/Water': 0.33003300330033003,\n",
    "  'Farming/Labour': 0.2739273927392739,\n",
    "  'Shop': 0.1782178217821782,\n",
    "  'Savings Group': 0.13861386138613863,\n",
    "  'Health': 0.0429042904290429,\n",
    "  'Fuel/Energy': 0.0165016501650165,\n",
    "  'Transport': 0.0165016501650165,\n",
    "  'Education': 0.0033003300330033004},\n",
    " '42': {'Savings Group': 0.8661740558292282, 'Health': 0.13382594417077176},\n",
    " '43': {'Savings Group': 1.0},\n",
    " '44': {'Food/Water': 0.4805194805194805,\n",
    "  'Shop': 0.14285714285714285,\n",
    "  'Savings Group': 0.14285714285714285,\n",
    "  'Farming/Labour': 0.13636363636363635,\n",
    "  'Health': 0.06493506493506493,\n",
    "  'Transport': 0.012987012987012988,\n",
    "  'Environment': 0.012987012987012988,\n",
    "  'Fuel/Energy': 0.006493506493506494},\n",
    " '45': {'Food/Water': 0.35471100554235946,\n",
    "  'Farming/Labour': 0.2414885193982581,\n",
    "  'Shop': 0.23198733174980204,\n",
    "  'Education': 0.03800475059382423,\n",
    "  'None': 0.035629453681710214,\n",
    "  'Transport': 0.035629453681710214,\n",
    "  'Fuel/Energy': 0.028503562945368172,\n",
    "  'Savings Group': 0.02454473475851148,\n",
    "  'Health': 0.006334125098970704,\n",
    "  'Environment': 0.001583531274742676,\n",
    "  'Staff': 0.000791765637371338,\n",
    "  'System': 0.000791765637371338},\n",
    " '46': {'Savings Group': 0.6981132075471698,\n",
    "  'Health': 0.18867924528301888,\n",
    "  'Food/Water': 0.09433962264150944,\n",
    "  'Shop': 0.018867924528301886},\n",
    " '47': {'Savings Group': 0.5555555555555556,\n",
    "  'Farming/Labour': 0.2222222222222222,\n",
    "  'Food/Water': 0.2222222222222222},\n",
    " '48': {'Food/Water': 0.38795180722891565,\n",
    "  'Savings Group': 0.38313253012048193,\n",
    "  'Health': 0.10120481927710843,\n",
    "  'Shop': 0.09879518072289156,\n",
    "  'Fuel/Energy': 0.016867469879518072,\n",
    "  'Farming/Labour': 0.012048192771084338},\n",
    " '49': {'Food/Water': 0.3829787234042553,\n",
    "  'Savings Group': 0.3829787234042553,\n",
    "  'Education': 0.19148936170212766,\n",
    "  'Fuel/Energy': 0.0425531914893617},\n",
    " 'external': {'Food/Water': 0.6,\n",
    "  'Fuel/Energy': 0.1,\n",
    "  'Health': 0.03,\n",
    "  'Education': 0.015,\n",
    "  'Savings Group': 0.065,\n",
    "  'Shop': 0.19}}\n",
    "\n",
    "# agent:[centrality,allocationValue]\n",
    "agentAllocation = {'0': [1, 1],\n",
    " '1': [1, 1],\n",
    " '2': [1, 1],\n",
    " '3': [1, 1],\n",
    " '4': [1, 1],\n",
    " '5': [1, 1],\n",
    " '6': [1, 1],\n",
    " '7': [1, 1],\n",
    " '8': [1, 1],\n",
    " '9': [1, 1],\n",
    " '10': [1, 1],\n",
    " '11': [1, 1],\n",
    " '12': [1, 1],\n",
    " '13': [1, 1],\n",
    " '14': [1, 1],\n",
    " '15': [1, 1],\n",
    " '16': [1, 1],\n",
    " '17': [1, 1],\n",
    " '18': [1, 1],\n",
    " '19': [1, 1],\n",
    " '20': [1, 1],\n",
    " '21': [1, 1],\n",
    " '22': [1, 1],\n",
    " '23': [1, 1],\n",
    " '24': [1, 1],\n",
    " '25': [1, 1],\n",
    " '26': [1, 1],\n",
    " '27': [1, 1],\n",
    " '28': [1, 1],\n",
    " '29': [1, 1],\n",
    " '30': [1, 1],\n",
    " '31': [1, 1],\n",
    " '32': [1, 1],\n",
    " '33': [1, 1],\n",
    " '34': [1, 1],\n",
    " '35': [1, 1],\n",
    " '36': [1, 1],\n",
    " '37': [1, 1],\n",
    " '38': [1, 1],\n",
    " '39': [1, 1],\n",
    " '40': [1, 1],\n",
    " '41': [1, 1],\n",
    " '42': [1, 1],\n",
    " '43': [1, 1],\n",
    " '44': [1, 1],\n",
    " '45': [1, 1],\n",
    " '46': [1, 1],\n",
    " '47': [1, 1],\n",
    " '48': [1, 1],\n",
    " '49': [1, 1]}\n"
   ]
  }
 ],
 "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.7.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}