Admissions open · Autumn cohort

Learn remote sensing
Work with real data

Created by Volha Kaskevich, this practical online Academy teaches GIS, remote sensing and Earth Observation through real environmental data—from scientific Python and geospatial analysis to Google Earth Engine and machine learning.

Study onlineUse real satellite dataBuild a portfolio
AOI_59.4NPASS 084
NDVI Δ+0.184
+
+
LIVE TRAINING SCENES2A · 10M · 07:42 UTC
OPTICALSARLIDARTHERMALHYPERSPECTRALSPATIAL ANALYSIS

ONE JOURNEY · THREE STAGES

From beginner to
Earth Observation professional

Everything you build becomes part of your professional portfolio

  1. 01
  2. 02
  3. 03
A
B
38.85°N / 23.35°E
PRE-FIRE POST-FIRE

Field lab 06 · Northern Evia, Greece

Track recovery after a fire

Investigate the August 2021 northern Evia wildfire with an authoritative Copernicus perimeter, harmonized Sentinel-2 imagery, continuous dNBR and matched-season recovery trajectories. Measure spectral recovery without confusing it with ecological recovery.

  1. 01
    Prepare the data

    Select, filter, mask, and align six years of surface reflectance.

  2. 02
    Measure the change

    Compare burn severity and vegetation recovery over time.

  3. 03
    Explain the result

    Check uncertainty and present a short, clear scientific briefing.

Open the scientific project

Professional pathway

Academy
Curriculum

AVAILABLE NOWModules 1–2 + complete Module 3

95 lessons + 12 practica + Modules 2–3 capstones available · Portfolio pathway

Module 1 overview

Thinking Like a Scientific Programmer

Learn Python from zero and become capable of inspecting, organising and explaining scientific ecological data.

Final project
Vegetation Data Explorer
Prerequisites
None
Module outcomes

By the end of the module, you can:

  • Use Jupyter and Python confidently
  • Represent scientific information using appropriate data types
  • Write conditions, loops and functions
  • Work with NumPy arrays
  • Load and inspect a published dataset with pandas
  • Identify missing, invalid and inconsistent values
  • Filter, group, summarise, join and reshape tables
  • Create clear scientific figures
  • Document and interpret a reproducible analysis
Chapter 1

Start with Python

0/3 complete
  1. 1.1
  2. 1.2
  3. 1.3
Chapter 2

Control and Reuse

0/3 complete
  1. 1.4
  2. 1.5
  3. 1.6
Chapter 3

Work with Scientific Tables

0/3 complete
  1. 1.7
  2. 1.8
  3. 1.9
Chapter 4

Analyse and Communicate

0/3 complete
  1. 1.10
  2. 1.11
  3. 1.12

All twelve lessons are available. Each lesson extends the same Vegetation Data Explorer notebook and contributes one portfolio checkpoint.

Module 2 overview

Geospatial Data Science

Turn vector, raster, UAV and satellite data into reproducible spatial analyses by learning spatial reasoning before software operations.

Final project
UAV and Satellite Analysis Pipeline
Prerequisites
Module 1 or equivalent Python, Jupyter, pandas, NumPy, data-quality and scientific-plotting competence
  1. 01Spatial thinking
  2. 02Reference and scale
  3. 03Vector relationships
  4. 04Raster grids
  5. 05UAV and satellite EO
  6. 06Spatial inference
  7. 07Cloud and databases
  8. 08Delivery and production
Module outcomes

By the end of the module, you can:

  • Reason explicitly about CRS, scale, spatial support and uncertainty
  • Validate vector geometry, joins, topology and database operations
  • Process aligned raster, UAV, optical, SAR, hyperspectral and LiDAR data
  • Apply spatial sampling, autocorrelation and geostatistical reasoning
  • Work with PostGIS, Xarray, Dask, COG, Zarr and STAC
  • Deliver interoperable web maps and production-ready automated pipelines
Chapter 1

Spatial Foundations

0/5 complete
  1. 2.1
  2. 2.2
  3. 2.3
  4. 2.4
PRACTICUM
Chapter 2

Vector GIS and Spatial Computation

0/7 complete
  1. 2.5
  2. 2.6
  3. 2.7
  4. 2.8
  5. 2.9
  6. 2.10
PRACTICUM
Chapter 3

Raster Science

0/8 complete
  1. 2.11
  2. 2.12
  3. 2.13
  4. 2.14
  5. 2.15
  6. 2.16
  7. 2.17
Chapter 4

UAV and Photogrammetry

0/9 complete
  1. 2.18
  2. 2.19
  3. 2.20
  4. 2.21
  5. 2.22
  6. 2.23
  7. 2.24
  8. 2.25
Chapter 5

Satellite Earth Observation

0/6 complete
  1. 2.26
  2. 2.27
  3. 2.28
    SAR FundamentalsAvailable now
  4. 2.29
  5. 2.30
Chapter 6

Spatial Statistics and Geostatistics

0/5 complete
  1. 2.31
  2. 2.32
  3. 2.33
  4. 2.34
Chapter 7

Spatial Databases

0/4 complete
  1. 2.35
  2. 2.36
  3. 2.37
Chapter 8

Multidimensional and Cloud-Native Data

0/6 complete
  1. 2.38
  2. 2.39
    EO Data CubesAvailable now
  3. 2.40
  4. 2.41
  5. 2.42
    STACAvailable now
Chapter 9

Web GIS and Delivery

0/4 complete
  1. 2.43
  2. 2.44
    Interactive MappingAvailable now
  3. 2.45
Chapter 10

Enterprise GIS

0/2 complete
  1. 2.46
Chapter 11

Advanced Image Analysis

0/4 complete
  1. 2.47
  2. 2.48
  3. 2.49
Chapter 12

Production Geospatial Computing

0/5 complete
  1. 2.50
  2. 2.51
  3. 2.52
  4. 2.53
Capstone

Professional portfolio project

  1. CP

All 53 lessons, twelve chapter practica and the final UAV and Satellite Analysis Pipeline capstone are available. The pathway progresses from spatial foundations through advanced image analysis and production geospatial computing, with one reviewable portfolio artifact at every chapter boundary.

Module 3 overview

Remote Sensing Modelling

Turn remote-sensing observations into defensible predictions by making the scientific claim, training evidence, validation design, uncertainty and operational domain explicit.

Final project
Environmental Monitoring Project
Prerequisites
Modules 1–2 or equivalent competence in scientific Python, tabular data, spatial support, raster and EO products, spatial sampling, model QA and reproducible delivery
  1. 01Question
  2. 02Target and unit
  3. 03Predictor hypotheses
  4. 04Training evidence
  5. 05Baseline and model
  6. 06Independent validation
  7. 07Uncertainty and applicability
  8. 08Operational monitoring
Module outcomes

By the end of the module, you can:

  • Formulate predictive EO questions without confusing association, explanation and causality
  • Define target, prediction unit, domain and operational predictor contract
  • Establish baselines and train reproducible tree-ensemble and XGBoost models
  • Design spatial, temporal and nested validation that matches the intended claim
  • Evaluate regression, classification, calibration and structured failure
  • Map domain of applicability and prediction uncertainty
  • Operationalise bounded local and Earth Engine modelling workflows
Chapter 1

Frame the Prediction Problem

0/4 complete
  1. 3.1
  2. 3.2
  3. 3.3
  4. 3.4
Chapter 2

Establish the Baseline

0/4 complete
  1. 3.5
  2. 3.6
  3. 3.7
  4. 3.8
Chapter 3

Validate Spatial Models Properly

0/4 complete
  1. 3.9
  2. 3.10
  3. 3.11
  4. 3.12
Chapter 4

Optimise Without Fooling Yourself

0/4 complete
  1. 3.13
  2. 3.14
  3. 3.15
  4. 3.16
Chapter 5

Evaluate, Diagnose and Understand

0/5 complete
  1. 3.17
  2. 3.18
  3. 3.19
  4. 3.20
  5. 3.21
Chapter 6

Quantify Prediction Uncertainty

0/4 complete
  1. 3.22
  2. 3.23
  3. 3.24
  4. 3.25
Chapter 7

From Model to Operational EO Workflow

0/5 complete
  1. 3.26
  2. 3.27
  3. 3.28
  4. 3.29
  5. 3.30
Capstone

Professional portfolio project

  1. CP

All thirty lessons and the independently assessed Environmental Monitoring Project capstone are available. The capstone integrates the complete predictive evidence chain into one professional handover.

Your learning

Continue from where you stopped

Continue learning
Current lessonWelcome to Scientific Programming
Completed lessons0 / 109
Academy progress0%

Progress and notes are saved only in this browser. They are not shared with other browsers or devices.

Module navigationAvailable Module 1 lessons12 lessonsHide lessonsShow lessons
1.1WEEKS 01Lesson 1.1CurrentWelcome to Scientific ProgrammingUnderstand scientific programming, learn how a notebook works, run your first Python instructions and preserve the first Vegetation Data Explorer checkpoint.Jupyter NotebookPythonBaltic coastal meadow studyClose lesson
Lesson 1.1 of 12CoreBeginner60–75 minutes0 of 5 checks completed
Core lesson · requiredScientific note · applied contextGo deeper · optional

Learning pathway

You already know

You already know how scientists ask questions, distinguish observations from interpretations and judge whether evidence is relevant. You do not need programming knowledge. Your scientific experience is the starting point.

In this lesson

You will turn one ecological question into a small, inspectable notebook record. You will learn what programming and scientific programming mean, how Jupyter, a notebook file, Python and the kernel divide their roles, how the computer executes an instruction and how to preserve the result for another person to inspect.

Why this comes now

Every later table, map, raster and model depends on instructions being executed in a known order and on the scientist separating computational success from scientific validity. Learning that distinction before variables or datasets prevents code from becoming an unexplained sequence of commands.

You will use this later

Lesson 2 adds scientific values to the notebook. Lesson 6 develops systematic debugging. Lesson 8 introduces the published Baltic coastal-meadow table. Every later Academy project uses the same question → instruction → output → validation → interpretation cycle.

1. Scientific question and computational method

Learning outcome

By the end of this lesson, you can explain scientific programming; distinguish a scientific question from a computational instruction; explain the roles of Jupyter, a notebook file, Python and the kernel; distinguish Markdown and code cells; run simple instructions in order; predict output before execution; recognise and repair a simple SyntaxError; restart and clean-run a notebook; preserve it for inspection; and explain why successful execution does not prove scientific validity.

Prerequisites: None. You do not need to know Python, files, folders, terminals or notebooks.

Why this matters

Core lesson How does a scientific question become something a computer can actually execute?

You have joined a research group studying Baltic coastal meadows. Across the module, your working question is:

How can field measurements help us describe and compare vegetation patterns across Baltic coastal meadow plots?

A real coastal meadow beside Pärnu Bay, Estonia, with water, low vegetation, shrubs and managed grassland visible from an observation tower.
Pärnu coastal meadow, Estonia — what observations and metadata would be needed to turn this landscape into scientific data?

Scientific context, not lesson data. Photograph by Marko Vainu, 7 August 2013, Wikimedia Commons, CC BY-SA 4.0. The photograph is not part of the published Baltic coastal plant-traits dataset and no values are inferred from it here.

Before thinking about code, inspect the landscape. What would need to be defined before a computer could compare its vegetation: the observation unit, field protocol, dates, locations, measurements, quality checks, or something else? The computer cannot choose these scientific meanings for you.

A scientific question is not yet a computational method. To analyse it, a scientist must turn decisions into instructions: which data to inspect, which values to compare, what to calculate and how to check the result.

Programming means writing instructions a computer can execute. Scientific programming means using explicit, repeatable computer instructions to investigate scientific evidence while keeping scientific judgement with the researcher.

The relationship is a cycle:

  1. The scientist asks a question.
  2. An analysis plan defines operations and checks.
  3. Notebook code expresses exact instructions.
  4. Python executes those instructions.
  5. The notebook records output, including errors.
  6. The scientist validates execution, data and method.
  7. The scientist interprets what the output means and does not mean.
  8. The evidence may lead back to a revised question or plan.
A cycle separates scientist-controlled questions, plans, validation and interpretation from computer-executed notebook code, Python execution and output.
Scientific programming cycle — reasoning controls the computation and returns to the question

The arrows are not a guarantee of correctness. They make the reasoning inspectable. Code can execute exactly as written even when the wrong evidence was selected or the scientific question was translated badly.

Core lesson Write your own one-sentence definition of scientific programming in your private notes. Include both repeatable instructions and scientific judgement.

Learner action

