{"id":51468643,"url":"https://github.com/gperdrizet/featurely","last_synced_at":"2026-07-08T16:00:44.334Z","repository":{"id":368670792,"uuid":"1286284955","full_name":"gperdrizet/featurely","owner":"gperdrizet","description":"Over-engineered solution repository for Fullstack Academy AI/ML, unit 2, lesson 16 activity: feature engineering challenge. ","archived":false,"fork":false,"pushed_at":"2026-07-03T14:13:45.000Z","size":28283,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-06T14:32:26.497Z","etag":null,"topics":["data-science","feature-engineering","linear-regression","machine-learning","ml","sckit-learn"],"latest_commit_sha":null,"homepage":"https://gperdrizet.github.io/featurely/","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gperdrizet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-07-01T16:12:31.000Z","updated_at":"2026-07-03T14:13:49.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/gperdrizet/featurely","commit_stats":null,"previous_names":["gperdrizet/featurely"],"tags_count":0,"template":false,"template_full_name":"gperdrizet/datascience-devcontainer","purl":"pkg:github/gperdrizet/featurely","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gperdrizet%2Ffeaturely","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gperdrizet%2Ffeaturely/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gperdrizet%2Ffeaturely/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gperdrizet%2Ffeaturely/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gperdrizet","download_url":"https://codeload.github.com/gperdrizet/featurely/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gperdrizet%2Ffeaturely/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35232326,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-07T02:00:07.222Z","response_time":90,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-science","feature-engineering","linear-regression","machine-learning","ml","sckit-learn"],"created_at":"2026-07-06T14:30:30.955Z","updated_at":"2026-07-07T15:00:22.053Z","avatar_url":"https://github.com/gperdrizet.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# featurely\n\n[![Tests](https://github.com/gperdrizet/featurely/actions/workflows/test.yml/badge.svg)](https://github.com/gperdrizet/featurely/actions/workflows/test.yml)\n[![PyPI version](https://img.shields.io/pypi/v/featurely)](https://pypi.org/project/featurely/)\n[![Docs](https://github.com/gperdrizet/featurely/actions/workflows/docs.yml/badge.svg)](https://gperdrizet.github.io/featurely/)\n\nReusable feature engineering utilities for tabular machine learning with pandas and scikit-learn. Documentation: [gperdrizet.github.io/featurely](https://gperdrizet.github.io/featurely/)\n\n\n## Project lineage\n\nThis project grew out of the instructor solution for the Fullstack Academy feature engineering challenge activity. The full solution is included in this repository as an example use case for Featurely under `example_notebooks/fsa-feature-engineering-challenge`. The original activity is located in the [cohort 2605 materials repo](https://gperdrizet.github.io/fullstack-2605). See the unit 2, lesson 16 activity notebook. \n\n## Package layout\n\n```text\nfeaturely/\n├── .devcontainers/          # Configuration files for devcontainer development environments\n├── .github/                 # GitHub workflow files for CI/CD\n├── docs/                    # Documentation site source (MkDocs Material)\n├── example_notebooks/       # Notebooks demoing the use of Featurely\n├── src/\n│   └── featurely/           # The featurely package source tree\n│       ├── __init__.py\n│       ├── pipeline.py\n│       ├── eda.py\n│       ├── outliers.py\n│       ├── transforms.py\n│       ├── scans.py\n│       ├── geo.py\n│       ├── aggregate.py\n│       ├── cluster.py\n│       ├── smoothing.py\n│       ├── decomposition.py\n│       └── diagnostics.py\n├── tests/                    # Unit tests\n├── AGENTS.md                 # Onboarding/orientation for AI agents\n├── LICENSE                   # MIT license file\n├── README.md                 # README document for GitHub\n├── README-pypi.md            # README document for PyPI\n├── mkdocs.yml                # Documentation site configuration\n├── pyproject.toml            # Python package metadata for PyPI\n├── requirements-dev.txt      # Package build/test requirements\n└── requirements.txt          # Requirements for local dev \u0026 example notebooks\n```\n\n## Example notebooks\n\nThe example notebooks in the `fsa-feature-engineering-challenge` use the Featurely library to progressively clean the classic California housing data and add engineered features. To reproduce the final dataset, run them in order:\n\n| Step | Notebook | Purpose | Output |\n|---|---|---|---|\n| 1 | `01-EDA.ipynb` | EDA and baseline profiling | `data/01-EDA.csv` |\n| 2 | `02-outlier-cleaning.ipynb` | Outlier strategy evaluation and cleaning | `data/02-outlier-cleaning.csv` |\n| 3 | `03-feature-transformations.ipynb` | Per-feature transform scans and apply selected transforms | `data/03-feature-transformations.csv` |\n| 4 | `04-interaction-features.ipynb` | Interaction scans and feature adds | `data/04-interaction-features.csv` |\n| 5 | `05-p_censoring.ipynb` | OOF censoring probability feature | `data/05-p_censoring.csv` |\n| 6 | `06-location-feature-encoding.ipynb` | City distances, geohash cells, rotated coordinates | `data/06-location-feature-encoding.csv` |\n| 7 | `07-aggregate-features.ipynb` | Quantile bin summary statistics | `data/07-aggregate-features.csv` |\n| 8 | `08-clustering.ipynb` | K-means membership and centroid distance features | `data/08-clustering.csv` |\n| 9 | `09-smoothing.ipynb` | Spatial kernel smoothing of features | `data/09-smoothing.csv` |\n| 10 | `10-polyfeatures-pca.ipynb` | Polynomial expansion and PCA component selection | `data/10-polyfeatures.csv`, `data/final.csv` |\n\n`original-assignment.ipynb` preserves the baseline assignment flow, and `lesson-16-activity-solution.ipynb` is the final, distilled solution.\n\n\n## Install\n\nFrom PyPI:\n\n```bash\npip install featurely\n```\n\nFor local development (editable, with test and lint tooling):\n\n```bash\npip install -e \".[dev]\"\n```\n\n\n## Run tests\n\n```bash\npytest\nruff check src/ tests/\nruff format --check src/ tests/\n```\n\n\n## Documentation\n\nFull API reference and getting-started guide: [gperdrizet.github.io/featurely](https://gperdrizet.github.io/featurely/)\n\nBuild locally with:\n\n```bash\npip install -e \".[docs]\"\nmkdocs serve\n```\n\n\n## Import in notebook\n\n```python\nimport featurely as fl\n\nfl.add_pipeline_step(...)\nfl.plot_pipeline_steps(...)\nfl.plot_feature_distributions(...)\nfl.get_feature_correlations(...)\nfl.plot_feature_correlations(...)\nfl.plot_features_vs_label(...)\nfl.run_per_feature_scan(...)\nfl.plot_combined_per_feature_scan(...)\nfl.plot_significant_transform_scatters(...)\nfl.run_pairwise_scan(...)\nfl.plot_combined_pairwise_scan(...)\nfl.plot_significant_pairwise_scatters(...)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgperdrizet%2Ffeaturely","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgperdrizet%2Ffeaturely","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgperdrizet%2Ffeaturely/lists"}