Access and visualize groundwater-status predictions for monitoring wells in Greece.
Project description
WellsWatch
WellsWatch is a lightweight Python library for retrieving published groundwater-status predictions from Zenodo and visualizing red and non-red monitoring wells across Greece.
It is designed for researchers, water-resource managers, hydrogeologists, and other users who need a simple and reproducible way to access and map the national groundwater prediction dataset.
WellsWatch does not train a machine-learning model or generate new predictions. It retrieves and visualizes predictions that have already been published on Zenodo.
Why WellsWatch?
Groundwater observations and model outputs are often distributed across multiple files and monitoring locations. WellsWatch provides a simple Python interface that:
- downloads the requested prediction file directly from Zenodo;
- validates the expected data structure;
- extracts the prediction date from the filename;
- distinguishes
redandnon_redmonitoring wells; - creates a national map of Greece;
- saves the generated map as a high-resolution image when requested.
The main workflow requires only two lines of Python:
from wellswatch import show_map
show_map(2025)
Example maps and hydroclimatic context
The two maps below illustrate groundwater-status predictions under contrasting hydroclimatic conditions.
1 August 2015 — wet year
The year 2015 was a comparatively wet year within the 2013–2025 series. The map shows a larger proportion of non-red wells than in the recent dry years, although red-state conditions were still predicted at many monitoring stations.
from wellswatch import show_map
show_map(2015)
1 August 2025 — dry year
The year 2025 was a comparatively dry year, following the very dry conditions observed in 2024. The map is dominated by red wells, indicating widespread deeper-than-normal groundwater conditions relative to the historical reference used by the classifier.
from wellswatch import show_map
show_map(2025)
In both maps:
- Red wells represent monitoring stations classified as being in a red groundwater state.
- Non-red wells represent monitoring stations not classified as red.
- WellsWatch uses the published class label directly and does not recalculate the classification from the probability column.
Predictions from 2013 onward and annual precipitation
The figure below summarizes the annual percentages of wells predicted as red and non-red from 2013 onward, together with mean annual precipitation and its standard error of the mean (SEM).
Across the series, wetter years generally show a larger percentage of non-red wells, whereas drier years tend to show a larger percentage of red wells. The contrast is particularly clear between wet 2015 and dry 2025. This figure provides a descriptive comparison of groundwater-status predictions and precipitation; it should not, by itself, be interpreted as evidence of a causal relationship.
Installation
After publication on PyPI:
pip install wellswatch
For local development from the GitHub repository:
git clone https://github.com/Mil-afk/wellswatch.git
cd wellswatch
python -m venv .venv
Activate the virtual environment on Windows:
.\.venv\Scripts\Activate.ps1
Install the package in editable mode:
python -m pip install -e ".[dev]"
Quick start
Display a map
from wellswatch import show_map
show_map(2025)
The current Zenodo record contains prediction files for 1 August of each year from 2013 to 2025. WellsWatch is designed to provide maps for all available years from 2013 onward, as new annual prediction files are added to the Zenodo record. Therefore:
show_map(2025)
is equivalent to:
show_map(2025, month=8, day=1)
Save a map
from wellswatch import show_map
show_map(
2025,
save_path="wellswatch_2025.png",
)
Change marker size
from wellswatch import show_map
show_map(
2025,
marker_size=20,
)
Load prediction data without plotting
from wellswatch import load_prediction_from_zenodo
data = load_prediction_from_zenodo(2025)
print(data.head())
print(data["realtime_pred_class_name"].value_counts())
Inspect the available Zenodo files
from wellswatch import list_zenodo_files
for filename in list_zenodo_files():
print(filename)
Read a local prediction file
from wellswatch import load_prediction_file
data = load_prediction_file(
"13_pred_2025_08_01_with_predictions_01.xlsx"
)
Returned data
load_prediction_from_zenodo() and load_prediction_file() return a pandas DataFrame.
The prediction files contain the following columns:
| Column | Description |
|---|---|
row_id |
Row identifier |
station_code |
Groundwater monitoring-station code |
lon |
Longitude in decimal degrees |
lat |
Latitude in decimal degrees |
realtime_pred_class_name |
Published class label: red or non_red |
realtime_pred_red_probability |
Predicted probability of red-state classification |
WellsWatch adds:
| Column | Description |
|---|---|
prediction_date |
Date extracted automatically from the filename |
The returned DataFrame also includes source metadata in data.attrs:
print(data.attrs)
Example:
{
"source": "Zenodo",
"zenodo_record_id": "20427364",
"source_filename": "13_pred_2025_08_01_with_predictions_01.xlsx"
}
Main API
| Function | Purpose |
|---|---|
show_map() |
Download predictions from Zenodo and display or save the map |
load_prediction_from_zenodo() |
Retrieve a prediction file directly from Zenodo |
load_prediction_file() |
Read a local Excel or CSV prediction file |
list_zenodo_files() |
List files available in the Zenodo record |
plot_wells() |
Plot an existing prediction DataFrame |
predictions_to_geodataframe() |
Convert prediction data to a GeoDataFrame |
extract_prediction_date() |
Extract the prediction date from a filename |
validate_predictions() |
Validate required columns and values |
Data source
The groundwater-status predictions are distributed through the following open Zenodo dataset:
Tziritis, E., Iatrou, M., Drougas, C., Tasoglou, S., & Arampatzis, G. (2026). Hydrogeological controls on seasonal groundwater level dynamics across Greece: a national-scale assessment integrating monitoring data, earth observation, and machine learning (2013–2022) [Data set]. Zenodo.
The dataset is licensed under the Creative Commons Attribution 4.0 International License (CC BY 4.0).
Project structure
wellswatch/
├── docs/
│ ├── red_nonred_precipitation_2013_2025.png
│ ├── wellswatch_2015.png
│ └── wellswatch_2025.png
├── src/
│ └── wellswatch/
│ ├── __init__.py
│ ├── mapping.py
│ └── zenodo.py
├── tests/
├── LICENSE
├── README.md
└── pyproject.toml
Authors
- Evangelos Tziritis
- Miltiadis Iatrou
- Christos Drougas
- Spyridon Tasoglou
- George Arampatzis
Maintainer: Miltiadis Iatrou
Citation
When using the groundwater prediction data, cite the Zenodo dataset:
Tziritis, E., Iatrou, M., Drougas, C., Tasoglou, S., & Arampatzis, G.
(2026). Hydrogeological controls on seasonal groundwater level dynamics
across Greece: a national-scale assessment integrating monitoring data,
earth observation, and machine learning (2013–2022) [Data set]. Zenodo.
https://doi.org/10.5281/zenodo.20427364
When referring specifically to the software, also cite the WellsWatch GitHub repository:
WellsWatch, version 0.1.0.
https://github.com/Mil-afk/wellswatch
Licenses
- The WellsWatch source code is distributed under the MIT License.
- The Zenodo prediction dataset is distributed under the CC BY 4.0 License.
Acknowledgement
WellsWatch uses publicly archived prediction files from Zenodo and country-boundary data from Natural Earth for map visualization.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file wellswatch-0.1.0.tar.gz.
File metadata
- Download URL: wellswatch-0.1.0.tar.gz
- Upload date:
- Size: 13.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
62a8b20e8f47b978ea3871f97a855d7a418e2f7356bfeda8fcc137ad417e55d2
|
|
| MD5 |
1e8d5138255d2adb4b2b51269ea30c0f
|
|
| BLAKE2b-256 |
fbf23edd3724ceeaf6abbd64dbcb2253e9978eee1b4e8f9c9b9fa897b8da83b1
|
Provenance
The following attestation bundles were made for wellswatch-0.1.0.tar.gz:
Publisher:
publish.yml on Mil-afk/wellswatch
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wellswatch-0.1.0.tar.gz -
Subject digest:
62a8b20e8f47b978ea3871f97a855d7a418e2f7356bfeda8fcc137ad417e55d2 - Sigstore transparency entry: 1823096792
- Sigstore integration time:
-
Permalink:
Mil-afk/wellswatch@67efbdb91d5b0e75ab324f607642e105a1f3e821 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Mil-afk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@67efbdb91d5b0e75ab324f607642e105a1f3e821 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file wellswatch-0.1.0-py3-none-any.whl.
File metadata
- Download URL: wellswatch-0.1.0-py3-none-any.whl
- Upload date:
- Size: 10.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3bafc143a041e2990af9d4ac655e80b35f0b3f188b6c8d1ba3d7946fc1d5ea2e
|
|
| MD5 |
4d6ea61456f2cf92ae8ba95714cb2980
|
|
| BLAKE2b-256 |
53dae5924a10787ef0e3685345aa7ab0c7d0c2ce4861833825f76908b7ad0df5
|
Provenance
The following attestation bundles were made for wellswatch-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on Mil-afk/wellswatch
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wellswatch-0.1.0-py3-none-any.whl -
Subject digest:
3bafc143a041e2990af9d4ac655e80b35f0b3f188b6c8d1ba3d7946fc1d5ea2e - Sigstore transparency entry: 1823096864
- Sigstore integration time:
-
Permalink:
Mil-afk/wellswatch@67efbdb91d5b0e75ab324f607642e105a1f3e821 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Mil-afk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@67efbdb91d5b0e75ab324f607642e105a1f3e821 -
Trigger Event:
workflow_dispatch
-
Statement type: