Release history#

Release 0.4.1#

Changes#

Bug fixes#

  • Generating a TableReport could have an effect on the matplotib configuration which could cause plots not to display inline in jupyter notebooks any more. This has been fixed in skrub in #1172 by Jérôme Dockès and the matplotlib issue can be tracked here.

  • The labels on bar plots in the TableReport for columns of object dtypes that have a repr spanning multiple lines could be unreadable. This has been fixed in #1196 by Jérôme Dockès.

  • Improve the performance of deduplicate() by removing some unnecessary computations. #1193 by Jérôme Dockès.

Maintenance#

Release 0.4.0#

Highlights#

  • The TextEncoder can extract embeddings from a string column with a deep learning language model (possibly downloaded from the HuggingFace Hub).

  • Several improvements to the TableReport such as better support for other scripts than the latin alphabet in the bar plot labels, smaller report sizes, clipping the outliers to better see the details of distributions in histograms. See the full changelog for details.

  • The TableVectorizer can now drop columns that contain a fraction of null values above a user-chosen threshold.

New features#

Major changes#

Minor changes#

  • The column filter selection dropdown in the tablereport is smaller and its label has been removed to save space. #1107 by Jérôme Dockès.

  • The TableReport now uses the font size of its parent element when inserted into another page. This makes it smaller in pages that use a smaller font size than the browser default such as VSCode in some configurations. It also makes it easier to control its size when inserting it in a web page by setting the font size of its parent element. A few other small adjustments have also been made to make it a bit more compact. #1098 by Jérôme Dockès.

  • Display of labels in the plots of the TableReport, especially for other scripts than the latin alphabet, has improved.

    • before, some characters could be missing and replaced by empty boxes.

    • before, when the text is truncated, the ellipsis “…” could appear on the wrong side for right-to-left scripts.

    Moreover, when the text contains line breaks it now appears all on one line. Note this only affects the labels in the plots; the rest of the report did not have these problems. #1097 by Jérôme Dockès and #1138 by Jérôme Dockès.

  • In the TableReport it is now possible, before clicking any of the cells, to reach the dataframe sample table and activate a cell with tab key navigation. #1101 by Jérôme Dockès.

  • The “Column name” column of the “summary statistics” table in the TableReport is now always visible when scrolling the table. #1102 by Jérôme Dockès.

  • Added parameter drop_null_fraction to TableVectorizer to drop columns based on whether they contain a fraction of nulls larger than the given threshold. #1115 and #1149 by Riccardo Cappuzzo.

  • The TableReport now provides more helpful output for columns of dtype TimeDelta / Duration. #1152 by Jérôme Dockès.

  • The TableReport now also reports the number of unique values for numeric columns. #1154 by Jérôme Dockès.

  • The TableReport, when plotting histograms, now detects outliers and clips the range of data shown in the histogram. This allows seeing more detail in the shown distribution. #1157 by Jérôme Dockès.

Bug fixes#

  • The TableReport could raise an exception when one of the columns contained datetimes with time zones and missing values; this has been fixed in #1114 by Jérôme Dockès.

  • In scikit-learn versions older than 1.4 the TableVectorizer could fail on polars dataframes when used with the default parameters. This has been fixed in #1122 by Jérôme Dockès.

  • The TableReport would raise an exception when the input (pandas) dataframe contained several columns with the same name. This has been fixed in #1125 by Jérôme Dockès.

  • The TableReport would raise an exception when a column contained infinite values. This has been fixed in #1150 by Jérôme Dockès and #1151 by Jérôme Dockès.

Release 0.3.1#

Minor changes#

  • For tree-based models, tabular_learner() now adds handle_unknown=’use_encoded_value’ to the OrdinalEncoder, to avoid errors with new categories in the test set. This is consistent with the setting of OneHotEncoder used by default in the TableVectorizer. #1078 by Gaël Varoquaux

  • The reports created by TableReport, when inserted in an html page (or displayed in a notebook), now use the same font as the surrounding page. #1038 by Jérôme Dockès.

  • The content of the dataframe corresponding to the currently selected table cell in the TableReport can be copied without actually selecting the text (as in a spreadsheet). #1048 by Jérôme Dockès.

  • The selection of content displayed in the TableReport’s copy-paste boxes has been removed. Now they always display the value of the selected item. When copied, the repr of the selected item is copied to the clipboard. #1058 by Jérôme Dockès.

  • A “stats” panel has been added to the TableReport, showing summary statistics for all columns (number of missing values, mean, etc. – similar to pandas.info() ) in a table. It can be sorted by each column. #1056 and #1068 by Jérôme Dockès.

  • The credit fraud dataset is now available with the fetch_credit_fraud function(). #1053 by Vincent Maladiere.

  • Added zero padding for column names in MinHashEncoder to improve column ordering consistency. #1069 by Shreekant Nandiyawar.

  • The selection in the TableReport’s sample table can now be manipulated with the keyboard. #1065 by Jérôme Dockès.

  • The TableReport now displays the pandas (multi-)index, and has a better display & interaction of pandas columns when the columns are a MultiIndex. #1083 by Jérôme Dockès.

  • It is possible to control the number of rows displayed by the TableReport in the “sample” tab panel by specifying n_rows. #1083 by Jérôme Dockès.

  • the TableReport used to raise an exception when the dataframe contained unhashable types such as python lists. This has been fixed in #1087 by Jérôme Dockès.

  • Display’s columns name with the HTML representation of the fitted TableVectorizer. This has been fixed in #1093 by Shreekant Nandiyawar.

  • AggTarget will now work even when y is a Series and not raise any error. This has been fixed in #1094 by Shreekant Nandiyawar.

Release 0.3.0#

Highlights#

  • Polars dataframes are now supported across all skrub estimators.

  • TableReport generates an interactive report for a dataframe. This page regroups some precomputed examples.

Major changes#

  • The InterpolationJoiner now supports polars dataframes. #1016 by Théo Jolivet.

  • The TableReport provides an interactive report on a dataframe’s contents: an overview, summary statistics and plots, statistical associations between columns. It can be displayed in a jupyter notebook, a browser tab or saved as a static HTML page. #984 by Jérôme Dockès.

Minor changes#

  • Joiner and fuzzy_join() used to raise an error when columns with the same name appeared in the main and auxiliary table (after adding the suffix). This is now allowed and a random string is inserted in the duplicate column to ensure all names are unique. #1014 by Jérôme Dockès.

  • AggJoiner and AggTarget could produce outputs whose column names varied across calls to transform in some cases in the presence of duplicate column names, now the output names are always the same. #1013 by Jérôme Dockès.

  • In some cases AggJoiner and AggTarget inserted a column in the output named “index” containing the pandas index of the auxiliary table. This has been corrected. #1020 by Jérôme Dockès.

Release 0.2.0#

Major changes#

  • The Joiner has been adapted to support polars dataframes. #945 by Théo Jolivet.

  • The TableVectorizer now consistently applies the same transformation across different calls to transform. There also have been some breaking changes to its functionality: (i) all transformations are now applied independently to each column, i.e. it does not perform multivariate transformations (ii) in specific_transformers the same column may not be used twice (go through 2 different transformers). #902 by Jérôme Dockès.

  • Some parameters of TableVectorizer have been renamed: high_cardinality_transformerhigh_cardinality, low_cardinality_transformerlow_cardinality, datetime_transformerdatetime, numeric_transformernumeric. #947 by Jérôme Dockès.

  • The GapEncoder and MinHashEncoder are now a single-column transformers: their fit, fit_transform and transform methods accept a single column (a pandas or polars Series). Dataframes and numpy arrays are not accepted. #920 and #923 by Jérôme Dockès.

  • Added the MultiAggJoiner that allows to augment a main table with multiple auxiliary tables. #876 by Théo Jolivet.

  • AggJoiner now only accepts a single table as an input, and some of its parameters were renamed to be consistent with the MultiAggJoiner. It now has a key` parameter that allows to join main and auxiliary tables that share the same column names. #876 by Théo Jolivet.

  • tabular_learner() has been added to easily create a supervised learner that works well on tabular data. #926 by Jérôme Dockès.

Minor changes#

skrub release 0.1.1#

This is a bugfix release to adapt to the most recent versions of pandas (2.2) and scikit-learn (1.5). There are no major changes to the functionality of skrub.

skrub release 0.1.0#

Major changes#

Minor changes#

  • Dataset fetcher datasets.fetch_employee_salaries() now has a parameter overload_job_titles to allow overloading the job titles (employee_position_title) with the column underfilled_job_title, which provides some more information about the job title. #581 by Lilian Boulard

  • Fix bugs which was triggered when extract_until was “year”, “month”, “microseconds” or “nanoseconds”, and add the option to set it to None to only extract total_time, the time from epoch. DatetimeEncoder. #743 by Leo Grinsztajn

Before skrub: dirty_cat#

Skrub was born from the dirty_cat package.

Dirty-cat release 0.4.1#

Major changes#

Minor changes#

  • Improvement of date column detection and date format inference in TableVectorizer. The format inference now tries to find a format which works for all non-missing values of the column, and only tries pandas default inference if it fails. #543 by Leo Grinsztajn #587 by Leo Grinsztajn

Dirty-cat Release 0.4.0#

Major changes#

  • SuperVectorizer is renamed as TableVectorizer, a warning is raised when using the old name. #484 by Jovan Stojanovic

  • New experimental feature: joining tables using fuzzy_join() by approximate key matching. Matches are based on string similarities and the nearest neighbors matches are found for each category. #291 by Jovan Stojanovic and Leo Grinsztajn

  • New experimental feature: FeatureAugmenter, a transformer that augments with fuzzy_join() the number of features in a main table by using information from auxiliary tables. #409 by Jovan Stojanovic

  • Unnecessary API has been made private: everything (files, functions, classes) starting with an underscore shouldn’t be imported in your code. #331 by Lilian Boulard

  • The MinHashEncoder now supports a n_jobs parameter to parallelize the hashes computation. #267 by Leo Grinsztajn and Lilian Boulard.

  • New experimental feature: deduplicating misspelled categories using deduplicate() by clustering string distances. This function works best when there are significantly more duplicates than underlying categories. #339 by Moritz Boos.

Minor changes#

  • Add example Wikipedia embeddings to enrich the data. #487 by Jovan Stojanovic

  • datasets.fetching: contains a new function get_ken_embeddings() that can be used to download Wikipedia embeddings and filter them by type.

  • datasets.fetching: contains a new function fetch_world_bank_indicator() that can be used to download indicators from the World Bank Open Data platform. #291 by Jovan Stojanovic

  • Removed example Fitting scalable, non-linear models on data with dirty categories. #386 by Jovan Stojanovic

  • MinHashEncoder’s minhash() method is no longer public. #379 by Jovan Stojanovic

  • Fetching functions now have an additional argument directory, which can be used to specify where to save and load from datasets. #432 by Lilian Boulard

  • Fetching functions now have an additional argument directory, which can be used to specify where to save and load from datasets. #432 and #453 by Lilian Boulard

  • The TableVectorizer’s default OneHotEncoder for low cardinality categorical variables now defaults to handle_unknown=”ignore” instead of handle_unknown=”error” (for sklearn >= 1.0.0). This means that categories seen only at test time will be encoded by a vector of zeroes instead of raising an error. #473 by Leo Grinsztajn

Bug fixes#

Dirty-cat Release 0.3.0#

Major changes#

  • New encoder: DatetimeEncoder can transform a datetime column into several numerical columns (year, month, day, hour, minute, second, …). It is now the default transformer used in the TableVectorizer for datetime columns. #239 by Leo Grinsztajn

  • The TableVectorizer has seen some major improvements and bug fixes:

    • Fixes the automatic casting logic in transform.

    • To avoid dimensionality explosion when a feature has two unique values, the default encoder (OneHotEncoder) now drops one of the two vectors (see parameter drop=”if_binary”).

    • fit_transform and transform can now return unencoded features, like the ColumnTransformer’s behavior. Previously, a RuntimeError was raised.

    #300 by Lilian Boulard

  • Backward-incompatible change in the TableVectorizer: To apply remainder to features (with the *_transformer parameters), the value 'remainder' must be passed, instead of None in previous versions. None now indicates that we want to use the default transformer. #303 by Lilian Boulard

  • Support for Python 3.6 and 3.7 has been dropped. Python >= 3.8 is now required. #289 by Lilian Boulard

  • Bumped minimum dependencies:

  • Dropped support for Jaro, Jaro-Winkler and Levenshtein distances.

Notes#

Dirty-cat Release 0.2.2#

Bug fixes#

Dirty-cat Release 0.2.1#

Major changes#

Bug-fixes#

Notes#

Dirty-cat Release 0.2.0#

Also see pre-release 0.2.0a1 below for additional changes.

Major changes#

  • Bump minimum dependencies:

  • datasets.fetching - backward-incompatible changes to the example datasets fetchers:

    • The backend has changed: we now exclusively fetch the datasets from OpenML. End users should not see any difference regarding this.

    • The frontend, however, changed a little: the fetching functions stay the same but their return values were modified in favor of a more Pythonic interface. Refer to the docstrings of functions dirty_cat.datasets.fetch_* for more information.

    • The example notebooks were updated to reflect these changes. #155 by Lilian Boulard

  • Backward incompatible change to MinHashEncoder: The MinHashEncoder now only supports two dimensional inputs of shape (N_samples, 1). #185 by Lilian Boulard and Alexis Cvetkov.

  • Update handle_missing parameters:

    • GapEncoder: the default value “zero_impute” becomes “empty_impute” (see doc).

    • MinHashEncoder: the default value “” becomes “zero_impute” (see doc).

    #210 by Alexis Cvetkov.

  • Add a method “get_feature_names_out” for the GapEncoder and the TableVectorizer, since get_feature_names will be depreciated in scikit-learn 1.2. #216 by Alexis Cvetkov

Notes#

  • Removed hard-coded CSV file dirty_cat/data/FiveThirtyEight_Midwest_Survey.csv.

  • Improvements to the TableVectorizer

    • Missing values are not systematically imputed anymore

    • Type casting and per-column imputation are now learnt during fitting

    • Several bugfixes

    #201 by Lilian Boulard

Dirty-cat Release 0.2.0a1#

Version 0.2.0a1 is a pre-release. To try it, you have to install it manually using:

pip install --pre dirty_cat==0.2.0a1

or from the GitHub repository:

pip install git+https://github.com/dirty-cat/dirty_cat.git

Major changes#

  • Bump minimum dependencies:

    • Python (>= 3.6)

    • NumPy (>= 1.16)

    • SciPy (>= 1.2)

    • scikit-learn (>= 0.20.0)

  • TableVectorizer: Added automatic transform through the TableVectorizer class. It transforms columns automatically based on their type. It provides a replacement for scikit-learn’s ColumnTransformer simpler to use on heterogeneous pandas DataFrame. #167 by Lilian Boulard

  • Backward incompatible change to GapEncoder: The GapEncoder now only supports two-dimensional inputs of shape (n_samples, n_features). Internally, features are encoded by independent GapEncoder models, and are then concatenated into a single matrix. #185 by Lilian Boulard and Alexis Cvetkov.

Bug-fixes#

Dirty-cat Release 0.1.1#

Major changes#

Bug-fixes#

Dirty-cat Release 0.1.0#

Major changes#

  • GapEncoder: Added online Gamma-Poisson factorization through the GapEncoder class. This method discovers latent categories formed via combinations of substrings, and encodes string data as combinations of these categories. To be used if interpretability is important. #153 by Alexis Cvetkov

Bug-fixes#

Dirty-cat Release 0.0.7#

  • MinHashEncoder: Added minhash_encoder.py and fast_hast.py files that implement minhash encoding through the MinHashEncoder class. This method allows for fast and scalable encoding of string categorical variables.

  • datasets.fetch_employee_salaries: change the origin of download for employee_salaries.

    • The function now return a bunch with a dataframe under the field “data”, and not the path to the csv file.

    • The field “description” has been renamed to “DESCR”.

  • SimilarityEncoder: Fixed a bug when using the Jaro-Winkler distance as a similarity metric. Our implementation now accurately reproduces the behaviour of the python-Levenshtein implementation.

  • SimilarityEncoder: Added a handle_missing attribute to allow encoding with missing values.

  • TargetEncoder: Added a handle_missing attribute to allow encoding with missing values.

  • MinHashEncoder: Added a handle_missing attribute to allow encoding with missing values.

Dirty-cat Release 0.0.6#

  • SimilarityEncoder: Accelerate SimilarityEncoder.transform, by:

    • computing the vocabulary count vectors in fit instead of transform

    • computing the similarities in parallel using joblib. This option can be turned on/off via the n_jobs attribute of the SimilarityEncoder.

  • SimilarityEncoder: Fix a bug that was preventing a SimilarityEncoder to be created when categories was a list.

  • SimilarityEncoder: Set the dtype passed to the ngram similarity to float32, which reduces memory consumption during encoding.

Dirty-cat Release 0.0.5#

  • SimilarityEncoder: Change the default ngram range to (2, 4) which performs better empirically.

  • SimilarityEncoder: Added a most_frequent strategy to define prototype categories for large-scale learning.

  • SimilarityEncoder: Added a k-means strategy to define prototype categories for large-scale learning.

  • SimilarityEncoder: Added the possibility to use hashing ngrams for stateless fitting with the ngram similarity.

  • SimilarityEncoder: Performance improvements in the ngram similarity.

  • SimilarityEncoder: Expose a get_feature_names method.