Skip to main content

Python client for discovering, filtering, and retrieving TERN EcoPlots observation and sample data

Project description

EcoPlots logo

EcoPlots Python Library

PyPI Python versions PyPI downloads Docs License GitHub EcoPlots Portal Changelog


Python client for discovering, filtering, and retrieving ecological field data from the TERN EcoPlots Portal. Pagination, streaming, and response normalisation are handled automatically — you get back a clean pandas.DataFrame, geopandas.GeoDataFrame, or GeoJSON (for observations) with no post-processing required.


Features

Data access

  • 🔬 Observations & Samples — Two purpose-built workflows covering ecological plot observations and physical material samples (soil, plant vouchers, tissue) from TERN's national monitoring network.
  • 🌐 Full API abstraction — Pagination, streaming, and response normalisation are handled automatically; you work with clean Python objects, not raw HTTP.
  • 📦 Analysis-ready outputs — Observations and samples return a geopandas.GeoDataFrame by default; also available as pandas.DataFrame or Parquet bytes. Observations can also be returned as GeoJSON.

Discovery & filtering

  • 🔎 Validated filters with fuzzy resolution — Mistyped or partial filter values are caught and corrected before any request is sent, with a ranked list of suggestions.
  • Preview before you download — Inspect the first page of results instantly to confirm your filters before committing to a full retrieval.
  • 🗺️ Interactive spatial selector — Draw a bounding polygon on a live map widget directly in Jupyter; the geometry is applied as a filter automatically.

Developer experience

  • 🧭 Sync and async clientsEcoPlots for scripts and notebooks; AsyncEcoPlots for async/ASGI services and concurrent I/O pipelines.
  • 💾 Reproducible projects — Save and reload the full discovery state as a .ecoproj file for shareable, version-controllable workflows.
  • 🖼️ Notebook widgets — Built-in IGSN viewer and sample image browser for interactive exploration without leaving the notebook.

📖 Full documentation: https://terndata-ecoplots.readthedocs.io/en/latest/


Installation

pip install terndata.ecoplots

The standard install includes the synchronous client, observations and samples workflows, discovery/filtering, data retrieval, attribute data retrieval, and Parquet output.

Optional modules:

pip install "terndata.ecoplots[async]"  # AsyncEcoPlots and async streaming transport
pip install "terndata.ecoplots[gui]"    # Jupyter/ipyleaflet/ipywidgets helpers

Supported Python: 3.10, 3.11, 3.12, 3.13
Core dependencies include geopandas, pandas, pyarrow, requests, rapidfuzz, and orjson. Async and GUI dependencies are installed only when their extras are requested.


Quick Start

Zero to data in three lines:

from terndata.ecoplots import EcoPlots

ec = EcoPlots()
ec.select(site_id="TCFTNS0002")
gdf = ec.get_data()          # → GeoDataFrame, ready for analysis

See Modes for full workflow examples, or jump to the demo notebooks.


Modes

Observations (default)

Retrieve ecological observation data — site visits, feature types, and measured properties — across Australia's TERN monitoring network.

from terndata.ecoplots import EcoPlots

ec = EcoPlots()                           # mode="observations" by default
ec.select(dataset="TERN Surveillance",
          site_id="TCFTNS0002")
ec.preview()                              # quick look (first page)
gdf = ec.get_data()                       # default → GeoDataFrame
df  = ec.get_data(dformat="pd")           # → pandas DataFrame
pq  = ec.get_data(dformat="pq")           # → Parquet bytes
gjson = ec.get_data(dformat="geojson")    # → GeoJSON (observations only)
ec.export_data("outputs/ecoplots.parquet") # retrieve and save directly
sites = ec.get_sites(include_region=True) # site region columns included
site_attrs = ec.get_site_attributes_data()

Samples

Retrieve physical specimens — soil pit samples, plant voucher specimens, plant tissue samples, and more — with access to IGSN identifiers and sample images.

from terndata.ecoplots import EcoPlots

ec = EcoPlots("samples")
ec.select(material_sample_type="Plant Voucher Specimen",
          has_image=True)
gdf = ec.get_data()                        # default → GeoDataFrame
pq = ec.get_data(dformat="pq")             # Parquet bytes
ec.export_data("outputs/samples.csv")      # retrieve and save directly
sites = ec.get_sites(include_region=True)  # enrich sites with region columns

Samples mode includes two dedicated notebook widgets:

Widget Method Description
IGSN viewer ec.view_sample_igsn() Browse International Geo Sample Numbers linked to retrieved specimens
Sample image viewer ec.view_sample_images() Preview photos associated with sample records inline in Jupyter

Note: In samples mode the TERN Ecosystem Surveillance dataset is applied automatically and cannot be removed.

Async client (AsyncEcoPlots)

For async/ASGI services or concurrent I/O pipelines, install the async extra and use AsyncEcoPlots — it has the same interface as EcoPlots with await-able retrieval methods. Both modes and all filters are supported.

from terndata.ecoplots import AsyncEcoPlots

ec = AsyncEcoPlots()
ec.select(site_id="TCFTNS0002")
gdf = await ec.get_data()        # non-blocking fetch

async for chunk in ec.get_data_stream(dformat="gpd"):
    ...

Interactive Widgets

Both modes provide notebook widgets for interactive data exploration:

Widget Mode Method
Spatial selector Both ec.select_spatial()
IGSN viewer Samples ec.view_sample_igsn()
Sample image viewer Samples ec.view_sample_images()

Demo Notebooks

Mode Notebook
Observations examples/demo.ipynb
Samples examples/demo_samples.ipynb

Links


Contributing

Contributions are welcome! Please open an issue first to discuss substantial changes before submitting a PR. For small bug fixes, a direct PR is fine.

Target branch: main

Development commands:

Task Command
Run tests make test
Lint make check-lint
Type check make check-types
Lint + types make check
Build docs make doc
Build wheel make build

All checks are also available via tox — see tox.ini for environment definitions.


Support


Citation

Terrestrial Ecosystem Research Network (2026). terndata.ecoplots: A Python package for accessing TERN EcoPlots data. https://pypi.org/project/terndata.ecoplots/

For citation metadata, see CITATION.cff. This cites the software tool itself; data accessed through EcoPlots may require separate dataset-specific citation and attribution.


License

Licensed under the terms in LICENSE.
Copyright © 2025-2026 TDSA (TERN Data Services and Analytics).
Author: Avinash Chandra

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

terndata_ecoplots-1.1.1.dev8.tar.gz (2.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

terndata_ecoplots-1.1.1.dev8-py3-none-any.whl (138.8 kB view details)

Uploaded Python 3

File details

Details for the file terndata_ecoplots-1.1.1.dev8.tar.gz.

File metadata

  • Download URL: terndata_ecoplots-1.1.1.dev8.tar.gz
  • Upload date:
  • Size: 2.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for terndata_ecoplots-1.1.1.dev8.tar.gz
Algorithm Hash digest
SHA256 2fcffa56d3dafb5f3d41db722243b86ac73e7c8e5a277f3768fe372af9b238a6
MD5 3e024829efe6d20cee63d8da120590b2
BLAKE2b-256 e3237eb67bc5d4878028cce93b394d020fbcad6ab7db1b39c66e0217f7127e97

See more details on using hashes here.

Provenance

The following attestation bundles were made for terndata_ecoplots-1.1.1.dev8.tar.gz:

Publisher: publish.yml on ternaustralia/terndata.ecoplots

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file terndata_ecoplots-1.1.1.dev8-py3-none-any.whl.

File metadata

File hashes

Hashes for terndata_ecoplots-1.1.1.dev8-py3-none-any.whl
Algorithm Hash digest
SHA256 4eec3afc48c7aa057787d7e0f38544409515de7ac2b5cdffab1127b2f375c39e
MD5 190f875d8e6388875c672ba637e295be
BLAKE2b-256 b10aef1996b508df7b1413de33967292ab45d95b76d6ad1db94894facb6847af

See more details on using hashes here.

Provenance

The following attestation bundles were made for terndata_ecoplots-1.1.1.dev8-py3-none-any.whl:

Publisher: publish.yml on ternaustralia/terndata.ecoplots

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page