├── data └── README.md ├── LICENSE ├── .gitignore ├── README.md ├── 05-project.ipynb ├── 02-demographics-and-severity-of-illness.ipynb └── 01-explore-patient-table.ipynb /data/README.md: -------------------------------------------------------------------------------- 1 | Copy the eICU Collaborative Research Database SQLite file ('eicu_demo.sqlite3') into this directory. 2 | 3 | 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 MIT Laboratory for Computational Physiology 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | 49 | # Translations 50 | *.mo 51 | *.pot 52 | 53 | # Django stuff: 54 | *.log 55 | local_settings.py 56 | 57 | # Flask stuff: 58 | instance/ 59 | .webassets-cache 60 | 61 | # Scrapy stuff: 62 | .scrapy 63 | 64 | # Sphinx documentation 65 | docs/_build/ 66 | 67 | # PyBuilder 68 | target/ 69 | 70 | # Jupyter Notebook 71 | .ipynb_checkpoints 72 | 73 | # pyenv 74 | .python-version 75 | 76 | # celery beat schedule file 77 | celerybeat-schedule 78 | 79 | # SageMath parsed files 80 | *.sage.py 81 | 82 | # dotenv 83 | .env 84 | 85 | # virtualenv 86 | .venv 87 | venv/ 88 | ENV/ 89 | 90 | # Spyder project settings 91 | .spyderproject 92 | .spyproject 93 | 94 | # Rope project settings 95 | .ropeproject 96 | 97 | # mkdocs documentation 98 | /site 99 | 100 | # mypy 101 | .mypy_cache/ 102 | 103 | # ignore data folder 104 | /data 105 | 106 | # ignore .DS_Store 107 | .DS_Store 108 | 109 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Materials for the Open Science Fair 2017 workshop 2 | 3 | http://www.opensciencefair.eu/training/parallel-day-2-1/datathons-in-evidence-based-medicine-applying-open-science-principles-to-support-cross-disciplinary-education-and-research 4 | 5 | ## Organisers 6 | 7 | Tom Pollard - MIT, George E. Dafoulas - Medical School, University of Athens, Lefteris Thireos - Athens Medical Society, Haralampos Karanikas- Hellenic Society of e-Health Services and Education. 8 | 9 | ## Duration 10 | 11 | 1.5 hours 12 | 13 | ## Overview 14 | 15 | In this interactive workshop we explore how open science enables “datathons”, events that bring together teams of researchers to work together on unanswered clinical questions. We begin by outlining the datathon model and describe our experiences in holding these events internationally. We then offer an opportunity to participate in an interactice exercise, working together to analyse highly detailed information collected from patients admitted to critical care units at a large tertiary care hospital. Participants will learn about open science in clinical research and gain an overview of MIMIC-III, a freely-available critical care dataset collected from over >50,000 hospital stays. 16 | 17 | ## Abstract 18 | 19 | The “Three O” strategic objectives of the European Commission include Open Innovation, Open Science and Open to the World. The vision for open science represents a new approach to the scientific process, based on cooperative work and new ways of sharing knowledge with digital technologies and new collaborative tools. 20 | 21 | When applied to real world health data, the principles of open science have the potential to advance medical practice, validate scientific research outcomes, and offer powerful tools for improving patient services and public health planning. However the ethical, legal and organisational challenges of health data analytics pose major obstacles, requiring a multidisciplinary approach and a special regulatory framework. 22 | 23 | Based on the innovative legacy of hackathons, “datathons” have helped to promote collaborative research and foster dialogue around open science. This interactive workshop spans several themes of the Open Science Fair. We will demonstrate how open science can facilitate collaborative, reproducible research; highlight how open clinical data can be used to educate the next generation of researchers; and introduce tools and techniques for analysing freely-available clinical data. 24 | 25 | ## Target audience 26 | 27 | Academic researchers, industry scientists, healthcare workers, policy makers, biomedical publishers, and research funders. 28 | 29 | ## Agenda 30 | 31 | - Welcome and introduction (5’) by G. Dafoulas 32 | - Big data and evidence based medicine in Greece (10’) by L. Thireos 33 | - Introduction to MIMIC, the eICU Collaborative Research Database and datathons (15’) by T. Pollard 34 | - Analysing MIMIC-III (interactive session) (45’) by T. Pollard 35 | - A health datathon in Greece? Summary and round-up (15’) by H. Karanikas 36 | 37 | ## Speakers/facilitators 38 | 39 | - Tom Pollard, Massachusetts Institute of Technology - MIT, USA 40 | - George E. Dafoulas, Medical School, University of Athens, Greece 41 | - Lefteris Thireos, Member of the National E-Health Board of Greece, Secretary General of the Athens Medical Society 42 | - Haralampos Karanikas, Secretary General of the Executive Board of Hellenic Society of e-Health Services and Education, Centre for Technological Research of Central Greece 43 | -------------------------------------------------------------------------------- /05-project.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# eICU Collaborative Research Database\n", 8 | "\n", 9 | "Before starting this workshop, you will need to copy the eicu demo database file ('eicu_demo.sqlite3') to the `data` directory.\n", 10 | "\n", 11 | "Documentation on the eICU Collaborative Research Database can be found at: http://eicu-crd.mit.edu/." 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": null, 17 | "metadata": { 18 | "collapsed": true 19 | }, 20 | "outputs": [], 21 | "source": [ 22 | "# Import libraries\n", 23 | "import pandas as pd\n", 24 | "import matplotlib.pyplot as plt\n", 25 | "import sqlite3\n", 26 | "import os" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": null, 32 | "metadata": { 33 | "collapsed": true 34 | }, 35 | "outputs": [], 36 | "source": [ 37 | "# Plot settings\n", 38 | "%matplotlib inline\n", 39 | "plt.style.use('ggplot')\n", 40 | "fontsize = 20 # size for x and y ticks\n", 41 | "plt.rcParams['legend.fontsize'] = fontsize\n", 42 | "plt.rcParams.update({'font.size': fontsize})" 43 | ] 44 | }, 45 | { 46 | "cell_type": "code", 47 | "execution_count": null, 48 | "metadata": { 49 | "collapsed": true 50 | }, 51 | "outputs": [], 52 | "source": [ 53 | "# Connect to the database\n", 54 | "fn = os.path.join('data','eicu_demo.sqlite3')\n", 55 | "con = sqlite3.connect(fn)\n", 56 | "cur = con.cursor()" 57 | ] 58 | }, 59 | { 60 | "cell_type": "markdown", 61 | "metadata": { 62 | "collapsed": true 63 | }, 64 | "source": [ 65 | "## Choose a project, or try your own!" 66 | ] 67 | }, 68 | { 69 | "cell_type": "markdown", 70 | "metadata": {}, 71 | "source": [ 72 | "If you're interested, you could try one of the following projects:\n", 73 | "\n", 74 | "* Congestive heart failure is a common illness for ICU patients, but the severity of the illness can vary substantially. Are there distinct subgroups among patients admitted with congestive heart failure? For example, are patients with preserved ejection fraction substantially different than those without?\n", 75 | "* Sepsis is a life-threatening condition usually associated with infection - but little research investigates how septic patients vary based on the source of the infection. As APACHE diagnoses are organ specific (e.g. `SEPSISPULM`, `SEPSISGI`, `SEPSISUTI`), can we find any substantial differences among septic patients based upon the initial location of the infection?\n", 76 | "* Lab measurements take up to 6 hours to measure and can be costly. Can we predict a future lab measurement based upon previous measures and simultaneous non-invasive measurements?\n", 77 | "* Dialysis is a major intervention provided in the ICU, and it serves to replace the function of the kidneys (cleaning the blood). Can we predict if a patient will receive dialysis from physiology?\n", 78 | "* Mechanical ventilation is a similar treatment used to replace the function of the lungs. This intervention eases the work of the breathing, allowing the patient's own lungs to heal. However, knowing when to cease mechanical ventilation (extubate) is an open problem, and clinicians largely utilize a \"try and see\" approach. Can we predict future extubation from the patient's current data?\n", 79 | "* Missing data is extremely common in clinical data. Measurements are sparse, noisy, irregularly sampled, and not missing at random. Gaussian Processes are an elegant technique for handling difficult data scenarious such as this. As many algorithms require complete data, techniques to impute realistic values for missing data are increasingly relevant. Can we use a Gaussian Process to estimate the trajectory of physiologic data and as a generative model for imputing missing data?" 80 | ] 81 | }, 82 | { 83 | "cell_type": "markdown", 84 | "metadata": {}, 85 | "source": [ 86 | "## Load data from all tables\n", 87 | "\n", 88 | "If you prefer a purely python approach, you can load in all the tables using the below code. It should take only 1-2 minutes. If you would like to speed it up further, comment out the tables you don't need." 89 | ] 90 | }, 91 | { 92 | "cell_type": "code", 93 | "execution_count": null, 94 | "metadata": { 95 | "collapsed": true 96 | }, 97 | "outputs": [], 98 | "source": [ 99 | "admissiondx = pd.read_sql_query(\"select * from admissiondx\", con)\n", 100 | "apacheapsvar = pd.read_sql_query(\"select * from apacheapsvar\", con)\n", 101 | "apachepatientresult = pd.read_sql_query(\"select * from apachepatientresult\", con)\n", 102 | "apachepredvar = pd.read_sql_query(\"select * from apachepredvar\", con)\n", 103 | "careplancareprovider = pd.read_sql_query(\"select * from careplancareprovider\", con)\n", 104 | "careplaneol = pd.read_sql_query(\"select * from careplaneol\", con)\n", 105 | "careplangeneral = pd.read_sql_query(\"select * from careplangeneral\", con)\n", 106 | "careplangoal = pd.read_sql_query(\"select * from careplangoal\", con)\n", 107 | "careplaninfectiousdisease = pd.read_sql_query(\"select * from careplaninfectiousdisease\", con)\n", 108 | "diagnosis = pd.read_sql_query(\"select * from diagnosis\", con)\n", 109 | "lab = pd.read_sql_query(\"select * from lab\", con)\n", 110 | "pasthistory = pd.read_sql_query(\"select * from pasthistory\", con)\n", 111 | "patient = pd.read_sql_query(\"select * from patient\", con)\n", 112 | "treatment = pd.read_sql_query(\"select * from treatment\", con)\n", 113 | "vitalaperiodic = pd.read_sql_query(\"select * from vitalaperiodic\", con)\n", 114 | "vitalperiodic = pd.read_sql_query(\"select * from vitalperiodic\", con)" 115 | ] 116 | } 117 | ], 118 | "metadata": { 119 | "kernelspec": { 120 | "display_name": "Python 2", 121 | "language": "python", 122 | "name": "python2" 123 | }, 124 | "language_info": { 125 | "codemirror_mode": { 126 | "name": "ipython", 127 | "version": 2 128 | }, 129 | "file_extension": ".py", 130 | "mimetype": "text/x-python", 131 | "name": "python", 132 | "nbconvert_exporter": "python", 133 | "pygments_lexer": "ipython2", 134 | "version": "2.7.13" 135 | } 136 | }, 137 | "nbformat": 4, 138 | "nbformat_minor": 2 139 | } 140 | -------------------------------------------------------------------------------- /02-demographics-and-severity-of-illness.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# eICU Collaborative Research Database\n", 8 | "\n", 9 | "# Notebook 2: Demographics and severity of illness in a single patient\n", 10 | "\n", 11 | "The aim of this notebook is to introduce high level admission details relating to a single patient stay, using the following tables:\n", 12 | "\n", 13 | "- `patient`\n", 14 | "- `admissiondx`\n", 15 | "- `apacheapsvar`\n", 16 | "- `apachepredvar`\n", 17 | "- `apachepatientresult`\n", 18 | "\n", 19 | "Before starting, you will need to copy the eicu demo database file ('eicu_demo.sqlite3') to the `data` directory.\n", 20 | "\n", 21 | "Documentation on the eICU Collaborative Research Database can be found at: http://eicu-crd.mit.edu/." 22 | ] 23 | }, 24 | { 25 | "cell_type": "markdown", 26 | "metadata": {}, 27 | "source": [ 28 | "## 1. Getting set up" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": 1, 34 | "metadata": { 35 | "collapsed": true 36 | }, 37 | "outputs": [], 38 | "source": [ 39 | "# Import libraries\n", 40 | "import pandas as pd\n", 41 | "import matplotlib.pyplot as plt\n", 42 | "import sqlite3\n", 43 | "import os" 44 | ] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "execution_count": 2, 49 | "metadata": { 50 | "collapsed": true 51 | }, 52 | "outputs": [], 53 | "source": [ 54 | "# Plot settings\n", 55 | "%matplotlib inline\n", 56 | "plt.style.use('ggplot')\n", 57 | "fontsize = 20 # size for x and y ticks\n", 58 | "plt.rcParams['legend.fontsize'] = fontsize\n", 59 | "plt.rcParams.update({'font.size': fontsize})" 60 | ] 61 | }, 62 | { 63 | "cell_type": "code", 64 | "execution_count": 3, 65 | "metadata": { 66 | "collapsed": true 67 | }, 68 | "outputs": [], 69 | "source": [ 70 | "# Connect to the database\n", 71 | "fn = os.path.join('data','eicu_demo.sqlite3')\n", 72 | "con = sqlite3.connect(fn)\n", 73 | "cur = con.cursor()" 74 | ] 75 | }, 76 | { 77 | "cell_type": "markdown", 78 | "metadata": {}, 79 | "source": [ 80 | "## 2. Display a list of tables" 81 | ] 82 | }, 83 | { 84 | "cell_type": "code", 85 | "execution_count": 4, 86 | "metadata": { 87 | "collapsed": true 88 | }, 89 | "outputs": [], 90 | "source": [ 91 | "query = \\\n", 92 | "\"\"\"\n", 93 | "SELECT type, name\n", 94 | "FROM sqlite_master \n", 95 | "WHERE type='table'\n", 96 | "ORDER BY name;\n", 97 | "\"\"\"\n", 98 | "\n", 99 | "list_of_tables = pd.read_sql_query(query,con)" 100 | ] 101 | }, 102 | { 103 | "cell_type": "code", 104 | "execution_count": 5, 105 | "metadata": {}, 106 | "outputs": [ 107 | { 108 | "data": { 109 | "text/html": [ 110 | "
\n", 111 | "\n", 124 | "\n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | " \n", 206 | " \n", 207 | " \n", 208 | " \n", 209 | " \n", 210 | " \n", 211 | " \n", 212 | " \n", 213 | " \n", 214 | " \n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | " \n", 223 | " \n", 224 | " \n", 225 | " \n", 226 | " \n", 227 | " \n", 228 | " \n", 229 | "
typename
0tableadmissiondrug
1tableadmissiondx
2tableapacheapsvar
3tableapachepatientresult
4tableapachepredvar
5tablecareplancareprovider
6tablecareplaneol
7tablecareplangeneral
8tablecareplangoal
9tablecareplaninfectiousdisease
10tablediagnosis
11tableinfusiondrug
12tablelab
13tablemedication
14tablepasthistory
15tablepatient
16tabletreatment
17tablevitalaperiodic
18tablevitalperiodic
\n", 230 | "
" 231 | ], 232 | "text/plain": [ 233 | " type name\n", 234 | "0 table admissiondrug\n", 235 | "1 table admissiondx\n", 236 | "2 table apacheapsvar\n", 237 | "3 table apachepatientresult\n", 238 | "4 table apachepredvar\n", 239 | "5 table careplancareprovider\n", 240 | "6 table careplaneol\n", 241 | "7 table careplangeneral\n", 242 | "8 table careplangoal\n", 243 | "9 table careplaninfectiousdisease\n", 244 | "10 table diagnosis\n", 245 | "11 table infusiondrug\n", 246 | "12 table lab\n", 247 | "13 table medication\n", 248 | "14 table pasthistory\n", 249 | "15 table patient\n", 250 | "16 table treatment\n", 251 | "17 table vitalaperiodic\n", 252 | "18 table vitalperiodic" 253 | ] 254 | }, 255 | "execution_count": 5, 256 | "metadata": {}, 257 | "output_type": "execute_result" 258 | } 259 | ], 260 | "source": [ 261 | "list_of_tables" 262 | ] 263 | }, 264 | { 265 | "cell_type": "markdown", 266 | "metadata": {}, 267 | "source": [ 268 | "## 3. Selecting a single patient stay " 269 | ] 270 | }, 271 | { 272 | "cell_type": "markdown", 273 | "metadata": {}, 274 | "source": [ 275 | "### 3.1. The `patient` table\n", 276 | "\n", 277 | "The `patient` table includes general information about the patient admissions (for example, demographics, admission and discharge details). See: http://eicu-crd.mit.edu/eicutables/patient/" 278 | ] 279 | }, 280 | { 281 | "cell_type": "markdown", 282 | "metadata": {}, 283 | "source": [ 284 | "### Questions\n", 285 | "\n", 286 | "Use your knowledge from the previous notebook and the online documentation (http://eicu-crd.mit.edu/) to answer the following questions:\n", 287 | "\n", 288 | "- Which column in the `patient` table is distinct for each stay in the ICU (similar to `icustay_id` in MIMIC-III)?\n", 289 | "- Which column is unique for each patient (similar to `subject_id` in MIMIC-III)?\n" 290 | ] 291 | }, 292 | { 293 | "cell_type": "code", 294 | "execution_count": 7, 295 | "metadata": { 296 | "collapsed": true 297 | }, 298 | "outputs": [], 299 | "source": [ 300 | "# select a single ICU stay\n", 301 | "patientunitstayid = 141296" 302 | ] 303 | }, 304 | { 305 | "cell_type": "code", 306 | "execution_count": 8, 307 | "metadata": {}, 308 | "outputs": [ 309 | { 310 | "name": "stdout", 311 | "output_type": "stream", 312 | "text": [ 313 | "\n", 314 | "SELECT *\n", 315 | "FROM patient\n", 316 | "WHERE patientunitstayid = 141296\n", 317 | "\n" 318 | ] 319 | } 320 | ], 321 | "source": [ 322 | "# query to load data from the patient table\n", 323 | "query = \\\n", 324 | "\"\"\"\n", 325 | "SELECT *\n", 326 | "FROM patient\n", 327 | "WHERE patientunitstayid = {}\n", 328 | "\"\"\".format(patientunitstayid)\n", 329 | "\n", 330 | "print(query)" 331 | ] 332 | }, 333 | { 334 | "cell_type": "code", 335 | "execution_count": 11, 336 | "metadata": {}, 337 | "outputs": [ 338 | { 339 | "data": { 340 | "text/html": [ 341 | "
\n", 342 | "\n", 355 | "\n", 356 | " \n", 357 | " \n", 358 | " \n", 359 | " \n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " \n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | " \n", 441 | " \n", 442 | " \n", 443 | " \n", 444 | " \n", 445 | " \n", 446 | " \n", 447 | " \n", 448 | " \n", 449 | " \n", 450 | " \n", 451 | " \n", 452 | " \n", 453 | " \n", 454 | " \n", 455 | " \n", 456 | " \n", 457 | " \n", 458 | " \n", 459 | " \n", 460 | " \n", 461 | " \n", 462 | " \n", 463 | " \n", 464 | " \n", 465 | " \n", 466 | " \n", 467 | " \n", 468 | " \n", 469 | " \n", 470 | " \n", 471 | " \n", 472 | " \n", 473 | " \n", 474 | " \n", 475 | " \n", 476 | " \n", 477 | " \n", 478 | " \n", 479 | " \n", 480 | " \n", 481 | " \n", 482 | " \n", 483 | " \n", 484 | " \n", 485 | " \n", 486 | " \n", 487 | " \n", 488 | " \n", 489 | " \n", 490 | " \n", 491 | " \n", 492 | " \n", 493 | " \n", 494 | " \n", 495 | " \n", 496 | " \n", 497 | " \n", 498 | " \n", 499 | " \n", 500 | " \n", 501 | " \n", 502 | " \n", 503 | " \n", 504 | " \n", 505 | " \n", 506 | " \n", 507 | " \n", 508 | "
0
patientunitstayid141296
patienthealthsystemstayid129026
genderMale
age63
ethnicityCaucasian
hospitalid73
wardid85
apacheadmissiondxHypovolemia (including dehydration, Do not inc...
admissionheight162.6
hospitaladmityear2014
hospitaladmittime2404:18:00
hospitaladmittimemorning
hospitaladmitoffset-2254
hospitaladmitsourceFloor
hospitaldischargeyear2014
hospitaldischargetime2403:41:00
hospitaldischargetimemorning
hospitaldischargeoffset7789
hospitaldischargelocationDeath
hospitaldischargestatusExpired
unittypeSICU
unitadmityear2014
unitadmittime2417:52:00
unitadmittimeevening
unitadmitsourceFloor
unitvisitnumber1
unitstaytypeadmit
admissionweightNone
dischargeweight76.8
unitdischargeyear2014
unitdischargetime2417:00:00
unitdischargetimeevening
unitdischargeoffset2828
unitdischargelocationFloor
unitdischargestatusAlive
uniquepid002-30269
\n", 509 | "
" 510 | ], 511 | "text/plain": [ 512 | " 0\n", 513 | "patientunitstayid 141296\n", 514 | "patienthealthsystemstayid 129026\n", 515 | "gender Male\n", 516 | "age 63\n", 517 | "ethnicity Caucasian\n", 518 | "hospitalid 73\n", 519 | "wardid 85\n", 520 | "apacheadmissiondx Hypovolemia (including dehydration, Do not inc...\n", 521 | "admissionheight 162.6\n", 522 | "hospitaladmityear 2014\n", 523 | "hospitaladmittime24 04:18:00\n", 524 | "hospitaladmittime morning\n", 525 | "hospitaladmitoffset -2254\n", 526 | "hospitaladmitsource Floor\n", 527 | "hospitaldischargeyear 2014\n", 528 | "hospitaldischargetime24 03:41:00\n", 529 | "hospitaldischargetime morning\n", 530 | "hospitaldischargeoffset 7789\n", 531 | "hospitaldischargelocation Death\n", 532 | "hospitaldischargestatus Expired\n", 533 | "unittype SICU\n", 534 | "unitadmityear 2014\n", 535 | "unitadmittime24 17:52:00\n", 536 | "unitadmittime evening\n", 537 | "unitadmitsource Floor\n", 538 | "unitvisitnumber 1\n", 539 | "unitstaytype admit\n", 540 | "admissionweight None\n", 541 | "dischargeweight 76.8\n", 542 | "unitdischargeyear 2014\n", 543 | "unitdischargetime24 17:00:00\n", 544 | "unitdischargetime evening\n", 545 | "unitdischargeoffset 2828\n", 546 | "unitdischargelocation Floor\n", 547 | "unitdischargestatus Alive\n", 548 | "uniquepid 002-30269" 549 | ] 550 | }, 551 | "execution_count": 11, 552 | "metadata": {}, 553 | "output_type": "execute_result" 554 | } 555 | ], 556 | "source": [ 557 | "# run the query and assign the output to a variable\n", 558 | "patient = pd.read_sql_query(query,con)\n", 559 | "patient.head().T" 560 | ] 561 | }, 562 | { 563 | "cell_type": "code", 564 | "execution_count": 12, 565 | "metadata": {}, 566 | "outputs": [ 567 | { 568 | "data": { 569 | "text/plain": [ 570 | "Index([u'patientunitstayid', u'patienthealthsystemstayid', u'gender', u'age',\n", 571 | " u'ethnicity', u'hospitalid', u'wardid', u'apacheadmissiondx',\n", 572 | " u'admissionheight', u'hospitaladmityear', u'hospitaladmittime24',\n", 573 | " u'hospitaladmittime', u'hospitaladmitoffset', u'hospitaladmitsource',\n", 574 | " u'hospitaldischargeyear', u'hospitaldischargetime24',\n", 575 | " u'hospitaldischargetime', u'hospitaldischargeoffset',\n", 576 | " u'hospitaldischargelocation', u'hospitaldischargestatus', u'unittype',\n", 577 | " u'unitadmityear', u'unitadmittime24', u'unitadmittime',\n", 578 | " u'unitadmitsource', u'unitvisitnumber', u'unitstaytype',\n", 579 | " u'admissionweight', u'dischargeweight', u'unitdischargeyear',\n", 580 | " u'unitdischargetime24', u'unitdischargetime', u'unitdischargeoffset',\n", 581 | " u'unitdischargelocation', u'unitdischargestatus', u'uniquepid'],\n", 582 | " dtype='object')" 583 | ] 584 | }, 585 | "execution_count": 12, 586 | "metadata": {}, 587 | "output_type": "execute_result" 588 | } 589 | ], 590 | "source": [ 591 | "# display a complete list of columns\n", 592 | "patient.columns" 593 | ] 594 | }, 595 | { 596 | "cell_type": "code", 597 | "execution_count": 13, 598 | "metadata": {}, 599 | "outputs": [ 600 | { 601 | "data": { 602 | "text/html": [ 603 | "
\n", 604 | "\n", 617 | "\n", 618 | " \n", 619 | " \n", 620 | " \n", 621 | " \n", 622 | " \n", 623 | " \n", 624 | " \n", 625 | " \n", 626 | " \n", 627 | " \n", 628 | " \n", 629 | " \n", 630 | " \n", 631 | " \n", 632 | " \n", 633 | " \n", 634 | " \n", 635 | " \n", 636 | " \n", 637 | " \n", 638 | "
uniquepidpatientunitstayidgenderageunitdischargestatus
0002-30269141296Male63Alive
\n", 639 | "
" 640 | ], 641 | "text/plain": [ 642 | " uniquepid patientunitstayid gender age unitdischargestatus\n", 643 | "0 002-30269 141296 Male 63 Alive" 644 | ] 645 | }, 646 | "execution_count": 13, 647 | "metadata": {}, 648 | "output_type": "execute_result" 649 | } 650 | ], 651 | "source": [ 652 | "# select a limited number of columns to view\n", 653 | "columns = ['uniquepid','patientunitstayid','gender','age','unitdischargestatus']\n", 654 | "patient[columns]" 655 | ] 656 | }, 657 | { 658 | "cell_type": "markdown", 659 | "metadata": {}, 660 | "source": [ 661 | "### Questions\n", 662 | "\n", 663 | "- What year was the patient admitted to the ICU? Which year was he or she discharged?\n", 664 | "- What was the status of the patient upon discharge from the unit?" 665 | ] 666 | }, 667 | { 668 | "cell_type": "markdown", 669 | "metadata": { 670 | "collapsed": true 671 | }, 672 | "source": [ 673 | "### 3.2. The `admissiondx` table\n", 674 | "\n", 675 | "The `admissiondx` table contains the primary diagnosis for admission to the ICU according to the APACHE scoring criteria. For more detail, see: http://eicu-crd.mit.edu/eicutables/admissiondx/" 676 | ] 677 | }, 678 | { 679 | "cell_type": "code", 680 | "execution_count": 14, 681 | "metadata": {}, 682 | "outputs": [ 683 | { 684 | "name": "stdout", 685 | "output_type": "stream", 686 | "text": [ 687 | "\n", 688 | "SELECT *\n", 689 | "FROM admissiondx\n", 690 | "WHERE patientunitstayid = 141296\n", 691 | "\n" 692 | ] 693 | } 694 | ], 695 | "source": [ 696 | "# query to load data from the patient table\n", 697 | "query = \\\n", 698 | "\"\"\"\n", 699 | "SELECT *\n", 700 | "FROM admissiondx\n", 701 | "WHERE patientunitstayid = {}\n", 702 | "\"\"\".format(patientunitstayid)\n", 703 | "\n", 704 | "print(query)" 705 | ] 706 | }, 707 | { 708 | "cell_type": "code", 709 | "execution_count": 17, 710 | "metadata": {}, 711 | "outputs": [ 712 | { 713 | "data": { 714 | "text/html": [ 715 | "
\n", 716 | "\n", 729 | "\n", 730 | " \n", 731 | " \n", 732 | " \n", 733 | " \n", 734 | " \n", 735 | " \n", 736 | " \n", 737 | " \n", 738 | " \n", 739 | " \n", 740 | " \n", 741 | " \n", 742 | " \n", 743 | " \n", 744 | " \n", 745 | " \n", 746 | " \n", 747 | " \n", 748 | " \n", 749 | " \n", 750 | " \n", 751 | " \n", 752 | " \n", 753 | " \n", 754 | " \n", 755 | " \n", 756 | " \n", 757 | " \n", 758 | " \n", 759 | " \n", 760 | " \n", 761 | " \n", 762 | " \n", 763 | " \n", 764 | " \n", 765 | " \n", 766 | " \n", 767 | " \n", 768 | " \n", 769 | " \n", 770 | " \n", 771 | " \n", 772 | " \n", 773 | " \n", 774 | " \n", 775 | " \n", 776 | " \n", 777 | " \n", 778 | " \n", 779 | " \n", 780 | " \n", 781 | " \n", 782 | " \n", 783 | " \n", 784 | " \n", 785 | " \n", 786 | " \n", 787 | " \n", 788 | " \n", 789 | " \n", 790 | " \n", 791 | " \n", 792 | " \n", 793 | " \n", 794 | "
012
patientunitstayid141296141296141296
admissiondxid659124659125659123
admitdxenteredyear201420142014
admitdxenteredtime2418:20:3818:20:3818:20:38
admitdxenteredtimenightnightnight
admitdxenteredoffset282828
admitdxpathadmission diagnosis|Non-operative Organ System...admission diagnosis|All Diagnosis|Non-operativ...admission diagnosis|Was the patient admitted f...
admitdxnameCardiovascularHypovolemia (including dehydration, Do not inc...No
admitdxtextCardiovascularHypovolemia (including dehydration, Do not inc...No
\n", 795 | "
" 796 | ], 797 | "text/plain": [ 798 | " 0 \\\n", 799 | "patientunitstayid 141296 \n", 800 | "admissiondxid 659124 \n", 801 | "admitdxenteredyear 2014 \n", 802 | "admitdxenteredtime24 18:20:38 \n", 803 | "admitdxenteredtime night \n", 804 | "admitdxenteredoffset 28 \n", 805 | "admitdxpath admission diagnosis|Non-operative Organ System... \n", 806 | "admitdxname Cardiovascular \n", 807 | "admitdxtext Cardiovascular \n", 808 | "\n", 809 | " 1 \\\n", 810 | "patientunitstayid 141296 \n", 811 | "admissiondxid 659125 \n", 812 | "admitdxenteredyear 2014 \n", 813 | "admitdxenteredtime24 18:20:38 \n", 814 | "admitdxenteredtime night \n", 815 | "admitdxenteredoffset 28 \n", 816 | "admitdxpath admission diagnosis|All Diagnosis|Non-operativ... \n", 817 | "admitdxname Hypovolemia (including dehydration, Do not inc... \n", 818 | "admitdxtext Hypovolemia (including dehydration, Do not inc... \n", 819 | "\n", 820 | " 2 \n", 821 | "patientunitstayid 141296 \n", 822 | "admissiondxid 659123 \n", 823 | "admitdxenteredyear 2014 \n", 824 | "admitdxenteredtime24 18:20:38 \n", 825 | "admitdxenteredtime night \n", 826 | "admitdxenteredoffset 28 \n", 827 | "admitdxpath admission diagnosis|Was the patient admitted f... \n", 828 | "admitdxname No \n", 829 | "admitdxtext No " 830 | ] 831 | }, 832 | "execution_count": 17, 833 | "metadata": {}, 834 | "output_type": "execute_result" 835 | } 836 | ], 837 | "source": [ 838 | "# run the query and assign the output to a variable\n", 839 | "admissiondx = pd.read_sql_query(query,con)\n", 840 | "admissiondx.head().T" 841 | ] 842 | }, 843 | { 844 | "cell_type": "code", 845 | "execution_count": 16, 846 | "metadata": {}, 847 | "outputs": [ 848 | { 849 | "data": { 850 | "text/plain": [ 851 | "Index([u'patientunitstayid', u'admissiondxid', u'admitdxenteredyear',\n", 852 | " u'admitdxenteredtime24', u'admitdxenteredtime', u'admitdxenteredoffset',\n", 853 | " u'admitdxpath', u'admitdxname', u'admitdxtext'],\n", 854 | " dtype='object')" 855 | ] 856 | }, 857 | "execution_count": 16, 858 | "metadata": {}, 859 | "output_type": "execute_result" 860 | } 861 | ], 862 | "source": [ 863 | "admissiondx.columns" 864 | ] 865 | }, 866 | { 867 | "cell_type": "markdown", 868 | "metadata": {}, 869 | "source": [ 870 | "### Questions\n", 871 | "\n", 872 | "- What was the primary reason for admission?\n", 873 | "- How soon after admission to the ICU was the diagnoses recorded in eCareManager?" 874 | ] 875 | }, 876 | { 877 | "cell_type": "markdown", 878 | "metadata": { 879 | "collapsed": true 880 | }, 881 | "source": [ 882 | "### 3.3. The `apacheapsvar` table\n", 883 | "\n", 884 | "The `apacheapsvar` table contains the variables used to calculate the Acute Physiology Score (APS) III for patients. APS-III is an established method of summarizing patient severity of illness on admission to the ICU. \n", 885 | "\n", 886 | "The score is part of the Acute Physiology Age Chronic Health Evaluation (APACHE) system of equations for predicting outcomes for ICU patients. See: http://eicu-crd.mit.edu/eicutables/apacheApsVar/" 887 | ] 888 | }, 889 | { 890 | "cell_type": "code", 891 | "execution_count": 18, 892 | "metadata": {}, 893 | "outputs": [ 894 | { 895 | "name": "stdout", 896 | "output_type": "stream", 897 | "text": [ 898 | "\n", 899 | "SELECT *\n", 900 | "FROM apacheapsvar\n", 901 | "WHERE patientunitstayid = 141296\n", 902 | "\n" 903 | ] 904 | } 905 | ], 906 | "source": [ 907 | "# query to load data from the patient table\n", 908 | "query = \\\n", 909 | "\"\"\"\n", 910 | "SELECT *\n", 911 | "FROM apacheapsvar\n", 912 | "WHERE patientunitstayid = {}\n", 913 | "\"\"\".format(patientunitstayid)\n", 914 | "\n", 915 | "print(query)" 916 | ] 917 | }, 918 | { 919 | "cell_type": "code", 920 | "execution_count": 20, 921 | "metadata": {}, 922 | "outputs": [ 923 | { 924 | "data": { 925 | "text/html": [ 926 | "
\n", 927 | "\n", 940 | "\n", 941 | " \n", 942 | " \n", 943 | " \n", 944 | " \n", 945 | " \n", 946 | " \n", 947 | " \n", 948 | " \n", 949 | " \n", 950 | " \n", 951 | " \n", 952 | " \n", 953 | " \n", 954 | " \n", 955 | " \n", 956 | " \n", 957 | " \n", 958 | " \n", 959 | " \n", 960 | " \n", 961 | " \n", 962 | " \n", 963 | " \n", 964 | " \n", 965 | " \n", 966 | " \n", 967 | " \n", 968 | " \n", 969 | " \n", 970 | " \n", 971 | " \n", 972 | " \n", 973 | " \n", 974 | " \n", 975 | " \n", 976 | " \n", 977 | " \n", 978 | " \n", 979 | " \n", 980 | " \n", 981 | " \n", 982 | " \n", 983 | " \n", 984 | " \n", 985 | " \n", 986 | " \n", 987 | " \n", 988 | " \n", 989 | " \n", 990 | " \n", 991 | " \n", 992 | " \n", 993 | " \n", 994 | " \n", 995 | " \n", 996 | " \n", 997 | " \n", 998 | " \n", 999 | " \n", 1000 | " \n", 1001 | " \n", 1002 | " \n", 1003 | " \n", 1004 | " \n", 1005 | " \n", 1006 | " \n", 1007 | " \n", 1008 | " \n", 1009 | " \n", 1010 | " \n", 1011 | " \n", 1012 | " \n", 1013 | " \n", 1014 | " \n", 1015 | " \n", 1016 | " \n", 1017 | " \n", 1018 | " \n", 1019 | " \n", 1020 | " \n", 1021 | " \n", 1022 | " \n", 1023 | " \n", 1024 | " \n", 1025 | " \n", 1026 | " \n", 1027 | " \n", 1028 | " \n", 1029 | " \n", 1030 | " \n", 1031 | " \n", 1032 | " \n", 1033 | " \n", 1034 | " \n", 1035 | " \n", 1036 | " \n", 1037 | " \n", 1038 | " \n", 1039 | " \n", 1040 | " \n", 1041 | " \n", 1042 | " \n", 1043 | " \n", 1044 | " \n", 1045 | " \n", 1046 | " \n", 1047 | " \n", 1048 | " \n", 1049 | " \n", 1050 | " \n", 1051 | " \n", 1052 | " \n", 1053 | "
0
patientunitstayid141296.00
apacheapsvarid22095.00
intubated0.00
vent0.00
dialysis1.00
eyes4.00
motor6.00
verbal5.00
meds0.00
urine-1.00
wbc13.20
temperature36.70
respiratoryrate59.00
sodium137.00
heartrate136.00
meanbp125.00
ph7.54
hematocrit29.00
creatinine4.33
albumin1.90
pao254.00
pco232.00
bun35.00
glucose101.00
bilirubin0.50
fio221.00
\n", 1054 | "
" 1055 | ], 1056 | "text/plain": [ 1057 | " 0\n", 1058 | "patientunitstayid 141296.00\n", 1059 | "apacheapsvarid 22095.00\n", 1060 | "intubated 0.00\n", 1061 | "vent 0.00\n", 1062 | "dialysis 1.00\n", 1063 | "eyes 4.00\n", 1064 | "motor 6.00\n", 1065 | "verbal 5.00\n", 1066 | "meds 0.00\n", 1067 | "urine -1.00\n", 1068 | "wbc 13.20\n", 1069 | "temperature 36.70\n", 1070 | "respiratoryrate 59.00\n", 1071 | "sodium 137.00\n", 1072 | "heartrate 136.00\n", 1073 | "meanbp 125.00\n", 1074 | "ph 7.54\n", 1075 | "hematocrit 29.00\n", 1076 | "creatinine 4.33\n", 1077 | "albumin 1.90\n", 1078 | "pao2 54.00\n", 1079 | "pco2 32.00\n", 1080 | "bun 35.00\n", 1081 | "glucose 101.00\n", 1082 | "bilirubin 0.50\n", 1083 | "fio2 21.00" 1084 | ] 1085 | }, 1086 | "execution_count": 20, 1087 | "metadata": {}, 1088 | "output_type": "execute_result" 1089 | } 1090 | ], 1091 | "source": [ 1092 | "# run the query and assign the output to a variable\n", 1093 | "apacheapsvar = pd.read_sql_query(query,con)\n", 1094 | "apacheapsvar.head().T" 1095 | ] 1096 | }, 1097 | { 1098 | "cell_type": "code", 1099 | "execution_count": null, 1100 | "metadata": { 1101 | "collapsed": true 1102 | }, 1103 | "outputs": [], 1104 | "source": [ 1105 | "apacheapsvar.columns" 1106 | ] 1107 | }, 1108 | { 1109 | "cell_type": "markdown", 1110 | "metadata": {}, 1111 | "source": [ 1112 | "### Questions\n", 1113 | "\n", 1114 | "- What was the 'worst' heart rate recorded for the patient during the scoring period?\n", 1115 | "- Was the patient oriented and able to converse normally on the day of admission? (hint: the `verbal` element refers to the Glasgow Coma Scale).\n" 1116 | ] 1117 | }, 1118 | { 1119 | "cell_type": "markdown", 1120 | "metadata": {}, 1121 | "source": [ 1122 | "### 3.4. The `apachepredvar` table\n", 1123 | "\n", 1124 | "The `apachepredvar` table provides variables underlying the APACHE predictions. Acute Physiology Age Chronic Health Evaluation (APACHE) consists of a groups of equations used for predicting outcomes in critically ill patients. See: http://eicu-crd.mit.edu/eicutables/apachePredVar/" 1125 | ] 1126 | }, 1127 | { 1128 | "cell_type": "code", 1129 | "execution_count": 21, 1130 | "metadata": {}, 1131 | "outputs": [ 1132 | { 1133 | "name": "stdout", 1134 | "output_type": "stream", 1135 | "text": [ 1136 | "\n", 1137 | "SELECT *\n", 1138 | "FROM apachepredvar\n", 1139 | "WHERE patientunitstayid = 141296\n", 1140 | "\n" 1141 | ] 1142 | } 1143 | ], 1144 | "source": [ 1145 | "# query to load data from the patient table\n", 1146 | "query = \\\n", 1147 | "\"\"\"\n", 1148 | "SELECT *\n", 1149 | "FROM apachepredvar\n", 1150 | "WHERE patientunitstayid = {}\n", 1151 | "\"\"\".format(patientunitstayid)\n", 1152 | "\n", 1153 | "print(query)" 1154 | ] 1155 | }, 1156 | { 1157 | "cell_type": "code", 1158 | "execution_count": 24, 1159 | "metadata": {}, 1160 | "outputs": [ 1161 | { 1162 | "data": { 1163 | "text/html": [ 1164 | "
\n", 1165 | "\n", 1178 | "\n", 1179 | " \n", 1180 | " \n", 1181 | " \n", 1182 | " \n", 1183 | " \n", 1184 | " \n", 1185 | " \n", 1186 | " \n", 1187 | " \n", 1188 | " \n", 1189 | " \n", 1190 | " \n", 1191 | " \n", 1192 | " \n", 1193 | " \n", 1194 | " \n", 1195 | " \n", 1196 | " \n", 1197 | " \n", 1198 | " \n", 1199 | " \n", 1200 | " \n", 1201 | " \n", 1202 | " \n", 1203 | " \n", 1204 | " \n", 1205 | " \n", 1206 | " \n", 1207 | " \n", 1208 | " \n", 1209 | " \n", 1210 | " \n", 1211 | " \n", 1212 | " \n", 1213 | " \n", 1214 | " \n", 1215 | " \n", 1216 | " \n", 1217 | " \n", 1218 | " \n", 1219 | " \n", 1220 | " \n", 1221 | " \n", 1222 | " \n", 1223 | " \n", 1224 | " \n", 1225 | " \n", 1226 | " \n", 1227 | " \n", 1228 | " \n", 1229 | " \n", 1230 | " \n", 1231 | " \n", 1232 | " \n", 1233 | " \n", 1234 | " \n", 1235 | " \n", 1236 | " \n", 1237 | " \n", 1238 | " \n", 1239 | " \n", 1240 | " \n", 1241 | " \n", 1242 | " \n", 1243 | " \n", 1244 | " \n", 1245 | " \n", 1246 | " \n", 1247 | " \n", 1248 | " \n", 1249 | " \n", 1250 | " \n", 1251 | " \n", 1252 | " \n", 1253 | " \n", 1254 | " \n", 1255 | " \n", 1256 | " \n", 1257 | " \n", 1258 | " \n", 1259 | " \n", 1260 | " \n", 1261 | " \n", 1262 | " \n", 1263 | " \n", 1264 | " \n", 1265 | " \n", 1266 | " \n", 1267 | " \n", 1268 | " \n", 1269 | " \n", 1270 | " \n", 1271 | " \n", 1272 | " \n", 1273 | " \n", 1274 | " \n", 1275 | " \n", 1276 | " \n", 1277 | " \n", 1278 | " \n", 1279 | " \n", 1280 | " \n", 1281 | " \n", 1282 | " \n", 1283 | " \n", 1284 | " \n", 1285 | " \n", 1286 | " \n", 1287 | " \n", 1288 | " \n", 1289 | " \n", 1290 | " \n", 1291 | " \n", 1292 | " \n", 1293 | " \n", 1294 | " \n", 1295 | " \n", 1296 | " \n", 1297 | " \n", 1298 | " \n", 1299 | " \n", 1300 | " \n", 1301 | " \n", 1302 | " \n", 1303 | " \n", 1304 | " \n", 1305 | " \n", 1306 | " \n", 1307 | " \n", 1308 | " \n", 1309 | " \n", 1310 | " \n", 1311 | " \n", 1312 | " \n", 1313 | " \n", 1314 | " \n", 1315 | " \n", 1316 | " \n", 1317 | " \n", 1318 | " \n", 1319 | " \n", 1320 | " \n", 1321 | " \n", 1322 | " \n", 1323 | " \n", 1324 | " \n", 1325 | " \n", 1326 | " \n", 1327 | " \n", 1328 | " \n", 1329 | " \n", 1330 | " \n", 1331 | " \n", 1332 | " \n", 1333 | " \n", 1334 | " \n", 1335 | " \n", 1336 | " \n", 1337 | " \n", 1338 | " \n", 1339 | " \n", 1340 | " \n", 1341 | " \n", 1342 | " \n", 1343 | " \n", 1344 | " \n", 1345 | " \n", 1346 | " \n", 1347 | " \n", 1348 | " \n", 1349 | " \n", 1350 | " \n", 1351 | " \n", 1352 | " \n", 1353 | " \n", 1354 | " \n", 1355 | " \n", 1356 | " \n", 1357 | " \n", 1358 | " \n", 1359 | " \n", 1360 | " \n", 1361 | " \n", 1362 | " \n", 1363 | " \n", 1364 | " \n", 1365 | " \n", 1366 | " \n", 1367 | " \n", 1368 | " \n", 1369 | " \n", 1370 | " \n", 1371 | " \n", 1372 | " \n", 1373 | " \n", 1374 | " \n", 1375 | " \n", 1376 | " \n", 1377 | " \n", 1378 | " \n", 1379 | " \n", 1380 | " \n", 1381 | " \n", 1382 | " \n", 1383 | " \n", 1384 | " \n", 1385 | " \n", 1386 | " \n", 1387 | " \n", 1388 | " \n", 1389 | " \n", 1390 | " \n", 1391 | "
0
patientunitstayid141296
apachepredvarid3980
sicuday1
saps3day10
saps3today0
saps3yesterday0
gender0
teachtype0
region3
bedcount28
admitsource4
graftcount3
meds0
verbal5
motor6
eyes4
age63
admitdiagnosisHYPOVOLEM
thrombolytics0
diedinhospital1
aids0
hepaticfailure0
lymphoma0
metastaticcancer0
leukemia0
immunosuppression1
cirrhosis0
electivesurgeryNone
activetx0
readmit0
ima0
midur0
ventday10
oobventday10
oobintubday10
diabetes0
managementsystem1
var03hspxlos0
pao254
fio221
ejectfx-1
creatinine4.33
dischargelocation4
visitnumber1
amilocation-1
day1meds0
day1verbal5
day1motor6
day1eyes4
day1pao254
day1fio221
\n", 1392 | "
" 1393 | ], 1394 | "text/plain": [ 1395 | " 0\n", 1396 | "patientunitstayid 141296\n", 1397 | "apachepredvarid 3980\n", 1398 | "sicuday 1\n", 1399 | "saps3day1 0\n", 1400 | "saps3today 0\n", 1401 | "saps3yesterday 0\n", 1402 | "gender 0\n", 1403 | "teachtype 0\n", 1404 | "region 3\n", 1405 | "bedcount 28\n", 1406 | "admitsource 4\n", 1407 | "graftcount 3\n", 1408 | "meds 0\n", 1409 | "verbal 5\n", 1410 | "motor 6\n", 1411 | "eyes 4\n", 1412 | "age 63\n", 1413 | "admitdiagnosis HYPOVOLEM\n", 1414 | "thrombolytics 0\n", 1415 | "diedinhospital 1\n", 1416 | "aids 0\n", 1417 | "hepaticfailure 0\n", 1418 | "lymphoma 0\n", 1419 | "metastaticcancer 0\n", 1420 | "leukemia 0\n", 1421 | "immunosuppression 1\n", 1422 | "cirrhosis 0\n", 1423 | "electivesurgery None\n", 1424 | "activetx 0\n", 1425 | "readmit 0\n", 1426 | "ima 0\n", 1427 | "midur 0\n", 1428 | "ventday1 0\n", 1429 | "oobventday1 0\n", 1430 | "oobintubday1 0\n", 1431 | "diabetes 0\n", 1432 | "managementsystem 1\n", 1433 | "var03hspxlos 0\n", 1434 | "pao2 54\n", 1435 | "fio2 21\n", 1436 | "ejectfx -1\n", 1437 | "creatinine 4.33\n", 1438 | "dischargelocation 4\n", 1439 | "visitnumber 1\n", 1440 | "amilocation -1\n", 1441 | "day1meds 0\n", 1442 | "day1verbal 5\n", 1443 | "day1motor 6\n", 1444 | "day1eyes 4\n", 1445 | "day1pao2 54\n", 1446 | "day1fio2 21" 1447 | ] 1448 | }, 1449 | "execution_count": 24, 1450 | "metadata": {}, 1451 | "output_type": "execute_result" 1452 | } 1453 | ], 1454 | "source": [ 1455 | "# run the query and assign the output to a variable\n", 1456 | "apachepredvar = pd.read_sql_query(query,con)\n", 1457 | "apachepredvar.head().T" 1458 | ] 1459 | }, 1460 | { 1461 | "cell_type": "code", 1462 | "execution_count": 23, 1463 | "metadata": {}, 1464 | "outputs": [ 1465 | { 1466 | "data": { 1467 | "text/plain": [ 1468 | "Index([u'patientunitstayid', u'apachepredvarid', u'sicuday', u'saps3day1',\n", 1469 | " u'saps3today', u'saps3yesterday', u'gender', u'teachtype', u'region',\n", 1470 | " u'bedcount', u'admitsource', u'graftcount', u'meds', u'verbal',\n", 1471 | " u'motor', u'eyes', u'age', u'admitdiagnosis', u'thrombolytics',\n", 1472 | " u'diedinhospital', u'aids', u'hepaticfailure', u'lymphoma',\n", 1473 | " u'metastaticcancer', u'leukemia', u'immunosuppression', u'cirrhosis',\n", 1474 | " u'electivesurgery', u'activetx', u'readmit', u'ima', u'midur',\n", 1475 | " u'ventday1', u'oobventday1', u'oobintubday1', u'diabetes',\n", 1476 | " u'managementsystem', u'var03hspxlos', u'pao2', u'fio2', u'ejectfx',\n", 1477 | " u'creatinine', u'dischargelocation', u'visitnumber', u'amilocation',\n", 1478 | " u'day1meds', u'day1verbal', u'day1motor', u'day1eyes', u'day1pao2',\n", 1479 | " u'day1fio2'],\n", 1480 | " dtype='object')" 1481 | ] 1482 | }, 1483 | "execution_count": 23, 1484 | "metadata": {}, 1485 | "output_type": "execute_result" 1486 | } 1487 | ], 1488 | "source": [ 1489 | "apachepredvar.columns" 1490 | ] 1491 | }, 1492 | { 1493 | "cell_type": "code", 1494 | "execution_count": null, 1495 | "metadata": { 1496 | "collapsed": true 1497 | }, 1498 | "outputs": [], 1499 | "source": [ 1500 | "apachepredvar.ventday1" 1501 | ] 1502 | }, 1503 | { 1504 | "cell_type": "markdown", 1505 | "metadata": {}, 1506 | "source": [ 1507 | "### Questions\n", 1508 | "\n", 1509 | "- Was the patient ventilated during (APACHE) day 1 of their stay?\n", 1510 | "- Did the patient have diabetes?" 1511 | ] 1512 | }, 1513 | { 1514 | "cell_type": "markdown", 1515 | "metadata": { 1516 | "collapsed": true 1517 | }, 1518 | "source": [ 1519 | "### 3.5. The `apachepatientresult` table\n", 1520 | "\n", 1521 | "The `apachepatientresult` table provides predictions made by the APACHE score (versions IV and IVa), including probability of mortality, length of stay, and ventilation days. See: http://eicu-crd.mit.edu/eicutables/apachePatientResult/" 1522 | ] 1523 | }, 1524 | { 1525 | "cell_type": "code", 1526 | "execution_count": 25, 1527 | "metadata": {}, 1528 | "outputs": [ 1529 | { 1530 | "name": "stdout", 1531 | "output_type": "stream", 1532 | "text": [ 1533 | "\n", 1534 | "SELECT *\n", 1535 | "FROM apachepatientresult\n", 1536 | "WHERE patientunitstayid = 141296\n", 1537 | "\n" 1538 | ] 1539 | } 1540 | ], 1541 | "source": [ 1542 | "# query to load data from the patient table\n", 1543 | "query = \\\n", 1544 | "\"\"\"\n", 1545 | "SELECT *\n", 1546 | "FROM apachepatientresult\n", 1547 | "WHERE patientunitstayid = {}\n", 1548 | "\"\"\".format(patientunitstayid)\n", 1549 | "\n", 1550 | "print(query)" 1551 | ] 1552 | }, 1553 | { 1554 | "cell_type": "code", 1555 | "execution_count": 27, 1556 | "metadata": {}, 1557 | "outputs": [ 1558 | { 1559 | "data": { 1560 | "text/html": [ 1561 | "
\n", 1562 | "\n", 1575 | "\n", 1576 | " \n", 1577 | " \n", 1578 | " \n", 1579 | " \n", 1580 | " \n", 1581 | " \n", 1582 | " \n", 1583 | " \n", 1584 | " \n", 1585 | " \n", 1586 | " \n", 1587 | " \n", 1588 | " \n", 1589 | " \n", 1590 | " \n", 1591 | " \n", 1592 | " \n", 1593 | " \n", 1594 | " \n", 1595 | " \n", 1596 | " \n", 1597 | " \n", 1598 | " \n", 1599 | " \n", 1600 | " \n", 1601 | " \n", 1602 | " \n", 1603 | " \n", 1604 | " \n", 1605 | " \n", 1606 | " \n", 1607 | " \n", 1608 | " \n", 1609 | " \n", 1610 | " \n", 1611 | " \n", 1612 | " \n", 1613 | " \n", 1614 | " \n", 1615 | " \n", 1616 | " \n", 1617 | " \n", 1618 | " \n", 1619 | " \n", 1620 | " \n", 1621 | " \n", 1622 | " \n", 1623 | " \n", 1624 | " \n", 1625 | " \n", 1626 | " \n", 1627 | " \n", 1628 | " \n", 1629 | " \n", 1630 | " \n", 1631 | " \n", 1632 | " \n", 1633 | " \n", 1634 | " \n", 1635 | " \n", 1636 | " \n", 1637 | " \n", 1638 | " \n", 1639 | " \n", 1640 | " \n", 1641 | " \n", 1642 | " \n", 1643 | " \n", 1644 | " \n", 1645 | " \n", 1646 | " \n", 1647 | " \n", 1648 | " \n", 1649 | " \n", 1650 | " \n", 1651 | " \n", 1652 | " \n", 1653 | " \n", 1654 | " \n", 1655 | " \n", 1656 | " \n", 1657 | " \n", 1658 | " \n", 1659 | " \n", 1660 | " \n", 1661 | " \n", 1662 | " \n", 1663 | " \n", 1664 | " \n", 1665 | " \n", 1666 | " \n", 1667 | " \n", 1668 | " \n", 1669 | " \n", 1670 | " \n", 1671 | " \n", 1672 | " \n", 1673 | " \n", 1674 | " \n", 1675 | " \n", 1676 | " \n", 1677 | " \n", 1678 | " \n", 1679 | " \n", 1680 | " \n", 1681 | " \n", 1682 | " \n", 1683 | " \n", 1684 | " \n", 1685 | " \n", 1686 | " \n", 1687 | " \n", 1688 | " \n", 1689 | " \n", 1690 | " \n", 1691 | " \n", 1692 | " \n", 1693 | " \n", 1694 | " \n", 1695 | " \n", 1696 | " \n", 1697 | " \n", 1698 | " \n", 1699 | " \n", 1700 | "
01
patientunitstayid141296141296
apachepatientresultsid4251442513
physicianspecialitycritical care medicine (CCM)critical care medicine (CCM)
physicianinterventioncategoryUnknownUnknown
acutephysiologyscore6868
apachescore8989
apacheversionIVaIV
predictedicumortality0.120845000213007110.1139538682077893
actualicumortalityALIVEALIVE
predictediculos4.843754.72517
actualiculos1.96381.9638
predictedhospitalmortality0.257117245365128590.22655498624812659
actualhospitalmortalityEXPIREDEXPIRED
predictedhospitallos15.11515.3914
actualhospitallos6.97436.9743
preopmi00
preopcardiaccath00
ptcawithin24h00
unabridgedunitlos1.96381.9638
unabridgedhosplos6.97436.9743
actualventdaysNoneNone
predventdaysNoneNone
unabridgedactualventdaysNoneNone
\n", 1701 | "
" 1702 | ], 1703 | "text/plain": [ 1704 | " 0 \\\n", 1705 | "patientunitstayid 141296 \n", 1706 | "apachepatientresultsid 42514 \n", 1707 | "physicianspeciality critical care medicine (CCM) \n", 1708 | "physicianinterventioncategory Unknown \n", 1709 | "acutephysiologyscore 68 \n", 1710 | "apachescore 89 \n", 1711 | "apacheversion IVa \n", 1712 | "predictedicumortality 0.12084500021300711 \n", 1713 | "actualicumortality ALIVE \n", 1714 | "predictediculos 4.84375 \n", 1715 | "actualiculos 1.9638 \n", 1716 | "predictedhospitalmortality 0.25711724536512859 \n", 1717 | "actualhospitalmortality EXPIRED \n", 1718 | "predictedhospitallos 15.115 \n", 1719 | "actualhospitallos 6.9743 \n", 1720 | "preopmi 0 \n", 1721 | "preopcardiaccath 0 \n", 1722 | "ptcawithin24h 0 \n", 1723 | "unabridgedunitlos 1.9638 \n", 1724 | "unabridgedhosplos 6.9743 \n", 1725 | "actualventdays None \n", 1726 | "predventdays None \n", 1727 | "unabridgedactualventdays None \n", 1728 | "\n", 1729 | " 1 \n", 1730 | "patientunitstayid 141296 \n", 1731 | "apachepatientresultsid 42513 \n", 1732 | "physicianspeciality critical care medicine (CCM) \n", 1733 | "physicianinterventioncategory Unknown \n", 1734 | "acutephysiologyscore 68 \n", 1735 | "apachescore 89 \n", 1736 | "apacheversion IV \n", 1737 | "predictedicumortality 0.1139538682077893 \n", 1738 | "actualicumortality ALIVE \n", 1739 | "predictediculos 4.72517 \n", 1740 | "actualiculos 1.9638 \n", 1741 | "predictedhospitalmortality 0.22655498624812659 \n", 1742 | "actualhospitalmortality EXPIRED \n", 1743 | "predictedhospitallos 15.3914 \n", 1744 | "actualhospitallos 6.9743 \n", 1745 | "preopmi 0 \n", 1746 | "preopcardiaccath 0 \n", 1747 | "ptcawithin24h 0 \n", 1748 | "unabridgedunitlos 1.9638 \n", 1749 | "unabridgedhosplos 6.9743 \n", 1750 | "actualventdays None \n", 1751 | "predventdays None \n", 1752 | "unabridgedactualventdays None " 1753 | ] 1754 | }, 1755 | "execution_count": 27, 1756 | "metadata": {}, 1757 | "output_type": "execute_result" 1758 | } 1759 | ], 1760 | "source": [ 1761 | "# run the query and assign the output to a variable\n", 1762 | "apachepatientresult = pd.read_sql_query(query,con)\n", 1763 | "apachepatientresult.head().T" 1764 | ] 1765 | }, 1766 | { 1767 | "cell_type": "code", 1768 | "execution_count": null, 1769 | "metadata": { 1770 | "collapsed": true 1771 | }, 1772 | "outputs": [], 1773 | "source": [ 1774 | "apachepatientresult.columns" 1775 | ] 1776 | }, 1777 | { 1778 | "cell_type": "markdown", 1779 | "metadata": {}, 1780 | "source": [ 1781 | "### Questions\n", 1782 | "\n", 1783 | "- What versions of the APACHE score are computed?\n", 1784 | "- How many days during the stay was the patient ventilated?\n", 1785 | "- How long was the patient predicted to stay in hospital?\n", 1786 | "- Was this prediction close to the truth?" 1787 | ] 1788 | } 1789 | ], 1790 | "metadata": { 1791 | "kernelspec": { 1792 | "display_name": "Python 2", 1793 | "language": "python", 1794 | "name": "python2" 1795 | }, 1796 | "language_info": { 1797 | "codemirror_mode": { 1798 | "name": "ipython", 1799 | "version": 2 1800 | }, 1801 | "file_extension": ".py", 1802 | "mimetype": "text/x-python", 1803 | "name": "python", 1804 | "nbconvert_exporter": "python", 1805 | "pygments_lexer": "ipython2", 1806 | "version": "2.7.13" 1807 | } 1808 | }, 1809 | "nbformat": 4, 1810 | "nbformat_minor": 2 1811 | } 1812 | -------------------------------------------------------------------------------- /01-explore-patient-table.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# eICU Collaborative Research Database\n", 8 | "\n", 9 | "# Notebook 1: Exploring the `patient` table\n", 10 | "\n", 11 | "The aim of this notebook is to introduce the `patient` table, a key table in the eICU Collaborative Research Database. \n", 12 | "\n", 13 | "The `patient` table contains patient demographics and admission and discharge details for hospital and ICU stays. For more detail, see: http://eicu-crd.mit.edu/eicutables/patient/\n", 14 | "\n", 15 | "Before starting, you will need to copy the eicu demo database file ('eicu_demo.sqlite3') to the `data` directory.\n", 16 | "\n", 17 | "Documentation on the eICU Collaborative Research Database can be found at: http://eicu-crd.mit.edu/. " 18 | ] 19 | }, 20 | { 21 | "cell_type": "markdown", 22 | "metadata": {}, 23 | "source": [ 24 | "## 1. Getting set up" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "execution_count": 1, 30 | "metadata": { 31 | "collapsed": true 32 | }, 33 | "outputs": [], 34 | "source": [ 35 | "# Import libraries\n", 36 | "import pandas as pd\n", 37 | "import matplotlib.pyplot as plt\n", 38 | "import sqlite3\n", 39 | "import os" 40 | ] 41 | }, 42 | { 43 | "cell_type": "code", 44 | "execution_count": 2, 45 | "metadata": { 46 | "collapsed": true 47 | }, 48 | "outputs": [], 49 | "source": [ 50 | "# Plot settings\n", 51 | "%matplotlib inline\n", 52 | "plt.style.use('ggplot')\n", 53 | "fontsize = 20 # size for x and y ticks\n", 54 | "plt.rcParams['legend.fontsize'] = fontsize\n", 55 | "plt.rcParams.update({'font.size': fontsize})" 56 | ] 57 | }, 58 | { 59 | "cell_type": "code", 60 | "execution_count": 3, 61 | "metadata": { 62 | "collapsed": true 63 | }, 64 | "outputs": [], 65 | "source": [ 66 | "# Connect to the database\n", 67 | "fn = os.path.join('data','eicu_demo.sqlite3')\n", 68 | "con = sqlite3.connect(fn)\n", 69 | "cur = con.cursor()" 70 | ] 71 | }, 72 | { 73 | "cell_type": "code", 74 | "execution_count": 4, 75 | "metadata": {}, 76 | "outputs": [ 77 | { 78 | "name": "stdout", 79 | "output_type": "stream", 80 | "text": [ 81 | "hello world\n" 82 | ] 83 | } 84 | ], 85 | "source": [ 86 | "print('hello world')" 87 | ] 88 | }, 89 | { 90 | "cell_type": "markdown", 91 | "metadata": {}, 92 | "source": [ 93 | "## 2. Display list of tables" 94 | ] 95 | }, 96 | { 97 | "cell_type": "code", 98 | "execution_count": 5, 99 | "metadata": { 100 | "collapsed": true 101 | }, 102 | "outputs": [], 103 | "source": [ 104 | "query = \\\n", 105 | "\"\"\"\n", 106 | "SELECT type, name\n", 107 | "FROM sqlite_master \n", 108 | "WHERE type='table'\n", 109 | "ORDER BY name;\n", 110 | "\"\"\"\n", 111 | "\n", 112 | "list_of_tables = pd.read_sql_query(query,con)" 113 | ] 114 | }, 115 | { 116 | "cell_type": "code", 117 | "execution_count": 6, 118 | "metadata": {}, 119 | "outputs": [ 120 | { 121 | "data": { 122 | "text/html": [ 123 | "
\n", 124 | "\n", 137 | "\n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | " \n", 206 | " \n", 207 | " \n", 208 | " \n", 209 | " \n", 210 | " \n", 211 | " \n", 212 | " \n", 213 | " \n", 214 | " \n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | " \n", 223 | " \n", 224 | " \n", 225 | " \n", 226 | " \n", 227 | " \n", 228 | " \n", 229 | " \n", 230 | " \n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | " \n", 242 | "
typename
0tableadmissiondrug
1tableadmissiondx
2tableapacheapsvar
3tableapachepatientresult
4tableapachepredvar
5tablecareplancareprovider
6tablecareplaneol
7tablecareplangeneral
8tablecareplangoal
9tablecareplaninfectiousdisease
10tablediagnosis
11tableinfusiondrug
12tablelab
13tablemedication
14tablepasthistory
15tablepatient
16tabletreatment
17tablevitalaperiodic
18tablevitalperiodic
\n", 243 | "
" 244 | ], 245 | "text/plain": [ 246 | " type name\n", 247 | "0 table admissiondrug\n", 248 | "1 table admissiondx\n", 249 | "2 table apacheapsvar\n", 250 | "3 table apachepatientresult\n", 251 | "4 table apachepredvar\n", 252 | "5 table careplancareprovider\n", 253 | "6 table careplaneol\n", 254 | "7 table careplangeneral\n", 255 | "8 table careplangoal\n", 256 | "9 table careplaninfectiousdisease\n", 257 | "10 table diagnosis\n", 258 | "11 table infusiondrug\n", 259 | "12 table lab\n", 260 | "13 table medication\n", 261 | "14 table pasthistory\n", 262 | "15 table patient\n", 263 | "16 table treatment\n", 264 | "17 table vitalaperiodic\n", 265 | "18 table vitalperiodic" 266 | ] 267 | }, 268 | "execution_count": 6, 269 | "metadata": {}, 270 | "output_type": "execute_result" 271 | } 272 | ], 273 | "source": [ 274 | "list_of_tables" 275 | ] 276 | }, 277 | { 278 | "cell_type": "markdown", 279 | "metadata": {}, 280 | "source": [ 281 | "## 3. Reviewing the patient table" 282 | ] 283 | }, 284 | { 285 | "cell_type": "code", 286 | "execution_count": 7, 287 | "metadata": {}, 288 | "outputs": [ 289 | { 290 | "name": "stdout", 291 | "output_type": "stream", 292 | "text": [ 293 | "\n", 294 | "SELECT *\n", 295 | "FROM patient;\n", 296 | "\n" 297 | ] 298 | } 299 | ], 300 | "source": [ 301 | "# query to load data from the patient table\n", 302 | "query = \\\n", 303 | "\"\"\"\n", 304 | "SELECT *\n", 305 | "FROM patient;\n", 306 | "\"\"\"\n", 307 | "\n", 308 | "print(query)" 309 | ] 310 | }, 311 | { 312 | "cell_type": "code", 313 | "execution_count": 8, 314 | "metadata": { 315 | "collapsed": true 316 | }, 317 | "outputs": [], 318 | "source": [ 319 | "# run the query and assign the output to a variable\n", 320 | "patient_tab = pd.read_sql_query(query,con)" 321 | ] 322 | }, 323 | { 324 | "cell_type": "code", 325 | "execution_count": 12, 326 | "metadata": {}, 327 | "outputs": [ 328 | { 329 | "data": { 330 | "text/html": [ 331 | "
\n", 332 | "\n", 345 | "\n", 346 | " \n", 347 | " \n", 348 | " \n", 349 | " \n", 350 | " \n", 351 | " \n", 352 | " \n", 353 | " \n", 354 | " \n", 355 | " \n", 356 | " \n", 357 | " \n", 358 | " \n", 359 | " \n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " \n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | " \n", 441 | " \n", 442 | " \n", 443 | " \n", 444 | " \n", 445 | " \n", 446 | " \n", 447 | " \n", 448 | " \n", 449 | " \n", 450 | " \n", 451 | " \n", 452 | " \n", 453 | " \n", 454 | " \n", 455 | " \n", 456 | " \n", 457 | " \n", 458 | " \n", 459 | " \n", 460 | " \n", 461 | " \n", 462 | " \n", 463 | " \n", 464 | " \n", 465 | " \n", 466 | " \n", 467 | " \n", 468 | " \n", 469 | " \n", 470 | " \n", 471 | " \n", 472 | " \n", 473 | " \n", 474 | " \n", 475 | " \n", 476 | " \n", 477 | " \n", 478 | " \n", 479 | " \n", 480 | " \n", 481 | " \n", 482 | " \n", 483 | " \n", 484 | " \n", 485 | " \n", 486 | " \n", 487 | " \n", 488 | " \n", 489 | " \n", 490 | " \n", 491 | " \n", 492 | " \n", 493 | " \n", 494 | "
patientunitstayidpatienthealthsystemstayidgenderageethnicityhospitalidwardidapacheadmissiondxadmissionheighthospitaladmityear...unitstaytypeadmissionweightdischargeweightunitdischargeyearunitdischargetime24unitdischargetimeunitdischargeoffsetunitdischargelocationunitdischargestatusuniquepid
0165840148008Male81Caucasian61120Arrest, respiratory (without cardiac arrest)167.02015...admit92.492.4201523:48:00midnight75Step-Down Unit (SDU)Alive002-12363
1165841148008Male81Caucasian61120167.02015...stepdown/otherNaNNaN201503:15:00morning207DeathExpired002-12363
2193119169237Male84Caucasian6998Rhythm disturbance (atrial, supraventricular)157.52015...admit54.354.3201502:23:00morning2176Step-Down Unit (SDU)Alive002-13750
3193120169237Male84Caucasian6998157.52015...stepdown/otherNaNNaN201503:42:00morning79FloorAlive002-13750
4147894134127Male79Caucasian6083160.02015...admitNaN88.1201500:10:00midnight4Step-Down Unit (SDU)Alive002-14007
\n", 495 | "

5 rows × 36 columns

\n", 496 | "
" 497 | ], 498 | "text/plain": [ 499 | " patientunitstayid patienthealthsystemstayid gender age ethnicity \\\n", 500 | "0 165840 148008 Male 81 Caucasian \n", 501 | "1 165841 148008 Male 81 Caucasian \n", 502 | "2 193119 169237 Male 84 Caucasian \n", 503 | "3 193120 169237 Male 84 Caucasian \n", 504 | "4 147894 134127 Male 79 Caucasian \n", 505 | "\n", 506 | " hospitalid wardid apacheadmissiondx \\\n", 507 | "0 61 120 Arrest, respiratory (without cardiac arrest) \n", 508 | "1 61 120 \n", 509 | "2 69 98 Rhythm disturbance (atrial, supraventricular) \n", 510 | "3 69 98 \n", 511 | "4 60 83 \n", 512 | "\n", 513 | " admissionheight hospitaladmityear ... unitstaytype \\\n", 514 | "0 167.0 2015 ... admit \n", 515 | "1 167.0 2015 ... stepdown/other \n", 516 | "2 157.5 2015 ... admit \n", 517 | "3 157.5 2015 ... stepdown/other \n", 518 | "4 160.0 2015 ... admit \n", 519 | "\n", 520 | " admissionweight dischargeweight unitdischargeyear unitdischargetime24 \\\n", 521 | "0 92.4 92.4 2015 23:48:00 \n", 522 | "1 NaN NaN 2015 03:15:00 \n", 523 | "2 54.3 54.3 2015 02:23:00 \n", 524 | "3 NaN NaN 2015 03:42:00 \n", 525 | "4 NaN 88.1 2015 00:10:00 \n", 526 | "\n", 527 | " unitdischargetime unitdischargeoffset unitdischargelocation \\\n", 528 | "0 midnight 75 Step-Down Unit (SDU) \n", 529 | "1 morning 207 Death \n", 530 | "2 morning 2176 Step-Down Unit (SDU) \n", 531 | "3 morning 79 Floor \n", 532 | "4 midnight 4 Step-Down Unit (SDU) \n", 533 | "\n", 534 | " unitdischargestatus uniquepid \n", 535 | "0 Alive 002-12363 \n", 536 | "1 Expired 002-12363 \n", 537 | "2 Alive 002-13750 \n", 538 | "3 Alive 002-13750 \n", 539 | "4 Alive 002-14007 \n", 540 | "\n", 541 | "[5 rows x 36 columns]" 542 | ] 543 | }, 544 | "execution_count": 12, 545 | "metadata": {}, 546 | "output_type": "execute_result" 547 | } 548 | ], 549 | "source": [ 550 | "# display the first few rows of the dataframe\n", 551 | "patient_tab.head()" 552 | ] 553 | }, 554 | { 555 | "cell_type": "code", 556 | "execution_count": 13, 557 | "metadata": {}, 558 | "outputs": [ 559 | { 560 | "data": { 561 | "text/plain": [ 562 | "Index([u'patientunitstayid', u'patienthealthsystemstayid', u'gender', u'age',\n", 563 | " u'ethnicity', u'hospitalid', u'wardid', u'apacheadmissiondx',\n", 564 | " u'admissionheight', u'hospitaladmityear', u'hospitaladmittime24',\n", 565 | " u'hospitaladmittime', u'hospitaladmitoffset', u'hospitaladmitsource',\n", 566 | " u'hospitaldischargeyear', u'hospitaldischargetime24',\n", 567 | " u'hospitaldischargetime', u'hospitaldischargeoffset',\n", 568 | " u'hospitaldischargelocation', u'hospitaldischargestatus', u'unittype',\n", 569 | " u'unitadmityear', u'unitadmittime24', u'unitadmittime',\n", 570 | " u'unitadmitsource', u'unitvisitnumber', u'unitstaytype',\n", 571 | " u'admissionweight', u'dischargeweight', u'unitdischargeyear',\n", 572 | " u'unitdischargetime24', u'unitdischargetime', u'unitdischargeoffset',\n", 573 | " u'unitdischargelocation', u'unitdischargestatus', u'uniquepid'],\n", 574 | " dtype='object')" 575 | ] 576 | }, 577 | "execution_count": 13, 578 | "metadata": {}, 579 | "output_type": "execute_result" 580 | } 581 | ], 582 | "source": [ 583 | "# list all of the columns in the table\n", 584 | "patient_tab.columns" 585 | ] 586 | }, 587 | { 588 | "cell_type": "markdown", 589 | "metadata": {}, 590 | "source": [ 591 | "### Questions\n", 592 | "\n", 593 | "- What does `patientunitstayid` represent? (hint, see: http://eicu-crd.mit.edu/eicutables/patient/)\n", 594 | "- What does `patienthealthsystemstayid` represent?\n", 595 | "- What does `uniquepid` represent?" 596 | ] 597 | }, 598 | { 599 | "cell_type": "code", 600 | "execution_count": 15, 601 | "metadata": {}, 602 | "outputs": [ 603 | { 604 | "data": { 605 | "text/html": [ 606 | "
\n", 607 | "\n", 620 | "\n", 621 | " \n", 622 | " \n", 623 | " \n", 624 | " \n", 625 | " \n", 626 | " \n", 627 | " \n", 628 | " \n", 629 | " \n", 630 | " \n", 631 | " \n", 632 | " \n", 633 | " \n", 634 | " \n", 635 | " \n", 636 | " \n", 637 | " \n", 638 | " \n", 639 | " \n", 640 | " \n", 641 | " \n", 642 | " \n", 643 | " \n", 644 | " \n", 645 | " \n", 646 | " \n", 647 | " \n", 648 | " \n", 649 | " \n", 650 | " \n", 651 | " \n", 652 | " \n", 653 | " \n", 654 | " \n", 655 | " \n", 656 | " \n", 657 | " \n", 658 | " \n", 659 | " \n", 660 | " \n", 661 | " \n", 662 | " \n", 663 | " \n", 664 | " \n", 665 | " \n", 666 | " \n", 667 | " \n", 668 | " \n", 669 | " \n", 670 | " \n", 671 | " \n", 672 | " \n", 673 | "
uniquepidpatientunitstayidgenderageunitdischargestatus
0002-12363165840Male81Alive
1002-12363165841Male81Expired
2002-13750193119Male84Alive
3002-13750193120Male84Alive
4002-14007147894Male79Alive
\n", 674 | "
" 675 | ], 676 | "text/plain": [ 677 | " uniquepid patientunitstayid gender age unitdischargestatus\n", 678 | "0 002-12363 165840 Male 81 Alive\n", 679 | "1 002-12363 165841 Male 81 Expired\n", 680 | "2 002-13750 193119 Male 84 Alive\n", 681 | "3 002-13750 193120 Male 84 Alive\n", 682 | "4 002-14007 147894 Male 79 Alive" 683 | ] 684 | }, 685 | "execution_count": 15, 686 | "metadata": {}, 687 | "output_type": "execute_result" 688 | } 689 | ], 690 | "source": [ 691 | "# select a limited number of columns to view\n", 692 | "columns = ['uniquepid', 'patientunitstayid','gender','age','unitdischargestatus']\n", 693 | "patient_tab[columns].head()" 694 | ] 695 | }, 696 | { 697 | "cell_type": "code", 698 | "execution_count": 17, 699 | "metadata": {}, 700 | "outputs": [ 701 | { 702 | "data": { 703 | "text/plain": [ 704 | "array([u'14', u'18', u'19', u'21', u'22', u'24', u'26', u'27', u'28',\n", 705 | " u'30', u'31', u'32', u'33', u'34', u'35', u'36', u'37', u'38',\n", 706 | " u'39', u'40', u'41', u'42', u'43', u'44', u'45', u'46', u'47',\n", 707 | " u'48', u'49', u'50', u'51', u'52', u'53', u'54', u'55', u'56',\n", 708 | " u'57', u'58', u'59', u'60', u'61', u'62', u'63', u'64', u'65',\n", 709 | " u'66', u'67', u'68', u'69', u'70', u'71', u'72', u'73', u'74',\n", 710 | " u'75', u'76', u'77', u'78', u'79', u'80', u'81', u'82', u'83',\n", 711 | " u'84', u'85', u'86', u'87', u'88', u'89', u'> 89'], dtype=object)" 712 | ] 713 | }, 714 | "execution_count": 17, 715 | "metadata": {}, 716 | "output_type": "execute_result" 717 | } 718 | ], 719 | "source": [ 720 | "# what are the unique values for age?\n", 721 | "age_col = 'age'\n", 722 | "patient_tab[age_col].sort_values().unique()" 723 | ] 724 | }, 725 | { 726 | "cell_type": "markdown", 727 | "metadata": {}, 728 | "source": [ 729 | "### Questions\n", 730 | "\n", 731 | "- Try plotting a histogram of ages using the commands in the cell below. Why does the plot fail?\n", 732 | "\n", 733 | "```python\n", 734 | "# try plotting a histogram of ages\n", 735 | "figsize = (18,8)\n", 736 | "patient_tab[age_col].plot(kind='hist',\n", 737 | " figsize=figsize, \n", 738 | " fontsize=fontsize,\n", 739 | " bins=15)\n", 740 | "```" 741 | ] 742 | }, 743 | { 744 | "cell_type": "code", 745 | "execution_count": 18, 746 | "metadata": {}, 747 | "outputs": [ 748 | { 749 | "ename": "TypeError", 750 | "evalue": "Empty 'DataFrame': no numeric data to plot", 751 | "output_type": "error", 752 | "traceback": [ 753 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 754 | "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", 755 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mfigsize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfigsize\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mfontsize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfontsize\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m bins=15)\n\u001b[0m", 756 | "\u001b[0;32m/usr/local/lib/python2.7/site-packages/pandas/plotting/_core.pyc\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, kind, ax, figsize, use_index, title, grid, legend, style, logx, logy, loglog, xticks, yticks, xlim, ylim, rot, fontsize, colormap, table, yerr, xerr, label, secondary_y, **kwds)\u001b[0m\n\u001b[1;32m 2444\u001b[0m \u001b[0mcolormap\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcolormap\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtable\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtable\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0myerr\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0myerr\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2445\u001b[0m \u001b[0mxerr\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mxerr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlabel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msecondary_y\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msecondary_y\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2446\u001b[0;31m **kwds)\n\u001b[0m\u001b[1;32m 2447\u001b[0m \u001b[0m__call__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__doc__\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplot_series\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__doc__\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2448\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", 757 | "\u001b[0;32m/usr/local/lib/python2.7/site-packages/pandas/plotting/_core.pyc\u001b[0m in \u001b[0;36mplot_series\u001b[0;34m(data, kind, ax, figsize, use_index, title, grid, legend, style, logx, logy, loglog, xticks, yticks, xlim, ylim, rot, fontsize, colormap, table, yerr, xerr, label, secondary_y, **kwds)\u001b[0m\n\u001b[1;32m 1886\u001b[0m \u001b[0myerr\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0myerr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mxerr\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mxerr\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1887\u001b[0m \u001b[0mlabel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlabel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msecondary_y\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msecondary_y\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1888\u001b[0;31m **kwds)\n\u001b[0m\u001b[1;32m 1889\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1890\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", 758 | "\u001b[0;32m/usr/local/lib/python2.7/site-packages/pandas/plotting/_core.pyc\u001b[0m in \u001b[0;36m_plot\u001b[0;34m(data, x, y, subplots, ax, kind, **kwds)\u001b[0m\n\u001b[1;32m 1680\u001b[0m \u001b[0mplot_obj\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mklass\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msubplots\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msubplots\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkind\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mkind\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1681\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1682\u001b[0;31m \u001b[0mplot_obj\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgenerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1683\u001b[0m \u001b[0mplot_obj\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdraw\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1684\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mplot_obj\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresult\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 759 | "\u001b[0;32m/usr/local/lib/python2.7/site-packages/pandas/plotting/_core.pyc\u001b[0m in \u001b[0;36mgenerate\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 234\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mgenerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 235\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_args_adjust\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 236\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_compute_plot_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 237\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_setup_subplots\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 238\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_make_plot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 760 | "\u001b[0;32m/usr/local/lib/python2.7/site-packages/pandas/plotting/_core.pyc\u001b[0m in \u001b[0;36m_compute_plot_data\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 343\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mis_empty\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 344\u001b[0m raise TypeError('Empty {0!r}: no numeric data to '\n\u001b[0;32m--> 345\u001b[0;31m 'plot'.format(numeric_data.__class__.__name__))\n\u001b[0m\u001b[1;32m 346\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 347\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnumeric_data\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 761 | "\u001b[0;31mTypeError\u001b[0m: Empty 'DataFrame': no numeric data to plot" 762 | ] 763 | } 764 | ], 765 | "source": [ 766 | "figsize = (18,8)\n", 767 | "patient_tab[age_col].plot(kind='hist',\n", 768 | " figsize=figsize, \n", 769 | " fontsize=fontsize,\n", 770 | " bins=15)" 771 | ] 772 | }, 773 | { 774 | "cell_type": "code", 775 | "execution_count": 19, 776 | "metadata": {}, 777 | "outputs": [ 778 | { 779 | "data": { 780 | "text/plain": [ 781 | "array([ 14., 18., 19., 21., 22., 24., 26., 27., 28., 30., 31.,\n", 782 | " 32., 33., 34., 35., 36., 37., 38., 39., 40., 41., 42.,\n", 783 | " 43., 44., 45., 46., 47., 48., 49., 50., 51., 52., 53.,\n", 784 | " 54., 55., 56., 57., 58., 59., 60., 61., 62., 63., 64.,\n", 785 | " 65., 66., 67., 68., 69., 70., 71., 72., 73., 74., 75.,\n", 786 | " 76., 77., 78., 79., 80., 81., 82., 83., 84., 85., 86.,\n", 787 | " 87., 88., 89., nan])" 788 | ] 789 | }, 790 | "execution_count": 19, 791 | "metadata": {}, 792 | "output_type": "execute_result" 793 | } 794 | ], 795 | "source": [ 796 | "# create a column containing numerical ages\n", 797 | "# If ‘coerce’, then invalid parsing will be set as NaN\n", 798 | "agenum_col = 'age_num'\n", 799 | "patient_tab[agenum_col] = pd.to_numeric(patient_tab[age_col], errors='coerce')\n", 800 | "patient_tab[agenum_col].sort_values().unique()" 801 | ] 802 | }, 803 | { 804 | "cell_type": "code", 805 | "execution_count": 20, 806 | "metadata": {}, 807 | "outputs": [ 808 | { 809 | "data": { 810 | "text/plain": [ 811 | "" 812 | ] 813 | }, 814 | "execution_count": 20, 815 | "metadata": {}, 816 | "output_type": "execute_result" 817 | }, 818 | { 819 | "data": { 820 | "image/png": "iVBORw0KGgoAAAANSUhEUgAABFMAAAHxCAYAAAChyPPTAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3X2QVtWdJ/Bv022DTTcgEESiRCcGlY5vxBcgAUFFsByd\nSqIdM1nNlHGTyoxbTqYyJanoKMlOxdnZcidbs2bcmFiiUyImmgyDwTfEFxRlUTRAghokBCGhSYO8\nKdDQ+4dFj0w3yn1oeLp5Pp+qlJ17z7nndzmkIF/PObeqra2tLQAAAADsl17lLgAAAACgJxGmAAAA\nABQgTAEAAAAoQJgCAAAAUIAwBQAAAKAAYQoAAABAAcIUAAAAgAJqyl3AvmzZsiUvvPBCXn755axa\ntSotLS2pqanJ8OHDM2HChEycODFVVVXt7Zubm3Pdddft83ljx47N9ddf3+m9efPm5dFHH83q1avT\nq1evnHDCCbn00kszatSoLn8vAAAAoGeramtrayt3EZ157LHHcuedd+aoo45KY2NjBg8enLfffjsv\nvPBCtm3blnPPPTd/8zd/095+T5hy/PHH5+yzz+7wvOOOOy7nnntuh+vTp0/P7NmzM2jQoIwePTqt\nra2ZP39+tmzZkmuuuSaTJ08+qO8JAAAA9CzddmXKsGHDcsMNN3RYHfLFL34x3/rWt/LCCy/kxRdf\nzDnnnLPX/Y997GO5/PLL92uM1157LbNnz87QoUPzve99L3V1dUmSyy67LDfccEPuueeefOpTn8rg\nwYO75qUAAACAHq/bnpnS2NjY6Tab/v37Z9KkSUmSpUuXHtAYjz76aJLkc5/7XHuQkiSDBw/O5MmT\ns3Pnzjz55JMHNAYAAABweOm2YcoHqa6u3uuf77dhw4Y8/vjjeeihh/L4449n1apV+3zOnjDm9NNP\n73DvjDPOSJIsWbJkv+s60HCHnsecVybzXnnMeWUy75XHnFcm816ZzHvl6eo573Fhyu7du/PUU08l\n+Y/A4/1effXV/PCHP8yMGTPywx/+MH/7t3+badOmZf369Xu12759e1paWtKnT58MGDCgw3OOOeaY\nJMnatWv3uzb/g6w85rwymffKY84rk3mvPOa8Mpn3ymTeK09Xz3m3PTNlX+69996sXr06o0aNymmn\nndZ+vXfv3vn85z+fc845J0OGDEmSrFq1Kg888ECWLFmS7373u/nHf/zH1NbWJkm2bduWJHtt73m/\n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\nBbnwwgvTr1+/D3zeggULsmzZsvz2t7/NypUr8+6772bcuHG57rrrOrRtbm7u9PoeY8eOzfXXX9/p\nvXnz5uXRRx/N6tWr06tXr5xwwgm59NJLM2rUqGK/AAAAAMBh76CdFNvS0pLm5uZs2rRpr+vr16/P\n/fffn4ceeiif/exn87nPfW6fz3jwwQfz29/+Nn369MmgQYPy1ltvfei4xx9/fM4+++wO14877rhO\n20+fPj2zZ8/OoEGDcuGFF6a1tTXz58/PP/zDP+Saa67J5MmTP3RMAAAAoHJ0aZiyZcuWPPPMM5k3\nb15WrlzZfn348OGZOHFizj333Pzyl7/MY489ljfeeCP3339/ampqctlll3X6vL/4i7/IwIEDM3To\n0CxbtizTpk370Bo+9rGP5fLLL9+vel977bXMnj07Q4cOzfe+973U1dUlSS677LLccMMNueeee/Kp\nT30qgwcP3q/nAQAAAIe/Aw5T2trasnjx4jz55JNZtGhRWltbkyR9+vTJmDFjcuGFF+bEE09sbz9h\nwoRMmDAhjz32WO688848/vjj+wxTRo4ceaDlfaBHH300SfK5z32uPUhJksGDB2fy5Mn56U9/mief\nfDJXXHHFQa0DAAAA6DlKDlPWrFmTefPm5emnn86GDRvar5944om54IILMnbs2PTp02ef/SdNmpQZ\nM2akubm51BI6tWHDhjz++OPZvHlzGhoaMmLEiAwfPrzTtkuXLk2SnH766R3unXHGGfnpT3+aJUuW\nCFMAAACAdiWHKd/4xjfaf66vr8+4ceNywQUX7PNsks706dMnW7ZsKbWETr366qt59dVX97o2cuTI\n/NVf/dVe23W2b9+elpaW9OnTJwMGDOjwnGOOOSZJsnbt2i6tDwAAAOjZDmibT2NjY84///yMHj06\nNTXFHzVt2rT2bUEHqnfv3vn85z+fc845J0OGDEmSrFq1Kg888ECWLFmS7373u/nHf/zH1NbWJkm2\nbduWJHtt73m/Pde3bt3aJfUBAAAAh4eSw5T//b//d44++ugDGrwrD3bt169fmpqa9rp28skn59vf\n/nZuuummvPHGG3niiSdy8cUXF3puVVVVl9UIAAAA9HwlhykHGqQcKr169coFF1yQN954I7/61a/a\nw5Q9K0/2rFD5zz5s5Ury3pkre85dSZKmpqY0NDR0Ven0ALW1tea8Apn3ymPOK5N57/m2V3fphyt7\n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\n1NfXd0nBAAAAAOV0QGFKktTX16epqSlNTU3ZsWNHtmzZ0n69trb2gAsEAAAA6E4OOEx5v9ra2gwc\nOLArHwnYTT4kAAAgAElEQVQAAADQrXRZmLJ58+b88Y9/zPbt23PSSSd11WMBAAAAupUDDlMWLFiQ\nhx56KCtXrkzy3lkpM2bMaL+/devWfP/7309bW1v++q//On379j3QIQEAAADKpteBdJ4xY0b+1//6\nX1m5cmWqq6tTVVXVfgDtHn379k3fvn3z6quv5vnnnz+gYgEAAADKreQw5dVXX81DDz2UPn365L/9\nt/+W6dOnp1+/fp22nTBhQpJk8eLFpQ4HAAAA0C2UvM1nzpw5SZIvfelL+cxnPvOBbfecobJnKxAA\nAABAT1XyypTXX389STJ+/PgPbdunT5/U1dVl48aNpQ4HAAAA0C2UvDJl69atqaurS58+ffar/X8+\nSwUAgIOvesP6pKW53GWURVXrznKXAMBhquQwpb6+Pm+//XZ27NiR2traD2zb0tKSd955Jx/5yEf2\n+/kLFizIsmXL8tvf/jYrV67Mu+++m3HjxuW6667bZ5/ly5fnwQcfzOuvv56dO3dm6NChmThxYqZM\nmZJevTpfhLNo0aLMmjUrK1euzO7du3PcccfloosuynnnnbfftQIAdFstzdlx6w3lrqIsel9/c7lL\nAOAwVfI2n49//ONJ9u9Q2UcffTRJcvLJJ+/38x988ME88sgjWblyZQYNGvSh7RcuXJhbbrklv/71\nr3POOedk8uTJaW1tzd13353vf//7nfaZM2dO/sf/+B9ZvXp1xo8fnwsvvDAbNmzI7bffnnvvvXe/\nawUAAAAqR8krUy644IK89NJLue+++zJixIgMGDCg03ZPPvlkfv7znydJLrzwwv1+/l/8xV9k4MCB\nGTp0aJYtW5Zp06bts+0777yTO+64I7169cott9ySE044IUly5ZVXZtq0aVmwYEGee+65jB07tr1P\nc3Nz7rnnntTX1+fWW2/N4MGDkySXX355pk6dmlmzZuXcc8/NJz7xif2uGQAAADj8lbwy5ayzzsqY\nMWOyZs2a3HDDDZk+fXp27NiR5L2VKP/6r/+av/3bv82//Mu/ZPfu3bngggsKrUwZOXJkhg4dul9t\nn3/++WzevDmf/vSn24OUJKmpqckXvvCFJMljjz22V5+5c+emtbU1F198cXuQkiR1dXX57Gc/22kf\n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\nADBjxgw4ODggLy8Pd+7cET9Lp9Ph559/BvD3UhHqn2pra03uPDG6c+cOdu7cCQCYOnWqWM6+bvs8\nPI8zgEEAAANkSURBVDwQGRmJpqYm5OTkmBy7fPkySkpKoFAoxCf1MXPpOXfuHNrb2zFhwgSzjWeN\nmLvtCw0NBdC7N47xIpjRpUuXcPPmTcjlcvECCTOXDuPSnEdVVVVh7969UCgUSExMFMutOZazEx63\nMJwAABcuXMCFCxcA9N72c/nyZSiVSrGzDhkyBAsXLjSp/+2338LR0VHcTVitVqOurg6TJ0/GihUr\nXsjPQc/u5MmT2LZtG2QyGeLj4/u8LdjT0xMzZswQv2futi83Nxf79+9HSEgIlEolFAoF7t+/D41G\nA61Wi2HDhmHNmjUYPny4+B7mLl2HDx/GkSNHkJKSYnYVMy8vD7t27YJCoUBMTAwcHBxQVFSE5uZm\nzJs3D+++++4LajU9i8OHDyM7OxuhoaHw8PDAoEGD0NjYiOLiYuj1ekRERCAtLQ329vbie9jXbV9z\nczPWrFmDpqYmhIeHIygoCI2Njbh48SLs7OywYsUKREdHi/WZubSsXbsWpaWlSE9PR0RExGPrMXfb\nJggCvvrqK1y5cgXOzs6Ijo6Gq6srampqxDsO3nvvPcTHx4vvYebSsGrVKsjlcvEpfbW1tSguLoaz\nszPS09MREhJiUt9aYzlOpjyFcUD9OEqlEps3bzYpKysrw9GjR1FWVga9Xg8vLy/ExsYiISGBu0Hb\ngKdlDvSuxTQ+QtGIudu26upq5Ofno7S0FHfv3kV7ezucnZ3h7e2NiIgIJCQkmG0+DDB3qXrSZArQ\nextoVlYWKisrIQgCfH19ER8fj2nTpr2A1pIlNBoNjh8/jlu3bolrowcPHozAwEBMmzbN5K6UR7Gv\n2762tjYcOXIEFy9eREtLCwYNGoTQ0FAkJiZixIgRZvWZuTTU1tYiNTUVHh4e2LJly1OzY+62zWAw\nIC8vD4WFhaipqUFnZycUCgVGjhyJhIQEcdnfo5i57cvKykJhYSEaGhrQ1dUFNzc3TJgwAYmJiY+9\nG80aYzlOphARERERERERWYB7phARERERERERWYCTKUREREREREREFuBkChERERERERGRBTiZQkRE\nRERERERkAU6mEBERERERERFZgJMpREREREREREQW4GQKEREREREREZEFOJlCRERERERERGQBTqYQ\nEREREREREVmAkylERERERERERBb4H/1jZVbaKm9cAAAAAElFTkSuQmCC\n", 821 | "text/plain": [ 822 | "" 823 | ] 824 | }, 825 | "metadata": {}, 826 | "output_type": "display_data" 827 | } 828 | ], 829 | "source": [ 830 | "# try plotting a histogram of ages\n", 831 | "figsize = (18,8)\n", 832 | "patient_tab[agenum_col].plot(kind='hist',\n", 833 | " figsize=figsize, \n", 834 | " fontsize=fontsize,\n", 835 | " bins=15)" 836 | ] 837 | }, 838 | { 839 | "cell_type": "markdown", 840 | "metadata": {}, 841 | "source": [ 842 | "### Questions\n", 843 | "\n", 844 | "- Use the `mean()` method to find the mean age (hint: `patient_tab[agenum_col].mean()`). What is the mean? Why might we expect this to be lower than the true mean?\n", 845 | "- In the same way that you use `.mean()`, you can use `.describe()`. Use the `describe()` method to explore the `admissionweight` of patients in kg. What issue do you see? What are some methods that you could use to deal with this issue?" 846 | ] 847 | }, 848 | { 849 | "cell_type": "code", 850 | "execution_count": 24, 851 | "metadata": {}, 852 | "outputs": [ 853 | { 854 | "data": { 855 | "text/plain": [ 856 | "count 1419.000000\n", 857 | "mean 82.221226\n", 858 | "std 28.649613\n", 859 | "min 0.000000\n", 860 | "25% 63.500000\n", 861 | "50% 77.100000\n", 862 | "75% 93.550000\n", 863 | "max 252.900000\n", 864 | "Name: admissionweight, dtype: float64" 865 | ] 866 | }, 867 | "execution_count": 24, 868 | "metadata": {}, 869 | "output_type": "execute_result" 870 | } 871 | ], 872 | "source": [ 873 | "patient_tab['admissionweight'].describe()" 874 | ] 875 | }, 876 | { 877 | "cell_type": "code", 878 | "execution_count": 29, 879 | "metadata": {}, 880 | "outputs": [], 881 | "source": [ 882 | "# set threshold based on 99th quantile\n", 883 | "adweight_col = 'admissionweight'\n", 884 | "quant = patient_tab[adweight_col].quantile(0.99)\n", 885 | "patient_tab[patient_tab[adweight_col] > quant] = None\n", 886 | "low_quant = patient_tab[adweight_col].quantile(0.01)\n", 887 | "patient_tab[patient_tab[adweight_col] < low_quant] = None" 888 | ] 889 | }, 890 | { 891 | "cell_type": "code", 892 | "execution_count": 30, 893 | "metadata": {}, 894 | "outputs": [ 895 | { 896 | "data": { 897 | "text/plain": [ 898 | "count 1377.000000\n", 899 | "mean 80.345839\n", 900 | "std 23.311258\n", 901 | "min 39.000000\n", 902 | "25% 63.500000\n", 903 | "50% 77.100000\n", 904 | "75% 92.400000\n", 905 | "max 164.400000\n", 906 | "Name: admissionweight, dtype: float64" 907 | ] 908 | }, 909 | "execution_count": 30, 910 | "metadata": {}, 911 | "output_type": "execute_result" 912 | } 913 | ], 914 | "source": [ 915 | "# describe the admission weights\n", 916 | "patient_tab[adweight_col].describe()" 917 | ] 918 | }, 919 | { 920 | "cell_type": "markdown", 921 | "metadata": {}, 922 | "source": [ 923 | "### Questions\n", 924 | "\n", 925 | "- What is the average change in weight between `admissionweight` and `dischargeweight`?\n", 926 | "- Plot a distribution of the weight change" 927 | ] 928 | }, 929 | { 930 | "cell_type": "code", 931 | "execution_count": 31, 932 | "metadata": { 933 | "collapsed": true 934 | }, 935 | "outputs": [], 936 | "source": [ 937 | "# set threshold based on 99th quantile\n", 938 | "disweight_col = 'dischargeweight'\n", 939 | "quant = patient_tab[disweight_col].quantile(0.99)\n", 940 | "patient_tab[patient_tab[disweight_col] > quant] = None" 941 | ] 942 | }, 943 | { 944 | "cell_type": "code", 945 | "execution_count": 32, 946 | "metadata": {}, 947 | "outputs": [ 948 | { 949 | "data": { 950 | "text/plain": [ 951 | "count 828.000000\n", 952 | "mean 82.543357\n", 953 | "std 23.889156\n", 954 | "min 1.000000\n", 955 | "25% 65.875000\n", 956 | "50% 78.755000\n", 957 | "75% 96.925000\n", 958 | "max 151.800000\n", 959 | "Name: dischargeweight, dtype: float64" 960 | ] 961 | }, 962 | "execution_count": 32, 963 | "metadata": {}, 964 | "output_type": "execute_result" 965 | } 966 | ], 967 | "source": [ 968 | "# describe the discharge weights\n", 969 | "patient_tab[disweight_col].describe()" 970 | ] 971 | }, 972 | { 973 | "cell_type": "code", 974 | "execution_count": 33, 975 | "metadata": { 976 | "collapsed": true 977 | }, 978 | "outputs": [], 979 | "source": [ 980 | "patient_tab['weight_change'] = patient_tab[adweight_col] - patient_tab[disweight_col]" 981 | ] 982 | }, 983 | { 984 | "cell_type": "code", 985 | "execution_count": 34, 986 | "metadata": {}, 987 | "outputs": [ 988 | { 989 | "data": { 990 | "text/plain": [ 991 | "" 992 | ] 993 | }, 994 | "execution_count": 34, 995 | "metadata": {}, 996 | "output_type": "execute_result" 997 | }, 998 | { 999 | "data": { 1000 | "image/png": "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\n113X6WcLFizIAw88kFdffTV9+vTJqFGjctFFF+X0008/qPUCAAAA5avkkGX06NFZvHhxFi9enIkT\nJ75r21/+8pdJksbGxoOaY/bs2fn973+fmpqaDB48OK+99tp79hk5cmSnW5hGjBjRafs777wz8+bN\ny+DBg3PBBRektbU1CxcuzC233JIrr7wyF1544UGtGQAAAChPJYcsF154YRYvXpxZs2bl+OOPz/Dh\nwzu0aW1tzezZs/Pwww+noqIiU6dOPag5/uqv/iqDBg3K0KFDs3LlysycOfM9+3zwgx/MJZdcckDj\nv/DCC5k3b16GDh2a7373u6mtrU2SXHzxxbnhhhvyk5/8JB//+MczZMiQg1o3AAAAUH5KDlnGjBmT\nT33qU5k3b16+9rWv5ZRTTsnbb7+dJLnrrruyYcOGrFixov2w20suuSTHHXfcQc9xKD3wwANJkr/4\ni79oD1iSZMiQIbnwwgvzs5/9LI8++mguvfTSQ7oOAAAAoOfr0km0V1xxRb74xS8mSZYsWZIdO3Yk\nSebOnZtFixZl8+bNqa6uzhVXXHHAT5d01ZtvvpmHHnooc+bMyUMPPfSur41esWJFkuSUU07p8Nmp\np56aJFm+fPmhWSgAAADQq5T8JMteF110USZNmpTFixenqakpmzZtyp49e3L00Udn9OjRGT9+fAYM\nGFDEWg/Ic889l+eee26fa2PGjMk111yzz7afHTt2ZOPGjampqcnAgQM7jHPssccmSdatW3doFwwA\nAAD0Cl0OWZKkrq4uF1xwQS644IIihitJ375989nPfjZnnXVWGhoakiRr1qzJfffdl+XLl+db3/pW\n/uEf/iHV1dVJkm3btiXJPtuE/tTe61u3bj0MqwcAAAB6ui5tF+pOBgwYkOnTp2fkyJGpra1NbW1t\nTjzxxHz961/P8ccfn9dffz0PP/zwQY9bUVFxCFYLAAAA9Da9JmTZnz59+uT8889Pkjz//PPt1/c+\nqbL3iZY/915PugAAAAD8qZK3C337298+6D4VFRX5+te/XuqUJdt7Jszeg3mTd7YXDRo0KBs3bsym\nTZs6nMuy9yyWvWezdGbFihXth+cmyfTp01NfX1/k0unmqqur1bwMqXvvt6Oy67tpKyurUuv3pEfz\nXS8/al6e1L08qXt5uvfee9t/bmxsTGNjY+FzlPx/kb/73e+KXMch9cILLyRJ+1ktezU2NuaJJ57I\n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\n60LLWDsKplYWZFeEQRRSQXnQRUWBwEblSWLS3O8ffpM1TUAhV8gl79cMM3jPyfUkH87JzSfnnkNE\nRETkMni7EBERERERERGRCDiThYhIojxkMnhdvezcOUxGkVpDRERERERMshARSVVbKx7s2eXUKXy2\n7hSpMURERERExNuFiIiIiIiIiIhEwCQLEREREREREZEImGQhIiIiIiIiIhIBkyxERERERERERCJg\nkoWIiIiIiIiISARMshARERERERERiYBJFiIiIiIiIiIiETDJQkREREREREQkAiZZiIiIiIiIiIhE\nwCQLEREREREREZEIZAPdACIiKfG60wJDXQ28vjf1+RweJqOILSIiIiIiIlfBJAsRUW/om3H//73j\n1Cl8tu4UqTFET8ZDJoPX1cvOncNvGISONucbExCI70eOdv48RERERC6ISRYiIqLBrq0VD/bscuoU\nPlt3On0OAJD/z/sAkyxEREQ0SHFNFiIiIiIiIiIiETDJQkREREREREQkAiZZiIiIiIiIiIhEwDVZ\niMhteN1pAfTNTp2DOwMREREREVF3mGQhIpcnRnIEeJggMXyww6lzcGcgIiIiIiLqDpMsROT69M14\n4OS2yQATJERERERE9HQxyUJERESSIsrstoBAfM+tpImIiEhkTLIA0Ov1yMjIQHl5Odrb2+Hv74+4\nuDisXLkSfn5+A908IknjOihEJDoRZrfJ/+d9gEkWIiIiEpnbJ1mampqwY8cOtLa2Ii4uDiqVClev\nXsXJkydRXl6O3bt3Q6FQDHQziaRLhA9DvM2HiIiIiIikwO2TLIcOHUJrayvWrVuHhQsXWo+np6cj\nOzsbGRkZ2LBhwwC2kGjgcBYKEVHPeOsSERERPcqtkyw6nQ5arRZKpdImwQIAarUap0+fRkFBAX7+\n859DLpcPUCuJBhBnoRCRyDxkMnhdvezcOVwpeTvIbl1i0oio78TaDZF9iEja3DrJcunSJQBAdHS0\nXZmvry8mT54MrVaL6upqREVF9XfziIiIBp+2VjzYs8upUzB5+xQNsqQRUb8SaTdE9iEiaXPrJMvt\n27cBACEhIQ7LQ0JCoNVq0dDQwCQLERHRIPIkM2oMXjJ4fW/q+TwizKoRY3aPK33zLcrzAUR5Tr2d\nWeAw5i702nKmERGR63PrJEtnZycAYOjQoQ7LLcc7Ojr6rU098W66BfPtG06dwyP0GZhGBYnUInqU\n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\nUlKCkpISAA9v3ykvL4dSqbQm14YNG2azFk9fYivWuM8kiwhu3LiBrKwsXL58GZ2dnfD398eMGTOw\nfPlyu7UYLAoKCqDRaFBfXw8PDw8888wz+PGPf4znnnuun1tPYti1axcuX76MPXv2OEyymM1maDQa\n5OXlobGxEd7e3pg0aRKWL1/eqxXtaWBYkmg9WblypXW79kexr0uXXq9HZmYmysrK0N7eDn9/f8TH\nx2PFihXdrsVFrs/yobonERER1m1dLaqrq3H06FFUV1fDaDQiODgY8+fPx+LFi7nzhIT1lGQBHk4R\nP378OK5duwZBEDBmzBgsWrQIc+fOHYDWUl+0tbUhKysL58+fx927dzFkyBBMnToVP/nJTzBhwgS7\n+uzr0ma55i4sLER9fT0MBgMUCgXCw8OxePFih7dqM+bS8Lj3b6VSib1799oc60tsxRj3mWQhIiIi\nIiIiIhIB12QhIiIiIiIiIhIBkyxERERERERERCJgkoWIiIiIiIiISARMshARERERERERiYBJFiIi\nIiIiIiIiETDJQkREREREREQkAiZZiIiIiIiIiIhEwCQLEREREREREZEImGQhIiIiIiIiIhIBkyxE\nRERERERERCL4X3noN5mvBFWmAAAAAElFTkSuQmCC\n", 1001 | "text/plain": [ 1002 | "" 1003 | ] 1004 | }, 1005 | "metadata": {}, 1006 | "output_type": "display_data" 1007 | } 1008 | ], 1009 | "source": [ 1010 | "# plot the weight changes\n", 1011 | "figsize = (18,8)\n", 1012 | "patient_tab['weight_change'].plot(kind='hist',\n", 1013 | " figsize=figsize, \n", 1014 | " fontsize=fontsize,\n", 1015 | " bins=50)" 1016 | ] 1017 | }, 1018 | { 1019 | "cell_type": "code", 1020 | "execution_count": null, 1021 | "metadata": { 1022 | "collapsed": true 1023 | }, 1024 | "outputs": [], 1025 | "source": [] 1026 | } 1027 | ], 1028 | "metadata": { 1029 | "kernelspec": { 1030 | "display_name": "Python 2", 1031 | "language": "python", 1032 | "name": "python2" 1033 | }, 1034 | "language_info": { 1035 | "codemirror_mode": { 1036 | "name": "ipython", 1037 | "version": 2 1038 | }, 1039 | "file_extension": ".py", 1040 | "mimetype": "text/x-python", 1041 | "name": "python", 1042 | "nbconvert_exporter": "python", 1043 | "pygments_lexer": "ipython2", 1044 | "version": "2.7.13" 1045 | } 1046 | }, 1047 | "nbformat": 4, 1048 | "nbformat_minor": 2 1049 | } 1050 | --------------------------------------------------------------------------------