{ "cells": [ { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "# ∆QT Database Example Use\n", "\n", "Sample notebook for querying ∆QT Database ([download this notebook](/index/static/QTDb_example_use.ipynb))\n", "\n", "Can also incorporate [Twosides](http://tatonettilab.org/resources/tatonetti-stm.html) for gathering additional evidence for drug-side effect relationships \n", "\n", "**Input:** [Drug(s) to evaluate from list of drugs in database](#input)\n", "\n", "**Step 1:** [Define function for extracting ∆QTs from API](#step1)\n", "\n", "**Step 2:** [API call to obtain ∆QTs for each individual drug and combination](#step2)\n", "\n", "**Step 3:** [Bin ∆QTs for visualizing in histogram](#step3)\n", "\n", "**Step 4:** [Visualize ∆QTs](#step4)\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/usr/local/lib/python2.7/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.\n", " warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')\n" ] } ], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from urllib2 import Request, urlopen, URLError\n", "import json\n", "\n", "import numpy as np\n", "from collections import defaultdict\n", "\n", "import matplotlib.pyplot as plt\n", "#import seaborn as sns" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Demo" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "**Input:** Drug(s) to evaluate from list of drugs in database" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "251 drugs found\n" ] } ], "source": [ "# Obtain list of possible drugs\n", "concept2name = dict()\n", "name2concept = dict()\n", "\n", "request = Request('http://deltaqt.org/index/js/drugs-brandnames-v4.js')\n", "response = urlopen(request).read()\n", "\n", "for line in response.split('\\n'):\n", " if line.startswith('//') == False and line.startswith('var') == False and line not in ['','];']:\n", " if line.split(\"'\")[1].startswith('('):\n", " continue\n", " concept_id = int(line.split(\"'\")[1])\n", " drugname = line.split(\"'\")[-2].split('(')[0].strip()\n", " #print concept_id, drugname\n", " concept2name[concept_id] = drugname\n", " name2concept[drugname] = concept_id\n", "\n", "print '\\n',len(concept2name), \"drugs found\"" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1309944\n" ] }, { "data": { "text/plain": [ "'1309944'" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Test for amiodarone alone\n", "print name2concept['Amiodarone']\n", "drugs = [1309944]\n", "drugs_api_str = \",\".join([str(d) for d in drugs])\n", "drugs_api_str" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1777806 929887\n" ] }, { "data": { "text/plain": [ "'1777806,929887'" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Test for ceftriaxone and lansoprazole\n", "print name2concept['Ceftriaxone'], name2concept['Lansoprazole']\n", "drugs = [1777806, 929887]\n", "drugs_api_str = \",\".join([str(d) for d in drugs])\n", "drugs_api_str" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "**Step 1:** Define function for extracting ∆QTs from API" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def pull_deltas(drugs_api_str, cached=False):\n", " if ',' in drugs_api_str:\n", " cached = True\n", " \n", " delta_qts = []\n", " cached_qts = []\n", " request = Request('http://deltaqt.org/api/v1/query?drugs=%s' %drugs_api_str)\n", " \n", " try:\n", " response = urlopen(request).read()\n", " decoded = json.loads(response)\n", " #print len(decoded)\n", "\n", " for p in decoded['delta_qts']:\n", " delta_qts.append( p['delta'] )\n", " \n", " if cached == True:\n", " for p in decoded['cache_'+drugs_api_str.split(',')[1]]:\n", " cached_qts.append( p['delta'] )\n", " \n", " except URLError, e:\n", " print '%s not found in database' %drugs_api_str, e\n", " \n", " if cached == True:\n", " return delta_qts, cached_qts\n", " else:\n", " return delta_qts" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "**Step 2:** API call to obtain ∆QTs for each individual drug and combination" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1777806, 929887]\n" ] } ], "source": [ "print drugs\n", "drugs_api_str = \",\".join([str(d) for d in drugs])\n", "\n", "delta_qts = []\n", "individ_drug_qts = defaultdict(list)\n", "\n", "if len(drugs) == 1:\n", " delta_qts = pull_deltas(drugs_api_str)\n", "elif len(drugs) > 1:\n", " # API returns deltas for patients taking all N drugs, and for the Nth drug alone\n", " # Need to run API for 1 – (N-1)th drugs\n", " for d in drugs[0:-1]:\n", " individ_drug_qts[d] = pull_deltas(str(d))\n", " \n", " delta_qts, individ_drug_qts[drugs[-1]] = pull_deltas(drugs_api_str)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "**Step 3:** Bin ∆QTs for visualizing in histogram" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3 bins\n" ] } ], "source": [ "thresholds = [-110, -100, -90, -80, -70, -60, -50, -40, -30, -20, -10, 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150]\n", "\n", "bins = dict()\n", "\n", "delta_qts_arr = np.array(delta_qts)\n", "weights = np.ones_like(delta_qts_arr)/float(len(delta_qts_arr))*100.0\n", "hist, bin_edges = np.histogram(delta_qts_arr, weights=weights, bins=thresholds)\n", "bins['all'] = hist\n", "\n", "if len(drugs) > 1:\n", " for d in individ_drug_qts:\n", " individ_drug_qts_arr = np.array(individ_drug_qts[d])\n", " weights = np.ones_like(individ_drug_qts_arr)/float(len(individ_drug_qts_arr))*100.0\n", " hist, bin_edges = np.histogram(individ_drug_qts_arr, weights=weights, bins=thresholds)\n", " bins[d] = hist\n", "print len(bins), \"bins\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "**Step 4:** Visualize ∆QTs" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "xpos = [(bin_edges[i]+bin_edges[i+1])/2 for i in range(len(bin_edges)-1)]\n", "if len(drugs) == 1:\n", " plt.bar(xpos, bins['all'], width=8, label=concept2name[drugs[0]])\n", "\n", "elif len(drugs) > 1:\n", " plt.bar(xpos, bins['all'], width=8, label='Combo')\n", " for d in drugs:\n", " plt.plot(xpos, bins[d], label=concept2name[d])\n", "\n", "plt.xlim(-115,155)\n", "plt.ylim(0,28)\n", "plt.xlabel(u'∆QTc (milliseconds)')\n", "plt.ylabel('% of patients')\n", "plt.legend()" ] }, { "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.9" } }, "nbformat": 4, "nbformat_minor": 2 }