Write one scientific question about Baltic coastal meadow vegetation that could eventually be investigated using field measurements and Earth Observation data. Do not try to write code yet.

2. Meet the notebook

A file is a saved digital item with a name. A Jupyter notebook is a file ending in .ipynb. It can keep the question, code, output and interpretation together, which makes the route from evidence to conclusion easier to inspect than a final Word report alone.

A notebook contains cells:

  • A Markdown cell holds headings, explanations, predictions and interpretations. Running it formats the text.
  • A code cell holds Python instructions. Running it sends those instructions to Python and returns output or an error.

Four names that beginners often mix up

  • Notebook file: the saved .ipynb record containing cells, saved output and metadata.
  • Jupyter: the interface that opens the file, displays cells and sends code to be run.
  • Python: the programming language used to express the instructions.
  • Kernel: the running Python process that executes code and temporarily remembers the current computational state.
The saved notebook file opens in the Jupyter interface, which sends code cells to a temporary Python kernel and receives output; save and restart affect different parts of the system.
Notebook, Jupyter and kernel mental model — restarting clears temporary state but does not delete saved code

When you choose Save, Jupyter updates the notebook file. When you choose Restart Kernel, Jupyter clears the kernel's temporary running state. Your saved code remains in the notebook. When you choose Run All, Jupyter sends code cells to a fresh kernel in notebook order. These actions are related, but they are not interchangeable.

Choose the right scientific record

Different formats support different parts of professional work:

FormatBest used forImportant limitation
Word or similar documentPolished narrative, review and final reportingThe calculation that produced a result is usually separate
Jupyter notebookDeveloping an analysis while keeping question, code, output and interpretation togetherCells can be run out of order and hidden state can make a result difficult to reproduce
Python scriptRepeatable processing that should run from beginning to endNarrative and exploratory output require deliberate documentation

The notebook is the right first instrument because it keeps beginner explanation beside executable evidence. It is not automatically superior to the alternatives. A mature project often uses notebooks for investigation, scripts for stable processing and a report for communication.

The kernel is the running Python process behind the notebook. When you run a code cell, Jupyter sends the cell to the kernel. The kernel reads instructions from top to bottom within that cell and stops if it reaches an instruction it cannot complete.

The kernel also preserves the consequences of cells you already ran until it is restarted. That flexibility helps exploration, but it can hide the order needed to reproduce a result. A professional notebook must therefore pass a clean-run test: restart the kernel, run every required cell from top to bottom and confirm that the result can be regenerated.

Download the starter notebook from the lesson resources below. Keep the downloaded file somewhere you can find again, then rename it exactly:

Vegetation_Data_Explorer.ipynb

Open it in JupyterLab, Jupyter Notebook, or your institution's current Jupyter environment. If you have no installed environment, Try Jupyter provides a browser workspace. Browser workspaces may be temporary, so always download your work before leaving.

Go deeper — why not install everything today? Professional projects often use separate environments and recorded package versions. Those practices matter, but installing and managing environments is not required for this first lesson. The module will introduce reproducibility in stages.

Learner action

Open the starter notebook. Find its title cell, one prediction field and one prepared code cell. Change the learner-name placeholder to your name or researcher identifier, then save.

3. Run the first instruction

The first prepared code cell contains:

print()

Before running it, predict what will appear: the word print, an error, or an empty-looking line. Record the prediction in the Markdown field directly above the code.

Check your understandingBefore you run print(), what output should you predict?
Choose one answer

Now select the code cell and press Shift + Enter, or use the Run control.

print is a built-in Python function that sends information to the output area. The parentheses mean “run this function now”. Nothing appears inside the parentheses, so print() produces only a new line. The output looks empty, but Python still completed a valid instruction.

Code walkthrough

  1. print is the function name.
  2. ( opens the function call.
  3. There is no value to display.
  4. ) closes the call.
  5. The kernel executes the complete instruction and returns a line break.

Learner action

Under the output, add a Markdown sentence explaining why an empty-looking result can still show that an instruction ran.

4. Predict execution order

The next prepared code cell contains three instructions:

print("Vegetation Data Explorer")
print("Study system: Baltic coastal meadows")
print("Question: How does vegetation vary among field plots?")

Predict before running

In the prediction field, write the three lines in the order you expect them to appear. Then run the cell.

Check your understandingA code cell contains three print instructions on three lines. In which order will a fresh kernel execute them?
Choose one answer

Expected output:

Vegetation Data Explorer
Study system: Baltic coastal meadows
Question: How does vegetation vary among field plots?

Python works from the first line to the third line. Each print(...) call contains a string: text between straight quotation marks. You will study strings formally in Lesson 2. For now, notice that the quotation marks tell Python where the text begins and ends; they are not shown in the output.

Scientific interpretation

Python displayed a research question, but it did not judge whether the question is answerable, whether the data are suitable or whether the wording is ecologically sound. Execution answers “Did the computer follow the instruction?” Interpretation asks “What does the result mean, and is the method scientifically defensible?”

Scientific note A precise output can still result from weak data, an unsuitable method or an unsupported assumption. Computational correctness and scientific validity must be checked separately.

Diagnose — it worked, but is it scientifically valid?

Imagine that Python displays:

Mean vegetation height = 42.7 cm

Which conclusion is justified?

  • Vegetation is definitely 42.7 cm high.
  • Python successfully displayed the supplied or computed value.
  • Field sampling was scientifically valid.
  • The measurement represents the entire coastal meadow.
Check your understandingPython displays “Mean vegetation height = 42.7 cm”. Which conclusion is justified by that output alone?
Choose one answer

Only the second statement follows from the output. To support the others, you would need evidence about the input values, units, sampling design, calculation, quality control, spatial and temporal scope, and uncertainty. Successful execution is one check in an evidence chain, not the scientific conclusion.

In two sentences, explain the difference between computational success and scientific validity in your notebook.

Learner action

Change only the final printed question so it matches the scientific question you wrote in Block 1. Predict the output order again, run the cell and confirm the lines remain in the expected sequence.

5. Cause and fix one error

Create a new code cell and deliberately type this incomplete instruction:

print("Baltic coastal meadow)

Run it. Python should report a SyntaxError because the opening quotation mark has no matching closing quotation mark. The error is information, not a judgement about your ability.

Check your understandingWhy does print("Baltic coastal meadow) produce a SyntaxError?
Choose one answer

When code fails

  1. Read the final error line.
  2. Identify the referenced line.
  3. Compare names and punctuation.
  4. Change one thing.
  5. Run the cell again.

Add the missing straight quotation mark so the corrected cell becomes:

print("Baltic coastal meadow")

Run it again and keep the corrected output. Full debugging and notebook-state management will be taught in Lesson 6.

Common mistake: code in a Markdown cell

If print("Baltic coastal meadow") appears as formatted text instead of producing output, the instruction is probably in a Markdown cell. Change the cell type to Code and run it again.

Learner action

Add a Markdown note below the corrected cell. State what Python reported, which single character was missing and how you knew the fix worked.

6. Save and submit the notebook

Saving updates the notebook in its current workspace. Downloading creates a separate copy that you control. Use both actions:

  1. Confirm the notebook is named Vegetation_Data_Explorer.ipynb.
  2. Save it in Jupyter.
  3. Download a copy to a known folder on your computer.
  4. Reopen the downloaded copy if your environment allows it.
  5. Run the required cells from top to bottom and confirm that the corrected cell succeeds.

Guided practice

Complete the starter notebook's Markdown prompts: project title, researcher name, scientific question, predictions, first execution note and error correction note.

Then complete its handover check:

  1. Restart the kernel.
  2. Use Run All or run every required cell from top to bottom.
  3. Confirm the deliberately broken instruction has been replaced by the corrected version.
  4. Compare the regenerated output with your predictions.
  5. Record whether the notebook passed, and identify any cell that needed correction.
  6. Save and download the clean result.

This is your first QA/QC procedure. It checks execution order and preservation. It does not establish that the scientific question or future data are valid.

Independent challenge

Add one code cell with no more than three print() instructions. Display:

  • your researcher name or identifier;
  • one ecological feature you want to understand;
  • one kind of Earth Observation evidence that might eventually help.

Predict the line order before running. After running, add two Markdown sentences: one identifies the executed instructions and output; the other identifies the scientific judgement that remains yours.

Finish with a professional scenario: imagine a colleague receives only this notebook. Add a Markdown note titled ### Handover note that tells them the question, which cells to run, what successful output looks like and what the output does not prove. Do not explain Python generally; explain how to inspect this specific scientific record.

Independent handover test

Close the notebook, reopen the downloaded copy and use only the visible instructions in the file. If you cannot reproduce the output without remembering an undocumented step, revise the notebook and repeat the test.

Learner action

Use the submission checklist shown below the lesson. Upload the renamed notebook and one screenshot, then add the requested written explanation in the submission panel.

7. Reflection and summary

Close the notes — 3-minute recall

Close or cover the lesson text. Without running code, answer from memory:

  1. What is scientific programming?
  2. When would you use a Markdown cell rather than a code cell?
  3. What does the kernel do?
  4. Why restart the kernel and run the notebook from top to bottom?
  5. Why does successful code execution not prove a scientific conclusion?

Then reopen the lesson, check your answers and correct only what you could not explain accurately.

Check your understandingWhat is the strongest reason to restart the kernel and run all required cells from top to bottom?
Choose one answer

Reflection

Write short answers in your private notes:

  1. What is scientific programming, in one sentence?
  2. When should you use a Markdown cell, and when should you use a code cell?
  3. What did the kernel do when it reached the incomplete string?
  4. Why does a successfully executed cell not prove that a scientific claim is valid?
  5. Where is your downloaded notebook stored?
  6. When would a script or a report be a better format than a notebook?

Portfolio artifact

Artifact 01 — Scientific Notebook Foundation

Your Vegetation_Data_Explorer.ipynb now contains a project title, a researcher identifier, a scientific question, predictions, executable Python instructions, a corrected SyntaxError, an interpretation, a clean-run QA record, a handover note and a reflection on scientific interpretation. It is the first checkpoint in Portfolio Project 1 — Vegetation Data Explorer, not a separate mini-project. Keep this notebook: Lesson 2 extends it rather than replacing it.

Summary

You can now describe scientific programming as a partnership between explicit computation and scientific judgement. You can choose why a notebook is appropriate, use its two essential cell types, run simple instructions in order, correct one syntax error and preserve a clean, inspectable record. Lesson 2 will add scientific values and names without discarding this foundation.

Practice workspace

Run the lesson code here

The example is already entered. Change it when the lesson asks you to experiment, then select Run Python.

Python runs privately on this device
Output
Run the code to see its output here.

Standard Python and supported scientific packages run here without an account. Examples that depend on lesson files can still be developed here, then completed in the downloadable notebook with those files.

Current lesson
Submission guide

Checklist and review rubric

Before submitting

  • The starter notebook is renamed Vegetation_Data_Explorer.ipynb
  • All required Markdown and code cells are present and executed
  • The deliberately broken print instruction is corrected
  • A clean restart-and-Run-All check is recorded
  • The notebook is saved, reopened and a downloaded copy is retained
  • The handover note identifies the question, run sequence, expected output and interpretation limit
  • The written answer distinguishes code cells from Markdown cells
  • The reflection is complete

Review dimensions

Technical correctness
Required cells run and the simple syntax error is corrected
Conceptual understanding
Explains scientific programming and code versus Markdown
Reproducibility
Notebook is clearly named, clean-run from top to bottom, reopened and preserved
Scientific communication
Handover note separates successful execution from scientific interpretation
Review statuses
  • Not submitted
  • Submitted
  • Revision requested
  • Meets expectations
  • Portfolio ready
Program task

Portfolio checkpoint 01 · Environment notebook

Upload Vegetation_Data_Explorer.ipynb and a screenshot that shows the notebook title, a code cell and its output. In the written result field, explain in 120–180 words what scientific programming is and why execution is different from scientific interpretation. Before uploading, restart the kernel and run all cells from top to bottom.

Learner submission · browser prototypeMap, imagery, and interpretation
Up to 5 files · 50 MB each

Learner submission prototype: private and saved only in this browser. Sign in to synchronize it and contact an instructor.

Private learner–instructor conversationQuestions, revision requests, and feedback

Sign in to share private comments with an instructor.

Shared lesson discussion

Sign in to read or join the optional discussion for this lesson.

Technical and source information
Tested Python
Python 3.12.3
Tested Jupyter environment
JupyterLab 4 / Notebook 7 compatible notebook format (nbformat 4.5)
Last technical review
25 August 2026
Portfolio artifact
Scientific Notebook Foundation
Prerequisites
None
Dataset citation
Baltic coastal plant traits 2024, Zenodo record 20083250, https://doi.org/10.5281/zenodo.20083250

Core reading

Go deeper

Official reference

1.2WEEKS 02Lesson 1.2Variables and Scientific DataRepresent scientific values with clear variable names and appropriate strings, numbers, Booleans and missing values without confusing type with validity.PythonScientific valuesSALS1 field observationOpen lesson
1.3WEEKS 03Lesson 1.3Collections for Ecological InformationUse lists for editable species observations and dictionaries for named plot fields, with brief supporting uses for tuples and sets.Python collectionsVegetation metadataCoordinate conventionsOpen lesson
1.4WEEKS 04Lesson 1.4Conditions and Data-Quality RulesTranslate transparent scientific criteria into auditable Python decisions while preserving missing values and source measurements.Python conditionsQuality flagsMissing-value reasoningOpen lesson
1.5WEEKS 05Lesson 1.5Repetition, Loops and Vectorised ThinkingApply one verified method consistently across several plot records and prepare to reason about whole numerical collections.Python loopsAccumulatorsHand verificationOpen lesson
1.6WEEKS 06Lesson 1.6Functions, Errors and DebuggingTurn scientific rules into tested reusable functions and diagnose failures from tracebacks and controlled evidence.Python functionsTest casesDebugging workflowOpen lesson
1.7WEEKS 07Lesson 1.7NumPy and Numerical ArraysRepresent verified ecological sequences as numerical arrays, inspect shape and dtype, and apply aligned vectorised masks.NumPyBoolean masksPublished richness valuesOpen lesson
1.8WEEKS 08Lesson 1.8Open the Published Dataset with pandasLoad the complete Zenodo CSV through a reproducible project path and verify its structure before analysis.pandasPathlibZenodo datasetOpen lesson
1.9WEEKS 09Lesson 1.9Missing Values, Types and Data QualityProfile real missingness and data types, apply field-specific checks and preserve every decision in an audit trail.pandas quality profileMissingnessDecision logOpen lesson
1.10WEEKS 10Lesson 1.10Filter, Group and SummariseDefine a countable analysis population and produce grouped summaries that retain sample size, centre, spread and limitations.pandas filteringGroupByDescriptive statisticsOpen lesson
1.11WEEKS 11Lesson 1.11Join, Reshape and VisualiseJoin summaries with validated keys, expose unsampled combinations and communicate one comparison in a clear scientific figure.pandas mergePivot tablesMatplotlibOpen lesson
1.12WEEKS 12Lesson 1.12Vegetation Data Explorer ProjectAssemble the complete notebook into a reproducible claim–evidence chain and deliver a defensible ecological briefing.Reproducible notebookScientific figuresPortfolio briefingOpen lesson
Module navigationAvailable Module 2 lessons53 lessons · 12 practica · capstone availableHide lessonsShow lessons
2.1CHAPTER 1Lesson 2.1What Makes Data Geospatial?Distinguish ordinary tables, vector features, raster grids and spatial data with incomplete reference metadata.Spatial reasoningVectorRasterOpen lesson
2.2CHAPTER 1Lesson 2.2Coordinate Reference SystemsChoose, inspect, assign and transform coordinate reference systems without confusing metadata repair with reprojection.pyprojGeoPandasEPSGOpen lesson
2.3CHAPTER 1Lesson 2.3Scale, Resolution and Spatial SupportRelate field quadrats, UAV pixels and satellite pixels to the ecological processes they can validly represent.ScaleResolutionSpatial supportOpen lesson
2.4CHAPTER 1Lesson 2.4Geospatial Formats and MetadataSelect formats that preserve geometry, grids, metadata and efficient access across local and cloud workflows.GeoPackageGeoParquetCOGZarrOpen lesson
PRACTICUMCHAPTER 1Chapter practicumAccept, Review or Reject?Make a documented data-acceptance decision from incomplete spatial evidence before analysis begins.Evidence reviewRisk classificationDecision recordOpen lesson
2.5CHAPTER 2Lesson 2.5GeoPandas and Spatial TablesExtend pandas reasoning to geometry, CRS, spatial bounds and geospatial file exchange.GeoPandasGeoPackageGeoJSONOpen lesson
2.6CHAPTER 2Lesson 2.6Geometry with ShapelyConstruct and evaluate geometry operations while separating computational validity from ecological justification.ShapelyGeometryPredicatesOpen lesson
2.7CHAPTER 2Lesson 2.7Spatial Joins, Overlay and Nearest NeighboursMatch features through spatial relationships while auditing duplicates, unmatched records and one-to-many results.sjoinoverlaynearestOpen lesson
2.8CHAPTER 2Lesson 2.8Spatial Indexing and PerformanceUnderstand how bounding-box indexes reduce candidate comparisons without changing spatial predicates.Spatial indexSTRtreeProfilingOpen lesson
2.9CHAPTER 2Lesson 2.9Topology, Geometry Cleaning and Data IntegrityClean multipart, invalid and duplicated geometries while retaining an explicit topology decision log.DissolveExplodeTopology QAOpen lesson
2.10CHAPTER 2Lesson 2.10QGIS for Professional Spatial QAUse QGIS as a visual verification companion to reproducible Python processing.QGISVisual QAMap exportOpen lesson
PRACTICUMCHAPTER 2Chapter practicumVector Handover ReviewAudit a vector delivery as if you were accepting responsibility for the next professional analysis stage.Vector QAReconciliationHandover decisionOpen lesson
2.11CHAPTER 3Lesson 2.11What Is a Raster Really?Build a rigorous mental model of values, grids, spatial reference, valid support and measurement semantics before processing.Raster modelAffine transformNoDataOpen lesson
2.12CHAPTER 3Lesson 2.12Rasterio: Read, Inspect and Write Spatial GridsInspect a GeoTIFF spatial contract, read masked values and verify a written derivative through a complete round trip.RasterioNumPyRound-trip QAOpen lesson
2.13CHAPTER 3Lesson 2.13Crop, Mask, Reproject and ResampleSeparate four transformations and choose their sequence and resampling logic from scientific meaning.RasterioResamplingMaskingOpen lesson
2.14CHAPTER 3Lesson 2.14Raster Alignment and Grid IntegrityDetect grid mismatch, design a common lattice and prove cell-by-cell compatibility explicitly.Grid alignmentTarget gridQA functionOpen lesson
2.15CHAPTER 3Lesson 2.15Raster–Vector IntegrationExtract raster evidence to vector sampling units through a spatial-support decision rather than a default pixel lookup.SamplingZonal statisticsSpatial supportOpen lesson
2.16CHAPTER 3Lesson 2.16Large Raster ProcessingEstimate memory, process stored blocks and use virtual transformed views without changing numerical meaning.WindowsBlocksWarpedVRTOpen lesson
2.17CHAPTER 3Lesson 2.17Terrain Analysis with DEM and DSMInterpret elevation surfaces and derive slope, aspect and hillshade without losing vertical-reference and surface meaning.DEM / DSM / DTMSlope and aspectTerrain QAOpen lesson
PRACTICUMCHAPTER 3Chapter practicumBuild an Analysis-Ready Raster StackHarmonise five deliberately different raster inputs into one validated grid with extraction and QA evidence.Raster harmonisationAlignment QAProfessional handoverOpen lesson
2.18CHAPTER 4Lesson 2.18UAV Remote Sensing FundamentalsTreat a UAV as a complete observing system and distinguish direct sensor records from derived geospatial products.UAV systemsSensor typesProduct provenanceOpen lesson
2.19CHAPTER 4Lesson 2.19Mission Design: Altitude, GSD and OverlapCalculate nominal sampling geometry and evaluate how altitude, footprint, overlap, speed, shutter and terrain interact.Mission geometryGSDOverlapOpen lesson
2.20CHAPTER 4Lesson 2.20Sensors, Illumination and Radiometric QualityTrace digital values through exposure, illumination and calibration evidence before calling them comparable reflectance.RadiometryCalibrationBand registrationOpen lesson
2.21CHAPTER 4Lesson 2.21Georeferencing: GNSS, GCP, RTK and PPKSeparate positioning constraints from independent validation and diagnose horizontal, vertical and local error.GNSSControl pointsAccuracy QAOpen lesson
2.22CHAPTER 4Lesson 2.22Structure from Motion and Photogrammetric ReconstructionTrace overlapping perspective images through a software-independent three-dimensional reconstruction workflow.Structure from MotionBundle adjustmentDense reconstructionOpen lesson
2.23CHAPTER 4Lesson 2.23Point Clouds, DSM, DTM and OrthomosaicsInterpret common UAV products from the observations and models that created them.Point cloudsSurface modelsOrthomosaicsOpen lesson
2.24CHAPTER 4Lesson 2.24UAV Product QA and Error DiagnosisIntegrate mission, image, photogrammetry, georeferencing, mosaic, surface, multispectral and temporal evidence.UAV QAError diagnosisDecision matrixOpen lesson
2.25CHAPTER 4Lesson 2.25UAV Multispectral Processing PipelineBuild an accepted multispectral subset with explicit radiometric, geometric, mask and provenance gates.Multispectral stackSafe indicesRaster extractionOpen lesson
PRACTICUMCHAPTER 4Chapter practicumEvaluate a UAV Survey Before Scientific AnalysisAudit a deliberately imperfect UAV handover and decide which products and regions are defensible for ecological use.UAV product QAPhotogrammetry evidenceProfessional handoverOpen lesson
2.26CHAPTER 5Lesson 2.26Optical Remote SensingConnect electromagnetic interactions, sensor bands and product levels to interpretable surface reflectance.Sentinel-2LandsatReflectanceOpen lesson
2.27CHAPTER 5Lesson 2.27Vegetation and Spectral IndicesUse vegetation indices as sensor- and context-dependent proxies rather than direct ecological measurements.NDVIRed edgeSAVIOpen lesson
2.28CHAPTER 5Lesson 2.28SAR FundamentalsInterpret Sentinel-1 backscatter through acquisition geometry, surface properties and preprocessing choices.Sentinel-1VV/VHBackscatterOpen lesson
2.29CHAPTER 5Lesson 2.29Hyperspectral Remote SensingRecognise when dense narrow-band measurements provide useful spectral evidence and additional preprocessing burden.HyperspectralSpectral curvesSNROpen lesson
2.30CHAPTER 5Lesson 2.30LiDAR and Point CloudsTurn discrete three-dimensional returns into terrain and vegetation-structure products.LiDARPoint cloudsCanopy heightOpen lesson
PRACTICUMCHAPTER 5Chapter practicumBuild a Defensible Satellite Evidence PackageIntegrate optical, spectral-index, SAR, imaging-spectroscopy and LiDAR evidence without forcing incompatible measurements into one claim.Cross-sensor QAEvidence integrationScientific decisionOpen lesson
2.31CHAPTER 6Lesson 2.31Spatial AutocorrelationRecognise spatial dependence and its consequences for inference and validation.Moran's IWeightsSpatial dependenceOpen lesson
2.32CHAPTER 6Lesson 2.32Spatial Sampling and BiasDesign and diagnose sampling that represents spatial heterogeneity without hidden clustering.Sampling designBiasStratificationOpen lesson
2.33CHAPTER 6Lesson 2.33Interpolation and GeostatisticsTreat interpolation as a model of spatial continuity with assumptions and prediction uncertainty.IDWVariogramKrigingOpen lesson
2.34CHAPTER 6Lesson 2.34Spatial Regression ConceptsRecognise when ordinary regression residuals violate independence and what spatial models attempt to address.Spatial lagSpatial errorGWROpen lesson
PRACTICUMCHAPTER 6Chapter practicumDesign and Defend a Spatial Inference PlanAudit sampling, spatial dependence, interpolation and regression as one geographically validated evidence system.Spatial inferenceGeographic validationRelease decisionOpen lesson
2.35CHAPTER 7Lesson 2.35SQL for Geospatial ScientistsQuery environmental tables with explicit filtering, grouping and relational joins.SQLJOINGROUP BYOpen lesson
2.36CHAPTER 7Lesson 2.36PostGIS FundamentalsMove vector relationships from in-memory Python to indexed database queries.PostGISSRIDSpatial SQLOpen lesson
2.37CHAPTER 7Lesson 2.37Managing Large Spatial DataChoose when files, columnar objects or a spatial database best support scale and collaboration.GeoParquetPostGISObject storageOpen lesson
PRACTICUMCHAPTER 7Chapter practicumBuild a Governed Spatial Database HandoverConvert an imperfect spatial-data handover into a controlled relational, spatial and storage architecture with traceable release evidence.Relational integritySpatial SQLData governanceOpen lesson
2.38CHAPTER 8Lesson 2.38Xarray and RioxarrayWork with labelled multidimensional arrays that preserve coordinates, dimensions and attributes.XarrayRioxarrayLabelled arraysOpen lesson
2.39CHAPTER 8Lesson 2.39EO Data CubesExtend one spatial band into band and time dimensions while preserving comparable observations.Data cubeTime seriesMaskingOpen lesson
2.40CHAPTER 8Lesson 2.40Dask and Lazy ComputationPlan chunked computations that fit memory without turning the lesson into distributed-systems engineering.DaskChunksLazy executionOpen lesson
2.41CHAPTER 8Lesson 2.41COG, Zarr and Cloud-Native FormatsMatch tiled range-readable rasters and chunked arrays to remote access patterns.COGZarrRange requestsOpen lesson
2.42CHAPTER 8Lesson 2.42STACDiscover cloud-hosted Earth Observation assets through consistent catalog metadata.STACCatalogSearchOpen lesson
PRACTICUMCHAPTER 8Chapter practicumBuild a Reproducible Cloud-Native EO Evidence CubeConnect STAC discovery, labelled cube eligibility, bounded Dask execution and validated COG/Zarr publication in one traceable scientific package.Xarray and DaskCOG and ZarrSTAC provenanceOpen lesson
2.43CHAPTER 9Lesson 2.43Web Maps and Spatial ServicesUnderstand how browsers request tiles, features and coverages from spatial services.XYZWMS/WFSVector tilesOpen lesson
2.44CHAPTER 9Lesson 2.44Interactive MappingCommunicate spatial results through a focused interactive map without teaching full frontend engineering.FoliumMapLibreAccessibilityOpen lesson
2.45CHAPTER 9Lesson 2.45OGC Standards and InteroperabilityRelate established web services, OGC APIs, COG and STAC across professional systems.OGC APIInteroperabilityServicesOpen lesson
PRACTICUMCHAPTER 9Chapter practicumDeliver an Accessible Environmental Monitoring MapTurn reviewed EO evidence into a purpose-led public map, equivalent table and tested interoperable handover without exposing restricted information.Web delivery architectureAccessible interactive mappingOGC interoperabilityOpen lesson
2.46CHAPTER 10Lesson 2.46ArcGIS Professional EcosystemPosition ArcGIS components within a broader interoperable geospatial architecture.ArcGIS ProEnterpriseInteroperabilityOpen lesson
PRACTICUMCHAPTER 10Chapter practicumDesign a Portable Coastal-Meadow GIS ArchitectureAllocate ArcGIS and open components by role, prove cross-ecosystem equivalence, and defend a governed architecture with an exit path.Enterprise architectureWorkflow translationMigration evidenceOpen lesson
2.47CHAPTER 11Lesson 2.47Image Segmentation FundamentalsSeparate pixels into meaningful regions before classification or measurement.SegmentationTextureObjectsOpen lesson
2.48CHAPTER 11Lesson 2.48Deep Learning for Geospatial ImagesUnderstand the image-to-patch-to-probability-to-mask workflow before using model APIs.CNNU-NetSemantic segmentationOpen lesson
2.49CHAPTER 11Lesson 2.49Geospatial Deep Learning QAAudit leakage, domain shift, annotation uncertainty and false confidence in mapped predictions.Spatial leakageDomain shiftCalibrationOpen lesson
PRACTICUMCHAPTER 11Chapter practicumAudit a Meadow Segmentation ProductDesign, test and communicate an image-segmentation workflow whose labels, spatial splits, thresholds and failure geography are fit for ecological use.Object-based analysisSpatial validationModel QAOpen lesson
2.50CHAPTER 12Lesson 2.50APIs and Automated Data AcquisitionRetrieve versioned environmental data robustly while respecting authentication, pagination and rate limits.HTTPJSONRetriesOpen lesson
2.51CHAPTER 12Lesson 2.51Command-Line Geospatial ToolsUse inspection, conversion and warping commands as composable professional operations.GDALogr2ogrrioOpen lesson
2.52CHAPTER 12Lesson 2.52Docker for Geospatial ReproducibilityPackage difficult native dependencies and project commands into a repeatable execution environment.DockerGDALEnvironmentOpen lesson
2.53CHAPTER 12Lesson 2.53Workflow Automation and CITurn the complete pipeline into validated stages that run consistently on every change.GitHub ActionsTestsArtifactsOpen lesson
PRACTICUMCHAPTER 12Chapter practicumProductionise the Coastal-Meadow PipelineTurn a reviewed analysis into a versioned, containerised and continuously tested workflow with recoverable acquisition and release evidence.API acquisitionContainersContinuous integrationOpen lesson
CapstoneCAPSTONECapstoneUAV and Satellite Analysis PipelineIntegrate field plots, vector zones, UAV products, satellite observations and production QA into one defensible professional delivery.Pipeline designSpatial validationProfessional deliveryOpen lesson
Module navigationAvailable Module 3 lessons30 lessons · capstone availableHide lessonsShow lessons
3.1CHAPTER 1Lesson 3.1Prediction, Inference and ExplanationSeparate predictive claims from description, explanation and causal inference before selecting an algorithm.Scientific reasoningPrediction contractClaim boundariesOpen lesson
3.2CHAPTER 1Lesson 3.2Define the Target and Prediction UnitSpecify exactly what is predicted, how it was observed, and what receives one prediction.Target contractSpatial supportPrediction domainOpen lesson
3.3CHAPTER 1Lesson 3.3Design Predictors and Modelling HypothesesChoose operationally available predictors through measurement reasoning rather than correlation hunting.Predictor hypothesesTraining-serving skewProxiesOpen lesson
3.4CHAPTER 1Lesson 3.4Build the Modelling Dataset and Pre-register the ExperimentCreate one auditable row per modelling observation and freeze the evaluation contract before fitting.Data contractFold registryExperiment planOpen lesson
3.5CHAPTER 2Lesson 3.5What Does a Useful Model Need to Beat?Define naive and simple baselines before judging complexity.BaselinesModel skillBias–varianceOpen lesson
3.6CHAPTER 2Lesson 3.6Trees, Ensembles and BoostingReason from decision-tree partitions to bagging and sequential error correction.Decision treesRandom ForestGradient boostingOpen lesson
3.7CHAPTER 2Lesson 3.7XGBoost from First PrinciplesConnect loss, additive trees, regularisation and learning rate to model behaviour.XGBoostObjectivesRegularisationOpen lesson
3.8CHAPTER 2Lesson 3.8Train the First Defensible XGBoost ModelFit an untuned, reproducible candidate against a declared baseline and folds.XGBRegressorMetadataSerializationOpen lesson
3.9CHAPTER 3Lesson 3.9Validation Is Part of the ModelTreat the withheld evidence and its destination claim as part of the scientific model.GeneralisationCross-validationProximity leakageOpen lesson
3.10CHAPTER 3Lesson 3.10Spatial, Grouped and Leave-Location-Out ValidationMatch row, group, block, site and buffered folds to the intended spatial transfer claim.GroupKFoldSpatial blocksLeaveOneGroupOutOpen lesson
3.11CHAPTER 3Lesson 3.11Temporal and Spatiotemporal ValidationEvaluate future and future-site transfer without allowing later evidence to move backward in time.Temporal holdoutRolling originDriftOpen lesson
3.12CHAPTER 3Lesson 3.12Nested Model Selection and Leakage PreventionKeep inner procedure selection inside outer generalisation assessment and audit every leakage route.Nested CVPipelineLeakage auditOpen lesson
3.13CHAPTER 4Lesson 3.13Hyperparameter OptimisationDesign a bounded, reproducible search inside nested development evidence and compare it fairly with the untuned candidate.RandomizedSearchCVGrouped inner foldsSearch protocolOpen lesson
3.14CHAPTER 4Lesson 3.14Early Stopping, Regularisation and Learning DynamicsRead training and structured-development loss together, then stop boosting before additional trees cease to improve transferable performance.XGBoost early stoppingLearning curvesRegularisationOpen lesson
3.15CHAPTER 4Lesson 3.15Feature Selection, Redundancy and StabilityCompare full and scientifically reduced predictor sets using fold-level relevance and stability rather than one automatic ranking.Permutation importanceCorrelated predictorsFold stabilityOpen lesson
3.16CHAPTER 4Lesson 3.16Imbalanced Classification and Decision ThresholdsSeparate probability estimation from ecological action and choose a rare-habitat threshold from declared error costs.Precision and recallClass weightingDecision thresholdsOpen lesson
3.17CHAPTER 5Lesson 3.17Regression EvaluationInterpret R², RMSE, MAE and bias together with fold variability and residual diagnostics.RMSEResidual diagnosticsOpen lesson
3.18CHAPTER 5Lesson 3.18Classification Evaluation and Probability QualitySeparate fixed class decisions, score ranking and probability calibration under class imbalance.Confusion matrixROC and PR curvesCalibrationOpen lesson
3.19CHAPTER 5Lesson 3.19Residual Geography and Structured FailureMap where errors concentrate and expose site, subgroup and acquisition failure hidden by averages.Residual mapsSubgroup evidenceFailure hypothesesOpen lesson
3.20CHAPTER 5Lesson 3.20Model Interpretation Without Causal OverclaimingCompare gain, permutation, dependence and SHAP explanations while preserving predictive claim boundaries.Permutation importanceSHAPPartial dependence and ICEOpen lesson
3.21CHAPTER 5Lesson 3.21Domain of Applicability and ExtrapolationIdentify, flag and map predictions unsupported by represented multivariate training evidence.Predictor-space distanceNearest analoguesApplicability mapOpen lesson
3.22CHAPTER 6Lesson 3.22What Uncertainty Means in Predictive EOSeparate measurement, sampling, model, residual and transfer uncertainty before choosing a numerical method.Uncertainty inventoryEvidence chainClaim boundariesOpen lesson
3.23CHAPTER 6Lesson 3.23Prediction Intervals and Quantile ApproachesFit lower and upper conditional quantiles and evaluate interval coverage and width on protected transfer evidence.Quantile regressionPinball lossCoverage and widthOpen lesson
3.24CHAPTER 6Lesson 3.24Conformal Prediction and Empirical CoverageCalibrate split-conformal intervals, test empirical coverage, and audit exchangeability under spatial and temporal dependence.Split conformalNonconformity scoresStructured coverageOpen lesson
3.25CHAPTER 6Lesson 3.25Uncertainty and Applicability MapsRelease prediction, interval width and applicability as aligned but non-interchangeable evidence layers.Prediction mapUncertainty mapApplicability mapOpen lesson
3.26CHAPTER 7Lesson 3.26Raster Inference at ScaleApply a frozen feature schema through valid masks and windowed prediction without semantic or spatial drift.Schema gatesWindowed inferencePrediction QAOpen lesson
3.27CHAPTER 7Lesson 3.27Google Earth Engine for Modelling WorkflowsUse server-side predictor stacks, sampling, supported classifiers and exports as a bounded modelling component.Earth Engineee.ClassifierServer-side exportOpen lesson
3.28CHAPTER 7Lesson 3.28Local ML versus Earth Engine MLSelect a modelling architecture by validation control, algorithm need, data locality, scale and operational burden.Architecture decisionLocal XGBoostEarth Engine MLOpen lesson
3.29CHAPTER 7Lesson 3.29Monitoring Through Repeated PredictionsRun comparable predictions through time, diagnose drift and prevent map differences from becoming unsupported ecological change claims.Repeated inferenceDrift gatesReview triggersOpen lesson
3.30CHAPTER 7Lesson 3.30Reproducibility, Model Cards and Operational QAPackage the model, evidence, limitations, acceptance tests and update policy for reviewable operation.Model cardVersioned packageOperational acceptanceOpen lesson
CapstoneCAPSTONECapstoneEnvironmental Monitoring ProjectDesign, validate and hand over an independent predictive Earth Observation workflow as a reviewable scientific evidence package.Independent modellingSpatial validationProfessional handoverOpen lesson

What you will finish with

Show your work, not only a certificate

You will leave with a reviewed portfolio, a repeatable workflow, and the confidence to explain your results clearly.

12guided field labs
04portfolio projects
30+satellite datasets
01capstone defense

Applications are open

Ready to start?

Send a short note about what you want to learn and why you want to join.

Send your application
AUTUMN COHORT · 24 PLACESAPPLICATIONS CLOSE 21 AUGUST