A standalone Honours (4th-year) module. 3 credit points (approximately 25 contact hours), 10 sessions. Full session-by-session rationale, learning outcomes, and assessment weighting are in the planning document; this folder is the actual teaching material.
Every notebook follows the same pattern throughout: a # === USER CONFIGURATION === cell
near the top marks what students are meant to change, followed by cells that run without needing
to be understood line-by-line on first read. No notebook requires writing code from a blank
cell — every session asks students to run real, working code and then deliberately change
something specific in it.
Written for students with little or no programming background. Every notebook explains new
Python/library concepts in plain language the first time they're used — not just what a line of
code does, but why — rather than assuming familiarity. Session 1 opens with a five-minute primer
on notebooks and Python basics before any real content, and Session 7 includes a short guide to
reading a Python error message ("traceback"). GLOSSARY.md, at the top level of this folder,
collects plain-language definitions of every technical and Python term used across all ten
sessions in one place — point students to it any time unfamiliar vocabulary comes up.
instructor_notes/ has the full session-by-session timing plan, the external
GeoSMART/CSU material each session pairs with, licensing/attribution, and the Session 7 answer
key. _build/ holds the Python scripts that generate each notebook — useful if you want to
tweak a notebook's content later without hand-editing JSON (edit the relevant
build_sessionNN.py, then re-run it; comments explaining Python/library concepts live inline in
these scripts too, so edits should keep the same beginner-friendly commenting style).
Google Colab (recommended for students): no installation needed. Click the badge next to any notebook in the session map above to open it directly in Colab.
Local (instructor machine, or students with a working Python setup):
pip install -r requirements.txt
jupyter notebook
Session 1 uses real measurements throughout: 40 rock density values, 58 paired lead/zinc geochemical concentrations, a two-species depth-vs-size dataset, and a 126-measurement fault dip/dip-direction survey — all drawn from a University of Sydney statistics-for-geoscientists course. Every other dataset, in every other notebook, is synthetic, generated in the notebook itself so nothing needs to be downloaded and so the "true" underlying relationship is always available for comparison. There are no external data files anywhere in this module: the real Session 1 values are hard-coded as plain arrays directly in that notebook's cells, and every synthetic dataset is generated in place by code — nothing to host, fetch, or keep in sync separately. Each synthetic dataset is built to be realistic in shape and grounded in a real geoscience relationship (seafloor spreading kinematics, porphyry alteration zoning, Cenozoic-style cooling), and every notebook says so explicitly where it matters. Session 9's paper (Farahbakhsh et al., 2025) is the other place this module points at real, published, external data and results.
These notebooks are original material written for this module, not copies of GeoSMART's or
CSU's notebooks — GeoSMART ("Machine Learning in the Geosciences",
geo-smart.github.io/mlgeo-book, CC-BY-4.0
text/figures, MIT code) and CSU's ml_tutorial_csu
(github.com/eabarnes1010/ml_tutorial_csu,
MIT) are used as the live-demo/backbone resources named in the course outline, credited where
they're used, not embedded here. Session 1's data are adapted from a previous (unpublished)
Honours course designed by R.D. Müller entitled "Statistics for Geoscientists" at the University
of Sydney.
This material is released under the MIT License.