From 6e687c1ca2f05ca34002c81060ceca93633b765c Mon Sep 17 00:00:00 2001
From: Geert Jan Bex <geertjan.bex@uhasselt.be>
Date: Fri, 15 Nov 2019 11:35:23 +0100
Subject: [PATCH 1/6] Add conda environment information

---
 environment.yml                               |  18 ++
 ...n_for_data_science_linux64_conda_specs.txt | 183 ++++++++++++++++++
 2 files changed, 201 insertions(+)
 create mode 100644 environment.yml
 create mode 100644 python_for_data_science_linux64_conda_specs.txt

diff --git a/environment.yml b/environment.yml
new file mode 100644
index 0000000..96e121c
--- /dev/null
+++ b/environment.yml
@@ -0,0 +1,18 @@
+name: python_for_data_science
+channels:
+  - conda-forge
+  - defaults
+dependencies:
+  - beautifulsoup4
+  - folium
+  - geopandas
+  - holoviews
+  - jupyter
+  - matplotlib
+  - networkx
+  - pandas
+  - python=3.7
+  - scipy
+  - seaborn
+  - shapely
+  - sqlalchemy
diff --git a/python_for_data_science_linux64_conda_specs.txt b/python_for_data_science_linux64_conda_specs.txt
new file mode 100644
index 0000000..e341aa8
--- /dev/null
+++ b/python_for_data_science_linux64_conda_specs.txt
@@ -0,0 +1,183 @@
+# This file may be used to create an environment using:
+# $ conda create --name <env> --file <this file>
+# platform: linux-64
+@EXPLICIT
+https://repo.anaconda.com/pkgs/main/linux-64/_libgcc_mutex-0.1-main.conda
+https://repo.anaconda.com/pkgs/main/linux-64/blas-1.0-mkl.conda
+https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2019.9.11-hecc5488_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/intel-openmp-2019.4-243.conda
+https://repo.anaconda.com/pkgs/main/linux-64/libgfortran-ng-7.3.0-hdf63c60_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/libstdcxx-ng-9.1.0-hdf63c60_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/poppler-data-0.4.9-0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/libgcc-ng-9.1.0-hdf63c60_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/mkl-2019.4-243.conda
+https://repo.anaconda.com/pkgs/main/linux-64/bzip2-1.0.8-h7b6447c_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/expat-2.2.6-he6710b0_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/freexl-1.0.5-h14c3975_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/geos-3.8.0-he6710b0_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/giflib-5.1.4-h14c3975_1.conda
+https://repo.anaconda.com/pkgs/main/linux-64/gmp-6.1.2-h6c8ec71_1.conda
+https://repo.anaconda.com/pkgs/main/linux-64/icu-58.2-h9c2bf20_1.conda
+https://repo.anaconda.com/pkgs/main/linux-64/jpeg-9b-h024ee3a_2.conda
+https://repo.anaconda.com/pkgs/main/linux-64/json-c-0.13.1-h1bed415_0.conda
+https://repo.continuum.io/pkgs/main/linux-64/libffi-3.2.1-hd88cf55_4.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/libsodium-1.0.16-h1bed415_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/libspatialindex-1.9.3-he6710b0_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/libuuid-1.0.3-h1bed415_2.conda
+https://repo.anaconda.com/pkgs/main/linux-64/libxcb-1.13-h1bed415_1.conda
+https://repo.anaconda.com/pkgs/main/linux-64/lz4-c-1.8.1.2-h14c3975_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/ncurses-6.1-he6710b0_1.conda
+https://conda.anaconda.org/conda-forge/linux-64/openssl-1.1.1d-h516909a_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/pcre-8.43-he6710b0_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/pixman-0.38.0-h7b6447c_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/tbb-2018.0.5-h6bb024c_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/xz-5.2.4-h14c3975_4.conda
+https://repo.continuum.io/pkgs/main/linux-64/yaml-0.1.7-had09818_2.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/zlib-1.2.11-h7b6447c_3.conda
+https://repo.anaconda.com/pkgs/main/linux-64/glib-2.63.1-h5a9c865_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/hdf4-4.2.13-h3ca952b_2.conda
+https://repo.anaconda.com/pkgs/main/linux-64/hdf5-1.10.4-hb1b8bf9_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/libboost-1.67.0-h46d08c1_4.conda
+https://repo.anaconda.com/pkgs/main/linux-64/libedit-3.1.20181209-hc058e9b_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/libpng-1.6.37-hbc83047_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/libssh2-1.8.2-h1ba5d50_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/libxml2-2.9.9-hea5a465_1.conda
+https://repo.anaconda.com/pkgs/main/linux-64/pandoc-2.2.3.2-0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/readline-7.0-h7b6447c_5.conda
+https://repo.anaconda.com/pkgs/main/linux-64/tk-8.6.8-hbc83047_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/xerces-c-3.2.2-h780794e_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/zeromq-4.3.1-he6710b0_3.conda
+https://repo.anaconda.com/pkgs/main/linux-64/zstd-1.3.7-h0b5b093_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/dbus-1.13.12-h746ee38_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/freetype-2.9.1-h8a8886c_1.conda
+https://repo.anaconda.com/pkgs/main/linux-64/gstreamer-1.14.0-hb453b48_1.conda
+https://repo.anaconda.com/pkgs/main/linux-64/kealib-1.4.7-hd0c454d_6.conda
+https://repo.anaconda.com/pkgs/main/linux-64/krb5-1.16.1-h173b8e3_7.conda
+https://repo.anaconda.com/pkgs/main/linux-64/libkml-1.3.0-h590aaf7_4.conda
+https://repo.anaconda.com/pkgs/main/linux-64/libtiff-4.1.0-h2733197_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/sqlite-3.30.1-h7b6447c_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/fontconfig-2.13.0-h9420a91_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/gst-plugins-base-1.14.0-hbbd80ab_1.conda
+https://repo.anaconda.com/pkgs/main/linux-64/libcurl-7.65.3-h20c2e04_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/libpq-11.2-h20c2e04_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/openjpeg-2.3.0-h05c96fa_1.conda
+https://repo.anaconda.com/pkgs/main/linux-64/proj-6.2.1-haa6030c_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/python-3.7.5-h0371630_0.conda
+https://repo.anaconda.com/pkgs/main/noarch/attrs-19.3.0-py_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/backcall-0.1.0-py37_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/cairo-1.14.12-h8948797_3.conda
+https://conda.anaconda.org/conda-forge/linux-64/certifi-2019.9.11-py37_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/cfitsio-3.470-hb7c8383_2.conda
+https://conda.anaconda.org/conda-forge/linux-64/chardet-3.0.4-py37_1003.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/click-7.0-py37_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/curl-7.65.3-hbc83047_0.conda
+https://repo.anaconda.com/pkgs/main/noarch/decorator-4.4.1-py_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/noarch/defusedxml-0.6.0-py_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/entrypoints-0.3-py37_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/geotiff-1.5.1-h21e8280_0.conda
+https://conda.anaconda.org/conda-forge/linux-64/idna-2.8-py37_1000.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/ipython_genutils-0.2.0-py37_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/kiwisolver-1.1.0-py37he6710b0_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/libspatialite-4.3.0a-h793db0d_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/markupsafe-1.1.1-py37h7b6447c_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/mistune-0.8.4-py37h7b6447c_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/more-itertools-7.2.0-py37_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/olefile-0.46-py37_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/pandocfilters-1.4.2-py37_1.conda
+https://repo.anaconda.com/pkgs/main/noarch/param-1.9.2-py_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/noarch/parso-0.5.1-py_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/pickleshare-0.7.5-py37_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/postgresql-11.2-h20c2e04_0.conda
+https://repo.anaconda.com/pkgs/main/noarch/prometheus_client-0.7.1-py_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/psycopg2-2.8.4-py37h1ba5d50_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/ptyprocess-0.6.0-py37_0.conda
+https://conda.anaconda.org/conda-forge/linux-64/pycparser-2.19-py37_1.tar.bz2
+https://repo.anaconda.com/pkgs/main/noarch/pyparsing-2.4.4-py_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/pyproj-2.4.1-py37h2ea87da_0.conda
+https://conda.anaconda.org/conda-forge/linux-64/pysocks-1.7.1-py37_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/noarch/pytz-2019.3-py_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/pyyaml-5.1.2-py37h7b6447c_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/pyzmq-18.1.0-py37he6710b0_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/qt-5.9.7-h5867ecd_1.conda
+https://repo.anaconda.com/pkgs/main/linux-64/rtree-0.8.3-py37_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/send2trash-1.5.0-py37_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/sip-4.19.8-py37hf484d3e_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/six-1.13.0-py37_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/soupsieve-1.9.3-py37_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/sqlalchemy-1.3.10-py37h7b6447c_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/testpath-0.4.2-py37_0.conda
+https://conda.anaconda.org/conda-forge/noarch/toolz-0.10.0-py_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/tornado-6.0.3-py37h7b6447c_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/wcwidth-0.1.7-py37_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/webencodings-0.5.1-py37_1.conda
+https://repo.anaconda.com/pkgs/main/linux-64/beautifulsoup4-4.8.1-py37_0.tar.bz2
+https://conda.anaconda.org/conda-forge/linux-64/cffi-1.13.2-py37h8022711_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/noarch/click-plugins-1.1.1-py_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/cligj-0.5.0-py37_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/cycler-0.10.0-py37_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/jedi-0.15.1-py37_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/libdap4-3.19.1-h6ec2957_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/libnetcdf-4.6.1-h11d0813_2.conda
+https://repo.anaconda.com/pkgs/main/linux-64/mkl-service-2.3.0-py37he904b0f_0.conda
+https://repo.anaconda.com/pkgs/main/noarch/packaging-19.2-py_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/pexpect-4.7.0-py37_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/pillow-6.2.1-py37h34e0f95_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/poppler-0.65.0-h581218d_1.conda
+https://repo.anaconda.com/pkgs/main/linux-64/pyqt-5.9.2-py37h05f1152_2.conda
+https://repo.anaconda.com/pkgs/main/linux-64/pyrsistent-0.15.4-py37h7b6447c_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/noarch/python-dateutil-2.8.1-py_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/noarch/pyviz_comms-0.7.2-py_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/setuptools-41.6.0-py37_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/terminado-0.8.2-py37_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/tiledb-1.6.3-h1fb8f14_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/traitlets-4.3.3-py37_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/noarch/zipp-0.6.0-py_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/bleach-3.1.0-py37_0.conda
+https://conda.anaconda.org/conda-forge/linux-64/cryptography-2.8-py37h72c5cf5_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/importlib_metadata-0.23-py37_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/noarch/jinja2-2.10.3-py_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/jupyter_core-4.6.1-py37_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/libgdal-3.0.2-h27ab9cc_0.conda
+https://repo.anaconda.com/pkgs/main/noarch/munch-2.5.0-py_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/noarch/networkx-2.4-py_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/numpy-base-1.17.3-py37hde5b4d6_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/noarch/pygments-2.4.2-py_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/wheel-0.33.6-py37_0.tar.bz2
+https://conda.anaconda.org/conda-forge/noarch/branca-0.3.1-py_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/jsonschema-3.1.1-py37_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/jupyter_client-5.3.4-py37_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/pip-19.3.1-py37_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/noarch/prompt_toolkit-2.0.10-py_0.tar.bz2
+https://conda.anaconda.org/conda-forge/linux-64/pyopenssl-19.0.0-py37_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/ipython-7.9.0-py37h39e3cac_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/nbformat-4.4.0-py37_0.conda
+https://conda.anaconda.org/conda-forge/linux-64/urllib3-1.25.7-py37_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/ipykernel-5.1.3-py37h39e3cac_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/nbconvert-5.6.1-py37_0.tar.bz2
+https://conda.anaconda.org/conda-forge/linux-64/requests-2.22.0-py37_1.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/jupyter_console-6.0.0-py37_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/notebook-6.0.2-py37_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/noarch/qtconsole-4.5.5-py_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/widgetsnbextension-3.5.1-py37_0.conda
+https://repo.anaconda.com/pkgs/main/noarch/ipywidgets-7.5.1-py_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/jupyter-1.0.0-py37_7.conda
+https://conda.anaconda.org/conda-forge/noarch/vincent-0.4.4-py_1.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/bokeh-1.4.0-py37_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/noarch/descartes-1.1.0-py_3.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/gdal-3.0.2-py37hbb2a789_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/matplotlib-3.1.1-py37h5429711_0.conda
+https://repo.anaconda.com/pkgs/main/noarch/holoviews-1.12.6-py_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/mkl_fft-1.0.15-py37ha843d7b_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/mkl_random-1.1.0-py37hd6b4f25_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/numpy-1.17.3-py37hd14ec0e_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/pandas-0.25.2-py37he6710b0_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/scipy-1.3.1-py37h7c811a0_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/shapely-1.6.4-py37hc5e8c75_0.conda
+https://conda.anaconda.org/conda-forge/linux-64/altair-3.2.0-py37_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/fiona-1.8.11-py37h41e4f33_0.conda
+https://repo.anaconda.com/pkgs/main/noarch/mapclassify-2.0.1-py_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/patsy-0.5.1-py37_0.conda
+https://conda.anaconda.org/conda-forge/noarch/folium-0.10.0-py_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/noarch/geopandas-0.4.1-py_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/statsmodels-0.10.1-py37hdd07704_0.conda
+https://repo.anaconda.com/pkgs/main/linux-64/seaborn-0.9.0-py37_0.conda

From a0ed76fda649289ea773be3fe2fb300b47555ae7 Mon Sep 17 00:00:00 2001
From: Geert Jan Bex <geertjan.bex@uhasselt.be>
Date: Fri, 15 Nov 2019 11:48:39 +0100
Subject: [PATCH 2/6] Update README

---
 README.md | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/README.md b/README.md
index df5794d..b9baab9 100644
--- a/README.md
+++ b/README.md
@@ -11,6 +11,11 @@ For information on the training, see the website
    presentation used for the training.
 1. [`source-code`](source-code): directory that contains sample code written to
    develop the slides and illustrate concepts.
+1. [`environment.yml`](environment.yml): conda environment file intended to be
+   cross-platform.
+1. [`python_for_data_science_linux64_conda_specs.txt`](python_for_data_science_linux64_conda_specs.txt):
+   conda environment specification file specific for 64-bit Linux to precisely
+   reproduce the environment on which the code was developed.
 1. [License](LICENSE): license information for the material in this repository.
 1. [Contributing](CONTRIBUTING.md): information on how to contribute to this
    repository.

From 9620ef24e134c3c1aa0d68bd5efa6820913c1bf7 Mon Sep 17 00:00:00 2001
From: Geert Jan Bex <geertjan.bex@uhasselt.be>
Date: Fri, 15 Nov 2019 12:02:49 +0100
Subject: [PATCH 3/6] Fix typo

---
 source-code/README.md | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/source-code/README.md b/source-code/README.md
index 4facb22..5edbb0c 100644
--- a/source-code/README.md
+++ b/source-code/README.md
@@ -6,23 +6,19 @@ to create it.  There is some material not covered in the presentation as well.
 ## Requirements
 
 * Python version: at least 3.6
-* Packages:
+* Packages (names listed that can be used with `pip` or `conda` to install):
   * pandas
   * seaborn
   * holoviews
   * sqlalchemy
-  * folium
   * matplotlib
-  * numpy
   * scipy
   * geopandas
   * shapely
-  * bs4
+  * beautifulsoup4
   * networkx
-  * Jupyter notebook
-* Optional packages
-  * gdal
-  * fiona
+  * jupyter
+  * folium (with conda, use `-c conda-forge`)
 
 ## What is it?
 * [`db-access`](db-access): illustration of accessing SQLite databases and using

From 4a99abc680e1b7da09a5261eff49b891e82e467e Mon Sep 17 00:00:00 2001
From: Geert Jan Bex <geertjan.bex@uhasselt.be>
Date: Fri, 15 Nov 2019 12:32:43 +0100
Subject: [PATCH 4/6] Add xlrd to the environment

---
 environment.yml                                            | 1 +
 .../patient_data_tmpl.ipynb => hands-on/patient_data.ipynb | 0
 python_for_data_science_linux64_conda_specs.txt            | 7 ++++---
 source-code/README.md                                      | 1 +
 4 files changed, 6 insertions(+), 3 deletions(-)
 rename source-code/pandas/patient_data_tmpl.ipynb => hands-on/patient_data.ipynb (100%)

diff --git a/environment.yml b/environment.yml
index 96e121c..c6b0ea6 100644
--- a/environment.yml
+++ b/environment.yml
@@ -16,3 +16,4 @@ dependencies:
   - seaborn
   - shapely
   - sqlalchemy
+  - xlrd
diff --git a/source-code/pandas/patient_data_tmpl.ipynb b/hands-on/patient_data.ipynb
similarity index 100%
rename from source-code/pandas/patient_data_tmpl.ipynb
rename to hands-on/patient_data.ipynb
diff --git a/python_for_data_science_linux64_conda_specs.txt b/python_for_data_science_linux64_conda_specs.txt
index e341aa8..9828f76 100644
--- a/python_for_data_science_linux64_conda_specs.txt
+++ b/python_for_data_science_linux64_conda_specs.txt
@@ -4,7 +4,7 @@
 @EXPLICIT
 https://repo.anaconda.com/pkgs/main/linux-64/_libgcc_mutex-0.1-main.conda
 https://repo.anaconda.com/pkgs/main/linux-64/blas-1.0-mkl.conda
-https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2019.9.11-hecc5488_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/ca-certificates-2019.10.16-0.tar.bz2
 https://repo.anaconda.com/pkgs/main/linux-64/intel-openmp-2019.4-243.conda
 https://repo.anaconda.com/pkgs/main/linux-64/libgfortran-ng-7.3.0-hdf63c60_0.conda
 https://repo.anaconda.com/pkgs/main/linux-64/libstdcxx-ng-9.1.0-hdf63c60_0.conda
@@ -27,7 +27,7 @@ https://repo.anaconda.com/pkgs/main/linux-64/libuuid-1.0.3-h1bed415_2.conda
 https://repo.anaconda.com/pkgs/main/linux-64/libxcb-1.13-h1bed415_1.conda
 https://repo.anaconda.com/pkgs/main/linux-64/lz4-c-1.8.1.2-h14c3975_0.conda
 https://repo.anaconda.com/pkgs/main/linux-64/ncurses-6.1-he6710b0_1.conda
-https://conda.anaconda.org/conda-forge/linux-64/openssl-1.1.1d-h516909a_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/openssl-1.1.1d-h7b6447c_3.tar.bz2
 https://repo.anaconda.com/pkgs/main/linux-64/pcre-8.43-he6710b0_0.conda
 https://repo.anaconda.com/pkgs/main/linux-64/pixman-0.38.0-h7b6447c_0.conda
 https://repo.anaconda.com/pkgs/main/linux-64/tbb-2018.0.5-h6bb024c_0.conda
@@ -66,7 +66,7 @@ https://repo.anaconda.com/pkgs/main/linux-64/python-3.7.5-h0371630_0.conda
 https://repo.anaconda.com/pkgs/main/noarch/attrs-19.3.0-py_0.tar.bz2
 https://repo.anaconda.com/pkgs/main/linux-64/backcall-0.1.0-py37_0.conda
 https://repo.anaconda.com/pkgs/main/linux-64/cairo-1.14.12-h8948797_3.conda
-https://conda.anaconda.org/conda-forge/linux-64/certifi-2019.9.11-py37_0.tar.bz2
+https://repo.anaconda.com/pkgs/main/linux-64/certifi-2019.9.11-py37_0.tar.bz2
 https://repo.anaconda.com/pkgs/main/linux-64/cfitsio-3.470-hb7c8383_2.conda
 https://conda.anaconda.org/conda-forge/linux-64/chardet-3.0.4-py37_1003.tar.bz2
 https://repo.anaconda.com/pkgs/main/linux-64/click-7.0-py37_0.conda
@@ -110,6 +110,7 @@ https://conda.anaconda.org/conda-forge/noarch/toolz-0.10.0-py_0.tar.bz2
 https://repo.anaconda.com/pkgs/main/linux-64/tornado-6.0.3-py37h7b6447c_0.conda
 https://repo.anaconda.com/pkgs/main/linux-64/wcwidth-0.1.7-py37_0.conda
 https://repo.anaconda.com/pkgs/main/linux-64/webencodings-0.5.1-py37_1.conda
