{
"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",
" country_code_iso_2_digits | \n",
" country_name | \n",
" duration_days | \n",
" ebola_subtype | \n",
" end_date | \n",
" end_datetime | \n",
" geometry | \n",
" geometry_geojson | \n",
" latitude | \n",
" longitude | \n",
" reported_number_of_deaths_among_cases | \n",
" reported_number_of_human_cases | \n",
" reported_of_deaths_among_cases | \n",
" start_date | \n",
" start_datetime | \n",
" year_s | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" RU | \n",
" Russia | \n",
" 365 | \n",
" Zaire virus | \n",
" 2004-12-31T00:00:00Z | \n",
" 2004-12-31T00:00:00Z | \n",
" (POLYGON ((132.448985 42.845404, 132.44988 42.... | \n",
" {u'type': u'MultiPolygon', u'coordinates': [[[... | \n",
" 64.686314 | \n",
" 97.745306 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 2004-01-01T00:00:00Z | \n",
" 2004-01-01T00:00:00Z | \n",
" 2004 | \n",
"
\n",
" \n",
" 1 | \n",
" PH | \n",
" Philippines | \n",
" 365 | \n",
" Reston virus | \n",
" 1996-12-31T00:00:00Z | \n",
" 1996-12-31T00:00:00Z | \n",
" (POLYGON ((119.849783 4.796861, 119.833995 4.7... | \n",
" {u'type': u'MultiPolygon', u'coordinates': [[[... | \n",
" 12.750349 | \n",
" 122.731210 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 1996-01-01T00:00:00Z | \n",
" 1996-01-01T00:00:00Z | \n",
" 1996 | \n",
"
\n",
" \n",
" 2 | \n",
" US | \n",
" USA | \n",
" 364 | \n",
" Reston virus | \n",
" 1990-12-31T00:00:00Z | \n",
" 1990-12-31T00:00:00Z | \n",
" (POLYGON ((-155.606519 20.137956, -155.586363 ... | \n",
" {u'type': u'MultiPolygon', u'coordinates': [[[... | \n",
" 39.783730 | \n",
" -100.445882 | \n",
" 0 | \n",
" 4 | \n",
" 0 | \n",
" 1990-01-01T00:00:00Z | \n",
" 1990-01-01T00:00:00Z | \n",
" 1990 | \n",
"
\n",
" \n",
"
\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",
" reported_number_of_human_cases | \n",
"
\n",
" \n",
" country_name | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" Cote d'Ivoire (Ivory Coast) | \n",
" 1 | \n",
"
\n",
" \n",
" Democratic Republic of the Congo | \n",
" 1201 | \n",
"
\n",
" \n",
" England | \n",
" 1 | \n",
"
\n",
" \n",
" Gabon | \n",
" 214 | \n",
"
\n",
" \n",
" Italy | \n",
" 0 | \n",
"
\n",
" \n",
" Philippines | \n",
" 9 | \n",
"
\n",
" \n",
" Russia | \n",
" 2 | \n",
"
\n",
" \n",
" South Africa | \n",
" 2 | \n",
"
\n",
" \n",
" Sudan (South Sudan) | \n",
" 335 | \n",
"
\n",
" \n",
" USA | \n",
" 4 | \n",
"
\n",
" \n",
" Uganda | \n",
" 592 | \n",
"
\n",
" \n",
"
\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",
" reported_number_of_deaths_among_cases | \n",
"
\n",
" \n",
" country_name | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" Cote d'Ivoire (Ivory Coast) | \n",
" 0 | \n",
"
\n",
" \n",
" Democratic Republic of the Congo | \n",
" 946 | \n",
"
\n",
" \n",
" England | \n",
" 0 | \n",
"
\n",
" \n",
" Gabon | \n",
" 150 | \n",
"
\n",
" \n",
" Italy | \n",
" 0 | \n",
"
\n",
" \n",
" Philippines | \n",
" 0 | \n",
"
\n",
" \n",
" Russia | \n",
" 2 | \n",
"
\n",
" \n",
" South Africa | \n",
" 1 | \n",
"
\n",
" \n",
" Sudan (South Sudan) | \n",
" 180 | \n",
"
\n",
" \n",
" USA | \n",
" 0 | \n",
"
\n",
" \n",
" Uganda | \n",
" 269 | \n",
"
\n",
" \n",
"
\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",
" reported_number_of_human_cases | \n",
"
\n",
" \n",
" ebola_subtype | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" Bundibugyo virus | \n",
" 185 | \n",
"
\n",
" \n",
" Reston virus | \n",
" 13 | \n",
"
\n",
" \n",
" Sudan virus | \n",
" 779 | \n",
"
\n",
" \n",
" Taï Forest virus | \n",
" 1 | \n",
"
\n",
" \n",
" Zaire virus | \n",
" 1383 | \n",
"
\n",
" \n",
"
\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",
" reported_number_of_human_cases | \n",
"
\n",
" \n",
" ebola_subtype | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" Bundibugyo virus | \n",
" 7.835663 | \n",
"
\n",
" \n",
" Reston virus | \n",
" 0.550614 | \n",
"
\n",
" \n",
" Sudan virus | \n",
" 32.994494 | \n",
"
\n",
" \n",
" Taï Forest virus | \n",
" 0.042355 | \n",
"
\n",
" \n",
" Zaire virus | \n",
" 58.576874 | \n",
"
\n",
" \n",
"
\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",
" reported_number_of_deaths_among_cases | \n",
"
\n",
" \n",
" ebola_subtype | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" Bundibugyo virus | \n",
" 50 | \n",
"
\n",
" \n",
" Reston virus | \n",
" 0 | \n",
"
\n",
" \n",
" Sudan virus | \n",
" 412 | \n",
"
\n",
" \n",
" Taï Forest virus | \n",
" 0 | \n",
"
\n",
" \n",
" Zaire virus | \n",
" 1086 | \n",
"
\n",
" \n",
"
\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",
" reported_number_of_deaths_among_cases | \n",
"
\n",
" \n",
" ebola_subtype | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" Bundibugyo virus | \n",
" 3.229974 | \n",
"
\n",
" \n",
" Reston virus | \n",
" 0.000000 | \n",
"
\n",
" \n",
" Sudan virus | \n",
" 26.614987 | \n",
"
\n",
" \n",
" Taï Forest virus | \n",
" 0.000000 | \n",
"
\n",
" \n",
" Zaire virus | \n",
" 70.155039 | \n",
"
\n",
" \n",
"
\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",
" Outbreaks by virus subtype (%) | \n",
"
\n",
" \n",
" ebola_subtype | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" Bundibugyo virus | \n",
" 6.060606 | \n",
"
\n",
" \n",
" Reston virus | \n",
" 21.212121 | \n",
"
\n",
" \n",
" Sudan virus | \n",
" 24.242424 | \n",
"
\n",
" \n",
" Taï Forest virus | \n",
" 3.030303 | \n",
"
\n",
" \n",
" Zaire virus | \n",
" 45.454545 | \n",
"
\n",
" \n",
"
\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",
" Ebola subtypes | \n",
" Outbreaks by virus subtype (%) | \n",
" Reported deaths among cases by virus subtype (%) | \n",
" Reported human cases by virus subtype (%) | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Bundibugyo virus | \n",
" 6.060606 | \n",
" 3.229974 | \n",
" 7.835663 | \n",
"
\n",
" \n",
" 1 | \n",
" Reston virus | \n",
" 21.212121 | \n",
" 0.000000 | \n",
" 0.550614 | \n",
"
\n",
" \n",
" 2 | \n",
" Sudan virus | \n",
" 24.242424 | \n",
" 26.614987 | \n",
" 32.994494 | \n",
"
\n",
" \n",
" 3 | \n",
" Taï Forest virus | \n",
" 3.030303 | \n",
" 0.000000 | \n",
" 0.042355 | \n",
"
\n",
" \n",
" 4 | \n",
" Zaire virus | \n",
" 45.454545 | \n",
" 70.155039 | \n",
" 58.576874 | \n",
"
\n",
" \n",
"
\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
}