BB.250 Dataset¶
Description¶
Target Soil Properties: SOC, pH, Clay
Groups of Features: DEM, ERa, Gamma, pH-ISE, RSS, VI
Sample size: 250
Number of Features: 17
Coordinates: With coordinates (EPSG: 25833)
Location: Brandenburg, Germany
Sampling Design: Triangular grid sampling
Study Area Size: 52 ha
Geological Setting: Pleistocene young morainic landscape of the Weichselian glaciation with predominantly glacial sand
Previous Data Publication: Target soil properties published but under embargo in Vogel et al. 2022
- Contact Information:
Sebastian Vogel (SVogel@atb-potsdam.de), Leibniz Institute for Agricultural Engineering and Bioeconomy (ATB)
Joerg Ruehlmann (ruehlmann@igzev.de), Leibniz Institute of Vegetable and Ornamental Crops (IGZ)
License: CC BY-SA 4.0
Publication/Modification Date (d/m/y): 28.02.25, version 1.0
- Changelog:
Version 1.0 (28.02.25): Initial release
Details¶
Dataset¶
The dataset contains the following target soil properties and features:
Target Soil Properties:¶
- SOC - Soil Organic Carbon
Code:
SOC_targetUnit: %
Protocol: Measured CO₂ release during dry combustion after removing inorganic carbon with an acid (DIN ISO 10694)
Sampling Date: May 2020
Sampling Depth: 0 - 30 cm
- pH
Code:
pH_targetUnit: Unitless
Protocol: Measured in CaCl₂ suspension with a glass electrode with a 5:1 liquid:soil volumetric ratio (DIN ISO 10390)
Sampling Date: May 2020
Sampling Depth: 0 - 30 cm
- Clay
Code:
Clay_targetUnit: %
Protocol: Sieve-Pipette method, measured through fractioning the soil into the sand fractions by sieving, and the silt and clay fractions by sedimentation in water, German adaptation (DIN ISO 11277)
Sampling Date: May 2020
Sampling Depth: 0 - 30 cm
Groups of Features:¶
- DEM – Digital Elevation Model and Terrain Parameters
Number of Features: 2
Code(s):
Altitude,SlopeUnit:
Altitudein m,Slopein °Sensing: Digital elevation model raster (5 m) based on LiDAR and photogrammetry from “GeoBasis-DE/LGB”
Processing: Calculating
Slopewithterrainfunction of the raster R-package, extracting DEM values from raster at soil sampling locationsSampling Date: LiDAR March 2009, images for photogrammetry May 2018
- ERa – Apparent Electrical Resistivity
Number of Features: 1
Code(s):
ERaUnit: Ω m
Sensing: Array of multiple rolling electrodes (Geophilus company, Caputh, Germany) on Geophilus platform with exploration depth of 0 - 25 cm, in-situ
Processing: Ordinary Kriging to align sensing- with soil sampling locations
Sampling Date: August 2021
- Gamma
Number of Features: 1
Code(s):
G_Total_CountsUnit: Unitless
Sensing: Passive gamma sensor (Passive gamma sensor model is not commercially available) on Geophilus platform, in-situ
Processing: Ordinary Kriging to align sensing- with soil sampling locations
Sampling Date: August 2021
- pH-ISE – Ion Selective Electrodes for pH Determination
Number of Features: 1
Code(s):
pH-ISEUnit: Unitless
Sensing: Soil pH Manager (VERIS Technologies, Salinas, USA) from VerisMSP3, in-situ
Processing: Ordinary Kriging to align sensing- with soil sampling locations
Sampling Date: August 2021
- RSS – Remote Sensing Derived Spectral Data
Number of Features: 10
Code(s):
B02,B03,B04,B05,B06,B07,B08,B8A,B11,B12Unit: Unitless
Sensing: Sentinel-2 bare soil image (Level-2A) from “Copernicus Open Access Hub”, with bands of 10 - 20 m spatial resolution
Processing: Extracting RSS values from raster at soil sampling locations
Sampling Date: April 2020
- VI - Vegetation Indices
Number of Features: 2
Code(s):
NDVI,GNDVIUnit: Unitless
Sensing: Sentinel-2 image during vegetative period (Level-2A) from “Copernicus Open Access Hub”
Processing: Calculating
NDVIas (B08 - B04) / (B08 + B04) andGNDVIas (B08 - B03) / (B08 + B03), extracting VI values from raster at soil sampling locationsSampling Date: August 2020
Examples¶
from LimeSoDa import load_dataset, split_dataset
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score, mean_squared_error
import numpy as np
# Load and explore the dataset
data = load_dataset("BB.250")
dataset = data["Dataset"]
folds = data["Folds"]
coords = data["Coordinates"]
# Split into train/test using fold 1
X_train, X_test, y_train, y_test = split_dataset(
data=data,
fold=1,
targets=["pH_target", "SOC_target", "Clay_target"]
)
# Fit model and get predictions
model = LinearRegression()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
# Calculate performance metrics
r2 = r2_score(y_test, predictions)
rmse = np.sqrt(mean_squared_error(y_test, predictions))
print(f"R-squared: {r2:.7f}")
print(f"RMSE: {rmse:.7f}")
References¶
Vogel S., Bönecke E., Kling C., Kramer E., Lück K., Nagel A., Philipp G., Rühlmann J., Schröter I. & Gebbers, R. (2022), Base neutralizing capacity from agricultural fields in the quaternary landscape of North-East Germany, BONARES Repository, https://doi.org/10.20387/bonares-zh3x-nd80