+https://repo.anaconda.com/pkgs/main/linux-64/xlrd-1.2.0-py37_0.conda
 https://repo.anaconda.com/pkgs/main/linux-64/beautifulsoup4-4.8.1-py37_0.tar.bz2
 https://conda.anaconda.org/conda-forge/linux-64/cffi-1.13.2-py37h8022711_0.tar.bz2
 https://repo.anaconda.com/pkgs/main/noarch/click-plugins-1.1.1-py_0.tar.bz2
diff --git a/source-code/README.md b/source-code/README.md
index 5edbb0c..684359c 100644
--- a/source-code/README.md
+++ b/source-code/README.md
@@ -8,6 +8,7 @@ to create it.  There is some material not covered in the presentation as well.
 * Python version: at least 3.6
 * Packages (names listed that can be used with `pip` or `conda` to install):
   * pandas
+  * xlrd
   * seaborn
   * holoviews
   * sqlalchemy

From 0513461b066a7fba08f9b8fa5f9c3b2dea78a1ad Mon Sep 17 00:00:00 2001
From: Geert Jan Bex <geertjan.bex@uhasselt.be>
Date: Fri, 15 Nov 2019 12:48:58 +0100
Subject: [PATCH 5/6] Add patient data hands-on

---
 hands-on/README.md          |  8 ++++++++
 hands-on/patient_data.ipynb | 29 ++++++++++++++++++++++++++++-
 2 files changed, 36 insertions(+), 1 deletion(-)
 create mode 100644 hands-on/README.md

diff --git a/hands-on/README.md b/hands-on/README.md
new file mode 100644
index 0000000..c569a22
--- /dev/null
+++ b/hands-on/README.md
@@ -0,0 +1,8 @@
+# Hands-on
+
+Here you find some notebooks that can be used during the training session
+to follow along, or for hands-on sessions.
+
+## What is it?
+  1.  [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gjbex/Python-for-data-science/blob/master/hands-on/patient_data.ipynb) [`patient_data.ipynb`](patient_data.ipynb):      
+       illustrates using pandas for data analysis and seaborn for visualizations.
diff --git a/hands-on/patient_data.ipynb b/hands-on/patient_data.ipynb
index dc8124b..3d81f6b 100644
--- a/hands-on/patient_data.ipynb
+++ b/hands-on/patient_data.ipynb
@@ -46,6 +46,15 @@
     "## Experiment data"
    ]
   },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import pandas as pd"
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},
@@ -53,6 +62,15 @@
     "Read the data set as a pandas `DataFrame` from an Excel spreadsheet."
    ]
   },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "experiment_data = pd.read_excel('https://github.com/gjbex/Python-for-data-science/blob/master/source-code/pandas/data/patient_experiment.xlsx?raw=true')"
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},
@@ -249,6 +267,15 @@
     "There is a second file with metadata on the patients, let's read that as well. The file is `data/patient_metadata.xlsx`."
    ]
   },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "metadata = pd.read_excel('https://github.com/gjbex/Python-for-data-science/blob/master/source-code/pandas/data/patient_metadata.xlsx?raw=true')"
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},
@@ -444,7 +471,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.6.2"
+   "version": "3.7.5"
   }
  },
  "nbformat": 4,

From 2b5e64b1b4deb88981929236a2118cb66f38e5e1 Mon Sep 17 00:00:00 2001
From: Geert Jan Bex <geertjan.bex@uhasselt.be>
Date: Fri, 15 Nov 2019 12:50:45 +0100
Subject: [PATCH 6/6] Update README

---
 README.md | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index b9baab9..f4ab11a 100644
--- a/README.md
+++ b/README.md
@@ -9,8 +9,9 @@ For information on the training, see the website
 
 1. [`python_for_data_science.pptx`](python_for_data_science.pptx): PowerPoint
    presentation used for the training.
-1. [`source-code`](source-code): directory that contains sample code written to
-   develop the slides and illustrate concepts.
+1. [`hands-on`](hands-on): Jupyter notebooks for hands-on sessions.
+1. [`source-code`](source-code): sample code written to develop the slides and
+   illustrate concepts.
 1. [`environment.yml`](environment.yml): conda environment file intended to be
    cross-platform.
 1. [`python_for_data_science_linux64_conda_specs.txt`](python_for_data_science_linux64_conda_specs.txt):
