Package to prepare well log data for ML projects.
Project description
akerbp.mlpet
Preprocessing tools for Petrophysics ML projects at Eureka
Installation
Install the package by running the following (requires Python 3.9 or later)
pip install akerbp-mlpet
Quick start
For a short example of how to use the mlpet Dataset class for pre-processing data see below. Please refer to the tests folder of this repository for more examples as well as some examples of the settings.yaml file:
import os
from akerbp.mlpet import Dataset
from akerbp.mlpet import utilities
# Instantiate an empty dataset object using the example settings and mappings provided
ds = Dataset(
settings=os.path.abspath("settings.yaml"), # Absolute file paths are required
folder_path=os.path.abspath(r"./"), # Absolute file paths are required
)
# Populate the dataset with data from a file (support for multiple file formats and direct cdf data collection exists)
ds.load_from_pickle(r"data.pkl") # Absolute file paths are preferred
# The original data will be kept in ds.df_original and will remain unchanged
print(ds.df_original.head())
# Split the data into train-validation sets
df_train, df_test = utilities.train_test_split(
df=ds.df_original,
target_column=ds.label_column,
id_column=ds.id_column,
test_size=0.3,
)
# Preprocess the data for training according to default workflow
# print(ds.default_preprocessing_workflow) <- Uncomment to see what the workflow does
df_preprocessed = ds.preprocess(df_train)
The procedure will be exactly the same for any other dataset class. The only difference will be in the "settings". For a full list of possible settings keys see either the built documentation or the akerbp.mlpet.Dataset class docstring. Make sure that the curve names are consistent with those in the dataset.
The loaded data is NOT mapped at load time but rather at preprocessing time (i.e. when preprocess is called).
Recommended workflow for preprocessing
Due to the operations performed by certain preprocessing methods in akerbp.mlpet, the order in which the different preprocessing steps can sometimes be important for achieving the desired results. Below is a simple guide that should be followed for most use cases:
- Misrepresented missing data should always be handled first (using
set_as_nan) - This should then be followed by data cleaning methods (e.g.
remove_outliers,remove_noise,remove_small_negative_values) - Depending on your use case, once the data is clean you can then impute missing values (see
imputers.py). Note however that some features depend on the presence of missing values to provide better estimates (e.g.calculate_VSH) - Add new features (using methods from
feature_engineering.py) or usingprocess_wellsfrompreprocessors.pyif the features should be well specific. - Fill missing values if any still exist or were created during step 4. (using
fillna_with_fillers) - Scale whichever features you want (using
scale_curvesfrompreprocessors.py). In some use cases this step could also come before step 5. - Encode the GROUP & FORMATION column if you want to use it for training. (using
encode_columnsfrompreprocessors.py) - Select or drop the specific features you want to keep for model training. (using
select_columnsordrop_columnsfrompreprocessors.py)
NOTE: The dataset class drops all input columns that are not explicitly named in your settings.yaml or settings dictionary passed to the Dataset class at instantiation. This is to ensure that the data is not polluted with features that are not used. Therefore, if you have features that are being loaded into the Dataset class but are not being preprocessed, these need to be explicitly defined in your settings.yaml or settings dictionary under the keyword argument
keep_columns.
API Documentation
Full API documentation of the package can be found under the docs folder once you have run the make html command.
For developers
This repository uses uv for dependency management.
-
create or update the local environment with all optional groups:
uv sync --all-groups -
run checks in the
uvenvironment:uv run pytest uv run ruff check . uv run ruff format . uv run mypy --config-file pyproject.toml -
to make the API documentation, from the root directory of the project run:
cd docs/ uv run make html -
requirements.txtis generated from the lockfile; update it with:uv export --all-groups --no-hashes --no-editable --no-annotate --format requirements-txt --output-file requirements.txt -
to install
mlpetin editable mode in another environment, use:uv pip install -e /path/to/expres-ml-mlpet # or: pip install -e .
License
akerbp.mlpet Copyright 2021 AkerBP ASA
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
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 akerbp_mlpet-6.0.3.tar.gz.
File metadata
- Download URL: akerbp_mlpet-6.0.3.tar.gz
- Upload date:
- Size: 60.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3498e87fe865ec2b824535ba7b2f6d0cab8bdc7b5874f1e5262dedfc932adcea
|
|
| MD5 |
8d1a391f782cf182b5be32c640d846ce
|
|
| BLAKE2b-256 |
4e9d942a7c25f875febfa2b22f140fb6defa30290c6805a079e7bddabff750ee
|
File details
Details for the file akerbp_mlpet-6.0.3-py3-none-any.whl.
File metadata
- Download URL: akerbp_mlpet-6.0.3-py3-none-any.whl
- Upload date:
- Size: 67.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
af13ddabe5aec289672a04fc7d1fc28d1c88d39c52715263c1fbff02f63c4547
|
|
| MD5 |
5800592ee9e9fea9ce99efbc39ae9881
|
|
| BLAKE2b-256 |
96bd796776ea1c1ebe3e38abb1c842ba95f38eee232e7610de1f38e4d6b3cb97
|