Skip to content


Folders and files

Last commit message
Last commit date

Latest commit



8 Commits

Repository files navigation

Geographic Data Science in Python



This course will introduce you to the nascent field of Geographic Data Science using the industry standard, the Python programming language. We will cover key steps involved in solving practical problems with spatial data, from manipulation and processing, to exploration. These topics will be explored from a “hands-on” perspective using a modern Python stack (e.g. geopandas, seaborn, scikit-learn, PySAL), and examples using real-world spatial data.

We will start with an overview of the main ways to manipulate and visualise data in Python. Then we will move on to spatial data, learning to perform traditional GIS operations and to visualise data in a geographic context (e.g. choropleths). The course will then move into explicitly spatial analysis, delving into spatial weights matrices, which will give way to exploratory spatial data analysis. In this context, we will cover both global and local approaches. We will finish the course covering more advanced topics such as the analysis of points and spatially constrained clustering.


NOTE: bring your own data!!!

Day 1 - Monday

Day 2 - Tuesday

Day 3 - Wednesday

Day 4 - Thursday

Day 5 - Friday


BONUS: data preparation in zzz_data_prep.

Installation instructions: docker

This course can be run using the GDS Docker container.

Before starting the installation, make sure you have access to a reliable and reasonably fast internet connection. The software required takes up quite a bit of space and hence involves heavy downloads.

If you have administration rights on the machine you will use for the course, Docker is the safest and most stable route.

Note: that you will need at least 10GB of space in your machine.

  • Install docker CE (follow instructions for macOS, Windows 10 or earlier, Ubuntu)

  • Open a command prompt (ie. on macOS, Powershell on Windows)

  • Run the following command. This will download about 10GB of data, so it might take a while (particularly on slow connections). Be patient :-)

    > docker pull darribas/gds:2.0
  • Installation is ready!

  • To test that it is correctly installed, you can run from the same command line, the following command:

    > docker image ls
  • This should list, at least, the following:

    PS C:\Users\danie> docker image ls
    REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
    darribas/gds               2.0                 ed2515e065b2        2 weeks ago         8.17GB

    [Note the IMAGE ID may vary]

Once installed, you can run the Docker container with the following command:

docker run --rm -ti -p 8888:8888 -v ${PWD}:/home/jovyan/host darribas/gds:2.0

This will print out something similar to:

/usr/local/bin/ ignoring /usr/local/bin/start-notebook.d/*

Container must be run with group "root" to update passwd file
Executing the command: jupyter lab
[I 21:38:25.287 LabApp] Writing notebook server cookie secret to /home/jovyan/.local/share/jupyter/runtime/notebook_cookie_secret
[W 21:38:26.210 LabApp] WARNING: The notebook server is listening on all IP addresses and not using encryption. This is not recommended.
[I 21:38:26.251 LabApp] JupyterLab extension loaded from /opt/conda/lib/python3.6/site-packages/jupyterlab
[I 21:38:26.251 LabApp] JupyterLab application directory is /opt/conda/share/jupyter/lab
[W 21:38:26.622 LabApp] JupyterLab server extension not enabled, manually loading...
[I 21:38:26.623 LabApp] JupyterLab extension loaded from /opt/conda/lib/python3.6/site-packages/jupyterlab
[I 21:38:26.624 LabApp] JupyterLab application directory is /opt/conda/share/jupyter/lab
[I 21:38:26.700 LabApp] Serving notebooks from local directory: /home/jovyan
[I 21:38:26.700 LabApp] The Jupyter Notebook is running at:
[I 21:38:26.700 LabApp] http://(267dac20e049 or
[I 21:38:26.700 LabApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 21:38:26.701 LabApp]

Copy/paste this URL into your browser when you connect for the first time,
to login with a token:
    http://(267dac20e049 or

Then you can go to a browser and access http://localhost:8888/?token=mytoken, replacing mytoken by the token printed in the command line (in the case above, 950b3cd4c304a112e1554cafe67c1973efbed00bfd65b087).

Creative Commons License
Geographic Data Science with Python - UFMG'19 by Dani Arribas-Bel is licensed under a Creative Commons Attribution 4.0 International License.


Geographic Data Science in Python - UFMG'19







No releases published


No packages published