{"id":10063,"library":"prince","title":"Prince - Factor Analysis in Python","description":"Prince is a Python library for various factor analysis methods, including Principal Component Analysis (PCA), Correspondence Analysis (CA), Multiple Correspondence Analysis (MCA), Multiple Factor Analysis (MFA), Factor Analysis of Mixed Data (FAMD), Generalized Procrustes Analysis (GPA), and Procrustes Global Analysis (PGA). As of version 0.17.0, it offers a scikit-learn compatible API, making it easy to integrate into existing data science workflows. The project is actively maintained with a relatively steady release cadence, incorporating new features and improvements.","status":"active","version":"0.17.0","language":"en","source_language":"en","source_url":"https://github.com/MaxHalford/prince","tags":["factor-analysis","pca","mca","data-science","machine-learning","sklearn-compatible"],"install":[{"cmd":"pip install prince","lang":"bash","label":"Install latest version"}],"dependencies":[{"reason":"Commonly used for input data (DataFrames) and highly recommended for data preparation.","package":"pandas","optional":false},{"reason":"Provides a scikit-learn compatible API and some internal utilities.","package":"scikit-learn","optional":false}],"imports":[{"symbol":"PCA","correct":"from prince import PCA"},{"symbol":"MCA","correct":"from prince import MCA"},{"symbol":"CA","correct":"from prince import CA"},{"symbol":"MFA","correct":"from prince import MFA"},{"symbol":"FAMD","correct":"from prince import FAMD"}],"quickstart":{"code":"import pandas as pd\nfrom prince import PCA\n\n# Sample data for PCA\nX = pd.DataFrame({\n    'feature_a': [1, 2, 3, 4, 5],\n    'feature_b': [2, 3, 4, 5, 6],\n    'feature_c': [3, 4, 5, 6, 7]\n})\n\n# Initialize and fit PCA model\npca = PCA(n_components=2)\npca.fit(X)\n\n# Transform the data\nX_transformed = pca.transform(X)\n\nprint(\"Original data head:\\n\", X.head())\nprint(\"\\nTransformed data head (2 components):\\n\", X_transformed.head())\nprint(\"\\nExplained inertia per component:\", pca.explained_inertia_)\n","lang":"python","description":"This quickstart demonstrates how to use Prince's PCA implementation. It initializes a PCA model with 2 components, fits it to a sample Pandas DataFrame, and then transforms the data. Finally, it prints the transformed data and the explained inertia for each component."},"warnings":[{"fix":"Replace `model.explained_variance_ratio_` with `model.explained_inertia_`.","message":"The attribute `explained_variance_ratio_` was renamed to `explained_inertia_` to better align with factor analysis terminology.","severity":"breaking","affected_versions":"0.10.0 and later"},{"fix":"If you need to apply observation weights, consider pre-processing your data or using a different library. The parameter is no longer supported in Prince.","message":"The `weight_col` parameter in `CA`, `MCA`, and `MFA` models was removed.","severity":"breaking","affected_versions":"0.14.0 and later"},{"fix":"If you require standardization, explicitly set `standardize=True` when initializing the PCA model, e.g., `PCA(n_components=2, standardize=True)`.","message":"Unlike some other PCA implementations (e.g., `sklearn.decomposition.PCA`), `prince.PCA` only centers the data by default, but does not standardize (scale to unit variance).","severity":"gotcha","affected_versions":"All versions"}],"env_vars":null,"last_verified":"2026-04-17T00:00:00.000Z","next_check":"2026-07-16T00:00:00.000Z","problems":[{"fix":"Update your code to use `pca.explained_inertia_` instead.","cause":"The attribute name for explained variance ratio changed from `explained_variance_ratio_` to `explained_inertia_` in version 0.10.0.","error":"AttributeError: 'PCA' object has no attribute 'explained_variance_ratio_'"},{"fix":"Ensure all input features are numerical. For categorical data, use one-hot encoding or label encoding, or consider using `prince.FAMD` which is designed for mixed data types.","cause":"Methods like PCA, CA, and MFA expect purely numerical input data. You might be passing a DataFrame with categorical columns without prior encoding.","error":"ValueError: Input data contains non-numeric values."},{"fix":"Always pass your input data (e.g., a Pandas DataFrame or NumPy array) as the `X` argument: `model.fit(X)`.","cause":"You called the `fit()` method without providing the input data (feature matrix).","error":"TypeError: fit() missing 1 required positional argument: 'X'"}]}