{
"metadata": {
"name": "hclust"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"Comparison of Python packages for hierarchical clustering"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Example data has been downloaded from the open access Human Gene Expression Atlas and represents typical data bioinformaticians work with. \n",
"\n",
"It is \"Transcription profiling by array of brain in humans, chimpanzees and macaques, and brain, heart, kidney and liver in orangutans\" experiment in a tab-separated format. \n",
"\n",
"( http://www.ebi.ac.uk/gxa/experiment/E-TABM-84 )\n"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"data = np.genfromtxt(\"data/ExpRawData-E-TABM-84-A-AFFY-44.tab\",names=True,usecols=tuple(range(1,30)),dtype=float, delimiter=\"\\t\")"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print len(data)\n",
"print len(data.dtype.names)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"54674\n",
"29\n"
]
}
],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"data_array = data.view((np.float, len(data.dtype.names)))\n",
"data_array = data_array.transpose()"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 6
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's have a look at how our data actually looks like"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print data_array"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[[ 6.3739767 5.986182 7.468118 ..., 11.745089 13.277803\n",
" 13.067169 ]\n",
" [ 6.4981704 4.861167 6.9479957 ..., 11.33983 13.031992\n",
" 12.7244425]\n",
" [ 6.271771 5.5666986 6.9435835 ..., 11.840397 13.332481\n",
" 13.051369 ]\n",
" ..., \n",
" [ 6.112102 5.0324726 6.93343 ..., 11.411251 13.084589\n",
" 12.768577 ]\n",
" [ 6.359853 6.12955 8.460821 ..., 10.814936 12.888793\n",
" 12.673793 ]\n",
" [ 6.010906 5.4538217 6.8208113 ..., 11.467866 13.08952 12.792053 ]]\n"
]
}
],
"prompt_number": 7
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"1. Samples clustering using scipy"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First, we'll implement the clustering using scipy modules"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from scipy.spatial.distance import pdist, squareform\n",
"from scipy.cluster.hierarchy import linkage, dendrogram"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 8
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"data_dist = pdist(data_array) # computing the distance\n",
"data_link = linkage(data_dist) # computing the linkage"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"dendrogram(data_link,labels=data.dtype.names)\n",
"plt.xlabel('Samples')\n",
"plt.ylabel('Distance')\n",
"plt.suptitle('Samples clustering', fontweight='bold', fontsize=14);"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEpCAYAAACeISWkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XlcTfn/B/DXvUqyhKg0FSUpJVKyjpElfbNkGTLWbGMY\nZsuMsX1nakZkxmBsY6kxJULWrEVkJ6MsKQpFUtEk2rf7/v3R955fV9vNtOC8n4+Hh+657/u573Pu\nvZ/3OZ+zSYiIwBhjTLSkdZ0AY4yxusWFgDHGRI4LAWOMiRwXAsYYEzkuBIwxJnJcCBhjTOS4ELB3\nkp2dHaRSKfr161fXqQAApFIppFIp3N3d6zqVKjE0NIRUKsXUqVPrOhVWh7gQMABAQUEBPD09YW5u\njkaNGkFDQwPGxsYYMWIErl27VtfplUsikdR1CgpqIp8pU6ZAKpXCyMio2tu2trZGjx490K5du2pv\nm707VOo6AfZ2mD9/Pn7//XcAgImJCdTV1REfH4/Dhw9j1KhRsLW1reMMWXUWmZycHKirq2P//v3V\n1iZ7d/EWAQMA+Pv7AwB++OEH3Lt3Dzdu3EB6ejouX76sUAS2b9+Obt26oWXLllBVVUXz5s3xn//8\nR2GrITQ0VBgq+fPPP2FnZwd1dXV069YNt2/fxsGDB2FqaoomTZpg6NChSElJEV5bcshn3bp1aN26\nNdTV1TFkyBAkJiZWOA/Z2dlYuHAhjI2NUb9+fWhra2PGjBn4559/hJiUlBRMmjQJH3zwAdTU1KCt\nrY2PPvoIO3bsqLDtlJQUzJo1C61btxbadnJyKje+5DI4e/asMP31IaSioiIsWbIE7dq1g7q6Opo3\nbw4rKyssXLgQQPHQja+vLwAgPj6+VJvx8fGYNGkSWrVqhfr168PY2BhLly5FUVFRmct0xYoV+OCD\nD6Cnpye0X3JoqOR7rFq1ChMnTkSTJk2gr68PDw8PhXm8c+cO+vTpgwYNGqBDhw44cOAADzW9q4gx\nItLW1iaJREI9e/akw4cPU1JSUplxc+fOpYYNG5KZmRl16dKF1NXVSSKRkIaGBiUnJxMR0ZkzZ0gi\nkZBEIqEGDRqQmZkZqampkUQiIT09PVJTUyNzc3OSSqUkkUhowoQJQvt9+/YVXtewYUOysLAQ4rp3\n714qrl+/fkREVFRURB9++CFJJBKqX78+WVlZUdOmTUkikZCFhQXl5OQQEdGoUaNIIpFQkyZNqGvX\nrmRkZEQqKir06aeflrtsUlNTqU2bNsI8tW/fnoyMjEgqlQox8ufc3d0VloFUKqWzZ8+WG7d27VqS\nSCSkqqpKVlZWZGZmRurq6mRiYkJERCNHjiQtLS2SSCSkpqZGPXv2pJ49e1JERAQlJCQIn1uzZs3I\nysqKVFVVSSKR0NSpU0stKzU1NVJRUaGOHTuSsbExEZEwX/L4uLg4Icf69euTnp6e8B4SiYROnjxJ\nREQ5OTlkYGAgxFlYWFDDhg2pQYMGpd6fvf24EDAiInJzcxN+7PJ/pqam9MMPP1B2drYQFxMTo/A4\nNjZWiPf29iYixUIwc+ZMIiJasmSJMG3ZsmVERDRp0iSSSCSkq6srtCfvtOrXr0/37t0jIqI1a9YI\nrz1z5oxCnLwQHDx4UOh4w8LCiIjo6dOnQqHavHkzERF17NiRJBIJ+fn5Ce+ZmppKt27dKnfZuLu7\nC237+/sL0yMiIoS/37QQzJ07lyQSCc2YMUOIycnJocuXLwuPp0yZQhKJhIyMjBTy+vrrr0kikZCB\ngQGlpaUpLAeJREIxMTEKy0oqlVJQUBAREclkMiKquBD07t2bCgoKKDU1VSgwCxYsICIib29vIW7/\n/v1ERBQUFCRM40LwbuGhIQYA+PHHH7F//34MHz4cTZs2hUQiQUxMDH7++WdMnjxZiHvx4gWcnJyg\nqakJqVSK9u3bC88lJSWVanfYsGEAgDZt2gAoHueWT5Pv/Cw5NCTXqVMnoe2xY8cK0+/cuVNm/mFh\nYQAAIkL37t0hlUqhp6eH3NxcAMDVq1cBQBjOcXFxgbGxMQYPHozNmzdDV1e33GUjf62hoSE++eQT\nYbqVlVW5r1HWsGHDIJFI4O3tDV1dXfTt2xeLFy9GkyZNhBgq57qQ8nl+8uQJWrRoAalUipEjRwrP\nX7lyRSHe1NQUgwYNAqDc/gZnZ2eoqKigRYsW0NbWBgA8e/YMABAZGQkAUFNTE95z0KBBaNasmVLz\nzd4uvLOYCUaMGIERI0YAAMLDwzFz5kyEh4fjyJEjAIDMzEw4ODjg5cuXUFdXh42NDVRVVYUOp+S4\nNFDc2WhoaAAAVFT+/6smn6bszs/yOsKySKVSdOvWrdR0eUfv4eGB3r17Izg4GJGRkbh48SJOnDiB\ngIAAREREKP0+lSk5b/Ll8vLly1JxgwYNQnh4OPbu3YubN28iIiIC58+fx9atWxEVFQV9ff1K36tZ\ns2YwMzMrNb1Ro0YKj3V0dKo0DyU7dfnn9/pn8bYdtcXeDG8RMADAkiVLcPPmTeGxtbU1TE1NAUBY\nO713757Qmf3555+4du0aVq1aVSP53Lx5EzExMQCAgIAAYXrHjh3LjJd3/jKZDO7u7rh06RIuXbqE\nCxcuYOnSpcJWzYULF9C3b1+sWbMGp06dwubNmwEAt27dwosXL8psu0ePHgCAuLg4hVxu3LhRbv7y\nNWgiwv379wEABw4cKBV369YttGzZEj///DMCAwOFne6ZmZnC3w0bNgRQvDO8rHlWU1NDQECAMM+n\nTp3Cl19+iaFDhyrEV2en3alTJwBAbm6usKIQFBSE9PT0ansPVnu4EDAAgJeXF7p06QItLS3Y2Nig\nTZs2wpFE48aNAwC0bdtWWMucNm0aOnXqpDAU8bqy1uSVXbtXU1ODtbU1LCws8PXXXwMAbG1t0bdv\n3zLjnZyc0Lt3bwCAg4MDzMzMYGFhAQ0NDQwcOBB3794FACxYsACamppo164dbGxsMG3aNACAvr4+\nmjdvXmbbc+bMEYa2xo4dCxMTExgbG8PGxqbc/E1MTNC6dWsAgKurK/r164fPP/+8VNyePXtgYGCA\n1q1bw8bGBpaWlgCK18AtLCwAAB06dABQPCxjamqKnj17Ijc3F99++y20tLSQkpICY2NjWFlZwdjY\nGM2aNcP48eOFYbGaMG7cOBgYGAAAPv74Y1hYWGDkyJFQU1OrsfdkNYcLAQNQPGQi3z8QExODZ8+e\noX379li8eDFWrlwJAGjevDkCAgJgbm4OIkKDBg1w+PBhAGWvbZacJv+7rGllsbW1xZo1a5CVlYUG\nDRrA0dFR4Zh3iURSqq2goCAsXLgQJiYmiI+PR0pKCjp06ICFCxcKa8+ffPIJunfvjqysLNy5cwdN\nmzbFiBEjcPz48XJz0dTUxJUrV/DZZ5+hdevWePz4MTIzMzFkyJBy51dFRQW7d+9Gly5dIJPJkJ6e\nLuRfMs7Ozg5DhgyBRCJBVFQUZDIZevfujX379gn7SKZNm4aPP/4YzZo1Q2xsLMLCwiCTyaCnp4ew\nsDBMnjwZLVq0QHR0NHJzc9GnTx+sXLlSKNqvL6vXc67ssysrTk1NDcePH8eHH34IqVSKwsJC+Pn5\noXHjxgAAdXX1cpcne/tIqCoDsIzVMDs7O5w7dw52dnY4ffp0XafDKnD//n2FM5LlnxsAbN68GZ9+\n+mkdZcaqincWM8beyLfffosbN27A0tISWVlZOH/+PADA3NwckyZNquPsWFXw0BB7q1Q0jMHeLv37\n90ejRo1w5swZXL58GW3btsW8efNw8eJFNGjQoK7TY1XAQ0OMMSZyvEXAGGMix4WAMcZEjgsBY4yJ\nHBcCxhgTOS4EjDEmclwIGGNM5N6JE8r4uHLGGHszypwh8E4UAqBqlyJmjDGm/Eo0Dw0xxpjIcSFg\njDGR40LAGGMix4WAMcZEjgsBY4yJHBcCxhgTOS4EjDEmclwIGGNM5LgQMMaYyL0zZxZXp8ePgeDg\nus6CsXfXkCGArm5dZ8GqiygLwY4dwK5dgK1tXWfC2Lvn0iUgNxeYO7euM2HVRZSFAAAGDwaWL6/r\nLBh793ABeP/wPgLGGBM5LgSMMSZyXAgYY0zkuBAwxpjIcSFgjDGR40LAGGMix4WAMcZErtoLQUJC\nAvr16wcLCwt07NgRa9euBQCkpaXB3t4e7du3x6BBg5Ceni68Zvny5TAxMYGZmRmC+ZRfxhirVdVe\nCFRVVbF69WrcuXMHV65cwYYNGxAdHQ1PT0/Y29sjJiYGAwYMgKenJwAgKioKu3fvRlRUFE6cOIHP\nP/8cMpmsutNijDFWjmo/s7hVq1Zo1aoVAKBx48bo0KEDEhMTERgYiLNnzwIAXFxcYGdnB09PTxw6\ndAjjxo2DqqoqDA0N0a5dO4SFhaFHjx4K7bq5uQl/29nZwc7OrrpTZ4yxd1poaChCQ0Or/LoavcRE\nfHw8IiIi0L17d6SkpEBHRwcAoKOjg5SUFADA06dPFTp9fX19JCYmlmqrZCFgjDFW2usrye7u7kq9\nrsZ2FmdmZuLjjz/G77//jiZNmig8J5FIIJFIyn1tRc8xxhirXjVSCAoKCvDxxx9j0qRJGDFiBIDi\nrYDk5GQAQFJSErS1tQEAenp6SEhIEF775MkT6Onp1URajDHGylDthYCIMH36dJibm+Prr78Wpjs5\nOcHHxwcA4OPjIxQIJycn7Nq1C/n5+YiLi0NsbCy6detW3WkxxhgrR7XvI7h48SL8/PzQqVMndOnS\nBUDx4aELFiyAs7MzvL29YWhoiD179gAAzM3N4ezsDHNzc6ioqGDjxo08NMQYY7VIQkRU10lURiKR\noDrTXL4cePWK70fA2JuYOxcwM+P7ErwLlO07+cxixhgTOS4EjDEmclwIGGNM5LgQMMaYyHEhYIwx\nkeNCwBhjIseFgDHGRK5GLzrHWF26cgXIzq7rLN4/T54AUilw+nRdZ/L+0dICLC1r/325ELD30osX\nQJ8+xf9Y9crOBp4/ByIj6zqT90t+PhAbC/zvwsy1igsBey/JZICGBq+1sndHamrxGdt1gfcRMMaY\nyHEhYIwxkeNCwBhjIseFgDHGRI4LAWOMiRwXAsYYEzk+fJQxxmrBlCnAgQPlP08E5OUBTZtW3M73\n3wOLFlVralwIGGOsNiQkAL6+gJ3dm7exdSsQF1dtKQm4EDDGWC1p3LjyNf6KqKtXXy4l8T4CxhgT\nOS4EjDEmclwIGGNM5LgQMMaYyHEhYIwxkeNCwBhjIseFgDHGRI4LAWOMiRwXAsYYEzkuBIwxJnJc\nCBhjTOS4EDDGmMjxRedEIiUFMDMD8vPrOpPaQQQUFACNGtV1JrVHSwuIj6/rLNi7iAuBSGRkAM2b\nA7dv13UmrCYUFRV/voy9CS4EIiKVimsNWUyKiuo6A/Yu430EjDEmclwIGGNM5LgQMMaYyHEhYIwx\nkeNCwBhjIseFgDHGRI4LAWOMiVy1F4Jp06ZBR0cHlpaWwjQ3Nzfo6+ujS5cu6NKlC44fPy48t3z5\ncpiYmMDMzAzBwcHVnQ5jjLFKVHshmDp1Kk6cOKEwTSKRwNXVFREREYiIiICjoyMAICoqCrt370ZU\nVBROnDiBzz//HDKZrLpTYowxVoFqP7O4T58+iC/jgidEVGraoUOHMG7cOKiqqsLQ0BDt2rVDWFgY\nevToUSrWzc1N+NvOzg52dnbVmDVjjL37QkNDERoaWuXX1dolJtatWwdfX1907doVv/32G5o1a4an\nT58qdPr6+vpITEws8/UlCwFjjLHSXl9Jdnd3V+p1tbKzePbs2YiLi8ONGzegq6uLefPmlRsrkUhq\nIyXGGGP/UyuFQFtbGxKJBBKJBDNmzEBYWBgAQE9PDwkJCULckydPoKenVxspMcYY+59aKQRJSUnC\n3wcOHBCOKHJycsKuXbuQn5+PuLg4xMbGolu3brWREmOMsf+p9n0E48aNw9mzZ5GamgoDAwO4u7sj\nNDQUN27cgEQigZGRETZv3gwAMDc3h7OzM8zNzaGiooKNGzfy0BBjjNWyai8E/v7+paZNmzat3PhF\nixZh0aJF1Z0GY4wxJfGZxYwxJnJcCBhjTOS4EDDGmMhxIWCMMZHjQsAYYyLHhYAxxkSOCwFjjIkc\nFwLGGBM5LgSMMSZyXAgYY0zkuBAwxpjIcSFgjDGR40LAGGMip1QhiI+Px6lTpwAA2dnZePXqVY0m\nxRhjrPZUWgi2bNmCMWPG4LPPPgNQfBexkSNH1nhijDHGakelhWDDhg24cOECNDQ0AADt27fHs2fP\najwxxhhjtaPSQqCmpgY1NTXhcWFhId9FjDHG3iOVFoK+ffvCw8MD2dnZOHnyJMaMGYNhw4bVRm6M\nMcZqQaWFwNPTE1paWrC0tMTmzZsxePBgLF26tDZyY4wxVgsqvWdxbm4upk+fjpkzZwIAioqKkJOT\ng4YNG9Z4cowxxmpepVsE/fv3R05OjvA4OzsbAwcOrNGkGGOM1Z5KC0FeXh4aN24sPG7SpAmys7Nr\nNCnGGGO1p9JC0KhRI1y/fl14/Pfff0NdXb1Gk2KMMVZ7Kt1HsGbNGjg7O0NXVxcAkJSUhN27d9d4\nYowxxmpHpYXA1tYW0dHRuHfvHiQSCUxNTaGqqlobuTHGGKsFlRYCoHg4KC4uDoWFhQgPDwcATJ48\nuUYTY4wxVjsqLQQTJ07Ew4cPYWVlhXr16gnTuRAwxtj7odJCcP36dURFRfFlJRhj7D1V6VFDHTt2\nRFJSUm3kwhhjrA5UukXw/PlzmJubo1u3bsLF5yQSCQIDA2s8OcYYYzWv0kLg5uZWC2kwxhirK5UW\nAjs7u1pIgzHGWF2pdB/B5cuXYWtri8aNG0NVVRVSqVS4SQ1jjLF3X6WFYO7cudi5cydMTEyQm5sL\nb29vfP7557WRG2OMsVqg1AllJiYmKCoqQr169TB16lRYWVnB09OzpnNjrFpkFhXhyqtXdZ1GjSoq\nAoBmOPUiva5TqXG9NDTQsMQ5Tezfq7QQNGrUCHl5eejcuTPmz5+PVq1agYhqIzfGqkXAs2dYHBcH\n80aN6jqVGkMEdPH+B56Ps+o6lRoVmZWFVcbGGK+jU9epvFcqLQTbt2+HTCbD+vXrsXr1ajx58gT7\n9u2rjdwYqxYyAI6amvA2M6vrVGqWVV0nUPMmRUejiFdEq12l+wgOHjwIdXV1NG3aFG5ubli1ahWO\nHj1aG7kxxhirBZUWgr/++qvUtG3bttVELowxxupAuUND/v7+2LlzJ+Li4jBs2DBhekZGBlq0aFEr\nyTHGGKt55RaCXr16QVdXF8+fP8e3334r7CDW0NBAp06dai1Bxtj77URaGjwePVIqNiE3FxEZGdii\nxPXPVCUS+JubQ6d+/X+b4nuv3ELQpk0btGnTBqdOnYK6ujrq1auHe/fu4d69e7C0tCy3wWnTpuHo\n0aPQ1tbG7du3AQBpaWkYO3YsHj16BENDQ+zZswfNmjUDACxfvhx//vkn6tWrh7Vr12LQoEHVPIuM\nsbfZrcxM6Kup4fMPPqjWdqfcvYvk/HwuBEqo9Kihvn374vz583jx4gUcHBxga2uL3bt3Y8eOHWXG\nT506FV988YXC/Qo8PT1hb2+P+fPnY8WKFfD09ISnpyeioqKwe/duREVFITExEQMHDkRMTAyk0kp3\nXTDG3iMGamro87+Vw+rSmM81UFqlPa5MJkPDhg2xf/9+fP755wgICEBkZGS58X369EHz5s0VpgUG\nBsLFxQUA4OLigoMHDwIADh06hHHjxkFVVRWGhoZo164dwsLC/s38MMYYqyKlziy+fPkyduzYAW9v\nbwDFxaEqUlJSoPO/E0B0dHSQkpICAHj69Cl69OghxOnr6yMxMbHMNkpeBdXOzo4vhscYY68JDQ1F\naGholV9XaSFYs2YNli9fjpEjR8LCwgIPHjxAv3793iRHAMX3MqjobmflPVfW5bDH7xuPmH9iqpxD\nWtxAUIEaTm6p+vkQHzT5AIHj+F4MjLG3z+srye7u7kq9Tql9BH379hUeGxsbY+3atVVKTkdHB8nJ\nyWjVqhWSkpKgra0NANDT00NCQoIQ9+TJE+jp6Snd7pn4M9g2fBtaNmxZpXwwVP7HsIqiSsktzMWg\n7bwzmzH2fim3EHz11Vf4/fffFc4hkKvqHcqcnJzg4+OD77//Hj4+PhgxYoQwffz48XB1dUViYiJi\nY2PRrVu3Ks1AZ53O0G2iW6XXvKnsguxaeR/GGKtN5RYC+VE/8+bNK/VcRUM748aNw9mzZ5GamgoD\nAwP89NNPWLBgAZydneHt7S0cPgoA5ubmcHZ2hrm5OVRUVLBx48YK22aMMVb9yi0ENjY2AIrHnJ4/\nfw4A0NLSqrRBf3//MqefOnWqzOmLFi3CokWLKm2XMcZYzSj38FEigpubG1q2bIn27dujffv2aNmy\npdI7HxhjjL0byi0Eq1evxsWLF3Ht2jW8ePECL168QFhYGC5evIhVq1bVZo6MMcZqULmFwNfXFzt3\n7oSRkZEwrW3bttixYwd8fX1rJTnGGGM1r9xCUFhYWOY+AS0tLRQWFtZoUowxxmpPuTuLVVVVy31R\nRc+xakYExMQABQX/rp3H9YH8NkBk7L/PqXlzoArnezDG3m7lFoJbt26hSZMmZT6Xk5NTYwmx19y9\nC1hZASYm/6qZVkXqWCexAT658O/yKSgAcnMBJS8bzBh7+5VbCIqKimozD1aeggLA1BS4dUu5+MxM\noIxrtTcG4AgAmAf07QukphY/Ud79X8s7n4MIkMkAZS7tW95WTIMGQFlblW5ugKtr5e0yUesbEYFY\nJVZGM4qKMOjmTdSr5NwkqUSCwI4dYV3Oiq8YKHXROfYO+fpr4PBhQEOj/BiZDDAwKO7U4+JKd/oS\nCaCuXrqzz8oCfv0VmD1buVzU1ID/nYOiQEUFeP1S42vXAk+fKtcuE7Wo7Gyc7twZLappiHpCdDRS\n8vOrpa13FReC901+fnFnXeJ+EOVKSQE6dSr+XxnffVfcflVu9NFSyetANWigfJtM9FrVrw+tarrh\nTAO+/wkXAvZu6hsRgXtK7qvKl8lQRISjaWlKxdeXSBDetSta8kER77yU/HzsK2urtITHubk48s8/\niMvNRXRWFp6XMaTZREUFXRo3LjXdqnFj9GratNryrStcCNg76W52Nk517lxta4Uldb9+HS8LC7kQ\nvAdOpKXh9ydPMOC1m2WV1ENDA4VEiMzKwq5nz6CpolJqK8GiUSNEZmUpTHucl4fAf/7BiffgHu5c\nCNg7S7t+/Rq5H60KX/jwvdJDQwMb27dXKvbcy5fYZW6Ojo0aVRp7Ii0Na548+bfpvRVEXwiSMpIQ\n+az8W2+WlFuYCxnJcPLBSaXb76Lbper3S2CMsVok+kLgcd4Dpx6egkFTg0pjiQiWOpb45dIvSrX9\nIO0BXDq74Ee7H/9tmowxVmNEXwhkJMOX3b/E57afV3vb7qHukKFq93dmjLHaJvpCwN5/hUSIzVb+\n7nIFRLifnY18mXJFXE9NDRoq/FNi7y7+9rL33t7nzzHz3j3oqakpFU8Avrx/H1Ildhq/LCyEo6Ym\nvM3M/mWWjNUdLgTVICIpAv19+0NGimuQhbLiq7SuubJGYbpUIsWpSadg84FNreUoZgUyGYa3bInt\nHTpUe9vbk5MR/OJFtbfLWG3iQlANUrNT0VmnMw59ckip+JG7RyI1O7WGs2KMMeVwIagmqvVU0bSB\ncmcYqtbjE5UYY28PLgSMvSa7qAiZSl5991VhIXJlMjxT8qJl9aVSNOMdy+wtI6pv5Otj+ABAIBBR\nmc9JJXwxKjHqf/MmYrKzlTrDOE8mw6uiIuyt5Ho2r1P23GWzhg2VOiKpQCbDkBYtMKqMuwqWxVRd\nHer16imZBXvfiaYQHI05iqH+QyF57SdIKL4e/xfHv1CYLpVIcW/uPRhrGtdajuztkF1UhFArK3Qq\n4yJjrwtOS8MvCQlKX2/G4eZN9G/eHDZKtP0oNxdf3L8PAyWOdiogwq5nzxD4zz+Vxj7Ny8PC1q3x\njUHlJ1EycRBNIXiR+wITLCfAb5SfUvFWm6yQkZ9Rw1mx94EUyl+fSCqRoFuTJrDX1Kw09mZmJjo0\nbIibtrZKtX0oNRXHlbjC6vWMDOxLTVXq6q1jtLQqvGAbez+IphAw9r4LeP4cqhIJuld0UyIUXzq5\nUCbD/tTUCk+ae1ZQgLBXr9C1gjt3qUgk+MnIiK/U+o7jQsDYe2RA8+aYqKNTaVxyfj4WxcVhpfG/\nG/r0fPwYk3R00PI9uCb/2yQ/OR/RE6NBhYq3ks1LbYqGufVxw+61fVISwHilMZrYvNntNrkQMCZS\nDevVw8wPPvhXbWxLTq6mbFhJeUl5yI3PhamXqcL0acJfipfJjv85Htn3srkQMMZqzorHj/FjfHyp\n6UVEsLtxA5LX9pG0VFXFk549aym791O9JvXQzK6ZUrH1t/y7+3JwIWCMVepZfj7cDA3xtb5+pbEy\nIjQ+f74WsmLVhQsBY0wpqhKJUjd6lxFVGsPeLnzGFGOMiRwXAsYYEzkuBIwxJnJcCBhjTOS4EDDG\nmMhxIWCMMZHjQsAYYyLHhYAxxkSOCwFjjIkcFwLGGBM5LgSMMSZytXqtIUNDQ2hoaKBevXpQVVVF\nWFgY0tLSMHbsWDx69AiGhobYs2cPmjVT7op7jDHG/r1a3SKQSCQIDQ1FREQEwsLCAACenp6wt7dH\nTEwMBgwYAE9Pz9pMiTHGRK/Wh4botSsTBgYGwsXFBQDg4uKCgwcP1nZKjDEmarU6NCSRSDBw4EDU\nq1cPn332GT799FOkpKRA53+31tPR0UFKSkqZr3VzcxP+trOzg52dXS1kzBhj747Q0FCEhoZW+XW1\nWgguXrwIXV1dPH/+HPb29jAzM1N4XiKRlLrTkVzJQsAYY6y011eS3d3dlXpdrQ4N6erqAgC0tLQw\ncuRIhIWFQUdHB8n/u+9pUlIStLW1azMlxhgTvVorBNnZ2cjIyAAAZGVlITg4GJaWlnBycoKPjw8A\nwMfHByNGjKitlBhjjKEWh4ZSUlIwcuRIAEBhYSEmTJiAQYMGoWvXrnB2doa3t7dw+ChjjLHaU2uF\nwMjICDf+C8oMAAAgAElEQVRu3Cg1XVNTE6dOnaqtNBhjjL2GzyxmjDGR40LAGGMix4WAMcZEjgsB\nY4yJHBcCxhgTOS4EjDEmclwIGGNM5LgQMMaYyHEhYIwxkeNCwBhjIseFgDHGRI4LAWOMiRwXAsYY\nEzkuBIwxJnJcCBhjTOS4EDDGmMhxIWCMMZHjQsAYYyLHhYAxxkSOCwFjjIkcFwLGGBM5LgSMMSZy\nXAgYY0zkuBAwxpjIcSFgjDGR40LAGGMix4WAMcZEjgsBY4yJHBcCxhgTOS4EjDEmclwIGGNM5LgQ\nMMaYyHEhYIwxkeNCwBhjIseFgDHGRI4LAWOMiRwXAsYYEzkuBIwxJnJcCBhjTOS4EDDGmMhxIWCM\nMZF7KwrBiRMnYGZmBhMTE6xYsaKu02GMMVGp80JQVFSEuXPn4sSJE4iKioK/vz+io6PrOi3GGBON\nOi8EYWFhaNeuHQwNDaGqqopPPvkEhw4dquu0GGNMNCRERHWZwN69exEUFIStW7cCAPz8/HD16lWs\nW7dOiJFIJHWVHmOMvdOU6eJVaiGPCinTyddxrWKMsfdanQ8N6enpISEhQXickJAAfX39OsyIMcbE\npc4LQdeuXREbG4v4+Hjk5+dj9+7dcHJyquu0GGNMNOp8aEhFRQXr16+Hg4MDioqKMH36dHTo0KFK\nbchkMkildV7T3kpEVGP7WGqybcZY7Xkrek9HR0fcu3cP9+/fx8KFC5V+3Y0bN5Cfn690EcjIyEBR\nUVGVcpPJZNUen5+fX6V2T58+jY0bNyodHxgYiIkTJwKofB9MVZfH48ePERsbK7Rd0f6bu3fvIicn\nR+m2w8PDcfXq1SrlU/L9q7Ivqbr3OyUlJVUpPiYm5o3fq7pzz8vLUzr2xo0bSElJeaM8lImvaptV\n+f5Wpe2qfG/fJJe3zVtRCN5EUFAQJk+ejPv37ysVf+TIEUyZMgUjRoxAZGRkpfEJCQkoLCyEVCqt\ntNO+ePEiAgMDAaDS+KNHj2Lu3Ln4+OOPhfMlKooPDAzE3Llz0bp1a4Xp5X2pg4OD8f333yM6OhrB\nwcEVxoaEhMDPzw///PNP+TNXwrFjx+Do6Igvv/wSgwYNAlB+MXj8+DHMzc2xbt06pdo/ceIEpk6d\nCnV1daVyAYCTJ09i+fLlWLZsmZBLec6cOYOtW7cKR6NVViBPnToFLy8v4Wi2igQFBWHWrFl49uyZ\nUp3NsWPH0L9/f9y8eVOpFYKq5F6VvIHi5f7VV19h4cKFKCgoqDA2KCgI1tbWWLx4caV5VDXvS5cu\nIS4uTqktzDNnzmDVqlUAgHr16lXaAcfExCAlJaXSFRe5kJAQof3KPp+q5iJvT9milJWVpVQcANy8\neRM3btzAzZs3lX6NgN5BBw8epG7dutHly5eJiKioqKjC+MOHD5OVlRWdO3eOFi5cSEOHDq3wNZcu\nXSIjIyPy9PSkvLy8Ct/j2LFj1LRpU+rduzf5+PgI08uKP3bsGJmbm9PJkyfpu+++o969e9M///xT\nbh65ubk0adIkOnPmDBERvXr1ilJTU8uNDwoKIktLSzp+/DitWLGCfvjhh3JjL1y4QBKJhAYMGEA7\nd+6ssF0ior///pvMzc3p4sWLRET0ySefVJh7cnIymZmZUf/+/WnlypUVxoaEhJCuri5dvXqViIhy\ncnIUni9rWR49epQsLCxo+/bt9MEHH5Cnp2e57R89epTMzMxo/fr1ZGhoSLNmzapwXkNCQqht27bk\n7+9PQ4YMoenTp9O1a9fKzOPw4cPUvXt3CgkJqbBNucjISDIzM6NTp06VO29vmntV8iYiOnXqFLVv\n35727t1LVlZW9OOPP5bb9pEjR6hnz57k7e1NTk5Owm+vOvIOCgqijh070t9//11hm0REJ0+epKZN\nm1K/fv3ov//9rzC9sLCwzPjbt29TixYtaO7cufT48WMiIpLJZBXmoqOjQxKJhG7evFmtuezdu5cc\nHR0pMzOz0jzk8X369KFbt25VGivv48aPH0+jRo2iHTt2VBj/uneqEMi/0B999BFZWFgQEdHz58/J\nzc2N5syZQ2fPnlXo0GQyGWVnZ9OkSZPo2LFjRER0//59Gjx4MH377bd05syZMjvABw8eUN++fcnV\n1ZV++umnUh2TvG0ioh9++IE8PDzozJkzNHTo0DKLgUwmo4yMDJo0aRLt3btXeH7q1Knk5eVV7vwW\nFBSQk5MTBQcHU1JSEn300Uc0fPhwGjhwIN2+fVtoWyaT0T///EMzZsygc+fOEVFxx62trU0nT54s\nczkeOXKEAgICaO/evTRhwgTy8/MrtexKunbtGs2ZM4dkMhklJCRQy5Ytafr06TRkyBDKyMgo8zUr\nV66kQ4cOkb29PW3evJnOnz9PkZGRCjF5eXn022+/kYODA8XFxVFaWhpNnjyZvvjiC5oyZUqZ+Tx+\n/Ji6detGwcHBRFRcYJcuXUr79u0r9SOMj4+nHj16CB1veno69e7dm6Kjo8v8cRUVFdFnn31GGzZs\nICKi7Oxs6ty5M33yySd07do1hdhnz56RhoYGff/990RE9OTJEzp27Bj5+fmV+8ONioqiL7/8koiI\nHj16RG5ubuTh4UFnz56l3NzcN869KnkTFXdWLi4utGbNGiIiOnfuHLm6utJff/1FiYmJCsvxzp07\n1LVrV2GFZMaMGbR582bhfV/36NEjpfM+dOgQWVhY0I0bN4iIKD8/v9yOlIhox44dtGzZMrpz5w6N\nHz+elixZojBPr8vLy6OhQ4fS4sWL6auvvqKHDx+W2/bhw4epU6dOFB0dTZs2baIvvvhC6LT/bS6R\nkZFkbm5OJiYmNHz4cMrKyiKi8otBbGwsWVtbU8+ePcnFxYUiIyPLjb127RqZm5vTjRs3KCcnh3x8\nfITvZGUrGnL13Nzc3Kq+HVE3Hj58CE1NTUydOhW+vr7w8/NDQEAALCwsUFhYiNDQULRo0QLt2rUD\nAMTFxUFbWxv29vawsLBAeno6Bg4ciN69e6Nx48Y4ffo0tLS0YGxsLOz4LCgoQFZWFoKCgtCvXz88\nfPgQjx49grq6OjIyMqCpqamQS79+/WBhYQFDQ0M0adIEO3bsQH5+PqysrCCRSJCfn4+EhATo6Oig\nXbt26Nq1K6RSKaRSKS5duoScnBzY2dkBKL3zVSqVIjc3F48fP0ZgYCDs7e3x66+/4tatW/Dx8cHk\nyZMhkUggkUigrq6O/v37w8TEBPn5+TAwMICKigru37+P3r17C3FA8SZ6q1atYGpqis6dOyM3Nxcn\nTpyATCaDnp4eGjZsWGoTPTU1FQEBAfj777/x7bff4quvvoK7uzuOHTuGP//8U8hFJpMJO+/9/f1h\nYGCAH3/8EXPmzMGyZcswbNgw4fMBijen9fX1oaKiAi8vL8yfPx9Dhw6Fk5MTDh48iMDAQDg7O5fK\nx9HREV27dkVycjIGDBgAXV1dBAQE4NatW7C3t0e9evVQWFiIBg0aoE2bNnBwcEB+fj5UVVWxe/du\n9OzZEwYGBqW+YxKJBA8ePEBaWhrat28PTU1NxMbG4tmzZ3j48CEGDx4sxDZq1AgmJibYvXs3cnNz\nsXTpUuTl5WH79u24ffs2Bg4cCBUVxeMx0tPTsXLlSrRt2xbff/892rdvj0ePHiE2NhZSqRQmJiZC\nbE5ODkxNTTFo0KBKc69K3vLvVmJiIkJCQlBQUAAXFxd06tQJoaGhuHPnDoyNjaGlpQUAePnyJUaP\nHg1ra2vhe7pw4UI4OjoKMSXl5eWhXbt2Si1zLy8vBAcHY926dcjKysI333yD7du3IyMjA82aNUPz\n5s0V4i0tLWFtbQ1dXV0YGBggKCgI4eHh6N+/P6RSKbKyslC/fn0AxcMwOTk5CAwMhKWlJQoKCnDj\nxg0UFBQgKSlJYbj15cuX8PLywtdffw1bW1ukpqbizJkzGDx4MBo2bAiZTFbqO2hpaYlOnTpBT0+v\n0lySk5PRo0cPrF27Fvv27cOOHTswcuRI1K9fXxgmKtn+q1ev0K1bNyxduhTnzp3D4cOHYWFhgRYt\nWgjDz/L4e/fuoW3bthg6dChUVFRQVFSEDRs2YOTIkWX+lsukVLmoYzKZjLKyskhTU5MWLVokTO/a\ntavC419++YXGjx+vEF9yczcvL4+uX78uPP71119p4sSJRFS8FVDSL7/8QlFRURQREUFOTk6kr69P\nly9fFtbuNTU1FTYHiYgyMjJo3759NHToUDp+/DgdPnyY9uzZQ5qamvTzzz8LcfIq7evrS8uXLyci\nov3799OVK1fo0qVL9Mcff1B4eDilpqZSVFQUDR06lAYMGCCs7RMROTo6UmxsLF26dIk2btxI4eHh\n9OTJE4X2jxw5Qr169aKkpCQiIkpISCi1XOX8/Pxo4sSJdOLECfL09KTvvvtOIZf8/HxKSUmh+/fv\n05gxYxTWlBwdHYU1OqLiLRmi4jUVX19fevjwIenr65ONjQ2tXbuWXrx4QYmJiQq5PH78mFasWCGs\n0RIRPX36lFxcXBTak89bYWEhyWQyunXrFu3fv5+IioeUevbsSRs2bKCQkBBatmwZFRYWUnp6usJ7\nffrpp3TlyhUiIrpy5QoVFhbSgwcP6Pnz55SRkUHXrl2jqVOn0oQJE2jChAn08ccfU0ZGBn344YcU\nHBxM165dU1jj279/P9WvX59WrFgh5NG9e3dat24dEZHQ9vPnz4mIaPXq1TRz5kyaM2cOERWvBS9c\nuFD4Lpecz7S0tApzf/ToEeXm5lJubi6FhYVVmPfrn3lkZCT5+PjQp59+Kgzd5OXl0dixY8nd3b3U\n2mRRUZEwbcGCBbRixQqFaQ8ePKDU1FRhC7GyZS43e/Zs0tXVJVtbW1q7di3t2LGDJk6cKHwXkpOT\nFb5v8nnIz8+nS5cu0fjx42nVqlXk6+tLGzduFL4v8ry8vb3p8uXLlJqaSuPGjaPmzZvTgQMHFNqS\nyWSltshGjBhBn3zyicK00NBQ2r9/v/B6uby8vDJzyc/PF2JKDo+OGTNGYZhI3v+U/HxKfm9dXV1p\nzJgxwkjA3bt3FWJTUlKIiITv++DBg4Vh7bi4OKrMO1EI5B9oVFQU6enpKXTu+fn5wgLZtm0bzZo1\nS/hA79y5Q3p6erR06VIhvrCwUGhv+/btNGfOHHr58mWpojFnzhw6dOgQnT17lnR1dWnIkCH0yy+/\nUHZ2tkIuJdsmKi4GFy5cICMjI2rcuDHduXOnzDyIiHx8fOjnn38mf39/MjY2pi1btlDr1q1p9uzZ\nNHHiRHJxcaHY2Fi6efMm9evXj5YvX05Xrlyh/fv3k6WlJe3cuVOInzRpErm4uAg/NrlZs2bR6NGj\nKSAggCQSiVB45Mu15I/91KlTZGlpSfr6+vT7778LbU+YMIFcXFzo0qVLRETUt29fYchp165dZGRk\nVGbb169fJ319fdLS0qKQkBBKTk6mESNGkI+PT6l4ouIvfskfzpYtW2jAgAGUmZlJSUlJpKqqShMm\nTFCIKVkYiIhWrFhB8+bNI0NDQzp+/LhC+/LXOTs705kzZ2jnzp1kbGxMO3bsIEtLS5oxYwa5uLhQ\nUVERXb16lY4cOUJeXl7CZz5v3jw6fvx4mXlERUUp5OHh4UHbtm2j48ePk6WlJc2cOZMmTpxIWVlZ\ndPXqVZo1axaZmZnRhQsXiIho8+bN9Nlnn9GjR4+E9uUdWsn5LJm7rq4u2djY0OTJk2nWrFmUkZFB\nkZGRdPTo0VJ5h4WF0eHDh+m3336jly9fKiyXEydO0NSpU4XivHbtWhozZgz9+uuv9OrVKyqLn58f\nDRo0SMhRPp8zZsygSZMm0YsXLxSWR8m827RpQ/fv31dob+7cubRgwQKFnOzt7cnf359MTExox44d\nQptEisUgPj6eLCwsqGnTpnT69OlSY/Dr16+n3377jc6cOUP6+vo0evRocnV1pcePH1NoaCjt27eP\nAgMDhbZLdqDjx4+n8PBwIiref2BgYECLFi0iOzs7Gj16tEJnXDIXDQ0NioiIqHBsf8yYMeTs7Ezr\n16+nwYMHU1paWoXxrq6uNG3aNFqyZAlZWVkJKxavy87OJjs7O8rLy6O//vqLRo0aVWpl6HVvfSF4\nfa3k4cOHpKOjI6x9yW3ZsoWsra0V1kxLxq9cuVJh+tatW8na2lrYISTv2H/66SciIrp+/TqNHz+e\n9PX1ac+ePXT+/Hn69ttvFRZ+eW2vW7eO9PT0FMbDy4rdtWsXaWpq0ocffkh37twhd3d38vX1JaLi\nir9u3Tphzf/27du0atUqmjx5srAG/nr8hg0byNHRUdjpSkR0/vx5mjJlCtnb29Mvv/xC+vr65OHh\nobB85cv4wIED1LhxY4qMjCzV9vr168nR0ZEePnxIBw8eJBsbG3JxcSELCwv68MMPy2ybiOiPP/6g\nI0eOCI9jY2PJ0dGxzPiSP4Jt27aRpaWlsAzT0tLIwcGBOnToQGPGjCm19kZUvIXVqVMnmjBhgvCe\naWlplJycTM+ePRPiXF1daeDAgdSnTx/6888/ydzcnE6fPk13796lWbNmUX5+vtDJyzuyTZs2UefO\nnSkiIkLIY/To0WXm4ePjQ507dyZfX1+FtmfPni20m5SUREuXLqWePXvSN998Q4aGhnTnzp1S8ynv\nlOTLRp67paUltWnThs6dO0dhYWE0b968MncQyvM+ePAgqaurU9u2bWnTpk0KHfzVq1dp2rRp9P33\n39OSJUuoTZs21KBBAyG25Bp+yc+oV69etGDBAjpz5ozCfM6ZM0fYSnl9mXfo0IHatGlTqmMnUvyt\n79y5kxwdHal///40evRo+vzzzykgIEChQ5PnsnXrVtLX16c1a9aUWTQePHgg/JYPHjxIMTEx9NNP\nP9GuXbvK7dhlMhm9ePGCxo8fT8uWLSOZTEazZ8+mtWvXCu06OjrS+PHjFeZBnkvJfXO+vr7k6elJ\ne/bsEbbO5YyNjUlLS4uCgoKEaV5eXvTjjz/S6dOnSxVtW1tb0tbWFvotLy8vcnNzU4jNyMggJycn\ncnV1JWtr61L75cry1hcCuY0bN9KECRPIzc2N/vjjD2rYsCGtXr2aiIo7l9GjRyvs5a8oPjw8nEaO\nHFlu0Vi9ejXl5eUpdCi5ubnCj6eitomI5s+fL7RdUeydO3fIysqKbt26RUREbm5uNHv2bKGd58+f\n07p162jGjBnCjzEvL0/YxCwrfsOGDfTpp58Km4rZ2dn07NkzCg0NJaLiTl1LS4uWLVtWahkHBwcL\nm55ltb127VqaMWMGERUXzujoaHr06JFSbRcUFFBRURHJZLJK45OTk+nLL7+kO3fuENH//+A3btxI\ncXFxNHr0aHJxcaFz587R1atXKTs7mw4dOkQ2NjZ0+/ZtcnV1JV9fX3r8+DF17dqVJk+eTHp6enT+\n/HkiIvL09CQDAwO6desWrV69WtgJGhcXRy1atKDp06fTsGHD6N69e8LnZGNjQxERERXmUVBQQCEh\nIdS1a1eKiIgos+1p06bR8OHDKT4+noiKh2dOnDhBcXFxlc4nUfFwpr6+Pn3zzTe0fft2YZl5enoK\nn438exIVFSXkffLkSQoODqbw8HCys7Oj9evXKxSD48eP0+bNm+mLL74gb2/vUrEli4G8g7969So9\nfPiwzPmcMWOGwjJcsWIFffDBB9SzZ89yO3a5zZs3U5cuXejSpUsUFhYmTJs0aRIFBAQI33954diy\nZQuFhITQwIEDy2w7MzOT5s+fr9A5Z2ZmKtWxnzp1ijp06ECvXr0iLy8v+vnnnxWWm4ODA40ZM0Z4\n/Oeff9KFCxfI0tKSvL29KSgoiGxsbGj+/Pk0a9YsGjVqlHD00pUrV6hdu3YK8SEhIWRra0tz5syh\n6dOnKxxxd/PmTTI2NiYTE5NyY+UHfHz00UfUoUMHio6OLrV8y/JOFIKAgACysLCg8PBw+uKLL2jN\nmjW0ePFi0tHREQ6RlO+Fryzezc2NiEjhi/16Z92gQQP666+/hOfla2WVtb1w4UKl85YfYVByC2PV\nqlXUpEkTha2d27dv05gxY4Shh5JrTeXFOzs7U3R0tNDxEhVvpciL2r1790hLS0tYG798+TIlJiYq\n1fbo0aMpKiqqSm0/efKkSvHp6emUl5cn5CP/f8mSJcJhot26dSOJRCJs0t+7d4+ePn1KRMVr5IsX\nL6Zly5YJ48ybN28mHR0dSk5OpvDwcOHoEXmn9vLlS5o8eTKtWLGC7t69S8uWLSMHBwd69eoVFRUV\nCf+Xl8ehQ4eIqPiIGfkQS3lte3h4kIODg7DWqsx8Hjx4UFg+jx49ovT0dHry5ImwxXLlyhUaO3as\n8FnJj3ST72PIyckR3u/y5ctkZ2dHa9euFTrLvLw8Ydi0vFh5Byj/rcmHhSpahoMGDaLMzEy6evUq\nRUZGVtixFxYWUlJSEn355ZfCylHJQ0q9vLxo0qRJtGfPHiIioS2ZTEYvX74ss23570u+JZabmyss\nM29v70o79qKiImEZrVu3jpycnIT3kRswYIBwhJT8O37y5En68MMPydbWlmJiYoiIKDExkdzc3OiH\nH36goqIiunHjBj169Eghvk+fPsL3Z9++ffTNN9/QqlWrKC0tjV68eEFJSUmVxmZnZ5OXl5ewDJXx\nThSCpUuX0q+//kpExR/kxo0b6ZtvvqHw8HBq3759qUNAqxJfVme9aNEi0tbWLtWxV9a2qakpPXv2\nTPgyVJZHyZ1HAQEBNHHiRNq7dy85OzsrrCVPmDBBYe2vqvEHDhygESNGCF86ouK1cX19fRo4cCBZ\nW1sr7Lytrrbt7e3JxsZGoe3KcunSpUupHcnytZrr16+Tl5cXxcXFkZGREXXv3p1GjRqlMJb+5MkT\nSkhIEH4o8g6aiGjy5MnCGqpcTEyM8HnJd7bL//70008VVgKqkkdV21am/ZI7WB88eEAymUwoHpcv\nXyZbW1siKi6EixYtUoi/f/8+FRUVCR3ihQsXyM7Ojnbu3Em///67sM9DJpNVGLtu3TqF2Mrmc8aM\nGQrzWVHHLh+Lly/HjRs30uDBgxW+D1u3bqU5c+bQlClTqGXLlsLadWVtyzvvkis7FXXsr58X8scf\nf5CLiwstWrSIunTpQleuXBFWJmfOnEknTpxQaDs3N5f+/vtvatmypcJBJYGBgTRt2rRSucjjtbS0\nFA4s2b9/P82YMYPWrl0rLOOKYqdNm0Z//PEHVdU7UQgOHDhATk5OCmNdffr0obS0tFI/vqrGV9ax\nP3/+XGFctKK2Xz92WNk8njx5Qnp6euTi4kJExSe09erViyZPnkxLly4lIyMjhaOaqhIvj500aRIR\nFa8ZyX+YP/74I2lqaioMqdVG25XFX7hwgfz9/YmoeMdlu3btaMaMGbRy5UrS1tYmLS0tOnr0KBGR\nMHQhjzUyMqLvvvuO3N3dydbWltzd3enMmTPk4+ND7du3p4MHD5Zqe/LkybRt2zaFrUQ/Pz+ytrYW\nzvOoLI/Ro0fTvn37lG67X79+dPz48Teez3bt2tGUKVPIy8uLsrKyKDExkZydnWnPnj3UpUsX8vPz\nK9W2PF6+hhsXF0c6OjrUsmVLYcuvslg9PT3666+/qjSf8q2Syjr2Fi1aCM8dOnSIOnXqJAyhlew0\nhw8fTvr6+gprvMoUjZLPKdOxy8nPdZCvvKxbt44cHBxowYIFtGDBAjIyMhLW+ku2/cMPP9DWrVvJ\n0NBQOO/C19eX+vTpozD2/3q8qakpeXt7C88HBgZScnKy0rGv74dQxjtxHoGuri7u37+P27dvQyaT\nITIyEiEhIRg3bhyaNGnyr+LT0tJw6NAhdOrUCbq6urC1tYWHhwdmz54NV1dXNG7cWOE43Kq0rWys\nhoYGDA0NsXr1ahgaGsLBwQHOzs549OgR6tevjyVLlsDMzOyN4uWxa9asQevWrdGpUyfUq1cPERER\n2LZtG3bs2IHOnTvXatuVxd+6dQuurq5IT09HbGwsNm3ahNzcXLx69QqFhYXw8PDAkCFDAAAtWrTA\nkiVLhNjNmzcjLS0NhYWFaNWqFWQyGVJSUnD06FF4e3vj5cuXpdqWyWSIiopCXFwc2rZti7179+LX\nX3/FzJkzsXz5cqXyGDNmDB4+fKh0297e3khLS3vj+dy0aROKiooQFRWF+Ph4mJqa4qeffsL169ex\nfft25OTklGq7qKgI0dHRiIuLg7W1NRISErB161YsXboUa9asUSo2NDQUeXl5VZrP1q1bIzAwEL/+\n+iv8/PxgYGAgHAdvbW2NLVu24OLFizh58qRwjsnp06fRtm1bDBs2DPn5+ahXrx4AICUlBVu2bMHO\nnTuF75YybQcHBwttBwYGYvny5fDy8sKoUaNQUFCALVu2IDY2FiEhIQgMDMSXX36JFi1aCLm0a9cO\nw4YNQ2FhIXr06AEjIyM0b94ciYmJ+OWXX2Bqagqg+EZbv/zyC1asWIHLly9DXV0dZmZm8PT0xL59\n+/DixQssX75cOJ/i9fgGDRrA1NQUu3btwsuXL9GrVy+YmpqicePGVYqtsiqXjjqSmJhIa9euJXt7\nexoxYoSw4+7fxqenp9PixYtp0aJFFBwcLBwRI9/Z+m9zqUrs4cOHydLSUunTw6sSL4/dvXs3ERWP\nx5Z3+FlttV1RfFBQEFlYWND06dOJqHhrbdeuXfTVV1/R77//rjCuW1bs9u3b6ccff6SlS5dSYWGh\nwnHoZcX7+/vTvHnzaPHixTRlyhRhmKYqeVS17eqYT39/f3J1daWFCxdSt27dKm3b39+fvvnmG/Lw\n8KBjx44JW3dViX2T+dy4caNw+HReXp5wRnxSUhLZ2toKw0Jyx44dIwcHB7p7964wzdfXl/z9/Ust\n86q2XTJevmV+4cIFOnDgAC1YsEDYH1dRLjt37hTOzSiprBGGefPm0cWLF8nBwaHUmc2vx//xxx/0\n1Vdf0aVLl8jOzk7hkNKqxFbVO1MI5DIzMys87ftN4qtaZN4kF2Vjjx07Rvr6+gqXoqiueHmsfNz0\nbQU/ZxYAAATpSURBVGi7ovgDBw5Qy5YthWGIwsJC2rZtGy1YsKDUtYvKiv3zzz9p/vz5pQ5TrCh+\n+fLlpVYCqpJHVduujvn09vamlStXCsMHyrT93//+t9S+tarEVnU+q9KxExVfV2vx4sX0/fff0+HD\nh2nHjh3UtWtXhSGYN227Kh17Wbn4+fmRjY1Nqf1N8mXy+nBw3759KTo6usxL1ZQXHxMTI5wH8iax\nVfXOFYKaVNUiU1OCgoJKnXBTXfHvWttHjhwRTp4jKu5sXj+2+k1iy4sv78Sbmmy7OuazJtuujvms\nSscu9/TpU9q4cSP95z//obFjx5Z7Ebiqtl2Vjr2quZQ3wlDyPJY3ja9q21XBhYC99eRbDwEBAdUa\n+za1/TblUlNtK9uZvu71k9Oqo+2azKWmhrHfpG1lSYj4zvDs7RccHAxjY2MYGxtXa+zb1PbblEtN\nti2/EY6amppSbVdFVduuyVzk9xJo1KhRtcdXte3KcCFgjDGRe2fvUMYYY6x6cCFgjDGR40LAGGMi\nx4WAMcZEjgsBEx0PDw907NgRnTt3RpcuXRAWFlZj72VnZ4fr16/XWPuMVQeVykMYe39cvnwZR48e\nRUREBFRVVZGWliYcQlgTSt4rmrG3FW8RMFFJTk5Gy5YtoaqqCgDQ1NSErq4ufv75Z3Tr1g2Wlpb4\n7LPPhHg7Ozu4urrC1tYWHTp0wLVr1zBy5Ei0b98e//3vfwEA8fHxMDMzw8SJE2Fubo4xY8YgJyen\n1HsHBwejV69esLGxgbOzs3As+IIFC2BhYYHOnTvju+++q4WlwJgiLgRMVAYNGoSEhASYmppizpw5\nOHfuHABg7ty5CAsLw+3bt5GTk4MjR44AKF6jV1NTw7Vr1zB79mwMHz4cmzZtQmRkJP766y+8ePEC\nABATE4M5c+YgKioKGhoa2Lhxo8L7pqamwsPDAyEhIbh+/TpsbGywatUqpKWl4eDBg7hz5w5u3rwp\nFBfGahMXAiYqjRo1wvXr17FlyxZoaWlh7Nix8PHxwenTp9GjRw906tQJp0+fRlRUlPAaJycnAEDH\njh3RsWNH6OjooH79+mjbti0SEhIAAAYGBujZsycAYOLEibhw4YLweiLClStXEBUVhV69eqFLly7w\n9fXF48eP0bRpUzRo0ADTp0/HgQMHoK6uXotLg7FivI+AiY5UKkXfvn3Rt29fWFpaYtOmTbh9+zau\nX78OPT09uLu7Izc3V4iXX35AKpUqXIpAKpWisLAQABT2AxBRmfsF7O3tsXPnzlLTw8LCEBISgr17\n92L9+vUICQmptnllTBm8RcBEJSYmBrGxscLjiIgImJmZQSKRoEWLFsjMzERAQECV2338+DGuXLkC\nANi5cyf69OkjPCeRSNCjRw9cvHgRDx48AFB8rZjY2FhkZWUhPT0djo6OWLVqFW7evPkv55CxquMt\nAiYqmZmZ+OKLL5Ceng4VFRWYmJhg8+bNaNasGTp27IhWrVqhe/fuZb62oiOATE1NsWHDBkybNg0W\nFhaYPXu2wvMtW7bEX3/9hXHjxglHKXl4eKBJkyYYPnw4cnNzQURYvXp19c4wY0rgi84x9i/Fx8dj\n2LBhuH37dl2nwtgb4aEhxqoBnyvA3mW8RcAYYyLHWwSMMSZyXAgYY0zkuBAwxpjIcSFgjDGR40LA\nGGMix4WAMcZE7v8AB0P+jO9JMKkAAAAASUVORK5CYII=\n"
}
],
"prompt_number": 10
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Plotting a heatmap that many R users are used to is a tricky endevour in Python"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Compute and plot first dendrogram.\n",
"fig = plt.figure(figsize=(8,8))\n",
"# x ywidth height\n",
"ax1 = fig.add_axes([0.05,0.1,0.2,0.6])\n",
"Y = linkage(data_dist, method='single')\n",
"Z1 = dendrogram(Y, orientation='right',labels=data.dtype.names) # adding/removing the axes\n",
"ax1.set_xticks([])\n",
"\n",
"# Compute and plot second dendrogram.\n",
"ax2 = fig.add_axes([0.3,0.71,0.6,0.2])\n",
"Z2 = dendrogram(Y)\n",
"ax2.set_xticks([])\n",
"ax2.set_yticks([])\n",
"\n",
"#Compute and plot the heatmap\n",
"axmatrix = fig.add_axes([0.3,0.1,0.6,0.6])\n",
"idx1 = Z1['leaves']\n",
"idx2 = Z2['leaves']\n",
"D = squareform(data_dist)\n",
"D = D[idx1,:]\n",
"D = D[:,idx2]\n",
"im = axmatrix.matshow(D, aspect='auto', origin='lower', cmap=plt.cm.YlGnBu)\n",
"axmatrix.set_xticks([])\n",
"axmatrix.set_yticks([])\n",
"\n",
"# Plot colorbar.\n",
"axcolor = fig.add_axes([0.91,0.1,0.02,0.6])\n",
"plt.colorbar(im, cax=axcolor)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 11,
"text": [
""
]
},
{
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAh4AAAHkCAYAAABxIiaoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XtclHX6P/7XPQcEPIInFBBMURjlJB6wtDzkId2MqGjx\nuOl+6pttrVmZYe2uu2uaZZYZ/dY2U3ELM76lnw5+JTXtZHjWwBQVkoNnBAUHhjn8/qBmRWZg3sDc\n983wej4e81Duueaeaw4M19zv9/2+JJvNZgMRERGRDDRKJ0BEREStBwsPIiIikg0LDyIiIpINCw8i\nIiKSjU7pBMgzSZKkdApERB6vJZ4fwsKD3KYl/kIQEbUULfULHodaiIiISDYsPIiIiEg2LDyIiIhI\nNiw8iIiISDacXEotxvbtwN/+pnQWRJ7HywvIyAA6d1Y6E2oNWHhQi/HTT0CvXsBTTymdCZFn+f3v\ngUuXWHiQPFh4UIvSsydw++1KZ0HkWXx9lc6AWhPO8SAiIiLZsPAgIiIi2bDwICIiItmw8CAiIiLZ\nsPAgIiIi2bDwICIiItmw8CAiIiLZsPAgIiIi2bDwICIiItmw8CAiIiLZcMl0IlItmw3YtQuoqlI6\nE89WUQHs2QPk5SmdiWeLjwf8/JTOQnksPIhItX75BZg8GRg1SulMPFuvXsDHHwNardKZeK7jx4F5\n82ourR0LDyJSLasV6NED+PJLpTMhapr582vez8Q5HkRERCQjFh5EREQkGxYeRERETfD224Ak1X9Z\nuRJ45pmG4z79VOlH434sPIiIiJrgyhXgxRdr5nA05fKHPwAlJUo/Gvfj5FIiIqIm+u2IRVP30Rrw\niAcRERHJhoUHERERyYaFBxEREcmGhQcRERHJhpNLiVoAmw34/vvW17OkuBiorAR27lQ6E/kFBAAG\ng9JZEDU/Fh5ELcDZs8DYscDttyudibwsFqBnT+Cf/1Q6E3kZjcDly0BurtKZEDU/Fh5ELcBvf4Bb\n4zf/1ujMGeDuu5XOgsg9OMeDiIiIZMPCg4iIiGTDwoOIiIhkw8KDiIiIZMPCg4iIiGTDwoOIiIhk\nw8KDiIiIZMPCg4iIiGTDwoOIiIhkw8KDiIiIZMPCg4iIiGTDwoOIiIhkw8KDiIiIZMPCg4iIiGTD\nwoOIiIhkw8KDiIiIZMPCg4iIiGTDwoOIiIhkw8KDiIiIZMPCg4iIiGTDwoOIiIhkw8KDiIiIZMPC\n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\nGiAAAAAASUVORK5CYII=\n"
}
],
"prompt_number": 11
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"2. Fastcluster implementation is superior in memory usage"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Learn more about the fastcluster module http://math.stanford.edu/~muellner/fastcluster.html?section=0"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from fastcluster import *\n",
"%timeit data_link = linkage(data_array, method='single', metric='euclidean', preserve_input=True)\n",
"dendrogram(data_link,labels=data.dtype.names)\n",
"plt.xlabel('Samples')\n",
"plt.ylabel('Distance')\n",
"plt.suptitle('Samples clustering', fontweight='bold', fontsize=14);\n",
"show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"10 loops, best of 3: 41.9 ms per loop\n"
]
},
{
"output_type": "display_data",
"png": "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\n"
}
],
"prompt_number": 12
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"3. BioPython. Unique data exploration posibilities."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Biopython example would be rather specfic to bioinformatics. The output of the clustering should be viewed with TreeView program\n",
"First, we need to read the data to a special bioipython.record object."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from Bio.Cluster import *\n",
"handle = open(\"../data/ExpRawData-E-TABM-84-A-AFFY-44.tab\")\n",
"record = read(handle)"
],
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To fully appreciate this approach, we'll perform the clustering both by genes and by samples. Gene clustering will take a while in this example, subset the data to see the results faster. Fastcluster is also capable to perform gene clustering in a reasonable time."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"genetree = record.treecluster(method='s')\n",
"genetree.scale()\n",
"exptree = record.treecluster(dist='u', transpose=1)\n",
"record.save(\"../results/biopython_clustering\", genetree, exptree)"
],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}