from soilspectfm.core import (SNV,
TakeDerivative,
ToAbsorbance,
Resample,
WaveletDenoise)
from sklearn.pipeline import Pipeline
SoilSpecTfm
Spectral Processing Tools for Soil Spectroscopy
By translating specialized soil spectroscopy methods into the scikit-learn
framework, SoilSpecTfm
and SoilSpecData
connect this niche domain with Python’s vast machine learning ecosystem, making advanced ML/DL tools accessible to soil scientists.
Implemented transforms developed so far include:
Baseline corrections:
Derivatives:
Smoothing:
Other transformations:
Key Features:
- Seamless integration with scikit-learn’s machine learning ecosystem
- Complement with SoilSpecData package for soil spectroscopy workflows
- Pipeline-ready transformers with consistent API
All transformers follow scikit-learn conventions:
- Implement fit/transform interface
- Support get_params/set_params for GridSearchCV
- Provide detailed documentation and examples
Installation
pip install soilspectfm
Quick Start
Loading OSSL dataset
Let’s use OSSL dataset as an example using SoilSpecData package.
from soilspecdata.datasets.ossl import get_ossl
= get_ossl()
ossl = ossl.get_mir() mir_data
Preprocessing pipeline
Transforms are fully compatible with scikit-learn and can be used in a pipeline as follows:
= Pipeline([
pipe 'snv', SNV()), # Standard Normal Variate transformation
('denoise', WaveletDenoise()), # Wavelet denoising
('deriv', TakeDerivative(window_length=11, polyorder=2, deriv=1)) # First derivative
(
])
= pipe.fit_transform(mir_data.spectra) X_tfm
Quick visualization
from soilspectfm.visualization import plot_spectra
from matplotlib import pyplot as plt
= plt.subplots(2, 1, figsize=(15, 7))
fig, (ax1, ax2)
= plot_spectra(
ax1
mir_data.spectra,
mir_data.wavenumbers,=ax1,
ax=False,
ascending='black',
color=0.6,
alpha=0.5,
lw='Wavenumber (cm$^{-1}$)',
xlabel='Raw Spectra'
title
)
= plot_spectra(
ax2
X_tfm,
mir_data.wavenumbers,=ax2,
ax=False,
ascending='steelblue',
color=0.6,
alpha=0.5,
lw='Wavenumber (cm$^{-1}$)',
xlabel='SNV + Derivative (1st order) Transformed Spectra'
title
)
plt.tight_layout()
Dependencies
- fastcore
- numpy
- scipy
- scikit-learn
- matplotlib
Further references
- https://orange-spectroscopy.readthedocs.io/en/latest/widgets/preprocess-spectra.html
Contributing
Developer guide
If you are new to using nbdev
here are some useful pointers to get you started.
Install spectfm in Development mode:
# make sure spectfm package is installed in development mode
$ pip install -e .
# make changes under nbs/ directory
# ...
# compile to have changes apply to spectfm
$ nbdev_prepare
License
This project is licensed under the Apache2 License - see the LICENSE file for details.
Support
For questions and support, please open an issue on GitHub.