Syllabus (Semester 1, 2026)

GISCI 343: Geo-Spatial Data Science

  • University of Auckland, 2026
  • Instructor: Dr Hyesop Shin
  • Semester 1: 12 weeks (2 March - 2 June 2026)
  • Book: https://dataandcrowd.github.io/python-gis/

Course overview

This course provides comprehensive training in Python for urban analytics, progressing from foundational geospatial programming to production-ready research software. Students will learn to analyse urban data, create interactive web dashboards using Shiny for Python, and publish Python packages to PyPI. The course emphasises reproducible research, open science practices, and software development skills essential for modern geospatial research and practice.

Level: Intermediate to Advanced
Contact hours:

  • Lecture: 2 hours per week (Monday 13:00-15:00)
  • Lab: 2 hours per week (Tuesday 13:00-15:00)

Prerequisites: - Nothing in principle (but previous exposure helps) - Recommended: basic programming experience (any language) - Familiarity with GIS concepts - Statistical thinking


Learning objectives

By the end of this course, students will be able to:

  1. Manipulate and analyse geospatial data using Python (GeoPandas, OSMnx, momepy)
  2. Apply spatial analysis techniques to urban analytics problems
  3. Design and build interactive web dashboards using Shiny for Python
  4. Structure, document, and test Python packages following best practices
  5. Publish Python packages to PyPI using modern tooling (uv)
  6. Deploy web applications to production environments
  7. Apply reproducible research workflows and version control
  8. Communicate spatial analysis results through visualisations, dashboards, and blog posts

Software requirements

Essential

  • Python 3.10 or higher
  • Positron IDE (or VS Code)
  • Quarto for literate programming
  • uv for package management
  • Git and GitHub account
  • TestPyPI and PyPI accounts (free registration)

Python libraries (managed via uv)

  • Core geospatial: geopandas, shapely, pyproj, rasterio, contextily
  • Network analysis: osmnx, networkx, momepy
  • Dashboard: shiny, shinylive, ipyleaflet, plotly, shinyswatch

Platforms

  • GitHub for version control (essential across assignments)
  • Substack account for blogging (Assignment 1)
  • shinylive account for dashboard hosting (Assignment 2)

Assessment structure

Assessment Weight Due date
Weekly quizzes 15% Weeks 2-10 (not wk8)
Assignment 1: Data Blog Post 15% 5 April (Week 5)
Canvas Mid-sem Test 15% 27-29 March (Week 4)
Assignment 2: Shiny Dashboard 15% 10 May (Week 8)
Poster Showcase 10% 26th May (Week 11, B301 Ground floor)
Assignment 3: PyPI Package 30% 7 June (Week 12)

Total: 100%

Note on Assignment 2: Due date adjusted to 10 May to account for ANZAC Day week having no lecture. Students receive Week 7 (ANZAC week) as dedicated lab time for dashboard development.

Note on Poster Showcase: Students will present an A1 poster describing their packages at a designated showcase event (B301-G10).


Course schedule

Part 1: Introduction to geospatial analysis in Python

Week 1: Course introduction and Python setup (2-3rd March)

Lecture topics

  • Course overview and expectations
  • Python for geospatial analysis: why and how?
  • Python fundamentals review: modules, packages, environments
  • Introduction to Quarto for literate programming
  • Modern package management with uv (in lab session)
  • Basic Python that you need to know

Lab activities

  • Install Python, Positron, and Quarto
  • Set up development environment with uv
  • Install essential geospatial packages
  • Create your first Quarto document
  • Test installations with simple examples

Learning resources - uv documentation: https://docs.astral.sh/uv/ - Quarto documentation: https://quarto.org/docs/get-started/ - Python refresher materials (provided)

Key skills: Environment setup, package management, Quarto basics


Week 2: Fundamentals of Python (9 March)

Lecture topics

Python skills

  • Module imports: import, from...import, import...as
  • Data structures: long vs wide formatting
  • Data manipulation fundamentals: filtering, selecting, sorting
  • Pandas operations: groupby, merge, join
  • Data visualisation
  • Dealing with possible errors
  • Importing geospatial datasets (GeoJSON, Shapefiles, GeoPackage)
  • Vector and raster data visualisation with GeoPandas and matplotlib
  • Calculating basic distance measures (Euclidean, haversine)

Urban analytics

  • Data quality issues in real-world urban data
  • Identifying outliers and missing data in urban datasets
  • Statistical imputation methods
  • Working with census geographies (SA2 level in NZ)

Lab activities

  • Disclosing Assignment 1
  • Install and configure Git for version control
  • Long/wide formatting with pedestrian footfall datasets (Heart of City)
  • Data manipulation exercises: filtering, groupby, merge operations
  • Work with messy pedestrian count data (intro to Assignment 1 dataset)
  • Imputation practice: mean/median/forward fill
  • Descriptive statistics and exploratory visualisations
  • Intro to folium for interactive web maps
  • Write your first Python module

Key skills: Data wrangling, distance calculations, spatial aggregation, imputation, exploratory analysis


Week 3: Advanced geospatial operations (16 March)

Lecture topics

Python skills

  • Vector and raster data visualisation with GeoPandas and matplotlib
  • Choropleths and classification (Jenks, quantiles, equal interval)
  • Interactive web mapping with folium
  • Spatial aggregation: counting points within polygons (SA2)
  • Spatial joins across geographic levels
  • Distance-based analysis: buffers, proximity calculations
  • CRS and transformations
  • Spatial indexing and performance

Urban analytics context

  • Introduction to pedestrian mobility
  • Introduction to urban morphology with momepy
  • Walkability indices and street connectivity
  • Census geography in NZ (SA1, SA2, SA3) and aggregation choices

Lab activities

  • Download SA2 boundaries for Auckland (Stats NZ)
  • Count sensors by SA2 and compute average footfall per SA2
  • Distance matrix between sensors and key destinations
  • Intro to momepy: basic morphometrics
  • Street connectivity metrics and relate to footfall
  • Choropleths with Jenks
  • Interactive folium maps with popups/tooltips

Key skills: Spatial joins, buffers, network analysis, momepy, choropleths


Week 4: Urban morphology and mid-term assessment (23 March)

Guest lecture: Shriv (Monday 23 March, 13:00-14:00) - Urban morphology using momepy: concepts and applications - Case studies of morphology and walkability analysis - Connecting morphology to pedestrian behaviour - Walkability frameworks with OSMnx

Test guide

  • Test preparation guidance

Lab - Assignment 1 work session and test preparation

Canvas test (27-29 March) - Practical Python coding assessment covering Weeks 1-4

Key skills: Morphology concepts, revision, coding under assessment conditions


Week 5: Functions and workflows (30 March)

Lecture topics

  • Writing effective functions and code organisation - important for Assignment 1 and 3
  • Functions for extremes (max/min) and grouped summaries
  • GitHub workflows and reproducibility

Lab activities

  • Reusable functions for blog analysis
  • Comparing years (pre/post COVID)
  • Refactoring and code review
  • Quarto structure and formatting
  • Final Assignment 1 work session

Assignment 1 due: 5 April Sunday 23:59


Easter and mid-semester break (3 April - 17 April 2026)

No classes. Classes resume Monday 20 April (Week 6).


Part 2: Deploying geospatial work online

Week 6: Introduction to WebGIS and Shiny (20 April)

Lecture topics

  • WebGIS fundamentals, Wasm overview
  • Shiny for Python
  • Interactive maps with ipyleaflet
  • Building your architecture: Ideation is key!

Guest lecture: Alex Raichev (14:15-15:00)

Lab activities

  • Announcement of Assignment 2
  • Build a first Shiny app locally
  • Reactive outputs (maps, plots, tables)
  • Controls (sliders, dropdowns)

Key skills: Reactive programming, Shiny fundamentals


Week 7: Dashboard work session (ANZAC week) (27 April)

ANZAC Day: Monday 27 April 2026

  • Watch Video of urban mobility OD flows.

No lecture. Labs run as normal.

Lab activities

  • Intensive dashboard development
  • One-on-one consultations, peer code review
  • OSM data workshop and network analysis support
  • Deployment preparation for shinylive

Week 8: Advanced dashboards, networks, and temporal analysis (4 May)

Lecture topics

  • Multi-page apps (ui.nav_panel())
  • shinylive deployment workflow
  • Temporal controls and animation patterns
  • Dashboard UX principles and performance

Lab activities

  • Final refinement, performance testing
  • Deployment troubleshooting
  • Submission preparation

Assignment 2 due: 10th May Sunday 23:59


Part 3: Publishing your first Python package

Week 9: Built environment and pedestrian policy (11 May)

Lecture topics

  • The built environment and walking: land-use mix, density, street design, and pedestrian infrastructure
  • Policy levers for pedestrian mobility: low-traffic neighbourhoods, shared spaces, speed management, pedestrianisation
  • International case studies: Superblocks (Barcelona), School Streets, 15-minute city (Paris)
  • Package structure and pyproject.toml, modular design, src layout

Lab activities

  • Scoping your package: what policy-relevant pedestrian analysis could your tool support?
  • uv init, package scaffolding, module organisation
  • Pair work on design architecture

Week 10: Pedestrian equity, safety, and testing geospatial code (18 May)

Lecture topics

  • Equity in pedestrian infrastructure provision: who benefits, who is underserved?
  • Pedestrian safety: collisions, exposure to air/noise pollution
  • Accessibility for diverse populations: older adults, children, disabled walkers
  • Writing and structuring tests for spatial functions

Lab activities

  • Write tests for geofencing, distances, OD aggregation
  • Build docs and tutorials
  • Final docs, demo notebook, poster finalisation
  • Poster finalisation

Week 11: CI/CD and pre-publication (25 May)

Lecture topics

  • Walkability policy and practice
  • GitHub Actions, pre-commit, semantic versioning
  • Build and publish to TestPyPI with uv
  • Licensing and release workflow
  • Poster design basics

Poster showcase: 26th May (B301-G10)


Week 12: Final publication and poster showcase prep (1 June)

King’s Birthday: Monday 1 June 2026

No lecture.

Lab activities.

  • Q&A
  • CI setup, uv build, TestPyPI publish and install testing
  • Publish to PyPI (if not already)

Assignment 3 due: 7 June Sunday 23:59


Course Policies

Open Science and Reproducibility

All code must be version controlled using Git from Week 1. Students are required to make their packages open source under an appropriate licence (MIT recommended). Dashboards and blog posts should be publicly accessible unless they contain sensitive data.

Code Quality Standards

Code submitted for Assignments 2 and 3 must: - Pass automated linting (ruff/black) - Include type hints for public functions (Assignment 3) - Have comprehensive docstrings - Follow PEP 8 style guidelines (https://peps.python.org/pep-0008/) - Be properly documented

Academic Integrity

Standard university academic integrity policies apply. All work must be your own. You may:

  • Discuss concepts and approaches with peers
  • Use AI assistants (GitHub Copilot, ChatGPT, Claude) for debugging and learning
  • Reference external code with proper attribution

You may not:

  • Copy code from peers or external sources without attribution
  • Submit work that you don’t understand
  • Share solution code before deadlines

Data Ethics

When working with urban data:

  • Respect individual privacy (avoid identifying individuals)
  • Consider impacts on communities represented in data
  • Acknowledge data sources and limitations
  • Be transparent about assumptions and uncertainties
  • Include ethical reflection in project documentation

Accessibility

Dashboards must consider accessibility:

  • Colourblind-safe palettes
  • Keyboard navigation
  • Clear labels and instructions
  • Responsive design

Late Submissions

  • Late submissions incur 10% penalty per day (including weekends)
  • Extensions available for documented circumstances (apply in advance)
  • Technical issues: contact instructor immediately, not after deadline

Use of AI Tools

AI tools are permitted for:

  • Debugging and error resolution
  • Learning new concepts
  • Documentation writing
  • Code suggestions and completion

However:

  • You must understand all code you submit
  • Your writing must be your own (if you have used AI in your work, do mention that)
  • Creative design and analytical approach must be your own
  • Over-reliance on AI without understanding is apparent and penalised

Weekly Time Expectations

Students should expect to spend approximately 10-12 hours per week:

  • Lecture: 2 hours
  • Lab: 2 hours
  • Independent work: 6-8 hours (readings, assignments, practise)

Peak workload weeks:

  • Week 5: Assignment 1 completion (12-15 hours)
  • Week 8: Assignment 2 completion (15-20 hours)
  • Week 11-12: Assignment 3 completion (20+ hours)

Learning Resources

Essential Documentation

  • GeoPandas: https://geopandas.org/
  • Shiny for Python: https://shiny.posit.co/py/
  • uv Documentation: https://docs.astral.sh/uv/
  • OSMnx: https://osmnx.readthedocs.io/
  • Quarto: https://quarto.org/
  • Python Packaging Guide: https://packaging.python.org/
  • pytest: https://docs.pytest.org/
  • MkDocs: https://www.mkdocs.org/

Data Sources

  • OpenStreetMap (via OSMnx or Overpass API)
  • Stats NZ (New Zealand census and geographic data)
  • Auckland Council open data portal
  • Urban Observatory platforms
  • Natural Earth (global datasets)

Example Projects

  • Awesome Geospatial: https://github.com/sacridini/Awesome-Geospatial
  • Python for Geographic Data Science course materials
  • PyPI urban analytics packages: momepy, urbanaccess, pandana

Technical Support and Troubleshooting

Getting Help

Before Asking:

  1. Check official documentation
  2. Search Stack Overflow and GitHub issues
  3. Review lecture materials and labs
  4. Try debugging with print statements or debugger

When Asking:

  1. Canvas Discussion Forum: General questions, peer support (response: 24-48 hours)
  2. Lab Sessions: Hands-on help from tutors and instructor
  3. Office Hours for Hyesop: Mondays 3-4pm (by appointment)
  4. Email: hyesop.shin@auckland.ac.nz (allow 48 hours for response)

For Technical Issues:

  • ITS Service Desk: Software installation problems
  • Course tutors: Python/GIS questions, project opinions
  • Instructor: Project-specific guidance, conceptual questions

Common Issues

uv Problems:

  • Update: uv self update
  • Clear cache: uv cache clean
  • Check Python version compatibility

Shiny Deployment:

  • Test locally first
  • Check file sizes (shinylive has limits)
  • Use relative paths, not absolute
  • Verify all dependencies

Testing Spatial Data:

  • Use appropriate geometric tolerances
  • Mock external data sources
  • Create small test fixtures
  • Test edge cases

PyPI Publication:

  • Test on TestPyPI first
  • Ensure unique package name
  • Complete all metadata in pyproject.toml
  • Verify README renders correctly

Technical Prerequisites Check

Before Week 1, ensure you can:


Contact Information

Instructor: Dr Hyesop Shin
Email: hyesop.shin@auckland.ac.nz
Office: Room 301-529B, Building 301
Office Hours: Mondays 3-4pm (book via email)

Course Materials: - Canvas: Main course hub for announcements, assignments, and resources - Webbook: https://dataandcrowd.github.io/python-gis/ - Discussion Forum: Ed Disucssion board

Getting Help: - During Lab Sessions: Ask tutors and instructor for immediate help - Canvas Discussion Forum: Post questions for peer and instructor support (24-48 hour response) - Office Hours: Mondays 3-5pm or email to arrange another time - Email: For personal matters or urgent issues (allow 48 hours for response)


Course Schedule Summary

Important Dates: - Easter/Mid-Semester Break: 3 April - 17 April 2026 (two weeks, no classes) - ANZAC Day: Monday 27 April 2026 (no lecture) - King’s Birthday: Monday 1 June 2026

Week Dates Topic Assessment
1 2 Mar Course intro, Python setup -
2 9 Mar Geospatial Python fundamentals -
3 16 Mar Advanced geospatial operations -
4 23 Mar Guest (1-2pm) + Walkability Canvas Test (27-28 Mar)
5 30 Mar Functions and workflows A1 Due (3 Apr)
- 3-17 Apr EASTER/MID-SEMESTER BREAK -
6 20 Apr WebGIS and Shiny intro (+ Guest) -
7 27 Apr NO LECTURE (ANZAC Day) - Labs only -
8 4 May Advanced dashboards and networks A2 Due (10 May)
9 11 May Package structure  built environment Pair work on design architecture
10 18 May Adding functions, data, and documentation  Pedestrian safety
11 25 May Walkability and Policy  Poster showcase -
12 1 June NO LECTURE (King’s Birthday) - Labs only Package submission due

Note on Assignment 2: Due date moved to 8 May (Thursday of Week 8) to account for ANZAC Day week having no lecture. Students get Week 7 labs to work on dashboards.

Note on Assignment 3 & Poster: Both due 7 June. Poster showcase event at separate venue (details to be announced).


Statement on Course Evolution

This syllabus reflects the current course plan. Minor adjustments may be made based on class progress, student needs, or external factors. Significant changes will be communicated via Canvas with adequate notice. Students will always be notified of any modifications to assessment requirements or due dates.

The integration of modern tools (uv, Positron, shinylive) represents the evolving landscape of geospatial Python. We embrace these changes to ensure students learn current best practices.


Last Updated: March 2026
Version: 3.0

This course emphasises practical skills for urban analytics research, planning, and policy support. The combination of spatial analysis, interactive visualisation, and software development prepares students for careers in academia, government, consulting, and technology sectors.