Last active
January 31, 2021 01:54
-
-
Save santteegt/c97c51d79ddb28b64ad4115054953635 to your computer and use it in GitHub Desktop.
TECLab weekend pop quiz. Inspired form https://github.com/gitcoinco/gitcoin_cadcad_model
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"id": "successful-active", | |
"metadata": {}, | |
"source": [ | |
"# Quiz - Network Analysis: Clustering Grants by contribution amount" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 41, | |
"id": "entertaining-hayes", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import cloudpickle\n", | |
"import matplotlib.pyplot as plt\n", | |
"from matplotlib.patches import Patch\n", | |
"from matplotlib import rcParams\n", | |
"import numpy as np\n", | |
"import pandas as pd\n", | |
"import seaborn as sns\n", | |
"import warnings\n", | |
"\n", | |
"warnings.filterwarnings('ignore')\n", | |
"\n", | |
"from env_config import PICKLE_PATH" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "unusual-caution", | |
"metadata": {}, | |
"source": [ | |
"### Loading data" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"id": "rolled-module", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# Load the data generated by the cadCAD simulation\n", | |
"with open(PICKLE_PATH, 'rb') as fid:\n", | |
" result = cloudpickle.load(fid)\n", | |
"# result = pickle.load(fid)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"id": "virtual-holmes", | |
"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></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th>contributions</th>\n", | |
" <th>pair_totals</th>\n", | |
" <th>quadratic_match</th>\n", | |
" <th>quadratic_funding_per_grant</th>\n", | |
" <th>quadratic_match_per_grant</th>\n", | |
" <th>quadratic_total_match</th>\n", | |
" <th>quadratic_total_funding</th>\n", | |
" <th>simple_quadratic_match</th>\n", | |
" <th>simple_quadratic_funding_per_grant</th>\n", | |
" <th>simple_quadratic_match_per_grant</th>\n", | |
" <th>simple_quadratic_total_match</th>\n", | |
" <th>simple_quadratic_total_funding</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>simulation</th>\n", | |
" <th>subset</th>\n", | |
" <th>run</th>\n", | |
" <th>timestep</th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th rowspan=\"5\" valign=\"top\">0</th>\n", | |
" <th rowspan=\"5\" valign=\"top\">0</th>\n", | |
" <th rowspan=\"5\" valign=\"top\">1</th>\n", | |
" <th>0</th>\n", | |
" <td>[]</td>\n", | |
" <td>{}</td>\n", | |
" <td>{}</td>\n", | |
" <td>{}</td>\n", | |
" <td>{}</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.00000</td>\n", | |
" <td>{}</td>\n", | |
" <td>{}</td>\n", | |
" <td>{}</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.00000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>[{'time_sequence': 0, 'contributor': 'e391d237...</td>\n", | |
" <td>{}</td>\n", | |
" <td>{}</td>\n", | |
" <td>{'GoodGhosting - a DeFi savings game': 1.13017...</td>\n", | |
" <td>{'GoodGhosting - a DeFi savings game': 0}</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.13017</td>\n", | |
" <td>{}</td>\n", | |
" <td>{'GoodGhosting - a DeFi savings game': 1.13017...</td>\n", | |
" <td>{'GoodGhosting - a DeFi savings game': 0}</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.13017</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>[{'time_sequence': 0, 'contributor': 'e391d237...</td>\n", | |
" <td>{}</td>\n", | |
" <td>{}</td>\n", | |
" <td>{'Zapper.fi': 1.130170028617465, 'GoodGhosting...</td>\n", | |
" <td>{'GoodGhosting - a DeFi savings game': 0, 'Zap...</td>\n", | |
" <td>0.0</td>\n", | |
" <td>2.26034</td>\n", | |
" <td>{}</td>\n", | |
" <td>{'Zapper.fi': 1.130170028617465, 'GoodGhosting...</td>\n", | |
" <td>{'GoodGhosting - a DeFi savings game': 0, 'Zap...</td>\n", | |
" <td>0.0</td>\n", | |
" <td>2.26034</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>[{'time_sequence': 0, 'contributor': 'e391d237...</td>\n", | |
" <td>{}</td>\n", | |
" <td>{}</td>\n", | |
" <td>{'Rotki - The portfolio tracker and accounting...</td>\n", | |
" <td>{'GoodGhosting - a DeFi savings game': 0, 'Zap...</td>\n", | |
" <td>0.0</td>\n", | |
" <td>3.39051</td>\n", | |
" <td>{}</td>\n", | |
" <td>{'Rotki - The portfolio tracker and accounting...</td>\n", | |
" <td>{'GoodGhosting - a DeFi savings game': 0, 'Zap...</td>\n", | |
" <td>0.0</td>\n", | |
" <td>3.39051</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>[{'time_sequence': 0, 'contributor': 'e391d237...</td>\n", | |
" <td>{}</td>\n", | |
" <td>{}</td>\n", | |
" <td>{'Rotki - The portfolio tracker and accounting...</td>\n", | |
" <td>{'GoodGhosting - a DeFi savings game': 0, 'Zap...</td>\n", | |
" <td>0.0</td>\n", | |
" <td>4.52068</td>\n", | |
" <td>{}</td>\n", | |
" <td>{'Rotki - The portfolio tracker and accounting...</td>\n", | |
" <td>{'GoodGhosting - a DeFi savings game': 0, 'Zap...</td>\n", | |
" <td>0.0</td>\n", | |
" <td>4.52068</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" contributions \\\n", | |
"simulation subset run timestep \n", | |
"0 0 1 0 [] \n", | |
" 1 [{'time_sequence': 0, 'contributor': 'e391d237... \n", | |
" 2 [{'time_sequence': 0, 'contributor': 'e391d237... \n", | |
" 3 [{'time_sequence': 0, 'contributor': 'e391d237... \n", | |
" 4 [{'time_sequence': 0, 'contributor': 'e391d237... \n", | |
"\n", | |
" pair_totals quadratic_match \\\n", | |
"simulation subset run timestep \n", | |
"0 0 1 0 {} {} \n", | |
" 1 {} {} \n", | |
" 2 {} {} \n", | |
" 3 {} {} \n", | |
" 4 {} {} \n", | |
"\n", | |
" quadratic_funding_per_grant \\\n", | |
"simulation subset run timestep \n", | |
"0 0 1 0 {} \n", | |
" 1 {'GoodGhosting - a DeFi savings game': 1.13017... \n", | |
" 2 {'Zapper.fi': 1.130170028617465, 'GoodGhosting... \n", | |
" 3 {'Rotki - The portfolio tracker and accounting... \n", | |
" 4 {'Rotki - The portfolio tracker and accounting... \n", | |
"\n", | |
" quadratic_match_per_grant \\\n", | |
"simulation subset run timestep \n", | |
"0 0 1 0 {} \n", | |
" 1 {'GoodGhosting - a DeFi savings game': 0} \n", | |
" 2 {'GoodGhosting - a DeFi savings game': 0, 'Zap... \n", | |
" 3 {'GoodGhosting - a DeFi savings game': 0, 'Zap... \n", | |
" 4 {'GoodGhosting - a DeFi savings game': 0, 'Zap... \n", | |
"\n", | |
" quadratic_total_match \\\n", | |
"simulation subset run timestep \n", | |
"0 0 1 0 0.0 \n", | |
" 1 0.0 \n", | |
" 2 0.0 \n", | |
" 3 0.0 \n", | |
" 4 0.0 \n", | |
"\n", | |
" quadratic_total_funding \\\n", | |
"simulation subset run timestep \n", | |
"0 0 1 0 0.00000 \n", | |
" 1 1.13017 \n", | |
" 2 2.26034 \n", | |
" 3 3.39051 \n", | |
" 4 4.52068 \n", | |
"\n", | |
" simple_quadratic_match \\\n", | |
"simulation subset run timestep \n", | |
"0 0 1 0 {} \n", | |
" 1 {} \n", | |
" 2 {} \n", | |
" 3 {} \n", | |
" 4 {} \n", | |
"\n", | |
" simple_quadratic_funding_per_grant \\\n", | |
"simulation subset run timestep \n", | |
"0 0 1 0 {} \n", | |
" 1 {'GoodGhosting - a DeFi savings game': 1.13017... \n", | |
" 2 {'Zapper.fi': 1.130170028617465, 'GoodGhosting... \n", | |
" 3 {'Rotki - The portfolio tracker and accounting... \n", | |
" 4 {'Rotki - The portfolio tracker and accounting... \n", | |
"\n", | |
" simple_quadratic_match_per_grant \\\n", | |
"simulation subset run timestep \n", | |
"0 0 1 0 {} \n", | |
" 1 {'GoodGhosting - a DeFi savings game': 0} \n", | |
" 2 {'GoodGhosting - a DeFi savings game': 0, 'Zap... \n", | |
" 3 {'GoodGhosting - a DeFi savings game': 0, 'Zap... \n", | |
" 4 {'GoodGhosting - a DeFi savings game': 0, 'Zap... \n", | |
"\n", | |
" simple_quadratic_total_match \\\n", | |
"simulation subset run timestep \n", | |
"0 0 1 0 0.0 \n", | |
" 1 0.0 \n", | |
" 2 0.0 \n", | |
" 3 0.0 \n", | |
" 4 0.0 \n", | |
"\n", | |
" simple_quadratic_total_funding \n", | |
"simulation subset run timestep \n", | |
"0 0 1 0 0.00000 \n", | |
" 1 1.13017 \n", | |
" 2 2.26034 \n", | |
" 3 3.39051 \n", | |
" 4 4.52068 " | |
] | |
}, | |
"execution_count": 6, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"result.head()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "environmental-miniature", | |
"metadata": {}, | |
"source": [ | |
"## Network Analysis" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"id": "split-sympathy", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# Get the last graph\n", | |
"last_state = result.iloc[-1]\n", | |
"\n", | |
"# Sum all the contributions for each contributor-grant pair\n", | |
"contributions_totals = (pd.DataFrame(last_state.contributions)\n", | |
" .groupby(['contributor', 'grant'])\n", | |
" .amount\n", | |
" .sum()\n", | |
" .pipe(pd.DataFrame)\n", | |
" )" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"id": "radio-antarctica", | |
"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></th>\n", | |
" <th>amount</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>contributor</th>\n", | |
" <th>grant</th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0028c6537a</th>\n", | |
" <th>WalletConnect</th>\n", | |
" <td>47.500000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>002b102072</th>\n", | |
" <th>DXdao's Panvala League DeFi Community Awards Grant</th>\n", | |
" <td>10.064015</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th rowspan=\"3\" valign=\"top\">0070826a30</th>\n", | |
" <th>BUIDL Honduras</th>\n", | |
" <td>9.500000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Ethereum Magicians</th>\n", | |
" <td>4.750000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>KERNEL [Panvala League]</th>\n", | |
" <td>4.750000</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" amount\n", | |
"contributor grant \n", | |
"0028c6537a WalletConnect 47.500000\n", | |
"002b102072 DXdao's Panvala League DeFi Community Awards Grant 10.064015\n", | |
"0070826a30 BUIDL Honduras 9.500000\n", | |
" Ethereum Magicians 4.750000\n", | |
" KERNEL [Panvala League] 4.750000" | |
] | |
}, | |
"execution_count": 12, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"contributions_totals.head()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "inner-insider", | |
"metadata": {}, | |
"source": [ | |
"### Cluster Map for aggregated Grants\n", | |
"\n", | |
"Start getting the top-10 Grants by total raised contributions" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 61, | |
"id": "ruled-passport", | |
"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>amount</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>grant</th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>White Hat Hacking</th>\n", | |
" <td>8863.687239</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>ArchiveNode.io - The Public Access Ethereum Archive Node</th>\n", | |
" <td>7170.284991</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Bankless</th>\n", | |
" <td>6240.820223</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>yearn.finance</th>\n", | |
" <td>5501.159784</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Snapshot</th>\n", | |
" <td>5290.469717</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Rotki - The portfolio tracker and accounting tool that protects your privacy</th>\n", | |
" <td>5198.917314</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Mol LeArt</th>\n", | |
" <td>4760.170604</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>ZuniSwap阻尼币 : Pre-Launch Community Research</th>\n", | |
" <td>3827.701624</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>GoodGhosting - a DeFi savings game</th>\n", | |
" <td>3326.793087</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Turbo-Geth</th>\n", | |
" <td>3245.753895</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" amount\n", | |
"grant \n", | |
"White Hat Hacking 8863.687239\n", | |
"ArchiveNode.io - The Public Access Ethereum Arc... 7170.284991\n", | |
"Bankless 6240.820223\n", | |
"yearn.finance 5501.159784\n", | |
"Snapshot 5290.469717\n", | |
"Rotki - The portfolio tracker and accounting to... 5198.917314\n", | |
"Mol LeArt 4760.170604\n", | |
"ZuniSwap阻尼币 : Pre-Launch Community Research 3827.701624\n", | |
"GoodGhosting - a DeFi savings game 3326.793087\n", | |
"Turbo-Geth 3245.753895" | |
] | |
}, | |
"execution_count": 61, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Filter out the top 10 grants with most contributions\n", | |
"top_grants = contributions_totals.groupby('grant').sum().sort_values('amount', ascending=False).head(10)\n", | |
"top_grants" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 62, | |
"id": "offshore-ceiling", | |
"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></th>\n", | |
" <th>amount</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>contributor</th>\n", | |
" <th>grant</th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>00717c55b1</th>\n", | |
" <th>White Hat Hacking</th>\n", | |
" <td>9.500000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>03debe6f0b</th>\n", | |
" <th>White Hat Hacking</th>\n", | |
" <td>41.800000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>057189b56b</th>\n", | |
" <th>White Hat Hacking</th>\n", | |
" <td>16.488131</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>16b51bf5b8</th>\n", | |
" <th>White Hat Hacking</th>\n", | |
" <td>47.500000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>284f124caa</th>\n", | |
" <th>White Hat Hacking</th>\n", | |
" <td>9.500000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>...</th>\n", | |
" <th>...</th>\n", | |
" <td>...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>eae816cca5</th>\n", | |
" <th>Turbo-Geth</th>\n", | |
" <td>10.450000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>ecf655a491</th>\n", | |
" <th>Turbo-Geth</th>\n", | |
" <td>0.933418</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>eed977d44a</th>\n", | |
" <th>Turbo-Geth</th>\n", | |
" <td>5.123813</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>f17dc9df81</th>\n", | |
" <th>Turbo-Geth</th>\n", | |
" <td>9.500000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>f6f7b2b87b</th>\n", | |
" <th>Turbo-Geth</th>\n", | |
" <td>0.950000</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>798 rows × 1 columns</p>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" amount\n", | |
"contributor grant \n", | |
"00717c55b1 White Hat Hacking 9.500000\n", | |
"03debe6f0b White Hat Hacking 41.800000\n", | |
"057189b56b White Hat Hacking 16.488131\n", | |
"16b51bf5b8 White Hat Hacking 47.500000\n", | |
"284f124caa White Hat Hacking 9.500000\n", | |
"... ...\n", | |
"eae816cca5 Turbo-Geth 10.450000\n", | |
"ecf655a491 Turbo-Geth 0.933418\n", | |
"eed977d44a Turbo-Geth 5.123813\n", | |
"f17dc9df81 Turbo-Geth 9.500000\n", | |
"f6f7b2b87b Turbo-Geth 0.950000\n", | |
"\n", | |
"[798 rows x 1 columns]" | |
] | |
}, | |
"execution_count": 62, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Filter contributions made to the top-10 grants\n", | |
"x = contributions_totals.loc[(slice(None), top_grants.index), :]\n", | |
"x" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "chinese-chart", | |
"metadata": {}, | |
"source": [ | |
"* Compute the outer product of all contributions made to the TOP-10 grants. Finally apply the `log1p`" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 63, | |
"id": "challenging-access", | |
"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 tr th {\n", | |
" text-align: left;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead tr:last-of-type th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr>\n", | |
" <th></th>\n", | |
" <th>contributor</th>\n", | |
" <th>00717c55b1</th>\n", | |
" <th>03debe6f0b</th>\n", | |
" <th>057189b56b</th>\n", | |
" <th>16b51bf5b8</th>\n", | |
" <th>284f124caa</th>\n", | |
" <th>28bdf7f27a</th>\n", | |
" <th>35a71220e4</th>\n", | |
" <th>39b6fc47ef</th>\n", | |
" <th>3f17b2068d</th>\n", | |
" <th>47b936a61b</th>\n", | |
" <th>...</th>\n", | |
" <th>d5df825ef1</th>\n", | |
" <th>da04f09d76</th>\n", | |
" <th>dc01723e18</th>\n", | |
" <th>de5da4682b</th>\n", | |
" <th>e262ca15fe</th>\n", | |
" <th>eae816cca5</th>\n", | |
" <th>ecf655a491</th>\n", | |
" <th>eed977d44a</th>\n", | |
" <th>f17dc9df81</th>\n", | |
" <th>f6f7b2b87b</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th></th>\n", | |
" <th>grant</th>\n", | |
" <th>White Hat Hacking</th>\n", | |
" <th>White Hat Hacking</th>\n", | |
" <th>White Hat Hacking</th>\n", | |
" <th>White Hat Hacking</th>\n", | |
" <th>White Hat Hacking</th>\n", | |
" <th>White Hat Hacking</th>\n", | |
" <th>White Hat Hacking</th>\n", | |
" <th>White Hat Hacking</th>\n", | |
" <th>White Hat Hacking</th>\n", | |
" <th>White Hat Hacking</th>\n", | |
" <th>...</th>\n", | |
" <th>Turbo-Geth</th>\n", | |
" <th>Turbo-Geth</th>\n", | |
" <th>Turbo-Geth</th>\n", | |
" <th>Turbo-Geth</th>\n", | |
" <th>Turbo-Geth</th>\n", | |
" <th>Turbo-Geth</th>\n", | |
" <th>Turbo-Geth</th>\n", | |
" <th>Turbo-Geth</th>\n", | |
" <th>Turbo-Geth</th>\n", | |
" <th>Turbo-Geth</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>contributor</th>\n", | |
" <th>grant</th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>00717c55b1</th>\n", | |
" <th>White Hat Hacking</th>\n", | |
" <td>4.513603</td>\n", | |
" <td>5.986703</td>\n", | |
" <td>5.060296</td>\n", | |
" <td>6.114235</td>\n", | |
" <td>4.513603</td>\n", | |
" <td>2.305082</td>\n", | |
" <td>3.831355</td>\n", | |
" <td>4.513603</td>\n", | |
" <td>3.361590</td>\n", | |
" <td>3.558029</td>\n", | |
" <td>...</td>\n", | |
" <td>3.831355</td>\n", | |
" <td>6.806276</td>\n", | |
" <td>3.831355</td>\n", | |
" <td>8.414828</td>\n", | |
" <td>4.513603</td>\n", | |
" <td>4.607916</td>\n", | |
" <td>2.289243</td>\n", | |
" <td>3.905526</td>\n", | |
" <td>4.513603</td>\n", | |
" <td>2.305082</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>03debe6f0b</th>\n", | |
" <th>White Hat Hacking</th>\n", | |
" <td>5.986703</td>\n", | |
" <td>7.466365</td>\n", | |
" <td>6.536987</td>\n", | |
" <td>7.594130</td>\n", | |
" <td>5.986703</td>\n", | |
" <td>3.706474</td>\n", | |
" <td>5.296065</td>\n", | |
" <td>5.986703</td>\n", | |
" <td>4.816031</td>\n", | |
" <td>5.017368</td>\n", | |
" <td>...</td>\n", | |
" <td>5.296065</td>\n", | |
" <td>8.287025</td>\n", | |
" <td>5.296065</td>\n", | |
" <td>9.896262</td>\n", | |
" <td>5.986703</td>\n", | |
" <td>6.081785</td>\n", | |
" <td>3.689301</td>\n", | |
" <td>5.371453</td>\n", | |
" <td>5.986703</td>\n", | |
" <td>3.706474</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>057189b56b</th>\n", | |
" <th>White Hat Hacking</th>\n", | |
" <td>5.060296</td>\n", | |
" <td>6.536987</td>\n", | |
" <td>5.608953</td>\n", | |
" <td>6.664647</td>\n", | |
" <td>5.060296</td>\n", | |
" <td>2.813234</td>\n", | |
" <td>4.373473</td>\n", | |
" <td>5.060296</td>\n", | |
" <td>3.898131</td>\n", | |
" <td>4.097227</td>\n", | |
" <td>...</td>\n", | |
" <td>4.373473</td>\n", | |
" <td>7.357156</td>\n", | |
" <td>4.373473</td>\n", | |
" <td>8.966083</td>\n", | |
" <td>5.060296</td>\n", | |
" <td>5.155030</td>\n", | |
" <td>2.796690</td>\n", | |
" <td>4.448307</td>\n", | |
" <td>5.060296</td>\n", | |
" <td>2.813234</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>16b51bf5b8</th>\n", | |
" <th>White Hat Hacking</th>\n", | |
" <td>6.114235</td>\n", | |
" <td>7.594130</td>\n", | |
" <td>6.664647</td>\n", | |
" <td>7.721903</td>\n", | |
" <td>6.114235</td>\n", | |
" <td>3.831355</td>\n", | |
" <td>5.423297</td>\n", | |
" <td>6.114235</td>\n", | |
" <td>4.942892</td>\n", | |
" <td>5.144407</td>\n", | |
" <td>...</td>\n", | |
" <td>5.423297</td>\n", | |
" <td>8.414828</td>\n", | |
" <td>5.423297</td>\n", | |
" <td>10.024089</td>\n", | |
" <td>6.114235</td>\n", | |
" <td>6.209344</td>\n", | |
" <td>3.814131</td>\n", | |
" <td>5.498729</td>\n", | |
" <td>6.114235</td>\n", | |
" <td>3.831355</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>284f124caa</th>\n", | |
" <th>White Hat Hacking</th>\n", | |
" <td>4.513603</td>\n", | |
" <td>5.986703</td>\n", | |
" <td>5.060296</td>\n", | |
" <td>6.114235</td>\n", | |
" <td>4.513603</td>\n", | |
" <td>2.305082</td>\n", | |
" <td>3.831355</td>\n", | |
" <td>4.513603</td>\n", | |
" <td>3.361590</td>\n", | |
" <td>3.558029</td>\n", | |
" <td>...</td>\n", | |
" <td>3.831355</td>\n", | |
" <td>6.806276</td>\n", | |
" <td>3.831355</td>\n", | |
" <td>8.414828</td>\n", | |
" <td>4.513603</td>\n", | |
" <td>4.607916</td>\n", | |
" <td>2.289243</td>\n", | |
" <td>3.905526</td>\n", | |
" <td>4.513603</td>\n", | |
" <td>2.305082</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>...</th>\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", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>eae816cca5</th>\n", | |
" <th>Turbo-Geth</th>\n", | |
" <td>4.607916</td>\n", | |
" <td>6.081785</td>\n", | |
" <td>5.155030</td>\n", | |
" <td>6.209344</td>\n", | |
" <td>4.607916</td>\n", | |
" <td>2.391283</td>\n", | |
" <td>3.924692</td>\n", | |
" <td>4.607916</td>\n", | |
" <td>3.453742</td>\n", | |
" <td>3.650745</td>\n", | |
" <td>...</td>\n", | |
" <td>3.924692</td>\n", | |
" <td>6.901486</td>\n", | |
" <td>3.924692</td>\n", | |
" <td>8.510118</td>\n", | |
" <td>4.607916</td>\n", | |
" <td>4.702320</td>\n", | |
" <td>2.375298</td>\n", | |
" <td>3.999005</td>\n", | |
" <td>4.607916</td>\n", | |
" <td>2.391283</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>ecf655a491</th>\n", | |
" <th>Turbo-Geth</th>\n", | |
" <td>2.289243</td>\n", | |
" <td>3.689301</td>\n", | |
" <td>2.796690</td>\n", | |
" <td>3.814131</td>\n", | |
" <td>2.289243</td>\n", | |
" <td>0.634854</td>\n", | |
" <td>1.692627</td>\n", | |
" <td>2.289243</td>\n", | |
" <td>1.317725</td>\n", | |
" <td>1.470149</td>\n", | |
" <td>...</td>\n", | |
" <td>1.692627</td>\n", | |
" <td>4.496188</td>\n", | |
" <td>1.692627</td>\n", | |
" <td>6.096665</td>\n", | |
" <td>2.289243</td>\n", | |
" <td>2.375298</td>\n", | |
" <td>0.626617</td>\n", | |
" <td>1.754863</td>\n", | |
" <td>2.289243</td>\n", | |
" <td>0.634854</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>eed977d44a</th>\n", | |
" <th>Turbo-Geth</th>\n", | |
" <td>3.905526</td>\n", | |
" <td>5.371453</td>\n", | |
" <td>4.448307</td>\n", | |
" <td>5.498729</td>\n", | |
" <td>3.905526</td>\n", | |
" <td>1.769450</td>\n", | |
" <td>3.232310</td>\n", | |
" <td>3.905526</td>\n", | |
" <td>2.773387</td>\n", | |
" <td>2.964682</td>\n", | |
" <td>...</td>\n", | |
" <td>3.232310</td>\n", | |
" <td>6.189828</td>\n", | |
" <td>3.232310</td>\n", | |
" <td>7.797625</td>\n", | |
" <td>3.905526</td>\n", | |
" <td>3.999005</td>\n", | |
" <td>1.754863</td>\n", | |
" <td>3.305181</td>\n", | |
" <td>3.905526</td>\n", | |
" <td>1.769450</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>f17dc9df81</th>\n", | |
" <th>Turbo-Geth</th>\n", | |
" <td>4.513603</td>\n", | |
" <td>5.986703</td>\n", | |
" <td>5.060296</td>\n", | |
" <td>6.114235</td>\n", | |
" <td>4.513603</td>\n", | |
" <td>2.305082</td>\n", | |
" <td>3.831355</td>\n", | |
" <td>4.513603</td>\n", | |
" <td>3.361590</td>\n", | |
" <td>3.558029</td>\n", | |
" <td>...</td>\n", | |
" <td>3.831355</td>\n", | |
" <td>6.806276</td>\n", | |
" <td>3.831355</td>\n", | |
" <td>8.414828</td>\n", | |
" <td>4.513603</td>\n", | |
" <td>4.607916</td>\n", | |
" <td>2.289243</td>\n", | |
" <td>3.905526</td>\n", | |
" <td>4.513603</td>\n", | |
" <td>2.305082</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>f6f7b2b87b</th>\n", | |
" <th>Turbo-Geth</th>\n", | |
" <td>2.305082</td>\n", | |
" <td>3.706474</td>\n", | |
" <td>2.813234</td>\n", | |
" <td>3.831355</td>\n", | |
" <td>2.305082</td>\n", | |
" <td>0.643169</td>\n", | |
" <td>1.707018</td>\n", | |
" <td>2.305082</td>\n", | |
" <td>1.330650</td>\n", | |
" <td>1.483737</td>\n", | |
" <td>...</td>\n", | |
" <td>1.707018</td>\n", | |
" <td>4.513603</td>\n", | |
" <td>1.707018</td>\n", | |
" <td>6.114235</td>\n", | |
" <td>2.305082</td>\n", | |
" <td>2.391283</td>\n", | |
" <td>0.634854</td>\n", | |
" <td>1.769450</td>\n", | |
" <td>2.305082</td>\n", | |
" <td>0.643169</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>798 rows × 798 columns</p>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
"contributor 00717c55b1 03debe6f0b \\\n", | |
"grant White Hat Hacking White Hat Hacking \n", | |
"contributor grant \n", | |
"00717c55b1 White Hat Hacking 4.513603 5.986703 \n", | |
"03debe6f0b White Hat Hacking 5.986703 7.466365 \n", | |
"057189b56b White Hat Hacking 5.060296 6.536987 \n", | |
"16b51bf5b8 White Hat Hacking 6.114235 7.594130 \n", | |
"284f124caa White Hat Hacking 4.513603 5.986703 \n", | |
"... ... ... \n", | |
"eae816cca5 Turbo-Geth 4.607916 6.081785 \n", | |
"ecf655a491 Turbo-Geth 2.289243 3.689301 \n", | |
"eed977d44a Turbo-Geth 3.905526 5.371453 \n", | |
"f17dc9df81 Turbo-Geth 4.513603 5.986703 \n", | |
"f6f7b2b87b Turbo-Geth 2.305082 3.706474 \n", | |
"\n", | |
"contributor 057189b56b 16b51bf5b8 \\\n", | |
"grant White Hat Hacking White Hat Hacking \n", | |
"contributor grant \n", | |
"00717c55b1 White Hat Hacking 5.060296 6.114235 \n", | |
"03debe6f0b White Hat Hacking 6.536987 7.594130 \n", | |
"057189b56b White Hat Hacking 5.608953 6.664647 \n", | |
"16b51bf5b8 White Hat Hacking 6.664647 7.721903 \n", | |
"284f124caa White Hat Hacking 5.060296 6.114235 \n", | |
"... ... ... \n", | |
"eae816cca5 Turbo-Geth 5.155030 6.209344 \n", | |
"ecf655a491 Turbo-Geth 2.796690 3.814131 \n", | |
"eed977d44a Turbo-Geth 4.448307 5.498729 \n", | |
"f17dc9df81 Turbo-Geth 5.060296 6.114235 \n", | |
"f6f7b2b87b Turbo-Geth 2.813234 3.831355 \n", | |
"\n", | |
"contributor 284f124caa 28bdf7f27a \\\n", | |
"grant White Hat Hacking White Hat Hacking \n", | |
"contributor grant \n", | |
"00717c55b1 White Hat Hacking 4.513603 2.305082 \n", | |
"03debe6f0b White Hat Hacking 5.986703 3.706474 \n", | |
"057189b56b White Hat Hacking 5.060296 2.813234 \n", | |
"16b51bf5b8 White Hat Hacking 6.114235 3.831355 \n", | |
"284f124caa White Hat Hacking 4.513603 2.305082 \n", | |
"... ... ... \n", | |
"eae816cca5 Turbo-Geth 4.607916 2.391283 \n", | |
"ecf655a491 Turbo-Geth 2.289243 0.634854 \n", | |
"eed977d44a Turbo-Geth 3.905526 1.769450 \n", | |
"f17dc9df81 Turbo-Geth 4.513603 2.305082 \n", | |
"f6f7b2b87b Turbo-Geth 2.305082 0.643169 \n", | |
"\n", | |
"contributor 35a71220e4 39b6fc47ef \\\n", | |
"grant White Hat Hacking White Hat Hacking \n", | |
"contributor grant \n", | |
"00717c55b1 White Hat Hacking 3.831355 4.513603 \n", | |
"03debe6f0b White Hat Hacking 5.296065 5.986703 \n", | |
"057189b56b White Hat Hacking 4.373473 5.060296 \n", | |
"16b51bf5b8 White Hat Hacking 5.423297 6.114235 \n", | |
"284f124caa White Hat Hacking 3.831355 4.513603 \n", | |
"... ... ... \n", | |
"eae816cca5 Turbo-Geth 3.924692 4.607916 \n", | |
"ecf655a491 Turbo-Geth 1.692627 2.289243 \n", | |
"eed977d44a Turbo-Geth 3.232310 3.905526 \n", | |
"f17dc9df81 Turbo-Geth 3.831355 4.513603 \n", | |
"f6f7b2b87b Turbo-Geth 1.707018 2.305082 \n", | |
"\n", | |
"contributor 3f17b2068d 47b936a61b ... \\\n", | |
"grant White Hat Hacking White Hat Hacking ... \n", | |
"contributor grant ... \n", | |
"00717c55b1 White Hat Hacking 3.361590 3.558029 ... \n", | |
"03debe6f0b White Hat Hacking 4.816031 5.017368 ... \n", | |
"057189b56b White Hat Hacking 3.898131 4.097227 ... \n", | |
"16b51bf5b8 White Hat Hacking 4.942892 5.144407 ... \n", | |
"284f124caa White Hat Hacking 3.361590 3.558029 ... \n", | |
"... ... ... ... \n", | |
"eae816cca5 Turbo-Geth 3.453742 3.650745 ... \n", | |
"ecf655a491 Turbo-Geth 1.317725 1.470149 ... \n", | |
"eed977d44a Turbo-Geth 2.773387 2.964682 ... \n", | |
"f17dc9df81 Turbo-Geth 3.361590 3.558029 ... \n", | |
"f6f7b2b87b Turbo-Geth 1.330650 1.483737 ... \n", | |
"\n", | |
"contributor d5df825ef1 da04f09d76 dc01723e18 de5da4682b \\\n", | |
"grant Turbo-Geth Turbo-Geth Turbo-Geth Turbo-Geth \n", | |
"contributor grant \n", | |
"00717c55b1 White Hat Hacking 3.831355 6.806276 3.831355 8.414828 \n", | |
"03debe6f0b White Hat Hacking 5.296065 8.287025 5.296065 9.896262 \n", | |
"057189b56b White Hat Hacking 4.373473 7.357156 4.373473 8.966083 \n", | |
"16b51bf5b8 White Hat Hacking 5.423297 8.414828 5.423297 10.024089 \n", | |
"284f124caa White Hat Hacking 3.831355 6.806276 3.831355 8.414828 \n", | |
"... ... ... ... ... \n", | |
"eae816cca5 Turbo-Geth 3.924692 6.901486 3.924692 8.510118 \n", | |
"ecf655a491 Turbo-Geth 1.692627 4.496188 1.692627 6.096665 \n", | |
"eed977d44a Turbo-Geth 3.232310 6.189828 3.232310 7.797625 \n", | |
"f17dc9df81 Turbo-Geth 3.831355 6.806276 3.831355 8.414828 \n", | |
"f6f7b2b87b Turbo-Geth 1.707018 4.513603 1.707018 6.114235 \n", | |
"\n", | |
"contributor e262ca15fe eae816cca5 ecf655a491 eed977d44a \\\n", | |
"grant Turbo-Geth Turbo-Geth Turbo-Geth Turbo-Geth \n", | |
"contributor grant \n", | |
"00717c55b1 White Hat Hacking 4.513603 4.607916 2.289243 3.905526 \n", | |
"03debe6f0b White Hat Hacking 5.986703 6.081785 3.689301 5.371453 \n", | |
"057189b56b White Hat Hacking 5.060296 5.155030 2.796690 4.448307 \n", | |
"16b51bf5b8 White Hat Hacking 6.114235 6.209344 3.814131 5.498729 \n", | |
"284f124caa White Hat Hacking 4.513603 4.607916 2.289243 3.905526 \n", | |
"... ... ... ... ... \n", | |
"eae816cca5 Turbo-Geth 4.607916 4.702320 2.375298 3.999005 \n", | |
"ecf655a491 Turbo-Geth 2.289243 2.375298 0.626617 1.754863 \n", | |
"eed977d44a Turbo-Geth 3.905526 3.999005 1.754863 3.305181 \n", | |
"f17dc9df81 Turbo-Geth 4.513603 4.607916 2.289243 3.905526 \n", | |
"f6f7b2b87b Turbo-Geth 2.305082 2.391283 0.634854 1.769450 \n", | |
"\n", | |
"contributor f17dc9df81 f6f7b2b87b \n", | |
"grant Turbo-Geth Turbo-Geth \n", | |
"contributor grant \n", | |
"00717c55b1 White Hat Hacking 4.513603 2.305082 \n", | |
"03debe6f0b White Hat Hacking 5.986703 3.706474 \n", | |
"057189b56b White Hat Hacking 5.060296 2.813234 \n", | |
"16b51bf5b8 White Hat Hacking 6.114235 3.831355 \n", | |
"284f124caa White Hat Hacking 4.513603 2.305082 \n", | |
"... ... ... \n", | |
"eae816cca5 Turbo-Geth 4.607916 2.391283 \n", | |
"ecf655a491 Turbo-Geth 2.289243 0.634854 \n", | |
"eed977d44a Turbo-Geth 3.905526 1.769450 \n", | |
"f17dc9df81 Turbo-Geth 4.513603 2.305082 \n", | |
"f6f7b2b87b Turbo-Geth 2.305082 0.643169 \n", | |
"\n", | |
"[798 rows x 798 columns]" | |
] | |
}, | |
"execution_count": 63, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Get the outer product on the contributions totals vector\n", | |
"# Thanks @cs95 - https://stackoverflow.com/questions/47912611/compute-matrix-of-outer-operations-on-pandas-series\n", | |
"y = np.array(x.amount.tolist())\n", | |
"outer_df = np.log(pd.DataFrame(np.outer(y, y.T), index=x.index, columns=x.index) + 1)\n", | |
"outer_df" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "textile-fetish", | |
"metadata": {}, | |
"source": [ | |
"* Finally get a grant-by-grant relation by summing all of their contributions in the outer product. Finally, proceed to normalize the resulting matrix" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 64, | |
"id": "handled-elephant", | |
"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>grant</th>\n", | |
" <th>ArchiveNode.io - The Public Access Ethereum Archive Node</th>\n", | |
" <th>Bankless</th>\n", | |
" <th>GoodGhosting - a DeFi savings game</th>\n", | |
" <th>Mol LeArt</th>\n", | |
" <th>Rotki - The portfolio tracker and accounting tool that protects your privacy</th>\n", | |
" <th>Snapshot</th>\n", | |
" <th>Turbo-Geth</th>\n", | |
" <th>White Hat Hacking</th>\n", | |
" <th>ZuniSwap阻尼币 : Pre-Launch Community Research</th>\n", | |
" <th>yearn.finance</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>grant</th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>ArchiveNode.io - The Public Access Ethereum Archive Node</th>\n", | |
" <td>0.251623</td>\n", | |
" <td>0.502939</td>\n", | |
" <td>0.158190</td>\n", | |
" <td>0.016757</td>\n", | |
" <td>0.481859</td>\n", | |
" <td>0.351072</td>\n", | |
" <td>0.277195</td>\n", | |
" <td>0.172143</td>\n", | |
" <td>0.037774</td>\n", | |
" <td>0.347011</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Bankless</th>\n", | |
" <td>0.502939</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>0.315837</td>\n", | |
" <td>0.034147</td>\n", | |
" <td>0.965970</td>\n", | |
" <td>0.701496</td>\n", | |
" <td>0.558965</td>\n", | |
" <td>0.349344</td>\n", | |
" <td>0.076360</td>\n", | |
" <td>0.691254</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>GoodGhosting - a DeFi savings game</th>\n", | |
" <td>0.158190</td>\n", | |
" <td>0.315837</td>\n", | |
" <td>0.099429</td>\n", | |
" <td>0.010584</td>\n", | |
" <td>0.303119</td>\n", | |
" <td>0.220709</td>\n", | |
" <td>0.174598</td>\n", | |
" <td>0.108600</td>\n", | |
" <td>0.023810</td>\n", | |
" <td>0.217997</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Mol LeArt</th>\n", | |
" <td>0.016757</td>\n", | |
" <td>0.034147</td>\n", | |
" <td>0.010584</td>\n", | |
" <td>0.001057</td>\n", | |
" <td>0.031710</td>\n", | |
" <td>0.023442</td>\n", | |
" <td>0.017851</td>\n", | |
" <td>0.010891</td>\n", | |
" <td>0.002431</td>\n", | |
" <td>0.023385</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Rotki - The portfolio tracker and accounting tool that protects your privacy</th>\n", | |
" <td>0.481859</td>\n", | |
" <td>0.965970</td>\n", | |
" <td>0.303119</td>\n", | |
" <td>0.031710</td>\n", | |
" <td>0.921233</td>\n", | |
" <td>0.672334</td>\n", | |
" <td>0.528133</td>\n", | |
" <td>0.326642</td>\n", | |
" <td>0.071867</td>\n", | |
" <td>0.665826</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Snapshot</th>\n", | |
" <td>0.351072</td>\n", | |
" <td>0.701496</td>\n", | |
" <td>0.220709</td>\n", | |
" <td>0.023442</td>\n", | |
" <td>0.672334</td>\n", | |
" <td>0.489897</td>\n", | |
" <td>0.386906</td>\n", | |
" <td>0.240513</td>\n", | |
" <td>0.052768</td>\n", | |
" <td>0.484054</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Turbo-Geth</th>\n", | |
" <td>0.277195</td>\n", | |
" <td>0.558965</td>\n", | |
" <td>0.174598</td>\n", | |
" <td>0.017851</td>\n", | |
" <td>0.528133</td>\n", | |
" <td>0.386906</td>\n", | |
" <td>0.300715</td>\n", | |
" <td>0.184633</td>\n", | |
" <td>0.040834</td>\n", | |
" <td>0.384486</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>White Hat Hacking</th>\n", | |
" <td>0.172143</td>\n", | |
" <td>0.349344</td>\n", | |
" <td>0.108600</td>\n", | |
" <td>0.010891</td>\n", | |
" <td>0.326642</td>\n", | |
" <td>0.240513</td>\n", | |
" <td>0.184633</td>\n", | |
" <td>0.112717</td>\n", | |
" <td>0.025072</td>\n", | |
" <td>0.239719</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>ZuniSwap阻尼币 : Pre-Launch Community Research</th>\n", | |
" <td>0.037774</td>\n", | |
" <td>0.076360</td>\n", | |
" <td>0.023810</td>\n", | |
" <td>0.002431</td>\n", | |
" <td>0.071867</td>\n", | |
" <td>0.052768</td>\n", | |
" <td>0.040834</td>\n", | |
" <td>0.025072</td>\n", | |
" <td>0.005553</td>\n", | |
" <td>0.052455</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>yearn.finance</th>\n", | |
" <td>0.347011</td>\n", | |
" <td>0.691254</td>\n", | |
" <td>0.217997</td>\n", | |
" <td>0.023385</td>\n", | |
" <td>0.665826</td>\n", | |
" <td>0.484054</td>\n", | |
" <td>0.384486</td>\n", | |
" <td>0.239719</td>\n", | |
" <td>0.052455</td>\n", | |
" <td>0.477520</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
"grant ArchiveNode.io - The Public Access Ethereum Archive Node \\\n", | |
"grant \n", | |
"ArchiveNode.io - The Public Access Ethereum Arc... 0.251623 \n", | |
"Bankless 0.502939 \n", | |
"GoodGhosting - a DeFi savings game 0.158190 \n", | |
"Mol LeArt 0.016757 \n", | |
"Rotki - The portfolio tracker and accounting to... 0.481859 \n", | |
"Snapshot 0.351072 \n", | |
"Turbo-Geth 0.277195 \n", | |
"White Hat Hacking 0.172143 \n", | |
"ZuniSwap阻尼币 : Pre-Launch Community Research 0.037774 \n", | |
"yearn.finance 0.347011 \n", | |
"\n", | |
"grant Bankless \\\n", | |
"grant \n", | |
"ArchiveNode.io - The Public Access Ethereum Arc... 0.502939 \n", | |
"Bankless 1.000000 \n", | |
"GoodGhosting - a DeFi savings game 0.315837 \n", | |
"Mol LeArt 0.034147 \n", | |
"Rotki - The portfolio tracker and accounting to... 0.965970 \n", | |
"Snapshot 0.701496 \n", | |
"Turbo-Geth 0.558965 \n", | |
"White Hat Hacking 0.349344 \n", | |
"ZuniSwap阻尼币 : Pre-Launch Community Research 0.076360 \n", | |
"yearn.finance 0.691254 \n", | |
"\n", | |
"grant GoodGhosting - a DeFi savings game \\\n", | |
"grant \n", | |
"ArchiveNode.io - The Public Access Ethereum Arc... 0.158190 \n", | |
"Bankless 0.315837 \n", | |
"GoodGhosting - a DeFi savings game 0.099429 \n", | |
"Mol LeArt 0.010584 \n", | |
"Rotki - The portfolio tracker and accounting to... 0.303119 \n", | |
"Snapshot 0.220709 \n", | |
"Turbo-Geth 0.174598 \n", | |
"White Hat Hacking 0.108600 \n", | |
"ZuniSwap阻尼币 : Pre-Launch Community Research 0.023810 \n", | |
"yearn.finance 0.217997 \n", | |
"\n", | |
"grant Mol LeArt \\\n", | |
"grant \n", | |
"ArchiveNode.io - The Public Access Ethereum Arc... 0.016757 \n", | |
"Bankless 0.034147 \n", | |
"GoodGhosting - a DeFi savings game 0.010584 \n", | |
"Mol LeArt 0.001057 \n", | |
"Rotki - The portfolio tracker and accounting to... 0.031710 \n", | |
"Snapshot 0.023442 \n", | |
"Turbo-Geth 0.017851 \n", | |
"White Hat Hacking 0.010891 \n", | |
"ZuniSwap阻尼币 : Pre-Launch Community Research 0.002431 \n", | |
"yearn.finance 0.023385 \n", | |
"\n", | |
"grant Rotki - The portfolio tracker and accounting tool that protects your privacy \\\n", | |
"grant \n", | |
"ArchiveNode.io - The Public Access Ethereum Arc... 0.481859 \n", | |
"Bankless 0.965970 \n", | |
"GoodGhosting - a DeFi savings game 0.303119 \n", | |
"Mol LeArt 0.031710 \n", | |
"Rotki - The portfolio tracker and accounting to... 0.921233 \n", | |
"Snapshot 0.672334 \n", | |
"Turbo-Geth 0.528133 \n", | |
"White Hat Hacking 0.326642 \n", | |
"ZuniSwap阻尼币 : Pre-Launch Community Research 0.071867 \n", | |
"yearn.finance 0.665826 \n", | |
"\n", | |
"grant Snapshot Turbo-Geth \\\n", | |
"grant \n", | |
"ArchiveNode.io - The Public Access Ethereum Arc... 0.351072 0.277195 \n", | |
"Bankless 0.701496 0.558965 \n", | |
"GoodGhosting - a DeFi savings game 0.220709 0.174598 \n", | |
"Mol LeArt 0.023442 0.017851 \n", | |
"Rotki - The portfolio tracker and accounting to... 0.672334 0.528133 \n", | |
"Snapshot 0.489897 0.386906 \n", | |
"Turbo-Geth 0.386906 0.300715 \n", | |
"White Hat Hacking 0.240513 0.184633 \n", | |
"ZuniSwap阻尼币 : Pre-Launch Community Research 0.052768 0.040834 \n", | |
"yearn.finance 0.484054 0.384486 \n", | |
"\n", | |
"grant White Hat Hacking \\\n", | |
"grant \n", | |
"ArchiveNode.io - The Public Access Ethereum Arc... 0.172143 \n", | |
"Bankless 0.349344 \n", | |
"GoodGhosting - a DeFi savings game 0.108600 \n", | |
"Mol LeArt 0.010891 \n", | |
"Rotki - The portfolio tracker and accounting to... 0.326642 \n", | |
"Snapshot 0.240513 \n", | |
"Turbo-Geth 0.184633 \n", | |
"White Hat Hacking 0.112717 \n", | |
"ZuniSwap阻尼币 : Pre-Launch Community Research 0.025072 \n", | |
"yearn.finance 0.239719 \n", | |
"\n", | |
"grant ZuniSwap阻尼币 : Pre-Launch Community Research \\\n", | |
"grant \n", | |
"ArchiveNode.io - The Public Access Ethereum Arc... 0.037774 \n", | |
"Bankless 0.076360 \n", | |
"GoodGhosting - a DeFi savings game 0.023810 \n", | |
"Mol LeArt 0.002431 \n", | |
"Rotki - The portfolio tracker and accounting to... 0.071867 \n", | |
"Snapshot 0.052768 \n", | |
"Turbo-Geth 0.040834 \n", | |
"White Hat Hacking 0.025072 \n", | |
"ZuniSwap阻尼币 : Pre-Launch Community Research 0.005553 \n", | |
"yearn.finance 0.052455 \n", | |
"\n", | |
"grant yearn.finance \n", | |
"grant \n", | |
"ArchiveNode.io - The Public Access Ethereum Arc... 0.347011 \n", | |
"Bankless 0.691254 \n", | |
"GoodGhosting - a DeFi savings game 0.217997 \n", | |
"Mol LeArt 0.023385 \n", | |
"Rotki - The portfolio tracker and accounting to... 0.665826 \n", | |
"Snapshot 0.484054 \n", | |
"Turbo-Geth 0.384486 \n", | |
"White Hat Hacking 0.239719 \n", | |
"ZuniSwap阻尼币 : Pre-Launch Community Research 0.052455 \n", | |
"yearn.finance 0.477520 " | |
] | |
}, | |
"execution_count": 64, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"outer_df = (outer_df.reset_index()\n", | |
" .groupby('grant')\n", | |
" .sum()\n", | |
" .T\n", | |
" .groupby('grant')\n", | |
" .sum()\n", | |
" .pipe(lambda df: df / df.max().max())\n", | |
" )\n", | |
"outer_df" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "eight-citizenship", | |
"metadata": {}, | |
"source": [ | |
"#### Plottinh a Clustermap\n", | |
"\n", | |
"Clustermaps uses a hierarchical clusters to order data by similarity. This reorganizes the data for the rows and columns and displays similar content next to one another for even more depth of understanding the data." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 65, | |
"id": "handed-nirvana", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Index(['ArchiveNode.io - The Public Access Ethereum Archive Node', 'Bankless',\n", | |
" 'GoodGhosting - a DeFi savings game', 'Mol LeArt',\n", | |
" 'Rotki - The portfolio tracker and accounting tool that protects your privacy',\n", | |
" 'Snapshot', 'Turbo-Geth', 'White Hat Hacking',\n", | |
" 'ZuniSwap阻尼币 : Pre-Launch Community Research', 'yearn.finance'],\n", | |
" dtype='object', name='grant')" | |
] | |
}, | |
"execution_count": 65, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Top-10 grants\n", | |
"grants_index = outer_df.index\n", | |
"grants_index" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 66, | |
"id": "attached-welcome", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"{'ArchiveNode.io - The Public Access Ethereum Archive Node': (0.984313725490196,\n", | |
" 0.7058823529411765,\n", | |
" 0.6823529411764706),\n", | |
" 'Bankless': (0.7019607843137254, 0.803921568627451, 0.8901960784313725),\n", | |
" 'GoodGhosting - a DeFi savings game': (0.8,\n", | |
" 0.9215686274509803,\n", | |
" 0.7725490196078432),\n", | |
" 'Mol LeArt': (0.8705882352941177, 0.796078431372549, 0.8941176470588236),\n", | |
" 'Rotki - The portfolio tracker and accounting tool that protects your privacy': (0.996078431372549,\n", | |
" 0.8509803921568627,\n", | |
" 0.6509803921568628),\n", | |
" 'Snapshot': (1.0, 1.0, 0.8),\n", | |
" 'Turbo-Geth': (0.8980392156862745, 0.8470588235294118, 0.7411764705882353),\n", | |
" 'White Hat Hacking': (0.9921568627450981,\n", | |
" 0.8549019607843137,\n", | |
" 0.9254901960784314),\n", | |
" 'ZuniSwap阻尼币 : Pre-Launch Community Research': (0.9490196078431372,\n", | |
" 0.9490196078431372,\n", | |
" 0.9490196078431372),\n", | |
" 'yearn.finance': (0.984313725490196, 0.7058823529411765, 0.6823529411764706)}" | |
] | |
}, | |
"execution_count": 66, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Plot a clustermap - assigning rgb labels to each grant\n", | |
"rgb_values = sns.color_palette(\"Pastel1\", len(grants_index.unique()))\n", | |
"lut = dict(zip(grants_index.unique(), rgb_values))\n", | |
"lut" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 67, | |
"id": "faced-blackjack", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"MultiIndex([( 0.984313725490196, 0.7058823529411765, 0.6823529411764706),\n", | |
" (0.7019607843137254, 0.803921568627451, 0.8901960784313725),\n", | |
" ( 0.8, 0.9215686274509803, 0.7725490196078432),\n", | |
" (0.8705882352941177, 0.796078431372549, 0.8941176470588236),\n", | |
" ( 0.996078431372549, 0.8509803921568627, 0.6509803921568628),\n", | |
" ( 1.0, 1.0, 0.8),\n", | |
" (0.8980392156862745, 0.8470588235294118, 0.7411764705882353),\n", | |
" (0.9921568627450981, 0.8549019607843137, 0.9254901960784314),\n", | |
" (0.9490196078431372, 0.9490196078431372, 0.9490196078431372),\n", | |
" ( 0.984313725490196, 0.7058823529411765, 0.6823529411764706)],\n", | |
" names=['grant', 'grant', 'grant'])" | |
] | |
}, | |
"execution_count": 67, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"row_colors = grants_index.map(lut)\n", | |
"row_colors" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 68, | |
"id": "enhanced-soccer", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 720x720 with 6 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"with plt.style.context('Solarize_Light2'):\n", | |
" g = sns.clustermap(outer_df,\n", | |
" cmap='viridis',\n", | |
" row_colors=row_colors,\n", | |
" col_colors=row_colors,\n", | |
" xticklabels=False,\n", | |
" yticklabels=False)\n", | |
"\n", | |
" plt.setp(g.ax_heatmap.get_xticklabels(), rotation=45) # For x axis\n", | |
"\n", | |
" handles = [Patch(facecolor=lut[name]) for name in lut]\n", | |
"\n", | |
" plt.legend(handles, lut, title='Species',\n", | |
" bbox_to_anchor=(1, 0), bbox_transform=plt.gcf().transFigure)\n", | |
" plt.title(label='Cluster Map for aggregated Grants', loc='left', fontdict={'fontsize': 30}, pad=60.)\n", | |
" plt.show()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "stainless-circus", | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.8.5" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment