Skip to content

Instantly share code, notes, and snippets.

@wasade
Created July 31, 2015 15:34
Show Gist options
  • Select an option

  • Save wasade/22b96005a18636ef158a to your computer and use it in GitHub Desktop.

Select an option

Save wasade/22b96005a18636ef158a to your computer and use it in GitHub Desktop.
Benching cogent's TreeNode.copy method
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "",
"signature": "sha256:8ccd979552b286191d2c525d66cecdef56ae7880db4bd9ec999a8e2ba0d49149"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"%matplotlib inline\n",
"import seaborn; seaborn.set()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stderr",
"text": [
"/Users/mcdonadt/.virtualenvs/python27/lib/python2.7/site-packages/pytz/__init__.py:29: UserWarning: Module argparse was already imported from /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/argparse.pyc, but /Users/mcdonadt/.virtualenvs/python27/lib/python2.7/site-packages is being added to sys.path\n",
" from pkg_resources import resource_stream\n"
]
}
],
"prompt_number": 11
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from cogent.parse.tree import DndParser\n",
"import os\n",
"base = '../ResearchWork/greengenes_release/gg_13_8_otus/trees/'\n",
"trees = sorted([os.path.join(base, l) for l in os.listdir(base) if 'unannotated' in l])"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 8
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"tips = []\n",
"times = []\n",
"for t in trees:\n",
" loaded = DndParser(open(t))\n",
" n_tips = len(list(loaded.traverse()))\n",
" tips.append(n_tips)\n",
" print \"File: %s, tips: %d\" % (t, n_tips)\n",
" time_result = %timeit -o _ = loaded.copy()\n",
" times.append(time_result.best)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"File: ../ResearchWork/greengenes_release/gg_13_8_otus/trees/61_otus_unannotated.tree, tips: 43\n",
"1000 loops, best of 3: 971 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"File: ../ResearchWork/greengenes_release/gg_13_8_otus/trees/64_otus_unannotated.tree, tips: 65\n",
"1000 loops, best of 3: 1.38 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"File: ../ResearchWork/greengenes_release/gg_13_8_otus/trees/67_otus_unannotated.tree, tips: 105\n",
"100 loops, best of 3: 2.1 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"File: ../ResearchWork/greengenes_release/gg_13_8_otus/trees/70_otus_unannotated.tree, tips: 249\n",
"100 loops, best of 3: 5.58 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"File: ../ResearchWork/greengenes_release/gg_13_8_otus/trees/73_otus_unannotated.tree, tips: 533\n",
"100 loops, best of 3: 11 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"File: ../ResearchWork/greengenes_release/gg_13_8_otus/trees/76_otus_unannotated.tree, tips: 1107\n",
"10 loops, best of 3: 23.3 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"File: ../ResearchWork/greengenes_release/gg_13_8_otus/trees/79_otus_unannotated.tree, tips: 2329"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"10 loops, best of 3: 50.8 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"File: ../ResearchWork/greengenes_release/gg_13_8_otus/trees/82_otus_unannotated.tree, tips: 4991"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"10 loops, best of 3: 109 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"File: ../ResearchWork/greengenes_release/gg_13_8_otus/trees/85_otus_unannotated.tree, tips: 10175"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"1 loops, best of 3: 218 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"File: ../ResearchWork/greengenes_release/gg_13_8_otus/trees/88_otus_unannotated.tree, tips: 21087"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"1 loops, best of 3: 494 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"File: ../ResearchWork/greengenes_release/gg_13_8_otus/trees/91_otus_unannotated.tree, tips: 44179"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"1 loops, best of 3: 950 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"File: ../ResearchWork/greengenes_release/gg_13_8_otus/trees/94_otus_unannotated.tree, tips: 92511"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"1 loops, best of 3: 2.03 s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"File: ../ResearchWork/greengenes_release/gg_13_8_otus/trees/97_otus_unannotated.tree, tips: 198643"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"1 loops, best of 3: 4.42 s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"File: ../ResearchWork/greengenes_release/gg_13_8_otus/trees/99_otus_unannotated.tree, tips: 406886"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"1 loops, best of 3: 9.12 s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n"
]
}
],
"prompt_number": 10
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"p = np.poly1d(np.polyfit(tips, times, 2))\n",
"times_ = [p(n) for n in tips]\n",
"plot(tips, times)\n",
"plot(tips, times_)\n",
"xscale('log')\n",
"yscale('log')\n",
"\n",
"times_lumped = times[:]\n",
"times_lumped.extend(times_)\n",
"xlim(min(tips), max(tips))\n",
"ylim(min(times_lumped), max(times_lumped))\n",
"\n",
"legend(['observed', 'fit'], loc=2, prop={'size':20})"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 31,
"text": [
"<matplotlib.legend.Legend at 0x11252ad10>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": [
"<matplotlib.figure.Figure at 0x11107d610>"
]
}
],
"prompt_number": 31
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"emp_tips = 7500000.0\n",
"emp_samples = 30000.0\n",
"hour = 60 * 60.0\n",
"((emp_samples ** 2) * p(emp_tips)) / hour / 1e6"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 33,
"text": [
"56.318149366432017"
]
}
],
"prompt_number": 33
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"np.corrcoef(times, times_) ** 2"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 38,
"text": [
"array([[ 1. , 0.99997783],\n",
" [ 0.99997783, 1. ]])"
]
}
],
"prompt_number": 38
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment