Skip to content

Repository files navigation

Python PyPI - Version GitHub License PyPI Downloads DOI

diive is currently being prepared for the v1.0 release.

Time series data processing

diive is a Python library for time series processing, focused on ecosystem data. It was originally developed by the ETH Grassland Sciences group for Swiss FluxNet: eddy covariance flux processing, gap-filling, quality control, and the plots that go with them.

There are three ways to use it, and you can pick whichever fits:

  • a libraryimport diive as dv, ten domain namespaces
  • a desktop GUIdiive-gui, for interactive work without writing code
  • command-line tools — batch time-lag detection for high-resolution eddy covariance data

Project overview | Examples | GUI manual | CHANGELOG | Releases


Install

Requires Python 3.12 or 3.13.

pip install diive                 # core library
pip install 'diive[gui]'          # + desktop GUI, then launch with: diive-gui
pip install 'diive[gui,gui3d]'    # + 3-D surface views (PyVista/VTK)
pip install 'diive[db]'           # + InfluxDB read/write

Working from a clone? CONTRIBUTING.md has the uv setup, including which optional pieces are extras (--extra) and which are dependency groups (--group).

Quick start

import diive as dv

df = dv.load_exampledata_parquet()   # bundled multi-year 30-min eddy covariance record

dv.plotting.TimeSeries(series=df['NEE_CUT_REF_f']).plot()
dv.plotting.HeatmapDateTime(series=df['NEE_CUT_REF_f']).plot()

Plots follow a two-phase pattern throughout: the constructor takes the data, .plot() takes the styling.

From here, the cookbook walks through six minimal workflows — load data, clean timestamps, remove outliers, gap-fill, run the flux chain, visualize.

What's in it

import diive as dv exposes ten domain namespaces. Each row links to runnable examples for that area:

Namespace Covers Examples
dv.plotting 18 plot types: time series, heatmaps, diel cycle, cumulative, ridgeline, scatter, hexbin, wind rose, tree ring, 3-D surface, ... visualization/
dv.gapfilling RandomForestTS, XGBoostTS, FluxMDS, linear interpolation, long-term variants, FeatureEngineer gapfilling/
dv.flux Flux processing chain (L2–L4.2), NEE partitioning, USTAR filtering, uncertainty, high-resolution EC flux/
dv.outliers Nine detection methods (Hampel, z-score variants, local SD, LOF, absolute limits, ...) outlier_detection/
dv.corrections Offset corrections (measurement, radiation, humidity, wind direction), thresholds, missing values corrections/
dv.qaqc FlagQCF quality flags, EddyPro flag handling, meteo screening qaqc/
dv.analysis Seasonal-trend decomposition, lagged correlation, grid aggregation, gap statistics, spectral analysis analysis/
dv.times Timestamp sanitization, frequency detection, resampling, date-range handling times/
dv.variables Derived variables (VPD, potential radiation, day/night flags, air properties), feature engineering features/
dv.events Time-stamped event markers, 0/1 flag columns, plot overlays events/

I/O helpers are top-level (dv.load_parquet, dv.save_parquet, dv.ReadFileType) — see io/. For the authoritative symbol list, check diive.__all__ and each namespace's __all__.

Highlights

Flux processing chain — post-processing from quality flags through gap-filling and NEE partitioning (Levels 2 to 4.2), following Swiss FluxNet standards. Either run_chain(data, config) for the standard workflow, or composable per-level callables when you need every detector, hyperparameter and diagnostic flag. → examples/flux/fluxprocessingchain/

NEE partitioning — four faithful ports of the reference routines, each validated against its original implementation: nighttime and daytime (Reichstein 2005, Lasslop 2010) × ONEFlux and REddyProc. Output columns are tagged so all four coexist in one dataframe. → examples/flux/partitioning/

Gap-filling — Random Forest and XGBoost with SHAP-based feature reduction, plus a faithful MDS port that needs no training. An 8-stage feature engineer feeds them all. → examples/gapfilling/

Desktop GUI — the same library code behind an interactive app: plotting, cleaning, gap-filling and flux tabs, a guided processing chain, per-variable metadata with full provenance, and portable .diive project folders. → GUI manual

Documentation

Where What
OVERVIEW.md How the pieces fit together: library, GUI, CLI, docs, packaging
examples/COOKBOOK.md Six minimal workflows — the place to start
examples/CATALOG.md All 124 examples, indexed by use case
examples/EXAMPLE_DATASET.md The bundled 37-variable dataset
diive/gui/MANUAL.md Desktop GUI user manual
diive/gui/README.md GUI architecture, for developers
notebooks/README.md Jupyter workflows, including the InfluxDB database
packaging/README.md Building the standalone Windows app
CONTRIBUTING.md Development setup, coding standards, testing
CHANGELOG.md Version history

Examples run as plain scripts:

uv run python examples/visualization/plot_heatmap_datetime_basic.py
uv run python examples/gapfilling/gapfill_randomforest.py
uv run python examples/flux/fluxprocessingchain/fluxprocessingchain_composable.py

Citation

Cite diive using DOI 10.5281/zenodo.10884017. This concept DOI resolves to the latest release, so include the version number in your citation.

@software{diive2026,
  author = {Hörtnagl, Lukas},
  title = {diive: Python library for time series processing},
  version = {0.91.0},
  year = {2026},
  doi = {10.5281/zenodo.10884017}
}

Replace version and year with the values for your target release.

License

diive is released under the GNU General Public License v3.0.