Skip to main content

featrs/
lib.rs

1//! `featrs` — feature engineering for Rust, inspired by scikit-learn.
2//!
3//! Built on [Polars](https://pola.rs), all transformations operate on
4//! `DataFrame` and preserve column names throughout.
5//!
6//! # Quick start
7//!
8//! ```rust
9//! use featrs::prelude::*;
10//! use polars::prelude::{Column, DataFrame, NamedFrom, Series};
11//!
12//! let col = Column::from(Series::new("x".into(), &[1.0_f64, 2.0, 3.0]));
13//! let df = DataFrame::new(3, vec![col])?;
14//!
15//! let mut scaler = StandardScaler::new();
16//! scaler.fit(df.clone())?;
17//! let scaled = scaler.transform(df)?;
18//! assert_eq!(scaled.height(), 3);
19//! # Ok::<(), Box<dyn std::error::Error>>(())
20//! ```
21//!
22//! # Modules
23//!
24//! | Module | Description |
25//! |---|---|
26//! | [`prelude`] | Convenient glob-import of the most common types |
27//! | [`preprocessing`] | Scaling, encoding, normalization, imputation, binarization, polynomial features, feature hashing, auto-type detection |
28//! | [`pipeline`] | `Pipeline` (sequential) and `ColumnTransformer` (per-column transforms) |
29//! | [`feature_selection`] | `VarianceThreshold`, `SelectKBest` with ANOVA F-value scoring |
30//! | [`traits`] | Core `Fit`, `Transform`, `FitTransform` traits and error types |
31//! | [`time_series`] | Lag features, rolling windows, difference, cyclical encoding |
32
33#![forbid(unsafe_code)]
34#![warn(missing_docs)]
35// Production code must not `unwrap()`/`expect()` Polars results — route every
36// failure through `Error` instead. Tests are exempt.
37#![deny(clippy::unwrap_used, clippy::expect_used)]
38#![cfg_attr(test, allow(clippy::unwrap_used, clippy::expect_used))]
39
40pub mod feature_selection;
41pub mod pipeline;
42pub mod preprocessing;
43pub mod time_series;
44pub mod traits;
45pub mod util;
46
47/// Convenient glob import of the most common types.
48///
49/// ```rust
50/// use featrs::prelude::*;
51///
52/// let _scaler = StandardScaler::new();
53/// ```
54pub mod prelude {
55    pub use crate::feature_selection::SelectKBest;
56    pub use crate::feature_selection::VarianceThreshold;
57    pub use crate::feature_selection::select_kbest::FClassif;
58    pub use crate::pipeline::ColumnTransformer;
59    pub use crate::pipeline::DataFrameTransformer;
60    pub use crate::pipeline::Pipeline;
61    pub use crate::pipeline::column_transformer::Remainder;
62    pub use crate::preprocessing::auto_type::{AutoTypeDetector, ColumnType};
63    pub use crate::preprocessing::binarizer::Binarizer;
64    pub use crate::preprocessing::encoder::LabelEncoder;
65    pub use crate::preprocessing::encoder::OneHotEncoder;
66    pub use crate::preprocessing::encoder::OrdinalEncoder;
67    pub use crate::preprocessing::feature_hasher::FeatureHasher;
68    pub use crate::preprocessing::imputer::SimpleImputer;
69    pub use crate::preprocessing::imputer::Strategy;
70    pub use crate::preprocessing::missing_indicator::MissingIndicator;
71    pub use crate::preprocessing::normalizer::Norm;
72    pub use crate::preprocessing::normalizer::Normalizer;
73    pub use crate::preprocessing::polynomial_features::PolynomialFeatures;
74    pub use crate::preprocessing::polynomial_features::PolynomialFeaturesBuilder;
75    pub use crate::preprocessing::scaler::MinMaxScaler;
76    pub use crate::preprocessing::scaler::RobustScaler;
77    pub use crate::preprocessing::scaler::StandardScaler;
78    pub use crate::time_series::cyclical::CyclicalEncoder;
79    pub use crate::time_series::diff::Difference;
80    pub use crate::time_series::lag::Lagger;
81    pub use crate::time_series::rolling::RollingAggregator;
82    pub use crate::traits::{Error, Fit, FitSupervised, FitTransform, Result, Transform};
83}
84
85// --- Shallow re-exports at crate root ---
86// The canonical list lives in `prelude`; the root re-exports it so that
87// `featrs::StandardScaler` and `featrs::prelude::StandardScaler` both work.
88// Add new public types to `prelude` only.
89pub use crate::prelude::*;