From 6668456804f0d95f5f33fae808320698a236a43d Mon Sep 17 00:00:00 2001 From: Soledad Galli Date: Thu, 19 Oct 2023 15:40:33 +0200 Subject: [PATCH 1/3] seo duplicate features --- .../selection/DropDuplicateFeatures.rst | 58 +++++++++++++------ 1 file changed, 41 insertions(+), 17 deletions(-) diff --git a/docs/user_guide/selection/DropDuplicateFeatures.rst b/docs/user_guide/selection/DropDuplicateFeatures.rst index afd718677..fd308fe96 100644 --- a/docs/user_guide/selection/DropDuplicateFeatures.rst +++ b/docs/user_guide/selection/DropDuplicateFeatures.rst @@ -5,18 +5,34 @@ DropDuplicateFeatures ===================== -The :class:`DropDuplicateFeatures()` finds and removes duplicated variables from a dataframe. -Duplicated features are identical features, regardless of the variable or column name. If -they show the same values for every observation, then they are considered duplicated. +Duplicate features are columns in a dataset that are identical, or, in other words, that +contain exactly the same values. Duplicate features can be introduced accidentally, either +through poor data management processes or during data manipulation. -The transformer will automatically evaluate all variables, or alternatively, you can pass a -list with the variables you wish to have examined. And it works with numerical and categorical -features. +For example, duplicated new records can be created by one-hot encoding a categorical +variable or by adding missing data indicators. We can also accidentally generate duplicate +records when we merge different data sources that show some variable overlap. + +Checking for and removing duplicate features is a standard procedure in any data analysis +workflow that helps us reduce the dimension of the dataset quickly and ensure data quality. +In Python, we can find duplicate values in an attribute table very easily with Pandas. +Dropping those duplicate features, however, requires a few more lines of code. + +Feature-engine aims to accelerate the process of data validation by finding and removing +duplicate features with the :class:`DropDuplicateFeatures()` class, which is part of the +selection API. + +:class:`DropDuplicateFeatures()` does exactly that; it finds and removes duplicated variables +from a dataframe. DropDuplicateFeatures() will automatically evaluate all variables, or +alternatively, you can pass a list with the variables you wish to have examined. And it +works with numerical and categorical features alike. + +So let’s see how to set up :class:`DropDuplicateFeatures()`. **Example** -Let's see how to use :class:`DropDuplicateFeatures()` in an example with the Titanic dataset. -These dataset does not have duplicated features, so we will add a few manually: +In this demo, we will use the Titanic dataset and introduce a few duplicated features +manually: .. code:: python @@ -35,6 +51,11 @@ These dataset does not have duplicated features, so we will add a few manually: data.columns = ['pclass', 'survived', 'sex', 'age', 'sibsp', 'parch', 'fare','cabin', 'embarked', 'sex_dup', 'age_dup', 'sibsp_dup'] +``` + +We then split the data into a training and a testing set: + +.. code:: python # Separate into train and test sets X_train, X_test, y_train, y_test = train_test_split( @@ -64,7 +85,10 @@ Below we see the resulting data: 1193 male 29.881135 0 686 female 22.000000 0 -Now, we set up :class:`DropDuplicateFeatures()` to find the duplications: +As expected, the variables `sex` and `sex_dup` have duplicate field values throughout all +the rows. The same is true for the variables `age` and `age_du`p. + +Now, we set up :class:`DropDuplicateFeatures()` to find the duplicate features: .. code:: python @@ -76,7 +100,8 @@ With `fit()` the transformer finds the duplicated features: transformer.fit(X_train) -The features that are duplicated and will be removed are stored by the transformer: +The features that are duplicated and will be removed are stored in the `features_to_drop_` +attribute: .. code:: python @@ -93,8 +118,8 @@ With `transform()` we remove the duplicated variables: train_t = transformer.transform(X_train) test_t = transformer.transform(X_test) -If we examine the variable names of the transformed dataset, we see that the duplicated -features are not present: +We can go ahead and check the variables in the transformed dataset, and we will see that +the duplicated features are not there any more: .. code:: python @@ -104,8 +129,8 @@ features are not present: Index(['pclass', 'sex', 'age', 'sibsp', 'parch', 'fare', 'cabin', 'embarked'], dtype='object') -And the transformer also stores the groups of duplicated features, which could be useful -if we have groups where more than 2 features are identical. +The transformer also stores the groups of duplicated features, which is useful for data +analysis and validation. .. code:: python @@ -119,12 +144,11 @@ if we have groups where more than 2 features are identical. More details ^^^^^^^^^^^^ -In this Kaggle kernel we use :class:`DropDuplicateFeatures()` together with other feature selection algorithms: +In this Kaggle kernel we use :class:`DropDuplicateFeatures()` in a pipeline with other +feature selection algorithms: - `Kaggle kernel `_ -All notebooks can be found in a `dedicated repository `_. - For more details about this and other feature selection methods check out these resources: - `Feature selection for machine learning `_, online course. From 88cbcb1cb36b001970413f24a7a2236562ebb909 Mon Sep 17 00:00:00 2001 From: Soledad Galli Date: Thu, 19 Oct 2023 17:01:40 +0200 Subject: [PATCH 2/3] improve seo constant features --- docs/images/quasiconstant.png | Bin 0 -> 37753 bytes .../selection/DropConstantFeatures.rst | 103 +++++++++++++++--- 2 files changed, 85 insertions(+), 18 deletions(-) create mode 100644 docs/images/quasiconstant.png diff --git a/docs/images/quasiconstant.png b/docs/images/quasiconstant.png new file mode 100644 index 0000000000000000000000000000000000000000..077a5204921630c41190de1d2650508bd89fe68d GIT binary patch literal 37753 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 -All notebooks can be found in a `dedicated repository `_. - For more details about this and other feature selection methods check out these resources: - `Feature selection for machine learning `_, online course. From ac6ec7a913354e82d757e8ecaac9705bad305444 Mon Sep 17 00:00:00 2001 From: Soledad Galli Date: Thu, 19 Oct 2023 17:44:26 +0200 Subject: [PATCH 3/3] fix doc error --- docs/user_guide/selection/DropDuplicateFeatures.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/user_guide/selection/DropDuplicateFeatures.rst b/docs/user_guide/selection/DropDuplicateFeatures.rst index fd308fe96..ca7b65bfe 100644 --- a/docs/user_guide/selection/DropDuplicateFeatures.rst +++ b/docs/user_guide/selection/DropDuplicateFeatures.rst @@ -51,7 +51,7 @@ manually: data.columns = ['pclass', 'survived', 'sex', 'age', 'sibsp', 'parch', 'fare','cabin', 'embarked', 'sex_dup', 'age_dup', 'sibsp_dup'] -``` + We then split the data into a training and a testing set: @@ -86,7 +86,7 @@ Below we see the resulting data: 686 female 22.000000 0 As expected, the variables `sex` and `sex_dup` have duplicate field values throughout all -the rows. The same is true for the variables `age` and `age_du`p. +the rows. The same is true for the variables `age` and `age_dup`. Now, we set up :class:`DropDuplicateFeatures()` to find the duplicate features: