Skip to content

Instantly share code, notes, and snippets.

@nvictus
Last active August 11, 2016 00:23
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nvictus/904160bca9d0e8d5aeeb to your computer and use it in GitHub Desktop.
Save nvictus/904160bca9d0e8d5aeeb to your computer and use it in GitHub Desktop.
cooler-example
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Cooler quickstart"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from __future__ import division, print_function # good backports to include when using Python 2\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import pandas\n",
"import h5py\n",
"\n",
"import cooler"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"filepath = 'hg19/Dixon2012-H1hESC-HindIII-allreps-filtered.1000kb.cool'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Cooler class"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Accepts a file path or an open HDF5 file object.\n",
"\n",
"NOTE: Using a filepath allows the `Cooler` object to be serialized/pickled (e.g. for distributing to workers) since the file is only opened when needed.\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"c = cooler.Cooler(filepath)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### The info dictionary"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{u'balancing': {u'ignore_diags': 1, u'min_nnz': 100, u'min_sum': 100},\n",
" u'bin-size': 1000000,\n",
" u'bin-type': u'fixed',\n",
" u'creation-date': u'2016-01-14T19:32:46.676246',\n",
" u'format-url': u'https://github.com/mirnylab/cooler',\n",
" u'format-version': 0,\n",
" u'genome-assembly': u'hg19',\n",
" u'id': None,\n",
" u'library-version': u'0.2dev',\n",
" u'metadata': {u'QC': {u'double-sided': {u'filtered-invalid': {u'removed-dangling-ends': 184184781,\n",
" u'removed-error-pair': 1373265,\n",
" u'removed-self-circles': 5433038},\n",
" u'filtered-valid': {u'removed-duplicate': 72802322,\n",
" u'removed-large-small-pair': 451651,\n",
" u'removed-outlier-fragment': 3747662,\n",
" u'removed-start-near-rsite': 14112159},\n",
" u'total': 425788121,\n",
" u'valid': 234797037},\n",
" u'post-filtering': {u'cis': 105233052,\n",
" u'total': 143683243,\n",
" u'trans': 38450191},\n",
" u'pre-filtering': {u'double-sided': 425788121,\n",
" u'single-sided': 206721732,\n",
" u'total': 632509853,\n",
" u'unused': 0}},\n",
" u'cell-type': u'H1-hESC',\n",
" u'enzyme': u'HindIII',\n",
" u'species': u'Homo sapiens'},\n",
" u'nbins': 3053,\n",
" u'nchroms': 23,\n",
" u'nnz': 4222903}"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c.info"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Tables\n",
"Tables are accessed via methods."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<cooler.models.Sliceable1D at 0x7f5d6d1672d0>"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c.chromtable()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The return value is a \"sliceable\" object that accepts range selections (\"slices\").\n",
"\n",
"Slice selections return pandas [DataFrames](http://pandas.pydata.org/pandas-docs/stable/dsintro.html#dataframe)."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>name</th>\n",
" <th>length</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>chr2</td>\n",
" <td>243199373</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>chr3</td>\n",
" <td>198022430</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>chr4</td>\n",
" <td>191154276</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>chr5</td>\n",
" <td>180915260</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" name length\n",
"1 chr2 243199373\n",
"2 chr3 198022430\n",
"3 chr4 191154276\n",
"4 chr5 180915260"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c.chromtable()[1:5]"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>name</th>\n",
" <th>length</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>chr1</td>\n",
" <td>249250621</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>chr2</td>\n",
" <td>243199373</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>chr3</td>\n",
" <td>198022430</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>chr4</td>\n",
" <td>191154276</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>chr5</td>\n",
" <td>180915260</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>chr6</td>\n",
" <td>171115067</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>chr7</td>\n",
" <td>159138663</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>chr8</td>\n",
" <td>146364022</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>chr9</td>\n",
" <td>141213431</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>chr10</td>\n",
" <td>135534747</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>chr11</td>\n",
" <td>135006516</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>chr12</td>\n",
" <td>133851895</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>chr13</td>\n",
" <td>115169878</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>chr14</td>\n",
" <td>107349540</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>chr15</td>\n",
" <td>102531392</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>chr16</td>\n",
" <td>90354753</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>chr17</td>\n",
" <td>81195210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>chr18</td>\n",
" <td>78077248</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>chr19</td>\n",
" <td>59128983</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>chr20</td>\n",
" <td>63025520</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>chr21</td>\n",
" <td>48129895</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>chr22</td>\n",
" <td>51304566</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>chrX</td>\n",
" <td>155270560</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" name length\n",
"0 chr1 249250621\n",
"1 chr2 243199373\n",
"2 chr3 198022430\n",
"3 chr4 191154276\n",
"4 chr5 180915260\n",
"5 chr6 171115067\n",
"6 chr7 159138663\n",
"7 chr8 146364022\n",
"8 chr9 141213431\n",
"9 chr10 135534747\n",
"10 chr11 135006516\n",
"11 chr12 133851895\n",
"12 chr13 115169878\n",
"13 chr14 107349540\n",
"14 chr15 102531392\n",
"15 chr16 90354753\n",
"16 chr17 81195210\n",
"17 chr18 78077248\n",
"18 chr19 59128983\n",
"19 chr20 63025520\n",
"20 chr21 48129895\n",
"21 chr22 51304566\n",
"22 chrX 155270560"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# get the whole table\n",
"c.chromtable()[:]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the bin table, the **weight** column contains the _bias-correction weights_ computed for each genomic bin."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>chrom</th>\n",
" <th>start</th>\n",
" <th>end</th>\n",
" <th>weight</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>chr1</td>\n",
" <td>0</td>\n",
" <td>1000000</td>\n",
" <td>15.995629</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>chr1</td>\n",
" <td>1000000</td>\n",
" <td>2000000</td>\n",
" <td>2.845634</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>chr1</td>\n",
" <td>2000000</td>\n",
" <td>3000000</td>\n",
" <td>2.703508</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>chr1</td>\n",
" <td>3000000</td>\n",
" <td>4000000</td>\n",
" <td>2.291863</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>chr1</td>\n",
" <td>4000000</td>\n",
" <td>5000000</td>\n",
" <td>1.273714</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>chr1</td>\n",
" <td>5000000</td>\n",
" <td>6000000</td>\n",
" <td>1.061158</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>chr1</td>\n",
" <td>6000000</td>\n",
" <td>7000000</td>\n",
" <td>1.394054</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>chr1</td>\n",
" <td>7000000</td>\n",
" <td>8000000</td>\n",
" <td>1.425476</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>chr1</td>\n",
" <td>8000000</td>\n",
" <td>9000000</td>\n",
" <td>1.159956</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>chr1</td>\n",
" <td>9000000</td>\n",
" <td>10000000</td>\n",
" <td>1.672036</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" chrom start end weight\n",
"0 chr1 0 1000000 15.995629\n",
"1 chr1 1000000 2000000 2.845634\n",
"2 chr1 2000000 3000000 2.703508\n",
"3 chr1 3000000 4000000 2.291863\n",
"4 chr1 4000000 5000000 1.273714\n",
"5 chr1 5000000 6000000 1.061158\n",
"6 chr1 6000000 7000000 1.394054\n",
"7 chr1 7000000 8000000 1.425476\n",
"8 chr1 8000000 9000000 1.159956\n",
"9 chr1 9000000 10000000 1.672036"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c.bintable()[:10]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The pixel table contains the non-zero upper triangle entries of the contact map. By default, any query is joined with the bin table to give the genomic bin coordinates and the pixel value."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>chrom1</th>\n",
" <th>start1</th>\n",
" <th>end1</th>\n",
" <th>chrom2</th>\n",
" <th>start2</th>\n",
" <th>end2</th>\n",
" <th>count</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>chr1</td>\n",
" <td>0</td>\n",
" <td>1000000</td>\n",
" <td>chr1</td>\n",
" <td>0</td>\n",
" <td>1000000</td>\n",
" <td>106</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>chr1</td>\n",
" <td>0</td>\n",
" <td>1000000</td>\n",
" <td>chr1</td>\n",
" <td>1000000</td>\n",
" <td>2000000</td>\n",
" <td>101</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>chr1</td>\n",
" <td>0</td>\n",
" <td>1000000</td>\n",
" <td>chr1</td>\n",
" <td>2000000</td>\n",
" <td>3000000</td>\n",
" <td>33</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>chr1</td>\n",
" <td>0</td>\n",
" <td>1000000</td>\n",
" <td>chr1</td>\n",
" <td>3000000</td>\n",
" <td>4000000</td>\n",
" <td>21</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>chr1</td>\n",
" <td>0</td>\n",
" <td>1000000</td>\n",
" <td>chr1</td>\n",
" <td>4000000</td>\n",
" <td>5000000</td>\n",
" <td>16</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>chr1</td>\n",
" <td>0</td>\n",
" <td>1000000</td>\n",
" <td>chr1</td>\n",
" <td>5000000</td>\n",
" <td>6000000</td>\n",
" <td>20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>chr1</td>\n",
" <td>0</td>\n",
" <td>1000000</td>\n",
" <td>chr1</td>\n",
" <td>6000000</td>\n",
" <td>7000000</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>chr1</td>\n",
" <td>0</td>\n",
" <td>1000000</td>\n",
" <td>chr1</td>\n",
" <td>7000000</td>\n",
" <td>8000000</td>\n",
" <td>17</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>chr1</td>\n",
" <td>0</td>\n",
" <td>1000000</td>\n",
" <td>chr1</td>\n",
" <td>8000000</td>\n",
" <td>9000000</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>chr1</td>\n",
" <td>0</td>\n",
" <td>1000000</td>\n",
" <td>chr1</td>\n",
" <td>9000000</td>\n",
" <td>10000000</td>\n",
" <td>6</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" chrom1 start1 end1 chrom2 start2 end2 count\n",
"0 chr1 0 1000000 chr1 0 1000000 106\n",
"1 chr1 0 1000000 chr1 1000000 2000000 101\n",
"2 chr1 0 1000000 chr1 2000000 3000000 33\n",
"3 chr1 0 1000000 chr1 3000000 4000000 21\n",
"4 chr1 0 1000000 chr1 4000000 5000000 16\n",
"5 chr1 0 1000000 chr1 5000000 6000000 20\n",
"6 chr1 0 1000000 chr1 6000000 7000000 8\n",
"7 chr1 0 1000000 chr1 7000000 8000000 17\n",
"8 chr1 0 1000000 chr1 8000000 9000000 10\n",
"9 chr1 0 1000000 chr1 9000000 10000000 6"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c.pixeltable()[:10]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Use the `join=False` option if you do not want this behavior."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>bin1_id</th>\n",
" <th>bin2_id</th>\n",
" <th>count</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>106</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>101</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>33</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>21</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" <td>16</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>0</td>\n",
" <td>5</td>\n",
" <td>20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>0</td>\n",
" <td>6</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>0</td>\n",
" <td>7</td>\n",
" <td>17</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>0</td>\n",
" <td>8</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" <td>6</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" bin1_id bin2_id count\n",
"0 0 0 106\n",
"1 0 1 101\n",
"2 0 2 33\n",
"3 0 3 21\n",
"4 0 4 16\n",
"5 0 5 20\n",
"6 0 6 8\n",
"7 0 7 17\n",
"8 0 8 10\n",
"9 0 9 6"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c.pixeltable(join=False)[:10]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Pandas lets you readily dump any table selection to tabular text file."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"df = c.pixeltable()[:100]\n",
"\n",
"# tab-delimited file, don't write the index column or header row\n",
"df.to_csv('myselection.txt', sep='\\t', index=False, header=False)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"chr1\t0\t1000000\tchr1\t0\t1000000\t106\r\n",
"chr1\t0\t1000000\tchr1\t1000000\t2000000\t101\r\n",
"chr1\t0\t1000000\tchr1\t2000000\t3000000\t33\r\n",
"chr1\t0\t1000000\tchr1\t3000000\t4000000\t21\r\n",
"chr1\t0\t1000000\tchr1\t4000000\t5000000\t16\r\n",
"chr1\t0\t1000000\tchr1\t5000000\t6000000\t20\r\n",
"chr1\t0\t1000000\tchr1\t6000000\t7000000\t8\r\n",
"chr1\t0\t1000000\tchr1\t7000000\t8000000\t17\r\n",
"chr1\t0\t1000000\tchr1\t8000000\t9000000\t10\r\n",
"chr1\t0\t1000000\tchr1\t9000000\t10000000\t6\r\n"
]
}
],
"source": [
"!head myselection.txt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Enter The Matrix\n",
"\n",
"Finally, the `matrix` method returns a 2D-sliceable object to perform range queries on the contact map."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<cooler.models.Sliceable2D at 0x7f5d6d18ef50>"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c.matrix()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The result of a query is a `scipy.sparse.coo_matrix` object."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<100x100 sparse matrix of type '<type 'numpy.int64'>'\n",
"\twith 9958 stored elements in COOrdinate format>"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mat = c.matrix()[:100, :100]\n",
"mat"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It is straightforward to convert to a dense 2D numpy array."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 106, 101, 33, ..., 0, 1, 0],\n",
" [ 94, 1972, 563, ..., 2, 3, 2],\n",
" [ 26, 491, 3306, ..., 2, 4, 1],\n",
" ..., \n",
" [ 0, 3, 1, ..., 22679, 8813, 1678],\n",
" [ 1, 4, 2, ..., 8866, 30890, 5239],\n",
" [ 0, 2, 3, ..., 1733, 5204, 22840]])"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"arr = mat.toarray()\n",
"arr"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.colorbar.Colorbar instance at 0x7f5d66e51440>"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\ncDQF/h/rPIZciLLWDQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5d66f6d050>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(5,5))\n",
"ax = fig.add_subplot(111)\n",
"im = ax.matshow(np.log10(arr))\n",
"fig.colorbar(im)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Genomic coordinate range selection"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The bin table, pixel table and matrix accessors also accept UCSC-style genomic range strings or (chrom, start, end) triples."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>chrom</th>\n",
" <th>start</th>\n",
" <th>end</th>\n",
" <th>weight</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>260</th>\n",
" <td>chr2</td>\n",
" <td>10000000</td>\n",
" <td>11000000</td>\n",
" <td>1.350761</td>\n",
" </tr>\n",
" <tr>\n",
" <th>261</th>\n",
" <td>chr2</td>\n",
" <td>11000000</td>\n",
" <td>12000000</td>\n",
" <td>1.065605</td>\n",
" </tr>\n",
" <tr>\n",
" <th>262</th>\n",
" <td>chr2</td>\n",
" <td>12000000</td>\n",
" <td>13000000</td>\n",
" <td>0.928439</td>\n",
" </tr>\n",
" <tr>\n",
" <th>263</th>\n",
" <td>chr2</td>\n",
" <td>13000000</td>\n",
" <td>14000000</td>\n",
" <td>0.986804</td>\n",
" </tr>\n",
" <tr>\n",
" <th>264</th>\n",
" <td>chr2</td>\n",
" <td>14000000</td>\n",
" <td>15000000</td>\n",
" <td>1.013347</td>\n",
" </tr>\n",
" <tr>\n",
" <th>265</th>\n",
" <td>chr2</td>\n",
" <td>15000000</td>\n",
" <td>16000000</td>\n",
" <td>0.845909</td>\n",
" </tr>\n",
" <tr>\n",
" <th>266</th>\n",
" <td>chr2</td>\n",
" <td>16000000</td>\n",
" <td>17000000</td>\n",
" <td>1.002781</td>\n",
" </tr>\n",
" <tr>\n",
" <th>267</th>\n",
" <td>chr2</td>\n",
" <td>17000000</td>\n",
" <td>18000000</td>\n",
" <td>0.837734</td>\n",
" </tr>\n",
" <tr>\n",
" <th>268</th>\n",
" <td>chr2</td>\n",
" <td>18000000</td>\n",
" <td>19000000</td>\n",
" <td>0.950148</td>\n",
" </tr>\n",
" <tr>\n",
" <th>269</th>\n",
" <td>chr2</td>\n",
" <td>19000000</td>\n",
" <td>20000000</td>\n",
" <td>0.994372</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" chrom start end weight\n",
"260 chr2 10000000 11000000 1.350761\n",
"261 chr2 11000000 12000000 1.065605\n",
"262 chr2 12000000 13000000 0.928439\n",
"263 chr2 13000000 14000000 0.986804\n",
"264 chr2 14000000 15000000 1.013347\n",
"265 chr2 15000000 16000000 0.845909\n",
"266 chr2 16000000 17000000 1.002781\n",
"267 chr2 17000000 18000000 0.837734\n",
"268 chr2 18000000 19000000 0.950148\n",
"269 chr2 19000000 20000000 0.994372"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c.bintable().fetch('chr2:10,000,000-20,000,000')"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"cis = c.matrix().fetch('chr21')\n",
"trans = c.matrix().fetch('chr21', 'chr22')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Balancing your selection"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Use the bin balancing weights to correct for biases."
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# get the balancing weights as a numpy array\n",
"bias = c.bintable()[:100]['weight'].values\n",
"\n",
"# fetch a sparse matrix\n",
"mat = c.matrix()[:100, :100]\n",
"\n",
"# apply the balancing weights\n",
"mat.data = bias[mat.row] * bias[mat.col] * mat.data\n",
"\n",
"# convert to numpy array\n",
"arr = mat.toarray()"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.colorbar.Colorbar instance at 0x7f5d66d0e758>"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5d66db6e50>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(5,5))\n",
"ax = fig.add_subplot(111)\n",
"im = ax.matshow(np.log10(arr))\n",
"fig.colorbar(im)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Functional API\n",
"\n",
"Instead of the methods of the `Cooler` class, you can use the similarly named functions in the `cooler` module directly. However, they will only accept an open HDF5 file handle, not a file path string, and they execute their queries eagerly."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Open the HDF5 file with h5py"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"h5 = h5py.File(filepath, 'r')"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{u'balancing': {u'ignore_diags': 1, u'min_nnz': 100, u'min_sum': 100},\n",
" u'bin-size': 1000000,\n",
" u'bin-type': u'fixed',\n",
" u'creation-date': u'2016-01-14T19:32:46.676246',\n",
" u'format-url': u'https://github.com/mirnylab/cooler',\n",
" u'format-version': 0,\n",
" u'genome-assembly': u'hg19',\n",
" u'id': None,\n",
" u'library-version': u'0.2dev',\n",
" u'metadata': {u'QC': {u'double-sided': {u'filtered-invalid': {u'removed-dangling-ends': 184184781,\n",
" u'removed-error-pair': 1373265,\n",
" u'removed-self-circles': 5433038},\n",
" u'filtered-valid': {u'removed-duplicate': 72802322,\n",
" u'removed-large-small-pair': 451651,\n",
" u'removed-outlier-fragment': 3747662,\n",
" u'removed-start-near-rsite': 14112159},\n",
" u'total': 425788121,\n",
" u'valid': 234797037},\n",
" u'post-filtering': {u'cis': 105233052,\n",
" u'total': 143683243,\n",
" u'trans': 38450191},\n",
" u'pre-filtering': {u'double-sided': 425788121,\n",
" u'single-sided': 206721732,\n",
" u'total': 632509853,\n",
" u'unused': 0}},\n",
" u'cell-type': u'H1-hESC',\n",
" u'enzyme': u'HindIII',\n",
" u'species': u'Homo sapiens'},\n",
" u'nbins': 3053,\n",
" u'nchroms': 23,\n",
" u'nnz': 4222903}"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cooler.info(h5)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>chrom</th>\n",
" <th>start</th>\n",
" <th>end</th>\n",
" <th>weight</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>chr1</td>\n",
" <td>0</td>\n",
" <td>1000000</td>\n",
" <td>15.995629</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>chr1</td>\n",
" <td>1000000</td>\n",
" <td>2000000</td>\n",
" <td>2.845634</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>chr1</td>\n",
" <td>2000000</td>\n",
" <td>3000000</td>\n",
" <td>2.703508</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>chr1</td>\n",
" <td>3000000</td>\n",
" <td>4000000</td>\n",
" <td>2.291863</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>chr1</td>\n",
" <td>4000000</td>\n",
" <td>5000000</td>\n",
" <td>1.273714</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>chr1</td>\n",
" <td>5000000</td>\n",
" <td>6000000</td>\n",
" <td>1.061158</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>chr1</td>\n",
" <td>6000000</td>\n",
" <td>7000000</td>\n",
" <td>1.394054</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>chr1</td>\n",
" <td>7000000</td>\n",
" <td>8000000</td>\n",
" <td>1.425476</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>chr1</td>\n",
" <td>8000000</td>\n",
" <td>9000000</td>\n",
" <td>1.159956</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>chr1</td>\n",
" <td>9000000</td>\n",
" <td>10000000</td>\n",
" <td>1.672036</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" chrom start end weight\n",
"0 chr1 0 1000000 15.995629\n",
"1 chr1 1000000 2000000 2.845634\n",
"2 chr1 2000000 3000000 2.703508\n",
"3 chr1 3000000 4000000 2.291863\n",
"4 chr1 4000000 5000000 1.273714\n",
"5 chr1 5000000 6000000 1.061158\n",
"6 chr1 6000000 7000000 1.394054\n",
"7 chr1 7000000 8000000 1.425476\n",
"8 chr1 8000000 9000000 1.159956\n",
"9 chr1 9000000 10000000 1.672036"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cooler.bintable(h5, 0, 10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"... etc."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Direct access with `h5py`\n",
"\n",
"If you don't care for the dataframe output, or want lower-level access to the data, the `h5py` library provides an excellent Pythonic interface between HDF5 and native `numpy` arrays and dtypes. It allows you to treat an HDF5 file like a dictionary. `cooler` is just a thin wrapper over `h5py`."
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<HDF5 file \"Dixon2012-H1hESC-HindIII-allreps-filtered.1000kb.cool\" (mode r)>"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"h5"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[u'bins', u'indexes', u'matrix', u'scaffolds']"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"h5.keys()"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"h5['matrix']['bin2_id'][:10]"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([106, 101, 33, 21, 16, 20, 8, 17, 10, 6])"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"h5['matrix']['count'][:10]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"What `h5py` **won't** give you, however, is the _matrix abstraction_: letting you query the upper triangle pixel table as if it were a complete matrix."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.11"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment