{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Hosting my notebooks on [Binder](http://docs.mybinder.org/)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Exploration of a [dataset](https://data.hdx.rwlabs.org/dataset/ebola-outbreaks-before-2014) on Ebola outbreaks before 2014" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "source: Humanitarian Data Exchange ([HDX](http://data.hdx.rwlabs.org/))" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "from matplotlib import pyplot as plt\n", "plt.style.use('ggplot')\n", "\n", "from bokeh.charts import Histogram, Bar, BoxPlot, Scatter\n", "from bokeh.plotting import figure, show\n", "from bokeh.io import output_notebook, output_file\n", "from bokeh.palettes import Spectral11" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "### Loading the dataset to a Pandas dataframe" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "ebola_df = pd.read_csv(\"data/out/ebola_outbreaks_before_2014-geometry_fixed.csv\", encoding=\"utf-8\", index_col=False)\n", "\n", "ebola_data = ebola_df.drop(ebola_df.columns[[0, 1, 2, 9]], axis=1)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
country_code_iso_2_digitscountry_nameduration_daysebola_subtypeend_dateend_datetimegeometrygeometry_geojsonlatitudelongitudereported_number_of_deaths_among_casesreported_number_of_human_casesreported_of_deaths_among_casesstart_datestart_datetimeyear_s
0RURussia365Zaire virus2004-12-31T00:00:00Z2004-12-31T00:00:00Z(POLYGON ((132.448985 42.845404, 132.44988 42....{u'type': u'MultiPolygon', u'coordinates': [[[...64.68631497.7453061112004-01-01T00:00:00Z2004-01-01T00:00:00Z2004
1PHPhilippines365Reston virus1996-12-31T00:00:00Z1996-12-31T00:00:00Z(POLYGON ((119.849783 4.796861, 119.833995 4.7...{u'type': u'MultiPolygon', u'coordinates': [[[...12.750349122.7312100001996-01-01T00:00:00Z1996-01-01T00:00:00Z1996
2USUSA364Reston virus1990-12-31T00:00:00Z1990-12-31T00:00:00Z(POLYGON ((-155.606519 20.137956, -155.586363 ...{u'type': u'MultiPolygon', u'coordinates': [[[...39.783730-100.4458820401990-01-01T00:00:00Z1990-01-01T00:00:00Z1990
\n", "
" ], "text/plain": [ " country_code_iso_2_digits country_name duration_days ebola_subtype \\\n", "0 RU Russia 365 Zaire virus \n", "1 PH Philippines 365 Reston virus \n", "2 US USA 364 Reston virus \n", "\n", " end_date end_datetime \\\n", "0 2004-12-31T00:00:00Z 2004-12-31T00:00:00Z \n", "1 1996-12-31T00:00:00Z 1996-12-31T00:00:00Z \n", "2 1990-12-31T00:00:00Z 1990-12-31T00:00:00Z \n", "\n", " geometry \\\n", "0 (POLYGON ((132.448985 42.845404, 132.44988 42.... \n", "1 (POLYGON ((119.849783 4.796861, 119.833995 4.7... \n", "2 (POLYGON ((-155.606519 20.137956, -155.586363 ... \n", "\n", " geometry_geojson latitude longitude \\\n", "0 {u'type': u'MultiPolygon', u'coordinates': [[[... 64.686314 97.745306 \n", "1 {u'type': u'MultiPolygon', u'coordinates': [[[... 12.750349 122.731210 \n", "2 {u'type': u'MultiPolygon', u'coordinates': [[[... 39.783730 -100.445882 \n", "\n", " reported_number_of_deaths_among_cases reported_number_of_human_cases \\\n", "0 1 1 \n", "1 0 0 \n", "2 0 4 \n", "\n", " reported_of_deaths_among_cases start_date start_datetime \\\n", "0 1 2004-01-01T00:00:00Z 2004-01-01T00:00:00Z \n", "1 0 1996-01-01T00:00:00Z 1996-01-01T00:00:00Z \n", "2 0 1990-01-01T00:00:00Z 1990-01-01T00:00:00Z \n", "\n", " year_s \n", "0 2004 \n", "1 1996 \n", "2 1990 " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ebola_data.head(3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ebola outbreaks per country" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Handle non-ASCII character\n", "ebola_data = ebola_data.replace(u\"C\\xf4te d'Ivoire (Ivory Coast)\", \n", " u\"Cote d'Ivoire (Ivory Coast)\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### General description" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "country_name\n", "Cote d'Ivoire (Ivory Coast) 1\n", "England 1\n", "Italy 1\n", "South Africa 1\n", "Russia 2\n", "Philippines 3\n", "Sudan (South Sudan) 3\n", "USA 3\n", "Gabon 4\n", "Uganda 5\n", "Democratic Republic of the Congo 9\n", "Name: country_name, dtype: int64\n" ] }, { "data": { "text/plain": [ "count 11.000000\n", "mean 3.000000\n", "std 2.408319\n", "min 1.000000\n", "25% 1.000000\n", "50% 3.000000\n", "75% 3.500000\n", "max 9.000000\n", "Name: country_name, dtype: float64" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "outbrks_data = ebola_data.groupby([\"country_name\"])[\"country_name\"].count().order()\n", "\n", "print outbrks_data\n", "\n", "outbrks_data.describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Prior to 2014, there has been Ebola outbreaks in **11** countries.\n", "\n", "* Those countries have had between **1** and **9** outbreaks." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Distribution of outbreaks per country" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " proportions of outbreaks (%)\n", "country_name \n", "Cote d'Ivoire (Ivory Coast) 3.030303\n", "England 3.030303\n", "Italy 3.030303\n", "South Africa 3.030303\n", "Russia 6.060606\n", "Philippines 9.090909\n", "Sudan (South Sudan) 9.090909\n", "USA 9.090909\n", "Gabon 12.121212\n", "Uganda 15.151515\n", "Democratic Republic of the Congo 27.272727\n" ] }, { "data": { "text/html": [ "\n", "
\n", " \n", " Loading BokehJS ...\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", "(function(global) {\n", " function now() {\n", " return new Date();\n", " }\n", "\n", " if (typeof (window._bokeh_onload_callbacks) === \"undefined\") {\n", " window._bokeh_onload_callbacks = [];\n", " }\n", "\n", " function run_callbacks() {\n", " window._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n", " delete window._bokeh_onload_callbacks\n", " console.info(\"Bokeh: all callbacks have finished\");\n", " }\n", "\n", " function load_libs(js_urls, callback) {\n", " window._bokeh_onload_callbacks.push(callback);\n", " if (window._bokeh_is_loading > 0) {\n", " console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", " return null;\n", " }\n", " if (js_urls == null || js_urls.length === 0) {\n", " run_callbacks();\n", " return null;\n", " }\n", " console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", " window._bokeh_is_loading = js_urls.length;\n", " for (var i = 0; i < js_urls.length; i++) {\n", " var url = js_urls[i];\n", " var s = document.createElement('script');\n", " s.src = url;\n", " s.async = false;\n", " s.onreadystatechange = s.onload = function() {\n", " window._bokeh_is_loading--;\n", " if (window._bokeh_is_loading === 0) {\n", " console.log(\"Bokeh: all BokehJS libraries loaded\");\n", " run_callbacks()\n", " }\n", " };\n", " s.onerror = function() {\n", " console.warn(\"failed to load library \" + url);\n", " };\n", " console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " document.getElementsByTagName(\"head\")[0].appendChild(s);\n", " }\n", " };\n", "\n", " var js_urls = ['https://cdn.pydata.org/bokeh/release/bokeh-0.11.1.min.js', 'https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.11.1.min.js', 'https://cdn.pydata.org/bokeh/release/bokeh-compiler-0.11.1.min.js'];\n", "\n", " var inline_js = [\n", " function(Bokeh) {\n", " Bokeh.set_log_level(\"info\");\n", " },\n", " \n", " function(Bokeh) {\n", " Bokeh.$(\"#16464f17-6e08-4652-85ce-265556f8547e\").text(\"BokehJS successfully loaded\");\n", " },\n", " function(Bokeh) {\n", " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.11.1.min.css\");\n", " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.11.1.min.css\");\n", " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.11.1.min.css\");\n", " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.11.1.min.css\");\n", " }\n", " ];\n", "\n", " function run_inline_js() {\n", " for (var i = 0; i < inline_js.length; i++) {\n", " inline_js[i](window.Bokeh);\n", " }\n", " }\n", "\n", " if (window._bokeh_is_loading === 0) {\n", " console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n", " run_inline_js();\n", " } else {\n", " load_libs(js_urls, function() {\n", " console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n", " run_inline_js();\n", " });\n", " }\n", "}(this));" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

<Bokeh Notebook handle for In[6]>

" ], "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "total_outbrks = ebola_data.groupby([\"country_name\"])[\"country_name\"].count().sum()\n", "outbrks_percent = outbrks_data.mul(100).truediv(total_outbrks)\n", "\n", "data = outbrks_percent.to_frame(name='proportions of outbreaks (%)')\n", "\n", "print data\n", "\n", "bar_outbrks = Bar(data, values='proportions of outbreaks (%)', color='navy',\n", " title=\"Proportion of ebola outbreaks per country in %\")\n", "\n", "output_notebook()\n", "output_file(\"outbreaks.html\", title=\"Proportion of ebola outbreaks per country in %\")\n", "\n", "show(bar_outbrks)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Almost one third of the outbreaks before 2014 happened in DRC" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Distribution of ebola victims per country" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
reported_number_of_human_cases
country_name
Cote d'Ivoire (Ivory Coast)1
Democratic Republic of the Congo1201
England1
Gabon214
Italy0
Philippines9
Russia2
South Africa2
Sudan (South Sudan)335
USA4
Uganda592
\n", "
" ], "text/plain": [ " reported_number_of_human_cases\n", "country_name \n", "Cote d'Ivoire (Ivory Coast) 1\n", "Democratic Republic of the Congo 1201\n", "England 1\n", "Gabon 214\n", "Italy 0\n", "Philippines 9\n", "Russia 2\n", "South Africa 2\n", "Sudan (South Sudan) 335\n", "USA 4\n", "Uganda 592" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ebola_data[[\"country_name\", \"reported_number_of_human_cases\"]].groupby([\"country_name\"]).sum()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "df_ebola_victims = ebola_data[[\"country_name\", \"reported_number_of_human_cases\", \n", " \"reported_number_of_deaths_among_cases\"]]" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " Loading BokehJS ...\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", "(function(global) {\n", " function now() {\n", " return new Date();\n", " }\n", "\n", " if (typeof (window._bokeh_onload_callbacks) === \"undefined\") {\n", " window._bokeh_onload_callbacks = [];\n", " }\n", "\n", " function run_callbacks() {\n", " window._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n", " delete window._bokeh_onload_callbacks\n", " console.info(\"Bokeh: all callbacks have finished\");\n", " }\n", "\n", " function load_libs(js_urls, callback) {\n", " window._bokeh_onload_callbacks.push(callback);\n", " if (window._bokeh_is_loading > 0) {\n", " console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", " return null;\n", " }\n", " if (js_urls == null || js_urls.length === 0) {\n", " run_callbacks();\n", " return null;\n", " }\n", " console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", " window._bokeh_is_loading = js_urls.length;\n", " for (var i = 0; i < js_urls.length; i++) {\n", " var url = js_urls[i];\n", " var s = document.createElement('script');\n", " s.src = url;\n", " s.async = false;\n", " s.onreadystatechange = s.onload = function() {\n", " window._bokeh_is_loading--;\n", " if (window._bokeh_is_loading === 0) {\n", " console.log(\"Bokeh: all BokehJS libraries loaded\");\n", " run_callbacks()\n", " }\n", " };\n", " s.onerror = function() {\n", " console.warn(\"failed to load library \" + url);\n", " };\n", " console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " document.getElementsByTagName(\"head\")[0].appendChild(s);\n", " }\n", " };\n", "\n", " var js_urls = ['https://cdn.pydata.org/bokeh/release/bokeh-0.11.1.min.js', 'https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.11.1.min.js', 'https://cdn.pydata.org/bokeh/release/bokeh-compiler-0.11.1.min.js'];\n", "\n", " var inline_js = [\n", " function(Bokeh) {\n", " Bokeh.set_log_level(\"info\");\n", " },\n", " \n", " function(Bokeh) {\n", " Bokeh.$(\"#3a60b247-b221-4a92-80bd-178e7eafdd17\").text(\"BokehJS successfully loaded\");\n", " },\n", " function(Bokeh) {\n", " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.11.1.min.css\");\n", " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.11.1.min.css\");\n", " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.11.1.min.css\");\n", " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.11.1.min.css\");\n", " }\n", " ];\n", "\n", " function run_inline_js() {\n", " for (var i = 0; i < inline_js.length; i++) {\n", " inline_js[i](window.Bokeh);\n", " }\n", " }\n", "\n", " if (window._bokeh_is_loading === 0) {\n", " console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n", " run_inline_js();\n", " } else {\n", " load_libs(js_urls, function() {\n", " console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n", " run_inline_js();\n", " });\n", " }\n", "}(this));" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

<Bokeh Notebook handle for In[10]>

" ], "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "box_ev = BoxPlot(df_ebola_victims, values=\"reported_number_of_human_cases\",\n", " label='country_name', title=\"Number of ebola victims per country\",\n", " outliers=False, whisker_color='country_name')\n", "\n", "output_notebook()\n", "output_file(\"victims.html\", title=\"Number of ebola victims per country\")\n", "\n", "show(box_ev)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
reported_number_of_deaths_among_cases
country_name
Cote d'Ivoire (Ivory Coast)0
Democratic Republic of the Congo946
England0
Gabon150
Italy0
Philippines0
Russia2
South Africa1
Sudan (South Sudan)180
USA0
Uganda269
\n", "
" ], "text/plain": [ " reported_number_of_deaths_among_cases\n", "country_name \n", "Cote d'Ivoire (Ivory Coast) 0\n", "Democratic Republic of the Congo 946\n", "England 0\n", "Gabon 150\n", "Italy 0\n", "Philippines 0\n", "Russia 2\n", "South Africa 1\n", "Sudan (South Sudan) 180\n", "USA 0\n", "Uganda 269" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ebola_data[[\"country_name\", \"reported_number_of_deaths_among_cases\"]].groupby([\"country_name\"]).sum()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " Loading BokehJS ...\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", "(function(global) {\n", " function now() {\n", " return new Date();\n", " }\n", "\n", " if (typeof (window._bokeh_onload_callbacks) === \"undefined\") {\n", " window._bokeh_onload_callbacks = [];\n", " }\n", "\n", " function run_callbacks() {\n", " window._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n", " delete window._bokeh_onload_callbacks\n", " console.info(\"Bokeh: all callbacks have finished\");\n", " }\n", "\n", " function load_libs(js_urls, callback) {\n", " window._bokeh_onload_callbacks.push(callback);\n", " if (window._bokeh_is_loading > 0) {\n", " console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", " return null;\n", " }\n", " if (js_urls == null || js_urls.length === 0) {\n", " run_callbacks();\n", " return null;\n", " }\n", " console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", " window._bokeh_is_loading = js_urls.length;\n", " for (var i = 0; i < js_urls.length; i++) {\n", " var url = js_urls[i];\n", " var s = document.createElement('script');\n", " s.src = url;\n", " s.async = false;\n", " s.onreadystatechange = s.onload = function() {\n", " window._bokeh_is_loading--;\n", " if (window._bokeh_is_loading === 0) {\n", " console.log(\"Bokeh: all BokehJS libraries loaded\");\n", " run_callbacks()\n", " }\n", " };\n", " s.onerror = function() {\n", " console.warn(\"failed to load library \" + url);\n", " };\n", " console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " document.getElementsByTagName(\"head\")[0].appendChild(s);\n", " }\n", " };\n", "\n", " var js_urls = ['https://cdn.pydata.org/bokeh/release/bokeh-0.11.1.min.js', 'https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.11.1.min.js', 'https://cdn.pydata.org/bokeh/release/bokeh-compiler-0.11.1.min.js'];\n", "\n", " var inline_js = [\n", " function(Bokeh) {\n", " Bokeh.set_log_level(\"info\");\n", " },\n", " \n", " function(Bokeh) {\n", " Bokeh.$(\"#9c254b8f-4082-42a2-94de-8c03ee76ac80\").text(\"BokehJS successfully loaded\");\n", " },\n", " function(Bokeh) {\n", " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.11.1.min.css\");\n", " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.11.1.min.css\");\n", " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.11.1.min.css\");\n", " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.11.1.min.css\");\n", " }\n", " ];\n", "\n", " function run_inline_js() {\n", " for (var i = 0; i < inline_js.length; i++) {\n", " inline_js[i](window.Bokeh);\n", " }\n", " }\n", "\n", " if (window._bokeh_is_loading === 0) {\n", " console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n", " run_inline_js();\n", " } else {\n", " load_libs(js_urls, function() {\n", " console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n", " run_inline_js();\n", " });\n", " }\n", "}(this));" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

<Bokeh Notebook handle for In[12]>

" ], "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "box_ed = BoxPlot(df_ebola_victims, values=\"reported_number_of_deaths_among_cases\", \n", " label='country_name', title=\"Number of deaths from ebola per country\",\n", " outliers=False, whisker_color='country_name')\n", "\n", "output_notebook()\n", "output_file(\"deaths.html\", title=\"Number of deaths from ebola per country\")\n", "\n", "show(box_ed)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* The number of victims (cases and deaths) tends to vary in one country depending on the outbreak\n", "* The number of victims seem to correlate with the number of outbreak except when looking at The USA and South Sudan.\n", "\n", "The number of victims could be due to the country's health system or the moment in time when the outbreak occurred.\n", "\n", "=> It be interested to plot the number of victims vs the number of outbreaks, a value from WHO representing countries health system score and to look at the number of victims over time" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "I'd like to look at: \n", "* number of human cases vs virus subtype\n", "* number of human deaths vs virus subtype\n", "* number of outbreaks vs number of human cases\n", "* number of outbreaks vs average length of outbreaks\n", "* number of human cases vs average length of outbreaks\n", "* look at the timeline of global outbreaks and outbreaks per affected country\n", "* look at the global state of the most frequently affected countries" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Virus subtypes" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
reported_number_of_human_cases
ebola_subtype
Bundibugyo virus185
Reston virus13
Sudan virus779
Taï Forest virus1
Zaire virus1383
\n", "
" ], "text/plain": [ " reported_number_of_human_cases\n", "ebola_subtype \n", "Bundibugyo virus 185\n", "Reston virus 13\n", "Sudan virus 779\n", "Taï Forest virus 1\n", "Zaire virus 1383" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cases_by_subtype = ebola_data[[\"ebola_subtype\", \"reported_number_of_human_cases\"]].groupby([\"ebola_subtype\"]).sum()\n", "cases_by_subtype" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
reported_number_of_human_cases
ebola_subtype
Bundibugyo virus7.835663
Reston virus0.550614
Sudan virus32.994494
Taï Forest virus0.042355
Zaire virus58.576874
\n", "
" ], "text/plain": [ " reported_number_of_human_cases\n", "ebola_subtype \n", "Bundibugyo virus 7.835663\n", "Reston virus 0.550614\n", "Sudan virus 32.994494\n", "Taï Forest virus 0.042355\n", "Zaire virus 58.576874" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "total_cases_by_subtype = cases_by_subtype.sum()\n", "cases_subtype_percent = cases_by_subtype.mul(100).truediv(total_cases_by_subtype)\n", "\n", "cases_subtype_percent" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
reported_number_of_deaths_among_cases
ebola_subtype
Bundibugyo virus50
Reston virus0
Sudan virus412
Taï Forest virus0
Zaire virus1086
\n", "
" ], "text/plain": [ " reported_number_of_deaths_among_cases\n", "ebola_subtype \n", "Bundibugyo virus 50\n", "Reston virus 0\n", "Sudan virus 412\n", "Taï Forest virus 0\n", "Zaire virus 1086" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "deaths_by_subtype = ebola_data[[\"ebola_subtype\", \"reported_number_of_deaths_among_cases\"]].groupby([\"ebola_subtype\"]).sum()\n", "deaths_by_subtype" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
reported_number_of_deaths_among_cases
ebola_subtype
Bundibugyo virus3.229974
Reston virus0.000000
Sudan virus26.614987
Taï Forest virus0.000000
Zaire virus70.155039
\n", "
" ], "text/plain": [ " reported_number_of_deaths_among_cases\n", "ebola_subtype \n", "Bundibugyo virus 3.229974\n", "Reston virus 0.000000\n", "Sudan virus 26.614987\n", "Taï Forest virus 0.000000\n", "Zaire virus 70.155039" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "total_deaths_by_subtype = deaths_by_subtype.sum()\n", "deaths_subtype_percent = deaths_by_subtype.mul(100).truediv(total_deaths_by_subtype)\n", "\n", "deaths_subtype_percent" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Outbreaks by virus subtype (%)
ebola_subtype
Bundibugyo virus6.060606
Reston virus21.212121
Sudan virus24.242424
Taï Forest virus3.030303
Zaire virus45.454545
\n", "
" ], "text/plain": [ " Outbreaks by virus subtype (%)\n", "ebola_subtype \n", "Bundibugyo virus 6.060606\n", "Reston virus 21.212121\n", "Sudan virus 24.242424\n", "Taï Forest virus 3.030303\n", "Zaire virus 45.454545" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "outbrks_by_subtype = ebola_data.groupby([\"ebola_subtype\"])[\"ebola_subtype\"].count()\n", "total_outbrks_by_subtype = outbrks_by_subtype.sum()\n", "outbrks_subtype_percent = outbrks_by_subtype.mul(100).truediv(total_outbrks_by_subtype)\n", "\n", "data_percent = outbrks_subtype_percent.to_frame(name='Outbreaks by virus subtype (%)')\n", "data_percent" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": true }, "outputs": [], "source": [ "all_subtypes_proportions = {\"Ebola subtypes\" : [\"Bundibugyo virus\", \"Reston virus\", \"Sudan virus\", \"Taï Forest virus\", \"Zaire virus\"],\n", " \"Outbreaks by virus subtype (%)\" : [6.060606, 21.212121, 24.242424, 3.030303, 45.454545],\n", " \"Reported human cases by virus subtype (%)\" : [7.835663, 0.550614, 32.994494, 0.042355, 58.576874],\n", " \"Reported deaths among cases by virus subtype (%)\" : [3.229974, 0.0, 26.614987, 0.0, 70.155039]}" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": true }, "outputs": [], "source": [ "data_subtypes_proportions = pd.DataFrame(all_subtypes_proportions)" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Ebola subtypesOutbreaks by virus subtype (%)Reported deaths among cases by virus subtype (%)Reported human cases by virus subtype (%)
0Bundibugyo virus6.0606063.2299747.835663
1Reston virus21.2121210.0000000.550614
2Sudan virus24.24242426.61498732.994494
3Taï Forest virus3.0303030.0000000.042355
4Zaire virus45.45454570.15503958.576874
\n", "
" ], "text/plain": [ " Ebola subtypes Outbreaks by virus subtype (%) \\\n", "0 Bundibugyo virus 6.060606 \n", "1 Reston virus 21.212121 \n", "2 Sudan virus 24.242424 \n", "3 Taï Forest virus 3.030303 \n", "4 Zaire virus 45.454545 \n", "\n", " Reported deaths among cases by virus subtype (%) \\\n", "0 3.229974 \n", "1 0.000000 \n", "2 26.614987 \n", "3 0.000000 \n", "4 70.155039 \n", "\n", " Reported human cases by virus subtype (%) \n", "0 7.835663 \n", "1 0.550614 \n", "2 32.994494 \n", "3 0.042355 \n", "4 58.576874 " ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data_subtypes_proportions" ] }, { "cell_type": "code", "execution_count": 87, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "data_subtypes_proportions.plot(kind=\"bar\", x=\"Ebola subtypes\", figsize=(10,5))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Out of the 5 virus subtypes: \n", "* 2 are responsible for low proportions of outbreaks, human cases and deaths (Taï Forest virus and Bundibugyo virus)\n", "* 2 are responsible for high proportions of outbreaks, human cases and deaths (Zaïre virus and Sudan virus)\n", "* 1 is responsible for a high proportion of outbreaks, but low proportion of human cases or deaths (Reston virus)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### The Zaïre virus accounts for 70% of reported death cases" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Time series" ] }, { "cell_type": "code", "execution_count": 90, "metadata": { "collapsed": false }, "outputs": [], "source": [ "outbreaks_dates_by_country = ebola_data[['country_name', 'start_date', 'start_date', ]]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 0 }